diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..0e4115e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,17 @@ +name: CI +on: + push: + branches: [main] + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + - run: go build ./... + - run: go vet ./... + - run: go test -race ./... diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2baa719 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Local cache used by cmd/regenerate-parse: downloaded SQLite release +# artifacts and the compiled oracle binary. +.sqlite/ diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..1b42713 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,70 @@ +# meyer development guide + +meyer is a hand-written, zero-dependency Go parser for the SQLite SQL +dialect. Read PLAN.md first — it defines the architecture, the AST shape, +and what is deliberately out of scope. The grammar ground truth is SQLite's +`parse.y` (Lemon) and `tokenize.c`; the dialect surface is +https://sqlite.org/lang.html. + +## Rules + +- **Zero dependencies.** `go.mod` must never gain a `require` line. +- **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 + build (the oracle). `*.metadata.json` sidecars are updated by tooling + (`go test ./parser -check-parse`), not by hand. +- 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 + (`near "X": syntax error`, `unrecognized token: "X"`, `incomplete input`). + +## 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: + +- If any statement failed with a **syntax-family** message (`near "…": + syntax error`, `unrecognized token: "…"`, `incomplete input`), meyer must + reject the case with that first message. +- 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. + +Known looseness: messages produced by grammar *actions* (e.g. `ORDER BY +clause should come after UNION not before`) are currently classified as +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. + +## The loop + +```sh +go run ./cmd/next-test # pick the next todo case to implement +# ... implement in lexer/, ast/, parser/ ... +go test ./parser -run TestParse -check-parse -v 2>&1 | grep "PARSE PASSES NOW" +go test ./... # everything else still green +# commit code + metadata.json changes together +``` + +`-check-parse` re-runs todo cases and deletes metadata entries for cases +that now pass. Never mark a case done by hand, and never "fix" a failing +case by editing the corpus — if you believe a corpus expectation is wrong, +the fix is in `cmd/regenerate-parse` (or the classification in +`internal/testfile`), followed by a full regeneration and a reviewed diff. + +## Regenerating the corpus + +```sh +go run ./cmd/regenerate-parse # the full starter set +go run ./cmd/regenerate-parse -files select1 # one file +``` + +The tool downloads the pinned SQLite release (version + SHA-256 constants in +`cmd/regenerate-parse/main.go`) into `.sqlite/` (gitignored), compiles the +oracle with the system C compiler, and rewrites corpus + metadata (new cases +start as todo; existing case states are preserved). Advancing the pin means +updating the constants and `parser/testdata/README.md`, regenerating +everything, and reviewing the diff. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7dadf56 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 The sqlc Authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 37e4c92..e116f94 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,33 @@ # meyer -A SQLite SQL parser + +A pure Go parser for the SQLite SQL dialect. Zero dependencies, hand-written +recursive descent — no parser generators. + +*(a Meyer lemon, for SQLite's [Lemon](https://sqlite.org/lemon.html) parser +generator)* + +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. + +## Status + +Under construction: the test corpus and tooling exist; the parser itself is +being implemented against them. + +## 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. + +## Acknowledgments + +SQLite and its test suite are public domain — https://sqlite.org/copyright.html. +This project's grammar and test corpus derive from them. + +## License + +MIT diff --git a/ast/ast.go b/ast/ast.go new file mode 100644 index 0000000..599c43a --- /dev/null +++ b/ast/ast.go @@ -0,0 +1,35 @@ +// 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). +package ast + +// Node is implemented by every syntax tree node. Positions are byte offsets +// into the original input. +type Node interface { + Pos() int + End() int + Children() []Node +} + +// Stmt is implemented by all statement nodes. +type Stmt interface { + Node + stmtNode() +} + +// Expr is implemented by all expression nodes. +type Expr interface { + Node + exprNode() +} + +// Span carries a node's byte extent and is embedded in every node type. +type Span struct { + Start int `json:"start"` + Stop int `json:"end"` +} + +func (s Span) Pos() int { return s.Start } +func (s Span) End() int { return s.Stop } diff --git a/cmd/next-test/main.go b/cmd/next-test/main.go new file mode 100644 index 0000000..82b16df --- /dev/null +++ b/cmd/next-test/main.go @@ -0,0 +1,110 @@ +// Command next-test picks the next corpus case to implement. +// +// It scans parser/testdata/*.metadata.json for todo cases, chooses the file +// with the fewest remaining todos (ties broken by smaller corpus file, so +// nearly-done and simple files finish first), and prints that file's first +// todo case: its SQL and the expectation derived from the oracle results. +// +// Usage: +// +// go run ./cmd/next-test [-testdata parser/testdata] +package main + +import ( + "flag" + "fmt" + "os" + "path/filepath" + "sort" + + "github.com/sqlc-dev/meyer/internal/testfile" +) + +func main() { + testdata := flag.String("testdata", "parser/testdata", "corpus directory") + flag.Parse() + + paths, err := filepath.Glob(filepath.Join(*testdata, "*.test")) + if err != nil || len(paths) == 0 { + fmt.Fprintf(os.Stderr, "next-test: no corpus files under %s\n", *testdata) + os.Exit(1) + } + sort.Strings(paths) + + type fileState struct { + path string + size int64 + todos int + total int + } + var files []fileState + var totalTodo, totalCases int + for _, path := range paths { + meta, err := testfile.ReadMetadata(testfile.MetadataPath(path)) + if err != nil { + fatal(err) + } + cases, err := testfile.Read(path) + if err != nil { + fatal(err) + } + st, _ := os.Stat(path) + files = append(files, fileState{path: path, size: st.Size(), todos: len(meta.Todo), total: len(cases)}) + totalTodo += len(meta.Todo) + totalCases += len(cases) + } + + fmt.Printf("progress: %d/%d cases passing (%d todo across %d files)\n\n", + totalCases-totalTodo, totalCases, totalTodo, len(files)) + if totalTodo == 0 { + fmt.Println("No todo cases found!") + return + } + + sort.Slice(files, func(i, j int) bool { + if files[i].todos != files[j].todos { + return files[i].todos < files[j].todos + } + return files[i].size < files[j].size + }) + var pick fileState + for _, f := range files { + if f.todos > 0 { + pick = f + break + } + } + + meta, err := testfile.ReadMetadata(testfile.MetadataPath(pick.path)) + if err != nil { + fatal(err) + } + cases, err := testfile.Read(pick.path) + if err != nil { + fatal(err) + } + for _, c := range cases { + if !meta.Todo[c.Name] { + continue + } + exp := c.Expected() + fmt.Printf("file: %s (%d todo of %d cases)\ncase: %s\n\nsql:\n%s\n", pick.path, pick.todos, pick.total, c.Name, c.SQL) + if exp.OK { + fmt.Println("expect: parse success") + } else { + fmt.Printf("expect: parse error %q", exp.Message) + if exp.Offset >= 0 { + fmt.Printf(" at offset %d", exp.Offset) + } + fmt.Println() + } + return + } + fmt.Fprintf(os.Stderr, "next-test: %s: metadata lists todos not present in corpus; rerun cmd/regenerate-parse\n", pick.path) + os.Exit(1) +} + +func fatal(err error) { + fmt.Fprintln(os.Stderr, "next-test:", err) + os.Exit(1) +} diff --git a/cmd/regenerate-parse/main.go b/cmd/regenerate-parse/main.go new file mode 100644 index 0000000..74702b7 --- /dev/null +++ b/cmd/regenerate-parse/main.go @@ -0,0 +1,394 @@ +// Command regenerate-parse builds meyer's test corpus from the SQLite +// source tree, using a real SQLite build as the oracle. +// +// Pipeline, per requested test script: +// +// 1. Extract literal SQL cases from test/.test (TCL) with +// internal/tclextract. +// 2. Run every case through the oracle: a small C program (oracle.c, +// embedded here) compiled against the pinned SQLite amalgamation. It +// splits the case into statements exactly like the sqlite3 shell and +// prepares each one independently against an empty :memory: database — +// nothing is executed, so statements are order-independent. +// 3. Write parser/testdata/.test with the raw per-statement results, +// 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. +// +// Usage: +// +// go run ./cmd/regenerate-parse [-files select1,expr,...] [flags] +// +// With no -files, the starter set below is regenerated. +package main + +import ( + "archive/zip" + "bytes" + "crypto/sha256" + "flag" + "fmt" + "io" + "net/http" + "os" + "os/exec" + "path/filepath" + "runtime" + "strconv" + "strings" + "sync" + + _ "embed" + + "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" +) + +// 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", +} + +func main() { + var ( + files = flag.String("files", "", "comma-separated test script base names (default: the starter set)") + cacheDir = flag.String("cache", ".sqlite", "cache directory for SQLite artifacts and the oracle binary") + testdata = flag.String("testdata", "parser/testdata", "output corpus directory") + jobs = flag.Int("j", runtime.NumCPU(), "oracle worker processes") + ) + flag.Parse() + + names := starterSet + if *files != "" { + names = strings.Split(*files, ",") + } + + oracle, err := ensureOracle(*cacheDir) + if err != nil { + fatal(err) + } + testDir, err := ensureSourceTests(*cacheDir) + if err != nil { + fatal(err) + } + if err := os.MkdirAll(*testdata, 0o755); err != nil { + fatal(err) + } + + var totalCases, totalTodo int + var totals tclextract.Stats + for _, name := range names { + // Snapshot the previous corpus state before regenerating, so the + // metadata merge can tell new cases from pre-existing ones. + testPath := filepath.Join(*testdata, name+".test") + prevCases := make(map[string]bool) + if prev, err := testfile.Read(testPath); err == nil { + for _, c := range prev { + prevCases[c.Name] = true + } + } + prevMeta, err := testfile.ReadMetadata(testfile.MetadataPath(testPath)) + if err != nil { + fatal(fmt.Errorf("%s: %w", name, err)) + } + + cases, stats, err := regenerateFile(oracle, testDir, *testdata, name, *jobs) + if err != nil { + fatal(fmt.Errorf("%s: %w", name, err)) + } + todo, err := mergeMetadata(testPath, prevCases, prevMeta.Todo, cases) + if err != nil { + fatal(fmt.Errorf("%s: %w", name, err)) + } + fmt.Printf("%-14s %4d cases (%d todo) — skipped %d substitution, %d form\n", + 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 + } + 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), + totals.SkippedSubst+totals.SkippedForm, totals.Found, + totals.SkippedSubst, totals.SkippedForm) +} + +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) { + src, err := os.ReadFile(filepath.Join(testDir, name+".test")) + if err != nil { + return nil, tclextract.Stats{}, err + } + extracted, stats := tclextract.File(name, src) + + cases := make([]testfile.Case, len(extracted)) + sem := make(chan struct{}, jobs) + var wg sync.WaitGroup + var mu sync.Mutex + var firstErr error + for i, ex := range extracted { + wg.Add(1) + go func(i int, ex tclextract.Case) { + defer wg.Done() + sem <- struct{}{} + defer func() { <-sem }() + results, err := runOracle(oracle, ex.SQL) + if err != nil { + mu.Lock() + if firstErr == nil { + firstErr = fmt.Errorf("case %s: %w", ex.Name, err) + } + mu.Unlock() + return + } + cases[i] = testfile.Case{Name: ex.Name, SQL: ex.SQL, Results: results} + }(i, ex) + } + wg.Wait() + if firstErr != nil { + return nil, stats, firstErr + } + + // Drop cases the file format cannot represent (marker collisions); + // count them as form skips so the loss is visible. + kept := cases[:0] + for _, c := range cases { + if err := testfile.CheckCase(c); err != nil { + stats.SkippedForm++ + stats.Extracted-- + continue + } + kept = append(kept, c) + } + if err := testfile.Write(filepath.Join(outDir, name+".test"), kept); err != nil { + return nil, stats, err + } + 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") { + 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 "), " ", 3) + if !strings.HasPrefix(fields[2], "err ") || len(rest) != 3 { + 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 { + return testfile.StmtResult{}, fmt.Errorf("malformed oracle line %q", line) + } + return testfile.StmtResult{Offset: off, RC: rc, ErrOffset: erroff, Message: rest[2]}, 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 +// are dropped. Returns the resulting todo count. +func mergeMetadata(testPath string, prevCases, prevMeta map[string]bool, cases []testfile.Case) (int, error) { + todo := make(map[string]bool) + for _, c := range cases { + if prevMeta[c.Name] || !prevCases[c.Name] { + todo[c.Name] = true + } + } + metaPath := testfile.MetadataPath(testPath) + if err := testfile.WriteMetadata(metaPath, testfile.Metadata{Todo: todo}); err != nil { + return 0, err + } + 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/cmd/regenerate-parse/oracle/oracle.c new file mode 100644 index 0000000..50ea107 --- /dev/null +++ b/cmd/regenerate-parse/oracle/oracle.c @@ -0,0 +1,124 @@ +/* +** oracle.c — parse-classification oracle for the meyer test corpus. +** +** Reads a SQL script from the file named in argv[1] (or stdin), splits it +** into statements the same way the sqlite3 shell does (incremental +** sqlite3_complete checks at each candidate ";"), and prepares every +** statement independently against an empty in-memory database with +** sqlite3_prepare_v2. Nothing is ever stepped/executed, so results do not +** depend on earlier statements having run. +** +** Output: one line per non-empty statement: +** +** stmt ok +** 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) +** +** SQLite error messages never contain newlines, so the line format is safe. +*/ +#include "sqlite3.h" +#include +#include +#include + +static char *readAll(FILE *in, size_t *pn){ + size_t cap = 1 << 16, n = 0; + char *buf = malloc(cap); + if( buf==0 ) return 0; + for(;;){ + if( n==cap ){ + cap *= 2; + char *nb = realloc(buf, cap); + if( nb==0 ){ free(buf); return 0; } + buf = nb; + } + size_t got = fread(buf+n, 1, cap-n, in); + n += got; + if( got==0 ) break; + } + buf[n>=cap ? cap-1 : n] = 0; + *pn = n; + 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( i1 ){ + 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; + } + + size_t pos = 0; + while( pos=0 ) erroff += (int)pos; + printf("stmt %zu err %d %d %s\n", pos, rc, erroff, sqlite3_errmsg(db)); + } + sqlite3_finalize(pStmt); + free(stmtText); + pos = end; + } + + sqlite3_close(db); + free(sql); + return 0; +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..1ee8c04 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/sqlc-dev/meyer + +go 1.24 diff --git a/internal/tclextract/tclextract.go b/internal/tclextract/tclextract.go new file mode 100644 index 0000000..a61bef1 --- /dev/null +++ b/internal/tclextract/tclextract.go @@ -0,0 +1,226 @@ +// 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: +// +// do_execsql_test {SQL} ?{expected}? +// do_catchsql_test {SQL} {expected} +// +// plus the older style used by e.g. tokenize.test, but only when the body is +// exactly one execsql/catchsql call: +// +// do_test {catchsql {SQL}} {expected} +// do_test {execsql {SQL}} {expected} +// +// Only the name and the SQL block are used; expected values are re-derived +// from a real SQLite build by cmd/regenerate-parse, so TCL expectations are +// ignored. Extraction is deliberately conservative: any case whose SQL block +// is not a plain TCL brace literal — it contains `$` (variable substitution), +// `[` (command substitution), or `\` (backslash escapes change brace +// counting) — is skipped and counted, never guessed at. +package tclextract + +import ( + "fmt" + "strings" +) + +// Case is one extracted test case. +type Case struct { + Name string // TCL test name, or a generated one if the name was dynamic + SQL string // literal SQL, outer braces removed, normalized to end in "\n" +} + +// Stats reports what extraction skipped, so coverage loss is visible. +type Stats struct { + Found int // command occurrences seen + Extracted int + SkippedSubst int // SQL contained $, [ or \ + SkippedForm int // SQL argument was not a brace literal / malformed command + GeneratedNames int // dynamic test names replaced with file-local ones +} + +var commands = []string{"do_execsql_test", "do_catchsql_test", "do_test"} + +// File extracts all cases from one TCL test script. base names the script +// (e.g. "select1") and seeds generated case names. +func File(base string, src []byte) ([]Case, Stats) { + var cases []Case + var stats Stats + seen := make(map[string]int) + text := string(src) + lines := strings.Split(text, "\n") + + // Byte offset of each line start, so command scanning can be line-based + // (to reject comment lines) while word parsing is offset-based. + offset := 0 + for _, line := range lines { + lineStart := offset + offset += len(line) + 1 + trimmed := strings.TrimLeft(line, " \t") + if strings.HasPrefix(trimmed, "#") { + continue + } + for _, cmd := range commands { + col := strings.Index(line, cmd) + if col < 0 { + 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' { + continue // longer word, e.g. do_execsql_test_if_vdbe + } + stats.Found++ + name, sql, ok := parseCommand(text, lineStart+col+len(cmd), cmd == "do_test", &stats) + if !ok { + break + } + if strings.ContainsAny(name, "$[]\\\"") || name == "" { + stats.GeneratedNames++ + name = fmt.Sprintf("%s-generated", base) + } + if n := seen[name]; n > 0 { + seen[name] = n + 1 + name = fmt.Sprintf("%s.dup%d", name, n) + } else { + seen[name] = 1 + } + stats.Extracted++ + cases = append(cases, Case{Name: name, SQL: normalizeSQL(sql)}) + break + } + } + return cases, stats +} + +// parseCommand reads the two argument words following a command occurrence +// that starts at text[pos]. For do_test (doTest=true), the second word is a +// TCL body that must consist of exactly one execsql/catchsql call. It +// returns ok=false (and bumps a skip counter) when the case cannot be +// extracted verbatim. +func parseCommand(text string, pos int, doTest bool, stats *Stats) (name, sql string, ok bool) { + name, pos, _, ok = word(text, pos) + if !ok { + stats.SkippedForm++ + return "", "", false + } + var braced bool + sql, pos, braced, ok = word(text, pos) + if !ok || !braced { + stats.SkippedForm++ // malformed, or SQL argument was not a brace literal + return "", "", false + } + if doTest { + sql, ok = sqlFromBody(sql) + if !ok { + stats.SkippedForm++ + return "", "", false + } + } + if strings.ContainsAny(sql, "$[\\") { + stats.SkippedSubst++ + return "", "", false + } + return name, sql, true +} + +// sqlFromBody unwraps a do_test body of the exact shape +// `catchsql {SQL}` or `execsql {SQL}` (surrounding whitespace allowed, +// nothing else in the body). +func sqlFromBody(body string) (string, bool) { + rest := strings.TrimLeft(body, " \t\n\r") + var cmd string + for _, c := range []string{"catchsql", "execsql"} { + if strings.HasPrefix(rest, c) { + cmd = c + break + } + } + if cmd == "" { + return "", false + } + rest = rest[len(cmd):] + i := 0 + for i < len(rest) && (rest[i] == ' ' || rest[i] == '\t') { + i++ + } + if i == 0 || i >= len(rest) || rest[i] != '{' { + return "", false // longer word (e.g. execsql_timed), or no brace literal + } + sql, next, braced, ok := word(rest, i) + if !ok || !braced { + return "", false + } + if strings.TrimSpace(rest[next:]) != "" { + return "", false // body contains more than the single call + } + return sql, true +} + +// word consumes one TCL word starting at or after pos. It understands +// whitespace, backslash-newline continuation, brace literals with nesting, +// and quoted/bare words. braced reports that the word was a {...} literal. +// ok=false on newline/end-of-command or malformed input. +func word(text string, pos int) (val string, next int, braced, ok bool) { + // Skip horizontal whitespace and backslash-newline continuations. + for pos < len(text) { + switch { + case text[pos] == ' ' || text[pos] == '\t': + pos++ + case text[pos] == '\\' && pos+1 < len(text) && text[pos+1] == '\n': + pos += 2 + default: + goto scan + } + } +scan: + if pos >= len(text) || text[pos] == '\n' || text[pos] == ';' { + return "", pos, false, false + } + switch text[pos] { + case '{': + depth := 0 + for i := pos; i < len(text); i++ { + switch text[i] { + case '\\': + i++ // backslash escapes next byte for brace counting + case '{': + depth++ + case '}': + depth-- + if depth == 0 { + return text[pos+1 : i], i + 1, true, true + } + } + } + return "", pos, false, false // unbalanced + case '"': + for i := pos + 1; i < len(text); i++ { + if text[i] == '\\' { + i++ + continue + } + if text[i] == '"' { + return text[pos+1 : i], i + 1, false, true + } + } + return "", pos, false, false + default: + i := pos + for i < len(text) && !strings.ContainsRune(" \t\n;", rune(text[i])) { + i++ + } + return text[pos:i], i, false, true + } +} + +// normalizeSQL trims trailing whitespace and guarantees a single trailing +// newline, leaving everything else (leading indentation included) verbatim +// so byte offsets into the SQL stay meaningful. +func normalizeSQL(sql string) string { + return strings.TrimRight(sql, " \t\n\r") + "\n" +} diff --git a/internal/tclextract/tclextract_test.go b/internal/tclextract/tclextract_test.go new file mode 100644 index 0000000..6553b80 --- /dev/null +++ b/internal/tclextract/tclextract_test.go @@ -0,0 +1,77 @@ +package tclextract + +import "testing" + +const sample = `# 2001 September 15 +# comment do_execsql_test not-a-test {SELECT 1} +do_execsql_test select1-1.1 { + CREATE TABLE t1(a int); + SELECT * FROM t1; +} {} + +do_catchsql_test select1-1.2 {SELEC 1} {1 {near "SELEC": syntax error}} + +do_execsql_test select1-1.3 { + SELECT $var FROM t1; +} {} + +foreach x {1 2} { + do_execsql_test select1-2.$x { + SELECT 1; + } {1} +} + +do_execsql_test select1-1.4 "SELECT 2" {2} + +do_execsql_test select1-1.1 { + SELECT 'duplicate name'; +} {} + +do_test tokenize-1.1 { + catchsql {SELECT * FROM sqlite_master WHERE} +} {1 {near "WHERE": syntax error}} + +do_test tokenize-1.2 { + set v [execsql {SELECT 1}] +} {1} +` + +func TestFile(t *testing.T) { + cases, stats := File("select1", []byte(sample)) + + var names []string + for _, c := range cases { + names = append(names, c.Name) + } + want := []string{"select1-1.1", "select1-1.2", "select1-generated", "select1-1.1.dup1", "tokenize-1.1"} + if len(names) != len(want) { + t.Fatalf("got cases %v, want %v", names, want) + } + for i := range want { + if names[i] != want[i] { + t.Fatalf("got cases %v, want %v", names, want) + } + } + + if cases[0].SQL != "\n CREATE TABLE t1(a int);\n SELECT * FROM t1;\n" { + t.Fatalf("unexpected SQL for first case: %q", cases[0].SQL) + } + if cases[1].SQL != "SELEC 1\n" { + t.Fatalf("unexpected SQL for catchsql case: %q", cases[1].SQL) + } + + // select1-1.3 has $var (substitution); the quoted-word case is not a + // brace literal; tokenize-1.2's body is more than a single execsql call; + // the foreach body case has a literal SQL block with a dynamic name and + // is kept under a generated name. + if stats.SkippedSubst != 1 || stats.SkippedForm != 2 || stats.GeneratedNames != 1 { + t.Fatalf("stats = %+v", stats) + } + if stats.Found != 8 || stats.Extracted != 5 { + t.Fatalf("stats = %+v", stats) + } + + if cases[4].SQL != "SELECT * FROM sqlite_master WHERE\n" { + t.Fatalf("unexpected SQL for do_test case: %q", cases[4].SQL) + } +} diff --git a/internal/testfile/testfile.go b/internal/testfile/testfile.go new file mode 100644 index 0000000..082aed0 --- /dev/null +++ b/internal/testfile/testfile.go @@ -0,0 +1,253 @@ +// Package testfile reads and writes meyer's consolidated corpus files. +// +// A corpus file (parser/testdata/.test) holds many cases: +// +// ==== +// +// ---- +// stmt ok +// 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 +// (*Case).Expected, so the policy can evolve without regenerating. +// +// Each corpus file has a sidecar .metadata.json: +// +// {"todo": {"case name": true, ...}} +// +// listing cases the parser does not handle yet. The test harness skips todo +// cases by default and, when run with -check-parse, removes entries that +// have started passing. +package testfile + +import ( + "encoding/json" + "fmt" + "os" + "regexp" + "strconv" + "strings" +) + +// StmtResult is one raw oracle observation for a single statement. +type StmtResult struct { + Offset int // byte offset of 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 + Message string // sqlite3_errmsg when !OK +} + +// Case is a single corpus entry. +type Case struct { + Name string + SQL string // always ends with exactly one "\n" + Results []StmtResult +} + +// Expectation is the derived requirement for the parser under test. +type Expectation struct { + OK bool + Message string // expected parse error message when !OK + Offset int // expected error offset when !OK; -1 if unknown +} + +// syntaxFamily matches error messages produced by SQLite's parser/tokenizer +// 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. +var syntaxFamily = []*regexp.Regexp{ + regexp.MustCompile(`^near ".*": syntax error$`), + regexp.MustCompile(`^unrecognized token: ".*"$`), + regexp.MustCompile(`^incomplete input$`), +} + +// IsSyntaxError reports whether msg is in the syntax-error family. +func IsSyntaxError(msg string) bool { + for _, re := range syntaxFamily { + if re.MatchString(msg) { + return true + } + } + return false +} + +// 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. +func (c *Case) Expected() Expectation { + for _, r := range c.Results { + if !r.OK && IsSyntaxError(r.Message) { + return Expectation{OK: false, Message: r.Message, Offset: r.ErrOffset} + } + } + return Expectation{OK: true, Offset: -1} +} + +const ( + caseMarker = "==== " + resultMarker = "----" +) + +// Read parses a corpus file. +func Read(path string) ([]Case, error) { + data, err := os.ReadFile(path) + if err != nil { + return nil, err + } + var cases []Case + lines := strings.SplitAfter(string(data), "\n") + i := 0 + for i < len(lines) { + line := lines[i] + if strings.TrimRight(line, "\n") == "" { + i++ + continue + } + if !strings.HasPrefix(line, caseMarker) { + return nil, fmt.Errorf("%s:%d: expected %q header, got %q", path, i+1, caseMarker, line) + } + c := Case{Name: strings.TrimRight(line[len(caseMarker):], "\n")} + i++ + var sql strings.Builder + for i < len(lines) && strings.TrimRight(lines[i], "\n") != resultMarker { + sql.WriteString(lines[i]) + i++ + } + if i == len(lines) { + return nil, fmt.Errorf("%s: case %q: missing %q separator", path, c.Name, resultMarker) + } + c.SQL = sql.String() + i++ // skip "----" + for i < len(lines) && strings.HasPrefix(lines[i], "stmt ") { + r, err := parseResultLine(strings.TrimRight(lines[i], "\n")) + if err != nil { + return nil, fmt.Errorf("%s:%d: %w", path, i+1, err) + } + c.Results = append(c.Results, r) + i++ + } + cases = append(cases, c) + } + return cases, nil +} + +func parseResultLine(line string) (StmtResult, error) { + rest := strings.TrimPrefix(line, "stmt ") + parts := strings.SplitN(rest, " ", 2) + if len(parts) != 2 { + return StmtResult{}, fmt.Errorf("malformed result line %q", line) + } + off, err := strconv.Atoi(parts[0]) + if err != nil { + return StmtResult{}, fmt.Errorf("malformed offset in %q", line) + } + 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 { + 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 { + return StmtResult{}, fmt.Errorf("malformed result line %q", line) + } + return StmtResult{Offset: off, RC: rc, ErrOffset: erroff, Message: fields[2]}, 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 { + return err + } + b.WriteString(caseMarker) + b.WriteString(c.Name) + b.WriteString("\n") + b.WriteString(c.SQL) + b.WriteString(resultMarker) + b.WriteString("\n") + for _, r := range c.Results { + 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) + } + } + } + return os.WriteFile(path, []byte(b.String()), 0o644) +} + +func checkWritable(c Case) error { + if c.Name == "" || strings.ContainsAny(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, "==== ") { + return fmt.Errorf("case %q: SQL line collides with file format marker: %q", c.Name, line) + } + } + for _, r := range c.Results { + if strings.Contains(r.Message, "\n") { + return fmt.Errorf("case %q: multi-line oracle message", c.Name) + } + } + return nil +} + +// Metadata is the per-file sidecar tracking not-yet-implemented cases. +type Metadata struct { + Todo map[string]bool `json:"todo,omitempty"` +} + +// MetadataPath returns the sidecar path for a corpus file path. +func MetadataPath(testPath string) string { + return strings.TrimSuffix(testPath, ".test") + ".metadata.json" +} + +// ReadMetadata loads a sidecar; a missing file yields empty metadata. +func ReadMetadata(path string) (Metadata, error) { + var m Metadata + data, err := os.ReadFile(path) + if os.IsNotExist(err) { + return m, nil + } + if err != nil { + return m, err + } + if err := json.Unmarshal(data, &m); err != nil { + return m, fmt.Errorf("%s: %w", path, err) + } + return m, nil +} + +// WriteMetadata saves a sidecar with stable formatting. +func WriteMetadata(path string, m Metadata) error { + if len(m.Todo) == 0 { + m.Todo = nil + } + data, err := json.MarshalIndent(m, "", " ") + if err != nil { + return err + } + return os.WriteFile(path, append(data, '\n'), 0o644) +} diff --git a/internal/testfile/testfile_test.go b/internal/testfile/testfile_test.go new file mode 100644 index 0000000..a565f4f --- /dev/null +++ b/internal/testfile/testfile_test.go @@ -0,0 +1,92 @@ +package testfile + +import ( + "path/filepath" + "reflect" + "testing" +) + +func TestRoundTrip(t *testing.T) { + 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"}, + }, + }, + { + Name: "a-1.2", + SQL: "SELEC 1;\n", + Results: []StmtResult{ + {Offset: 0, RC: 1, ErrOffset: 0, Message: `near "SELEC": syntax error`}, + }, + }, + } + path := filepath.Join(t.TempDir(), "a.test") + if err := Write(path, cases); err != nil { + t.Fatal(err) + } + got, err := Read(path) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(got, cases) { + t.Fatalf("round trip mismatch:\ngot: %#v\nwant: %#v", got, cases) + } +} + +func TestExpected(t *testing.T) { + tests := []struct { + name string + results []StmtResult + wantOK bool + wantMsg string + }{ + {"all ok", []StmtResult{{OK: true}, {OK: true}}, true, ""}, + {"semantic only", []StmtResult{{RC: 1, ErrOffset: -1, Message: "no such table: t1"}}, true, ""}, + { + "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`}, + }, + false, `near "WHERE": syntax error`, + }, + {"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) { + c := Case{Name: "x", SQL: "irrelevant\n", 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) + } + }) + } +} + +func TestWriteRejectsMarkerCollision(t *testing.T) { + err := Write(filepath.Join(t.TempDir(), "x.test"), []Case{{ + Name: "bad", + SQL: "SELECT 1;\n----\nSELECT 2;\n", + Results: []StmtResult{ + {OK: true}, + }, + }}) + if err == nil { + t.Fatal("expected marker-collision error, got nil") + } +} + +func TestMetadataMissingFile(t *testing.T) { + m, err := ReadMetadata(filepath.Join(t.TempDir(), "nope.metadata.json")) + if err != nil { + t.Fatal(err) + } + if len(m.Todo) != 0 { + t.Fatalf("expected empty metadata, got %+v", m) + } +} diff --git a/parser/parser.go b/parser/parser.go new file mode 100644 index 0000000..a5a0b7d --- /dev/null +++ b/parser/parser.go @@ -0,0 +1,34 @@ +// 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). +package parser + +import ( + "context" + "fmt" + "io" + + "github.com/sqlc-dev/meyer/ast" +) + +// 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. +type Error struct { + Message string + Offset int +} + +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 { + return nil, err + } + return nil, fmt.Errorf("meyer: parser not implemented") +} diff --git a/parser/parser_test.go b/parser/parser_test.go new file mode 100644 index 0000000..2acf097 --- /dev/null +++ b/parser/parser_test.go @@ -0,0 +1,104 @@ +package parser_test + +import ( + "context" + "errors" + "flag" + "fmt" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/sqlc-dev/meyer/internal/testfile" + "github.com/sqlc-dev/meyer/parser" +) + +// -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 { + t.Run(strings.TrimSuffix(filepath.Base(path), ".test"), func(t *testing.T) { + t.Parallel() + runFile(t, path) + }) + } +} + +func runFile(t *testing.T, path string) { + cases, err := testfile.Read(path) + if err != nil { + t.Fatal(err) + } + metaPath := testfile.MetadataPath(path) + meta, err := testfile.ReadMetadata(metaPath) + if err != nil { + t.Fatal(err) + } + changed := false + for _, c := range cases { + t.Run(c.Name, func(t *testing.T) { + todo := meta.Todo[c.Name] + if todo && !*checkParse { + t.Skip("todo") + } + err := runCase(c) + if todo { + if err != nil { + t.Skipf("still failing: %v", err) + } + t.Log("PARSE PASSES NOW") + delete(meta.Todo, c.Name) + changed = true + return + } + if err != nil { + t.Error(err) + } + }) + } + if changed { + if err := testfile.WriteMetadata(metaPath, meta); err != nil { + t.Fatal(err) + } + } +} + +// 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.) +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)) + exp := c.Expected() + if exp.OK { + if err != nil { + return fmt.Errorf("expected successful parse, got error: %v", err) + } + return nil + } + if err == nil { + return fmt.Errorf("expected parse error %q, but parse succeeded", exp.Message) + } + var pe *parser.Error + if !errors.As(err, &pe) { + return fmt.Errorf("expected *parser.Error %q, got %T: %v", exp.Message, err, err) + } + if pe.Message != exp.Message { + return fmt.Errorf("error message mismatch:\n got: %s\n want: %s", pe.Message, exp.Message) + } + return nil +} diff --git a/parser/testdata/README.md b/parser/testdata/README.md new file mode 100644 index 0000000..ab4d98d --- /dev/null +++ b/parser/testdata/README.md @@ -0,0 +1,37 @@ +# Corpus provenance + +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 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 + exact + error message) are stored in the corpus files. + +## Pinned SQLite release + +| artifact | file | SHA-256 | +|---|---|---| +| SQLite 3.53.4 amalgamation | `https://sqlite.org/2026/sqlite-amalgamation-3530400.zip` | `1e71ddf93849c6a6ecf58b827c0692073d2dd7ee40196158068f7b29f422e87d` | +| SQLite 3.53.4 source | `https://sqlite.org/2026/sqlite-src-3530400.zip` | `d18fa15aec74d8c17e1463f861095adc01b5ad190256acb4f91d22f0368d232b` | + +## License + +SQLite's source code and test suite are in the **public domain**. The +authors' statement (from the header of the SQLite test 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. + +All other files in this repository are covered by the repository's MIT +license (see /LICENSE). diff --git a/parser/testdata/alter.metadata.json b/parser/testdata/alter.metadata.json new file mode 100644 index 0000000..ffc22d5 --- /dev/null +++ b/parser/testdata/alter.metadata.json @@ -0,0 +1,69 @@ +{ + "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/alter.test b/parser/testdata/alter.test new file mode 100644 index 0000000..881a91e --- /dev/null +++ b/parser/testdata/alter.test @@ -0,0 +1,446 @@ +==== alter-1.8.2 + + CREATE TABLE t4(a PRIMARY KEY, b, c); + CREATE TABLE aux.t4(a PRIMARY KEY, b, c); + CREATE INDEX i4 ON t4(b); + 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 +==== 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 +==== 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 +==== alter-1.8.5 + + SELECT * FROM t5; +---- +stmt 0 err 1 -1 no such table: t5 +==== alter-1.8.6 + + SELECT * FROM t5 WHERE b = 'main'; +---- +stmt 0 err 1 -1 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 +==== 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 +==== alter-1.9.2 + + SELECT * FROM tbl1; +---- +stmt 0 err 1 -1 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 +==== alter-1.9.4 + + DROP TABLE tbl2; +---- +stmt 0 err 1 -1 no such table: tbl2 +==== alter-2.1 + + ALTER TABLE none RENAME TO hi; +---- +stmt 0 err 1 -1 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 +==== alter-2.5 + + ALTER TABLE t3 RENAME TO sqlite_t3; +---- +stmt 0 err 1 -1 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 +==== alter-3.1.0 + + CREATE TABLE t6(a, b, c); + -- Different case for the table name in the trigger. + CREATE TRIGGER trig1 AFTER INSERT ON T6 BEGIN + SELECT trigfunc('trig1', new.a, new.b, new.c); + END; +---- +stmt 0 ok +stmt 30 err 1 -1 no such table: main.T6 +==== alter-3.1.3 + + DROP TRIGGER trig1; +---- +stmt 0 err 1 -1 no such trigger: trig1 +==== alter-3.1.6 + + DROP TRIGGER trig2; +---- +stmt 0 err 1 -1 no such trigger: trig2 +==== alter-3.2.1 + + ATTACH 'test3.db' AS ON; +---- +stmt 0 err 1 28 near "ON": syntax error +==== alter-3.2.2 + + ATTACH 'test3.db' AS 'ON'; +---- +stmt 0 ok +==== alter-3.2.3 + + CREATE TABLE ON.t1(a, b, c); +---- +stmt 0 err 1 20 near "ON": syntax error +==== alter-3.2.4 + + CREATE TABLE 'ON'.t1(a, b, c); +---- +stmt 0 err 1 20 unknown database 'ON' +==== alter-3.2.4.dup1 + + CREATE TABLE 'ON'.ON(a, b, c); +---- +stmt 0 err 1 25 near "ON": syntax error +==== alter-3.2.5 + + CREATE TABLE 'ON'.'ON'(a, b, c); +---- +stmt 0 err 1 20 unknown database 'ON' +==== alter-3.2.6 + + CREATE TABLE t10(a, ON, c); +---- +stmt 0 err 1 25 near "ON": syntax error +==== alter-3.2.7 + + CREATE TABLE t10(a, 'ON', c); +---- +stmt 0 ok +==== alter-3.2.8 + + CREATE TRIGGER trig4 AFTER INSERT ON ON BEGIN SELECT 1; END; +---- +stmt 0 err 1 42 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' +==== alter-3.2.10 + + DROP TABLE t10; +---- +stmt 0 err 1 -1 no such table: t10 +==== alter-3.3.7 + + DROP TABLE tbl3; +---- +stmt 0 err 1 -1 no such table: tbl3 +==== alter-3.3.8 + + SELECT * FROM temp.sqlite_master WHERE type = 'trigger'; +---- +stmt 0 ok +==== alter-4.1 + + CREATE TABLE tbl1(a INTEGER PRIMARY KEY AUTOINCREMENT); + INSERT INTO tbl1 VALUES(10); +---- +stmt 0 ok +stmt 60 err 1 -1 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 +==== alter-4.3 + + ALTER TABLE tbl1 RENAME TO tbl2; + DELETE FROM tbl2; + 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 +==== alter-4.4 + + DROP TABLE tbl2; +---- +stmt 0 err 1 -1 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 +==== alter-8.1 + + CREATE TABLE t2(a INTEGER); + INSERT INTO t2 VALUES(1); + INSERT INTO t2 VALUES(1); + INSERT INTO t2 VALUES(2); + ALTER TABLE t2 ADD COLUMN b INTEGER DEFAULT 9; + 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 +==== alter-8.2 + + SELECT a, sum(b) FROM t2 GROUP BY a; +---- +stmt 0 err 1 -1 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 +==== 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 +==== alter-10.2 +SELECT name FROM sqlite_master WHERE name GLOB 'sqlite_autoindex*' +---- +stmt 0 ok +==== alter-10.4 +SELECT name FROM sqlite_master WHERE name GLOB 'sqlite_autoindex*' +---- +stmt 0 ok +==== alter-12.1 + + CREATE TABLE t12(a, b, c); + CREATE VIEW v1 AS SELECT * FROM t12; +---- +stmt 0 ok +stmt 31 ok +==== alter-12.2 + + ALTER TABLE v1 RENAME TO v2; +---- +stmt 0 err 1 -1 no such table: v1 +==== alter-12.3 + SELECT * FROM v1; +---- +stmt 0 err 1 -1 no such table: v1 +==== alter-12.5 + + ALTER TABLE v1 ADD COLUMN new_column; +---- +stmt 0 err 1 -1 no such table: v1 +==== alter-13.1 + + CREATE TABLE /* hi */ t3102a(x); + CREATE TABLE t3102b -- comment + (y); + CREATE INDEX t3102c ON t3102a(x); + SELECT name FROM sqlite_master WHERE name GLOB 't3102*' ORDER BY 1; +---- +stmt 0 ok +stmt 37 ok +stmt 81 err 1 -1 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 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 48 ok +==== alter-14.1 + + CREATE TABLE t3651(a UNIQUE); + INSERT INTO t3651 VALUES(5); + 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 +==== alter-14.2 + + ALTER TABLE t3651 ADD COLUMN b PRIMARY KEY; +---- +stmt 0 err 1 -1 no such table: t3651 +==== alter-16.1 + + CREATE TABLE t16a(a TEXT, b REAL, c INT, PRIMARY KEY(a,b)) WITHOUT rowid; + INSERT INTO t16a VALUES('abc',1.25,99); + ALTER TABLE t16a ADD COLUMN d TEXT DEFAULT 'xyzzy'; + INSERT INTO t16a VALUES('cba',5.5,98,'fizzle'); + 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 +==== 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 +==== alter-17.100 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + CREATE VIRTUAL TABLE t2 USING rtree(id,x0,x1); + INSERT INTO t1 VALUES(1,'apple'),(2,'fig'),(3,'pear'); + INSERT INTO t2 VALUES(1,1.0,2.0),(2,2.0,3.0),(3,1.5,3.5); + CREATE TRIGGER r1 AFTER UPDATE ON t1 BEGIN + DELETE FROM t2 WHERE id = OLD.a; + END; + ALTER TABLE t1 RENAME TO t3; + UPDATE t3 SET b='peach' WHERE a=2; + SELECT * FROM t2 ORDER BY 1; +---- +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 +==== alter-18.1 + + CREATE TABLE t1(a,b,c); + CREATE TABLE log(a INTEGER PRIMARY KEY,b,c); + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO logx(a,b,c) VALUES(new.a,new.b,new.c) + ON CONFLICT(a) DO UPDATE SET c=excluded.c, b=new.b; + END; + ALTER TABLE log RENAME COLUMN a TO x; +---- +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 +==== alter-19.1 + + CREATE TABLE t1(x); + CREATE TABLE t2(c); + CREATE TRIGGER r1 AFTER INSERT ON t2 BEGIN + UPDATE t2 SET (c)=( + EXISTS(SELECT 1 WHERE (WITH cte1(a) AS (SELECT 1 FROM t1 WHERE (SELECT 1 WHERE (WITH cte2(b) AS (VALUES(1))SELECT b FROM cte2)))SELECT a FROM cte1)) + ); + END; + ALTER TABLE t2 RENAME TO t3; +---- +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 +==== alter-19.2 + + SELECT name FROM sqlite_schema WHERE sql LIKE '%t2%'; +---- +stmt 0 ok +==== alter-19.3 + + SELECT name FROM sqlite_schema WHERE sql LIKE '%t3%' ORDER BY name; +---- +stmt 0 ok +==== alter-20.1 + + CREATE TABLE t1(a INT) STRICT; + INSERT INTO t1(a) VALUES(45); +---- +stmt 0 ok +stmt 33 err 1 -1 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 +==== 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 +==== alter-20.3 + + INSERT INTO t1(a) VALUES(45); +---- +stmt 0 err 1 -1 no such table: t1 +==== alter-21.1 + + CREATE TABLE t1(a,b,c,d); + CREATE TABLE t2(a,b,c,d,x); + CREATE TRIGGER r1 AFTER INSERT ON t2 BEGIN + SELECT unknown_function(a ORDER BY (SELECT group_concat(DISTINCT a ORDER BY a) FROM t1)) FROM t1; + END; + ALTER TABLE t2 RENAME TO e; +---- +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 +==== alter-21.2 + + SELECT name, type FROM sqlite_schema ORDER BY name; +---- +stmt 0 ok +==== alter-21.3 + + DROP TRIGGER r1; + CREATE TRIGGER r2 AFTER INSERT ON e BEGIN + SELECT unknown_function(a ORDER BY (SELECT group_concat(a ORDER BY a) FROM (SELECT b FROM t1))) FROM t1; + 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 +==== alter-21.4 + + SELECT name, type FROM sqlite_schema ORDER BY name; +---- +stmt 0 ok diff --git a/parser/testdata/alter2.metadata.json b/parser/testdata/alter2.metadata.json new file mode 100644 index 0000000..ba37d0b --- /dev/null +++ b/parser/testdata/alter2.metadata.json @@ -0,0 +1,28 @@ +{ + "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/alter2.test b/parser/testdata/alter2.test new file mode 100644 index 0000000..c7cabe0 --- /dev/null +++ b/parser/testdata/alter2.test @@ -0,0 +1,177 @@ +==== alter2-1.1 + + CREATE TABLE abc(a, b); + INSERT INTO abc VALUES(1, 2); + INSERT INTO abc VALUES(3, 4); + 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 +==== alter2-1.3 + + SELECT * FROM abc; +---- +stmt 0 err 1 -1 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 +==== alter2-1.5 + + CREATE INDEX abc_i ON abc(c); +---- +stmt 0 err 1 -1 no such table: main.abc +==== alter2-1.6 + + SELECT c FROM abc ORDER BY c; +---- +stmt 0 err 1 -1 no such table: abc +==== alter2-1.7 + + SELECT * FROM abc WHERE c = 10; +---- +stmt 0 err 1 -1 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 +==== alter2-1.10 + + SELECT typeof(d) FROM abc; +---- +stmt 0 err 1 -1 no such table: abc +==== alter2-1.99 + + DROP TABLE abc; +---- +stmt 0 err 1 -1 no such table: abc +==== alter2-2.1 + + CREATE TABLE abc2(a, b, c); + INSERT INTO abc2 VALUES(1, 2, 10); + INSERT INTO abc2 VALUES(3, 4, NULL); + INSERT INTO abc2 VALUES(5, 6, NULL); + CREATE VIEW abc2_v AS SELECT * FROM abc2; + 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 161 ok +stmt 209 err 1 -1 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 +==== alter2-3.1 + + CREATE TABLE abc3(a, b); + CREATE TABLE blog(o, n); + CREATE TRIGGER abc3_t AFTER UPDATE OF b ON abc3 BEGIN + INSERT INTO blog VALUES(old.b, new.b); + END; +---- +stmt 0 ok +stmt 31 ok +stmt 62 err 1 -1 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 +==== 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 +==== alter2-3.5 + + SELECT * FROM blog; +---- +stmt 0 err 1 -1 no such table: blog +==== alter2-3.6 + + CREATE TABLE clog(o, n); + CREATE TRIGGER abc3_t2 AFTER UPDATE OF c ON abc3 BEGIN + INSERT INTO clog VALUES(old.c, new.c); + END; + UPDATE abc3 SET c = a*2; + 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 +==== alter2-5.2 + VACUUM +---- +stmt 0 ok +==== alter2-7.1 + + DROP TABLE t1; + 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 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== alter2-10.4 + + SELECT count(b) FROM t2 WHERE b = X'ABCD'; +---- +stmt 0 err 1 -1 no such table: t2 diff --git a/parser/testdata/alter3.metadata.json b/parser/testdata/alter3.metadata.json new file mode 100644 index 0000000..f4e75f6 --- /dev/null +++ b/parser/testdata/alter3.metadata.json @@ -0,0 +1,46 @@ +{ + "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/alter3.test b/parser/testdata/alter3.test new file mode 100644 index 0000000..76688f8 --- /dev/null +++ b/parser/testdata/alter3.test @@ -0,0 +1,270 @@ +==== alter3-1.4 + + CREATE TABLE main.t1(a, b); + ALTER TABLE t1 ADD c; + SELECT sql FROM sqlite_master WHERE tbl_name = 't1'; +---- +stmt 0 ok +stmt 32 err 1 -1 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 38 ok +==== alter3-1.6 + + CREATE TABLE t2(a, b, UNIQUE(a, b)); + ALTER TABLE t2 ADD c REFERENCES t1(c) ; + 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 90 ok +==== alter3-1.7 + + CREATE TABLE t3(a, b, UNIQUE(a, b)); + ALTER TABLE t3 ADD COLUMN c VARCHAR(10, 20); + 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 90 ok +==== alter3-2.2 + + ALTER TABLE t1 ADD c UNIQUE +---- +stmt 0 err 1 -1 no such table: t1 +==== alter3-2.3 + + ALTER TABLE t1 ADD b VARCHAR(10) +---- +stmt 0 err 1 -1 no such table: t1 +==== alter3-2.3.dup1 + + ALTER TABLE t1 ADD c NOT NULL; +---- +stmt 0 err 1 -1 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 +==== alter3-2.6 + + alter table t1 add column d DEFAULT CURRENT_TIME; +---- +stmt 0 err 1 -1 no such table: t1 +==== alter3-2.99 + + DROP TABLE t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== alter3-3.1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 100); + INSERT INTO t1 VALUES(2, 300); + 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 +==== alter3-3.1.dup1 + + PRAGMA schema_version = 10; +---- +stmt 0 ok +==== alter3-3.2 + + 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 +==== alter3-3.4 + + PRAGMA schema_version; +---- +stmt 0 ok +==== alter3-4.1 + + PRAGMA schema_version = 20; +---- +stmt 0 ok +==== alter3-4.2 + + 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 +==== alter3-4.4 + + PRAGMA schema_version; +---- +stmt 0 ok +==== alter3-4.99 + + DROP TABLE t1; +---- +stmt 0 err 1 -1 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 +==== alter3-5.3 + + SELECT * FROM aux.t1; +---- +stmt 0 err 1 -1 no such table: aux.t1 +==== alter3-5.4 + + PRAGMA aux.schema_version; +---- +stmt 0 err 1 16 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 +==== alter3-5.7 + + SELECT * FROM aux.t1; +---- +stmt 0 err 1 -1 no such table: aux.t1 +==== alter3-5.8 + + PRAGMA aux.schema_version; +---- +stmt 0 err 1 16 unknown database aux +==== alter3-5.9 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 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 +==== alter3-6.1 + + CREATE TABLE t1(a, b); + CREATE TABLE log(trig, a, b); + + CREATE TRIGGER t1_a AFTER INSERT ON t1 BEGIN + INSERT INTO log VALUES('a', new.a, new.b); + END; + CREATE TEMP TRIGGER t1_b AFTER INSERT ON t1 BEGIN + INSERT INTO log VALUES('b', new.a, new.b); + END; + + INSERT INTO t1 VALUES(1, 2); + SELECT * FROM log; +---- +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 +==== 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 +==== alter3-8.1 + + CREATE TABLE t4(c1); +---- +stmt 0 ok +==== alter3-8.2 + + SELECT sql FROM sqlite_master WHERE name = 't4'; +---- +stmt 0 ok +==== alter3-9.1 + + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1, 2), ('null!',NULL), (3,4); +---- +stmt 0 ok +stmt 24 err 1 -1 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 +==== alter3-9.3 + + ALTER TABLE t1 ADD COLUMN c CHECK(a!=3); +---- +stmt 0 err 1 -1 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 +==== alter3-9.5 + + ALTER TABLE t1 ADD COLUMN d AS (b+1) NOT NULL; +---- +stmt 0 err 1 -1 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 +==== 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 +==== alter3-9.10 + + CREATE TEMP TABLE t0(m,n); + INSERT INTO t0 VALUES(1, 2), ('null!',NULL), (3,4); + ATTACH ':memory:' AS aux1; + CREATE TABLE aux1.t2(x,y); + INSERT INTO t2 VALUES(1, 2), ('null!',NULL), (3,4); +---- +stmt 0 ok +stmt 29 err 1 -1 no such table: t0 +stmt 83 ok +stmt 112 err 1 128 unknown database aux1 +stmt 141 err 1 -1 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 +==== 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 +==== 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 +==== 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 diff --git a/parser/testdata/alter4.metadata.json b/parser/testdata/alter4.metadata.json new file mode 100644 index 0000000..532e766 --- /dev/null +++ b/parser/testdata/alter4.metadata.json @@ -0,0 +1,49 @@ +{ + "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/alter4.test b/parser/testdata/alter4.test new file mode 100644 index 0000000..41a2c50 --- /dev/null +++ b/parser/testdata/alter4.test @@ -0,0 +1,291 @@ +==== alter4-1.1 + + CREATE TEMP TABLE abc(a, b, c); + SELECT sql FROM sqlite_temp_master; +---- +stmt 0 ok +stmt 36 ok +==== alter4-1.1b + + SELECT sql FROM temp.sqlite_master; +---- +stmt 0 ok +==== alter4-1.2b + + SELECT sql FROM temp.sqlite_master; +---- +stmt 0 ok +==== alter4-1.3b + + SELECT sql FROM temp.sqlite_master; +---- +stmt 0 ok +==== alter4-1.4 + + CREATE TABLE temp.t1(a, b); + ALTER TABLE t1 ADD c; + SELECT sql FROM sqlite_temp_master WHERE tbl_name = 't1'; +---- +stmt 0 ok +stmt 32 err 1 -1 no such table: t1 +stmt 58 ok +==== alter4-1.4b + + SELECT sql FROM temp.sqlite_master WHERE tbl_name = 't1'; +---- +stmt 0 ok +==== alter4-1.5 + + 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 38 ok +==== alter4-1.6 + + CREATE TEMP TABLE t2(a, b, UNIQUE(a, b)); + ALTER TABLE t2 ADD c REFERENCES t1(c) ; + SELECT sql FROM sqlite_temp_master + WHERE tbl_name = 't2' AND type = 'table'; +---- +stmt 0 ok +stmt 48 err 1 -1 no such table: t2 +stmt 95 ok +==== alter4-1.7 + + CREATE TEMPORARY TABLE t3(a, b, UNIQUE(a, b)); + ALTER TABLE t3 ADD COLUMN c VARCHAR(10, 20); + SELECT sql FROM sqlite_temp_master + WHERE tbl_name = 't3' AND type = 'table'; +---- +stmt 0 ok +stmt 51 err 1 -1 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 +==== alter4-2.3 + + ALTER TABLE t1 ADD b VARCHAR(10) +---- +stmt 0 err 1 -1 no such table: t1 +==== alter4-2.3.dup1 + + ALTER TABLE t1 ADD c NOT NULL; +---- +stmt 0 err 1 -1 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 +==== alter4-2.6 + + alter table t1 add column d DEFAULT CURRENT_TIME; +---- +stmt 0 err 1 -1 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 +==== alter4-2.99 + + DROP TABLE t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== alter4-3.1 + + CREATE TEMP TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 100); + INSERT INTO t1 VALUES(2, 300); + 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 +==== alter4-3.1.dup1 + + PRAGMA schema_version = 10; +---- +stmt 0 ok +==== alter4-3.2 + + 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 +==== alter4-3.4 + + PRAGMA schema_version; +---- +stmt 0 ok +==== alter4-4.1 + + PRAGMA schema_version = 20; +---- +stmt 0 ok +==== alter4-4.2 + + 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 +==== alter4-4.4 + + PRAGMA schema_version; +---- +stmt 0 ok +==== alter4-4.99 + + DROP TABLE t1; +---- +stmt 0 err 1 -1 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 +==== alter4-5.3 + + SELECT * FROM aux.t1; +---- +stmt 0 err 1 -1 no such table: aux.t1 +==== alter4-5.4 + + PRAGMA aux.schema_version; +---- +stmt 0 err 1 16 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 +==== alter4-5.7 + + SELECT * FROM aux.t1; +---- +stmt 0 err 1 -1 no such table: aux.t1 +==== alter4-5.8 + + PRAGMA aux.schema_version; +---- +stmt 0 err 1 16 unknown database aux +==== alter4-5.9 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 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 +==== alter4-6.1 + + CREATE TEMP TABLE t1(a, b); + CREATE TEMP TABLE log(trig, a, b); + + CREATE TRIGGER t1_a AFTER INSERT ON t1 BEGIN + INSERT INTO log VALUES('a', new.a, new.b); + END; + CREATE TEMP TRIGGER t1_b AFTER INSERT ON t1 BEGIN + INSERT INTO log VALUES('b', new.a, new.b); + END; + + INSERT INTO t1 VALUES(1, 2); + SELECT * FROM log ORDER BY trig, a, b; +---- +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 +==== 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 +==== alter4-8.1 + + CREATE TEMP TABLE t4(c1); +---- +stmt 0 ok +==== alter4-8.2 + + SELECT sql FROM sqlite_temp_master WHERE name = 't4'; +---- +stmt 0 ok +==== alter4-9.1 + + CREATE TABLE t5( + a INTEGER DEFAULT -9223372036854775808, + b INTEGER DEFAULT (-(-9223372036854775808)) + ); + INSERT INTO t5 DEFAULT VALUES; +---- +stmt 0 ok +stmt 116 err 1 -1 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 +==== 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 +==== alter4-11.0 + + CREATE TABLE t1(c INTEGER PRIMARY KEY, d); + INSERT INTO t1(c,d) VALUES(1,2); + PRAGMA foreign_keys = on; + ALTER TABLE t1 ADD COLUMN e; +---- +stmt 0 ok +stmt 45 err 1 -1 no such table: t1 +stmt 80 ok +stmt 108 err 1 -1 no such table: t1 +==== alter4-11.1 + + ALTER TABLE t1 ADD COLUMN f REFERENCES t1; +---- +stmt 0 err 1 -1 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 +==== alter4-11.3 + + ALTER TABLE t2 ADD COLUMN g; +---- +stmt 0 err 1 -1 no such table: t2 +==== alter4-11.4 + + CREATE VIRTUAL TABLE fff USING fts5(f); +---- +stmt 0 ok +==== alter4-11.2.dup1 + + ALTER TABLE fff ADD COLUMN g; +---- +stmt 0 err 1 -1 no such table: fff diff --git a/parser/testdata/alterdropcol.metadata.json b/parser/testdata/alterdropcol.metadata.json new file mode 100644 index 0000000..6a25891 --- /dev/null +++ b/parser/testdata/alterdropcol.metadata.json @@ -0,0 +1,56 @@ +{ + "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/alterdropcol.test b/parser/testdata/alterdropcol.test new file mode 100644 index 0000000..5018b8b --- /dev/null +++ b/parser/testdata/alterdropcol.test @@ -0,0 +1,344 @@ +==== 1.0 + + CREATE TABLE t1(a, b, c); + CREATE VIEW v1 AS SELECT * FROM t1; + + CREATE TABLE t2(x INTEGER PRIMARY KEY, y, z UNIQUE); + CREATE INDEX t2y ON t2(y); + + CREATE TABLE t3(q, r, s); + CREATE INDEX t3rs ON t3(r+s); +---- +stmt 0 ok +stmt 28 ok +stmt 66 ok +stmt 122 err 1 -1 no such table: main.t2 +stmt 151 ok +stmt 180 err 1 -1 no such table: main.t3 +==== 1.1 + + ALTER TABLE nosuch DROP COLUMN z; +---- +stmt 0 err 1 -1 no such table: nosuch +==== 1.2 + + ALTER TABLE v1 DROP COLUMN c; +---- +stmt 0 err 1 -1 no such table: v1 +==== 1.3.1 + + CREATE VIRTUAL TABLE ft1 USING fts5(one, two); +---- +stmt 0 ok +==== 1.3.2 + + ALTER TABLE ft1 DROP COLUMN two; +---- +stmt 0 err 1 -1 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 +==== 1.5 + + ALTER TABLE t1 DROP COLUMN d; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.6.1 + + ALTER TABLE t1 DROP COLUMN b; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.6.2 + + SELECT sql FROM sqlite_schema WHERE name = 't1' +---- +stmt 0 ok +==== 1.7.1 + + ALTER TABLE t1 DROP COLUMN c; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.7.2 + + SELECT sql FROM sqlite_schema WHERE name = 't1' +---- +stmt 0 ok +==== 1.7.3 + + ALTER TABLE t1 DROP COLUMN a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.8 + + ALTER TABLE t2 DROP COLUMN z +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.9 + + ALTER TABLE t2 DROP COLUMN x +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.10 + + ALTER TABLE t2 DROP COLUMN y +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.11 + + ALTER TABLE t3 DROP COLUMN s +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.%TN%.0 + + CREATE TABLE t1(x, y INTEGER PRIMARY KEY, z) %WO% ; + INSERT INTO t1 VALUES(1, 2, 3); + 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 +==== 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 +==== 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 +==== 3.0 + + CREATE TABLE t12(a, b, c, CHECK(c>10)); + CREATE TABLE t13(a, b, c CHECK(c>10)); +---- +stmt 0 ok +stmt 42 ok +==== 3.1 + + ALTER TABLE t12 DROP COLUMN c; +---- +stmt 0 err 1 -1 no such table: t12 +==== 3.2 + + ALTER TABLE t13 DROP COLUMN c; +---- +stmt 0 err 1 -1 no such table: t13 +==== alterdropcol-generated + + INSERT INTO "my table"(a, b, d) VALUES(1, 2, 'hello'); + INSERT INTO "my table"(a, b, d) VALUES(3, 4, 'world'); + + 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 +==== alterdropcol-generated.dup1 + + ALTER TABLE "my table" DROP COLUMN c; +---- +stmt 0 err 1 -1 no such table: my table +==== alterdropcol-generated.dup2 + + SELECT * FROM "my table" +---- +stmt 0 err 1 -1 no such table: my table +==== alterdropcol-generated.dup3 + + INSERT INTO x1(a, b, c, e) VALUES(1, 2, 3, 4); + INSERT INTO x1(a, b, c, e) VALUES(5, 6, 7, 8); + 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 +==== alterdropcol-generated.dup4 + + ALTER TABLE x1 DROP COLUMN a +---- +stmt 0 err 1 -1 no such table: x1 +==== alterdropcol-generated.dup5 + + SELECT * FROM x1 +---- +stmt 0 err 1 -1 no such table: x1 +==== alterdropcol-generated.dup6 + + ALTER TABLE x1 DROP COLUMN e +---- +stmt 0 err 1 -1 no such table: x1 +==== alterdropcol-generated.dup7 + + SELECT * FROM x1 +---- +stmt 0 err 1 -1 no such table: x1 +==== 5.0 + + CREATE TABLE p1(a PRIMARY KEY, b UNIQUE); + CREATE TABLE c1(x, y, z REFERENCES p1(c)); + CREATE TABLE c2(x, y, z, w REFERENCES p1(b)); +---- +stmt 0 ok +stmt 44 ok +stmt 89 ok +==== 5.1 + + ALTER TABLE c1 DROP COLUMN z; + 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 64 ok +==== 5.2.1 + + CREATE VIEW v1 AS SELECT d, e FROM p1 +---- +stmt 0 ok +==== 5.2.2 + + ALTER TABLE c1 DROP COLUMN x +---- +stmt 0 err 1 -1 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 16 ok +==== 5.3.2 + + ALTER TABLE c1 DROP COLUMN x +---- +stmt 0 err 1 -1 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 +==== 5.4.2 + + ALTER TABLE c1 DROP COLUMN y +---- +stmt 0 err 1 -1 no such table: c1 +==== 5.5.1 + + DROP TRIGGER tr; + CREATE TRIGGER tr AFTER INSERT ON c1 BEGIN + 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 +==== 5.5.2 + + ALTER TABLE c1 DROP COLUMN y +---- +stmt 0 err 1 -1 no such table: c1 +==== 6.0 + + CREATE TABLE t1(a,b,c); + CREATE TABLE t2(x,y,z); + PRAGMA writable_schema=ON; + UPDATE sqlite_schema SET sql='CREATE INDEX t1b ON t1(b)' WHERE name='t2'; + PRAGMA writable_schema=OFF; + ALTER TABLE t2 DROP COLUMN z; +---- +stmt 0 ok +stmt 26 ok +stmt 52 ok +stmt 81 ok +stmt 157 ok +stmt 187 err 1 -1 no such table: t2 +==== 6.1 + + CREATE TABLE t1(a,b,c); + CREATE TABLE t2(x,y,z); + PRAGMA writable_schema=ON; + UPDATE sqlite_schema SET sql='CREATE VIEW t2(x,y,z) AS SELECT b,a,c FROM t1' + WHERE name='t2'; + PRAGMA writable_schema=OFF; + ALTER TABLE t2 DROP COLUMN z; +---- +stmt 0 ok +stmt 26 ok +stmt 52 ok +stmt 81 ok +stmt 180 ok +stmt 210 err 1 -1 no such table: t2 +==== 7.0 + + CREATE TABLE t1(a, b, c, PRIMARY KEY(a COLLATE nocase, a)) WITHOUT ROWID; + INSERT INTO t1 VALUES(1, 2, 3); + 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 +==== 7.1 + + ALTER TABLE t1 DROP COLUMN c; +---- +stmt 0 err 1 -1 no such table: t1 +==== 7.2 + + SELECT sql FROM sqlite_schema; +---- +stmt 0 ok +==== 7.3 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 8.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + PRAGMA writable_schema = 1; + UPDATE sqlite_schema + SET sql = 'CREATE TABLE t1(a INTEGER PRIMARY KEY AUTOINCREMENT, b)' +---- +stmt 0 ok +stmt 45 ok +stmt 75 ok +==== 8.1 + + ALTER TABLE t1 DROP COLUMN b; +---- +stmt 0 err 1 -1 no such table: t1 +==== 8.2 + + SELECT sql FROM sqlite_schema; +---- +stmt 0 ok +==== alterdropcol-generated.dup8 + + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<50000 + ) + INSERT INTO t1(a, b, c) SELECT i, 123, 456 FROM s; +---- +stmt 0 err 1 -1 no such table: t1 +==== alterdropcol-generated.dup9 + + ALTER TABLE t1 DROP COLUMN b; +---- +stmt 0 err 1 -1 no such table: t1 +==== alterdropcol-generated.dup10 + + SELECT count(*), c FROM t1 GROUP BY c; +---- +stmt 0 err 1 -1 no such table: t1 diff --git a/parser/testdata/alterdropcol2.metadata.json b/parser/testdata/alterdropcol2.metadata.json new file mode 100644 index 0000000..1b24e1a --- /dev/null +++ b/parser/testdata/alterdropcol2.metadata.json @@ -0,0 +1,13 @@ +{ + "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/alterdropcol2.test b/parser/testdata/alterdropcol2.test new file mode 100644 index 0000000..9d206d2 --- /dev/null +++ b/parser/testdata/alterdropcol2.test @@ -0,0 +1,54 @@ +==== 1.0 + + CREATE TABLE t1(c, b, a, PRIMARY KEY(b, a)) WITHOUT ROWID; + INSERT INTO t1 VALUES(1, 2, 3), (4, 5, 6); +---- +stmt 0 ok +stmt 61 err 1 -1 no such table: t1 +==== 1.1 + + ALTER TABLE t1 DROP c; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.2.1 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.2.2 + + SELECT sql FROM sqlite_schema; +---- +stmt 0 ok +==== 3.0 + + CREATE TABLE yyy(q, w, e CHECK (e > 0), r); + INSERT INTO yyy VALUES(1,1,1,1), (2,2,2,2); + + CREATE TABLE zzz(q, w, e, r, CHECK (e > 0)); + 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 92 ok +stmt 140 err 1 -1 no such table: zzz +==== 3.1.1 + + INSERT INTO yyy VALUES(0,0,0,0); +---- +stmt 0 err 1 -1 no such table: yyy +==== 3.1.2 + + INSERT INTO yyy VALUES(0,0,0,0); +---- +stmt 0 err 1 -1 no such table: yyy +==== 3.2.1 + + ALTER TABLE yyy DROP e; +---- +stmt 0 err 1 -1 no such table: yyy +==== 3.2.2 + + ALTER TABLE zzz DROP e; +---- +stmt 0 err 1 -1 no such table: zzz diff --git a/parser/testdata/altertab.metadata.json b/parser/testdata/altertab.metadata.json new file mode 100644 index 0000000..fc6dc82 --- /dev/null +++ b/parser/testdata/altertab.metadata.json @@ -0,0 +1,139 @@ +{ + "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/altertab.test b/parser/testdata/altertab.test new file mode 100644 index 0000000..8bbc6fb --- /dev/null +++ b/parser/testdata/altertab.test @@ -0,0 +1,1044 @@ +==== 1.0 + + 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 46 ok +stmt 72 err 1 -1 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 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 no such table: t3 +stmt 59 err 1 -1 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 no such table: t2 +==== 1.4.dup1 + + SELECT sql FROM sqlite_master +---- +stmt 0 ok +==== 2.0 + + 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 31 err 1 -1 no such table: abc +stmt 68 ok +stmt 116 err 1 -1 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 +==== 2.2 + + ALTER TABLE fff RENAME TO ggg; +---- +stmt 0 err 1 -1 no such table: fff +==== 3.0 + + 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 29 err 1 -1 no such table: txx +stmt 64 ok +stmt 123 ok +stmt 189 ok +==== 3.1.1 + + SELECT * FROM vvv; +---- +stmt 0 err 1 -1 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 +==== 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 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 no such table: ttt +==== 3.3.2 + + SELECT sql FROM sqlite_temp_master WHERE name='ttt'; +---- +stmt 0 ok +==== 4.0 + + 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 25 ok +stmt 50 err 1 -1 no such table: main.t1 +==== 4.1 + + INSERT INTO t1 VALUES(1, 1); + ALTER TABLE t1 RENAME TO t11; + INSERT INTO t11 VALUES(2, 2); + 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 +==== 4.2 + SELECT squish(sql) FROM sqlite_master WHERE name = 'tr1' +---- +stmt 0 err 1 8 no such function: squish +==== 5.0 + + 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 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 +==== 5.1 + + ALTER TABLE temp.t9 RENAME TO 't1234567890' +---- +stmt 0 err 1 -1 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 no such table: t1 +stmt 81 err 1 -1 no such table: t2 +stmt 112 ok +stmt 183 err 1 -1 no such table: v +==== 5.3 + + ALTER TABLE t2 RENAME TO one; +---- +stmt 0 err 1 -1 no such table: t2 +==== 5.4 + + SELECT * FROM v +---- +stmt 0 err 1 -1 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 15 ok +stmt 92 err 1 -1 no such table: vv +==== 5.6 + + ALTER TABLE t2 RENAME TO one; +---- +stmt 0 err 1 -1 no such table: t2 +==== 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 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 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 +==== 8.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 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 +==== 8.2 + + ALTER TABLE aux.p1 RENAME TO ppp; +---- +stmt 0 err 1 -1 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 +==== 9.0 + + CREATE TABLE t1(a, b, c); + CREATE VIEW v1 AS SELECT * FROM t2; +---- +stmt 0 ok +stmt 28 ok +==== 9.1 + + ALTER TABLE t1 RENAME TO t3; +---- +stmt 0 err 1 -1 no such table: t1 +==== 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 no such view: v1 +stmt 16 err 1 -1 no such table: main.t1 +==== 9.3 + + ALTER TABLE t1 RENAME TO t3; +---- +stmt 0 err 1 -1 no such table: t1 +==== 9.4 + + 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 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 +==== 9.5 + + ALTER TABLE main.t1 RENAME TO t3; +---- +stmt 0 err 1 -1 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 + + CREATE VIRTUAL TABLE fff USING fts5(x, y, z); +---- +stmt 0 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 no such table: fff +stmt 56 err 1 -1 no such table: fff +stmt 93 ok +==== 10.2 + + SELECT * FROM ggg; +---- +stmt 0 err 1 -1 no such table: ggg +==== 11.0 + + 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 28 err 1 44 unknown database aux +stmt 60 ok +stmt 93 err 1 -1 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 +==== 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 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 35 ok +==== 11.6 + + INSERT INTO aux.t2 VALUES(7, 8, 9); +---- +stmt 0 err 1 -1 no such table: aux.t2 +==== 12.0 + + 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 22 ok +stmt 44 err 1 -1 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 +==== 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 +==== 13.0 + + CREATE TABLE t1(x, y); + CREATE TABLE t2(a, b); + CREATE TABLE log(c); + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO log SELECT y FROM t1, t2; + END; +---- +stmt 0 ok +stmt 25 ok +stmt 50 ok +stmt 73 err 1 -1 no such table: main.t1 +==== 13.1 + + INSERT INTO t1 VALUES(1, 2); +---- +stmt 0 err 1 -1 no such table: t1 +==== 13.2 + + ALTER TABLE t2 RENAME b TO y; +---- +stmt 0 err 1 -1 no such table: t2 +==== 14.0 + + 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 69 ok +stmt 140 err 1 -1 no such table: main.mytable +stmt 321 err 1 -1 no such table: mytable +==== 14.1 + + UPDATE mytable SET geom = X'1234' +---- +stmt 0 err 1 -1 no such table: mytable +==== 14.2 + + ALTER TABLE mytable RENAME TO mytable_renamed; +---- +stmt 0 err 1 -1 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 +==== 14.4 + + ALTER TABLE mytable_renamed RENAME TO mytable2; +---- +stmt 0 err 1 -1 no such table: mytable_renamed +==== 14.5 + + 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 28 ok +stmt 66 err 1 -1 no such table: main.t1 +==== 14.6 + + ALTER TABLE t1 RENAME TO tt1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 15.0 + + CREATE TABLE t1(a integer NOT NULL PRIMARY KEY); + CREATE VIEW v1 AS SELECT a FROM t1; + CREATE TRIGGER tr1 INSTEAD OF INSERT ON v1 BEGIN + UPDATE t1 SET a = NEW.a; + END; + CREATE TRIGGER tr2 INSTEAD OF INSERT ON v1 BEGIN + SELECT new.a; + END; + CREATE TABLE t2 (b); +---- +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 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 +==== 15.2 + + CREATE TABLE x(f1 integer NOT NULL); + CREATE VIEW y AS SELECT f1 AS f1 FROM x; + CREATE TRIGGER t INSTEAD OF UPDATE OF f1 ON y BEGIN + UPDATE x SET f1 = NEW.f1; + END; + CREATE TABLE z (f1 integer NOT NULL PRIMARY KEY); + ALTER TABLE z RENAME TO z2; +---- +stmt 0 ok +stmt 39 ok +stmt 82 err 1 -1 no such table: main.y +stmt 175 ok +stmt 227 err 1 -1 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 +==== 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 +==== 15.5 + + SELECT sql FROM sqlite_master WHERE name = 'y'; +---- +stmt 0 ok +==== 16.0 + + CREATE VIRTUAL TABLE y1 USING fts3; + VACUUM; +---- +stmt 0 ok +stmt 40 ok +==== 16.10 + + INSERT INTO y1_segments VALUES(1, X'1234567890'); +---- +stmt 0 err 1 -1 no such table: y1_segments +==== 16.20 + + DROP TABLE y1_segments; +---- +stmt 0 err 1 -1 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 +==== 16.22 + + ALTER TABLE y1_segments RENAME TO abc; +---- +stmt 0 err 1 -1 no such table: y1_segments +==== 16.23 + + CREATE TABLE y1_segments AS SELECT * FROM abc; +---- +stmt 0 err 1 -1 no such table: abc +==== 16.24 + + CREATE VIEW y1_segments AS SELECT * FROM abc; +---- +stmt 0 ok +==== 16.25 + + ALTER TABLE abc RENAME TO y1_segments; +---- +stmt 0 err 1 -1 no such table: abc +==== 16.30 + + ALTER TABLE y1 RENAME TO z1; +---- +stmt 0 err 1 -1 no such table: y1 +==== 16.40 + + SELECT * FROM z1_segments; +---- +stmt 0 err 1 -1 no such table: z1_segments +==== 17.0 + + CREATE TABLE sqlite1234 (id integer); + ALTER TABLE sqlite1234 RENAME TO User; + SELECT name, sql FROM sqlite_master WHERE sql IS NOT NULL; +---- +stmt 0 ok +stmt 40 err 1 -1 no such table: sqlite1234 +stmt 81 ok +==== 18.1.0 + + CREATE TABLE t0 (c0 INTEGER, PRIMARY KEY(c0)) WITHOUT ROWID; +---- +stmt 0 ok +==== 18.1.1 + + ALTER TABLE t0 RENAME COLUMN c0 TO c1; +---- +stmt 0 err 1 -1 no such table: t0 +==== 18.1.2 + + SELECT sql FROM sqlite_master; +---- +stmt 0 ok +==== 18.2.0 + + CREATE TABLE t0 (c0 INTEGER, PRIMARY KEY(c0)); +---- +stmt 0 ok +==== 18.2.1 + + ALTER TABLE t0 RENAME COLUMN c0 TO c1; +---- +stmt 0 err 1 -1 no such table: t0 +==== 18.2.2 + + SELECT sql FROM sqlite_master; +---- +stmt 0 ok +==== 19.100 + + CREATE TABLE t1(x); + CREATE VIEW t2 AS SELECT 1 FROM t1, (t1 AS a0, t1); + ALTER TABLE t1 RENAME TO t3; + SELECT sql FROM sqlite_master; +---- +stmt 0 ok +stmt 22 ok +stmt 76 err 1 -1 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 +==== 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 +==== 20.0 + + CREATE TABLE a(a); + CREATE VIEW b AS SELECT(SELECT *FROM c JOIN a USING(d, a, a, a) JOIN a) IN(); +---- +stmt 0 ok +stmt 21 ok +==== 20.1 + + ALTER TABLE a RENAME a TO e; +---- +stmt 0 err 1 -1 no such table: a +==== 21.0 + + CREATE TABLE a(b); + CREATE VIEW c AS + SELECT NULL INTERSECT + SELECT NULL ORDER BY + likelihood(NULL, (d, (SELECT c))); +---- +stmt 0 ok +stmt 21 ok +==== 21.1 + + 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 +==== 21.2 + + SELECT * FROM c; +---- +stmt 0 err 1 -1 no such table: c +==== 21.3 + + ALTER TABLE a RENAME TO e; +---- +stmt 0 err 1 -1 no such table: a +==== 22.0 + + CREATE TABLE t1(a INT, b TEXT NOT NULL); + INSERT INTO t1 VALUES(1,2),('a','b'); + BEGIN; + PRAGMA writable_schema=ON; + UPDATE sqlite_schema SET sql='CREATE TABLE t1(a INT, b TEXT)' WHERE name LIKE 't1'; + PRAGMA schema_version=1234; + COMMIT; + PRAGMA integrity_check; +---- +stmt 0 ok +stmt 43 err 1 -1 no such table: t1 +stmt 83 ok +stmt 92 ok +stmt 121 ok +stmt 207 ok +stmt 237 ok +stmt 247 ok +==== 22.1 + + 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 +==== 23.1 + + CREATE TABLE gigo(a text); + CREATE TABLE idx(x text COLLATE compare64); + CREATE VIEW v1 AS SELECT * FROM idx WHERE x='abc'; +---- +stmt 0 ok +stmt 29 err 1 -1 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 +==== 23.3 + + SELECT sql FROM sqlite_master; +---- +stmt 0 ok +==== 23.4 + + ALTER TABLE idx2 RENAME x TO y; + SELECT sql FROM sqlite_master; +---- +stmt 0 err 1 -1 no such table: idx2 +stmt 34 ok +==== 24.1.0 + + CREATE TABLE t1(a, b); + CREATE TRIGGER AFTER INSERT ON t1 BEGIN + INSERT INTO nosuchtable VALUES(new.a) ON CONFLICT(a) DO NOTHING; + END; +---- +stmt 0 ok +stmt 25 err 1 -1 no such table: main.t1 +==== 24.1.1 + + ALTER TABLE t1 RENAME TO t2; +---- +stmt 0 err 1 -1 no such table: t1 +==== 24.2.0 + + CREATE TABLE t1(a, b); + CREATE TRIGGER AFTER INSERT ON t1 BEGIN + INSERT INTO v1 VALUES(new.a) ON CONFLICT(a) DO NOTHING; + END; + CREATE VIEW v1 AS SELECT * FROM nosuchtable; +---- +stmt 0 ok +stmt 25 err 1 -1 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 +==== 25.1 + + CREATE TABLE xx(x); + CREATE VIEW v3(b) AS WITH b AS (SELECT b FROM (SELECT * FROM t2)) VALUES(1); +---- +stmt 0 ok +stmt 22 ok +==== 25.2 + + ALTER TABLE json_each RENAME TO t4; +---- +stmt 0 err 1 -1 table json_each may not be altered +==== 26.1 + + CREATE TABLE t1(k,v); + CREATE TABLE t2_a(k,v); + CREATE VIEW t2 AS SELECT * FROM t2_a; + CREATE TRIGGER r2 AFTER INSERT ON t1 BEGIN + UPDATE t1 + SET (k,v)=((WITH cte1(a) AS (SELECT 1 FROM t2) SELECT t2.k FROM t2, cte1),1); + END; + ALTER TABLE t1 RENAME TO t1x; + INSERT INTO t2_a VALUES(2,3); + INSERT INTO t1x VALUES(98,99); + SELECT * FROM t1x; +---- +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 +==== 27.1 + + + create table t_sa ( + c_muyat INTEGER NOT NULL, + c_d4u TEXT + ); + + create table t2 ( abc ); + + CREATE TRIGGER trig AFTER DELETE ON t_sa + BEGIN + DELETE FROM t_sa WHERE ( + SELECT 123 FROM t2 + WINDOW oamat7fzf AS ( PARTITION BY t_sa.c_d4u ) + ); + END; +---- +stmt 0 ok +stmt 66 ok +stmt 93 err 1 -1 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 +==== 29.1 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES('a', 'b', 'c'); + + CREATE VIEW v0 AS + WITH p AS ( SELECT 1 FROM t1 ), + g AS ( SELECT 1 FROM p, t1 ) + SELECT 1 FROM g; +---- +stmt 0 ok +stmt 28 err 1 -1 no such table: t1 +stmt 68 ok +==== 29.2 + + SELECT * FROM v0 +---- +stmt 0 err 1 -1 no such table: v0 +==== 29.2.dup1 + + ALTER TABLE t1 RENAME TO t2 +---- +stmt 0 err 1 -1 no such table: t1 +==== 29.3 + + SELECT sql FROM sqlite_schema WHERE name='v0' +---- +stmt 0 ok +==== 29.4 + + CREATE VIEW v2 AS + WITH p AS ( SELECT 1 FROM t2 ), + g AS ( SELECT 1 FROM ( + WITH i AS (SELECT 1 FROM p, t2) + SELECT * FROM i + ) + ) + SELECT 1 FROM g; +---- +stmt 0 ok +==== 29.4.dup1 + + SELECT * FROM v2; +---- +stmt 0 err 1 -1 no such table: v2 +==== 29.5 + + ALTER TABLE t2 RENAME TO t3; +---- +stmt 0 err 1 -1 no such table: t2 +==== 29.5.dup1 + + SELECT sql FROM sqlite_schema WHERE name='v2' +---- +stmt 0 ok +==== 28.1 + + CREATE TABLE t1(a); + CREATE TABLE t2(b,c); + CREATE TABLE t4(b,c); + INSERT INTO t2 VALUES(1,2),(1,3),(2,5); + INSERT INTO t4 VALUES(1,2),(1,3),(2,5); + + CREATE VIEW v3 AS + WITH RECURSIVE t3(x,y,z) AS ( + SELECT b,c,NULL FROM t4 + UNION + SELECT x,y,NULL FROM t3, t2 + ) + SELECT * FROM t3 AS xyz; +---- +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 154 ok +==== 28.2 + + SELECT * FROM v3 +---- +stmt 0 err 1 -1 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 +==== 28.4 + + ALTER TABLE t2 RENAME TO t5; +---- +stmt 0 err 1 -1 no such table: t2 +==== 28.5 + + SELECT sql FROM sqlite_schema WHERE name='v3' +---- +stmt 0 ok +==== 30.0 + + CREATE TABLE t1(a,b,c,d,e,f); + CREATE TABLE t2(a,b,c); + CREATE INDEX t1abc ON t1(a,b,c+d+e); + CREATE VIEW v1(x,y) AS + SELECT t1.b,t2.b FROM t1,t2 WHERE t1.a=t2.a + GROUP BY 1 HAVING t2.c NOT NULL LIMIT 10; + CREATE TRIGGER r1 AFTER INSERT ON t1 WHEN 'no' NOT NULL BEGIN + INSERT INTO t2(a,a,b,c) VALUES(new.b,new.a,new.c-7); + WITH c1(x) AS ( + VALUES(0) + UNION ALL + SELECT current_time+x FROM c1 WHERE x + UNION ALL + SELECT 1+x FROM c1 WHERE x<1 + ), c2(x) AS (VALUES(0),(1)) + SELECT * FROM c1 AS x1, c2 AS x2, ( + SELECT x+1 FROM c1 WHERE x IS NOT TRUE + UNION ALL + SELECT 1+x FROM c1 WHERE 1='d' ORDER BY name; + SELECT new.c; + END; +---- +stmt 0 ok +stmt 26 ok +stmt 52 err 1 -1 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 32 ok +==== 3.0 + + CREATE TABLE t1(a, b, c, d); + CREATE VIEW v1 AS SELECT * FROM t1 WHERE a=1 OR (b IN ()); +---- +stmt 0 ok +stmt 31 ok +==== 3.1 + + ALTER TABLE t1 RENAME b TO bbb; +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.2 + + SELECT sql FROM sqlite_master WHERE name = 'v1' +---- +stmt 0 ok +==== 4.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t3(e, f); + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(new.a, new.b); + END; +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 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 +==== 4.1.2.dup1 + + COMMIT; +---- +stmt 0 ok +==== 4.1.3 + + SELECT type, name, tbl_name, sql + FROM sqlite_master WHERE type='table' AND name!='t1'; +---- +stmt 0 ok +==== 4.2.1 + + BEGIN; + ALTER TABLE t3 RENAME e TO eee; +---- +stmt 0 ok +stmt 9 err 1 -1 no such table: t3 +==== 4.2.2 + + COMMIT; +---- +stmt 0 ok +==== 4.2.3 + + SELECT type, name, tbl_name, sql + FROM sqlite_master WHERE type='table' AND name!='t1'; +---- +stmt 0 ok +==== 5.0 + + CREATE TABLE t1 ( + c1 integer, c2, PRIMARY KEY(c1 collate rtrim), + UNIQUE(c2) + ) +---- +stmt 0 ok +==== 5.1 + + ALTER TABLE t1 RENAME c1 TO c3; +---- +stmt 0 err 1 -1 no such table: t1 +==== 6.0 + + CREATE TEMPORARY TABLE Table0 ( + Col0 INTEGER, + PRIMARY KEY(Col0 COLLATE RTRIM), + FOREIGN KEY (Col0) REFERENCES Table0 + ); +---- +stmt 0 ok +==== 6.1 + + ALTER TABLE Table0 RENAME Col0 TO Col0; +---- +stmt 0 err 1 -1 no such table: Table0 +==== 7.1.0 + + CREATE TABLE t1(a,b,c); + CREATE TRIGGER AFTER INSERT ON t1 BEGIN + SELECT a, rank() OVER w1 FROM t1 + WINDOW w1 AS (PARTITION BY b, percent_rank() OVER w1); + END; +---- +stmt 0 ok +stmt 26 err 1 -1 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 32 ok +==== 7.2.1 + + DROP TRIGGER after; + CREATE TRIGGER AFTER INSERT ON t1x BEGIN + SELECT a, rank() OVER w1 FROM t1x + 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 +==== 7.2.2 + + ALTER TABLE t1x RENAME TO t1; +---- +stmt 0 err 1 -1 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 +==== 8.1 + + ALTER TABLE t0 RENAME TO t1; + SELECT sql FROM sqlite_master; +---- +stmt 0 err 1 -1 no such table: t0 +stmt 31 ok +==== 8.2.1 + + CREATE TABLE t2 (c0); + CREATE INDEX i2 ON t2((LIKELIHOOD(c0, 1.0) IN ())); + 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 +==== 8.2.2 + + SELECT sql FROM sqlite_master WHERE tbl_name = 't2'; +---- +stmt 0 ok +==== 9.1 + + CREATE TABLE t1(a,b,c); + CREATE TRIGGER AFTER INSERT ON t1 WHEN new.a NOT NULL BEGIN + SELECT true WHERE (SELECT a, b FROM (t1)) IN (); + END; +---- +stmt 0 ok +stmt 26 err 1 -1 no such table: main.t1 +==== 9.2 + + ALTER TABLE t1 RENAME TO t1x; +---- +stmt 0 err 1 -1 no such table: t1 +==== 10.1 + + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(a, b, c); + CREATE VIEW v1 AS SELECT * FROM t1 WHERE ( + SELECT t1.a FROM t1, t2 + ) IN () OR t1.a=5; +---- +stmt 0 ok +stmt 28 ok +stmt 56 ok +==== 10.2 + + ALTER TABLE t2 RENAME TO t3; + SELECT sql FROM sqlite_master WHERE name='v1'; +---- +stmt 0 err 1 -1 no such table: t2 +stmt 31 ok +==== 11.1 + + CREATE TABLE t1( + a,b,c,d,e,f,g,h,j,jj,jjb,k,aa,bb,cc,dd,ee DEFAULT 3.14, + ff DEFAULT('hiccup'),Wg NOD NULL DEFAULT(false) + ); + + CREATE TRIGGER b AFTER INSERT ON t1 WHEN new.a BEGIN + SELECT a, sum() w3 FROM t1 + WINDOW b AS (ORDER BY NOT EXISTS(SELECT 1 FROM abc)); + END; +---- +stmt 0 ok +stmt 140 err 1 -1 no such table: main.t1 +==== 11.2 + + ALTER TABLE t1 RENAME TO t1x; +---- +stmt 0 err 1 -1 no such table: t1 +==== 11.3 + + DROP TRIGGER b; + CREATE TRIGGER b AFTER INSERT ON t1 WHEN new.a BEGIN + SELECT a, sum() w3 FROM 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 +==== 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 32 ok +==== 12.1 + +CREATE TABLE t1(a,b,c,d,e,f,g,h,j,jj,Zjj,k,aQ,bb,cc,dd,ee DEFAULT 3.14, +ff DEFAULT('hiccup'),gg NOD NULL DEFAULT(false)); +CREATE TRIGGER AFTER INSERT ON t1 WHEN new.a NOT NULL BEGIN + +SELECT b () OVER , dense_rank() OVER d, d () OVER w1 +FROM t1 +WINDOW +w1 AS +( w1 ORDER BY d +ROWS BETWEEN 2 NOT IN(SELECT a, sum(d) w2,max(d)OVER FROM t1 +WINDOW +w1 AS +(PARTITION BY d +ROWS BETWEEN '' PRECEDING AND false FOLLOWING), +d AS +(PARTITION BY b ORDER BY d +ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +) PRECEDING AND 1 FOLLOWING), +w2 AS +(PARTITION BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), +w3 AS +(PARTITION BY b ORDER BY d +ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) +; +SELECT a, sum(d) w2,max(d)OVER FROM t1 +WINDOW +w1 AS +(PARTITION BY d +ROWS BETWEEN '' PRECEDING AND false FOLLOWING), +d AS +(PARTITION BY b ORDER BY d +ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +; + +END; +---- +stmt 0 ok +stmt 122 err 1 -1 no such table: main.t1 +==== 12.2 + + ALTER TABLE t1 RENAME TO t1x; +---- +stmt 0 err 1 -1 no such table: t1 +==== 13.1 + + CREATE TABLE t1(a); + CREATE TRIGGER r1 INSERT ON t1 BEGIN + SELECT a(*) OVER (ORDER BY (SELECT 1)) FROM t1; + END; +---- +stmt 0 ok +stmt 22 err 1 -1 no such table: main.t1 +==== 13.2 + + ALTER TABLE t1 RENAME TO t1x; +---- +stmt 0 err 1 -1 no such table: t1 +==== 14.1 + + CREATE TABLE t1(a); + CREATE TABLE t2(b); + CREATE TRIGGER AFTER INSERT ON t1 BEGIN + SELECT sum() FILTER (WHERE (SELECT sum() FILTER (WHERE 0)) AND a); + END; +---- +stmt 0 ok +stmt 22 ok +stmt 44 err 1 -1 no such table: main.t1 +==== 14.2 + + ALTER TABLE t1 RENAME TO t1x; +---- +stmt 0 err 1 -1 no such table: t1 +==== 16.1 + + CREATE TABLE t1(x); + CREATE TRIGGER AFTER INSERT ON t1 BEGIN + SELECT (WITH t2 AS (WITH t3 AS (SELECT true) + SELECT * FROM t3 ORDER BY true COLLATE nocase) + SELECT 11); + + WITH t4 AS (SELECT * FROM t1) SELECT 33; + END; +---- +stmt 0 ok +stmt 22 err 1 -1 no such table: main.t1 +==== 16.2 + + ALTER TABLE t1 RENAME TO t1x; +---- +stmt 0 err 1 -1 no such table: t1 +==== 17.1 + + CREATE TABLE t1(a,b,c); + CREATE TRIGGER AFTER INSERT ON t1 WHEN new.a NOT NULL BEGIN + SELECT a () FILTER (WHERE a>0) FROM t1; + END; +---- +stmt 0 ok +stmt 26 err 1 -1 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 67 ok +==== 18.1 + + CREATE TABLE t1(a,b); + CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN + SELECT a, b FROM t1 + INTERSECT SELECT b,a FROM t1 + ORDER BY b IN ( + SELECT a UNION SELECT b + FROM t1 + ORDER BY b COLLATE nocase + ) + ; + END; +---- +stmt 0 ok +stmt 24 err 1 -1 no such table: main.t1 +==== 18.2 + + SELECT a, b FROM t1 + INTERSECT + SELECT b,a FROM t1 + ORDER BY b IN ( + SELECT a UNION SELECT b + FROM t1 + ORDER BY b COLLATE nocase + ); +---- +stmt 0 err 1 -1 no such table: t1 +==== 18.3 + + ALTER TABLE t1 RENAME TO t1x; +---- +stmt 0 err 1 -1 no such table: t1 +==== 19.0 + + CREATE TABLE a(a,h CONSTRAINT a UNIQUE ON CONFLICT FAIL,CONSTRAINT a); +---- +stmt 0 ok +==== altertab3-generated + + ALTER TABLE a RENAME TO g; +---- +stmt 0 err 1 -1 no such table: a +==== 20.10 + + CREATE TABLE s(a, b, c); + CREATE INDEX k ON s( (WITH s AS( SELECT * ) VALUES(2) ) IN () ); + 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 +==== 21.1 + + CREATE TABLE s(col); + CREATE VIEW v AS SELECT ( + WITH x(a) AS(SELECT * FROM s) VALUES(RIGHT) + ) IN() ; + CREATE TABLE a(a); + ALTER TABLE a RENAME a TO b; +---- +stmt 0 ok +stmt 23 ok +stmt 112 ok +stmt 134 err 1 -1 no such table: a +==== 22.1 + + CREATE TABLE t1(a); + CREATE VIEW v2(b) AS SELECT * FROM v2; +---- +stmt 0 ok +stmt 22 ok +==== 22.2 + + ALTER TABLE t1 RENAME TO t4; +---- +stmt 0 err 1 -1 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 16 ok +==== 22.4 + + ALTER TABLE t1 RENAME TO t4; +---- +stmt 0 err 1 -1 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 16 ok +==== 22.6 + + ALTER TABLE t1 RENAME TO t4; +---- +stmt 0 err 1 -1 no such table: t1 +==== 23.1 + + CREATE TABLE t1(x); + CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN + UPDATE t1 SET (c,d)=((SELECT 1 FROM t1 JOIN t2 ON b=x),1); + END; +---- +stmt 0 ok +stmt 22 err 1 -1 no such table: main.t1 +==== 23.2 + + ALTER TABLE t1 RENAME TO t1x; +---- +stmt 0 err 1 -1 no such table: t1 +==== 23.1.dup1 + + CREATE TABLE v0 (a); + CREATE VIEW v2 (v3) AS + WITH x1 AS (SELECT * FROM v2) + SELECT v3 AS x, v3 AS y FROM v2; +---- +stmt 0 ok +stmt 23 ok +==== 23.2.dup1 + + SELECT * FROM v2 +---- +stmt 0 err 1 -1 no such table: v2 +==== 23.3 + + ALTER TABLE v0 RENAME TO t3 ; +---- +stmt 0 err 1 -1 no such table: v0 +==== 24.1 + + CREATE TABLE v0 (v1); + CREATE TABLE v2 (v3 INTEGER UNIQUE ON CONFLICT ABORT); + CREATE TRIGGER x AFTER INSERT ON v2 WHEN ( + ( SELECT v1 AS PROMO_REVENUE FROM v2 JOIN v0 USING ( VALUE ) ) AND 0 ) + BEGIN + DELETE FROM v2; + END; +---- +stmt 0 ok +stmt 24 ok +stmt 82 err 1 -1 no such table: main.v2 +==== 24.2 + + ALTER TABLE v0 RENAME TO x ; +---- +stmt 0 err 1 -1 no such table: v0 +==== 24.3 + + DROP TRIGGER x; + CREATE TRIGGER x AFTER INSERT ON v2 WHEN ( + 0 AND (SELECT rowid FROM v0) + ) BEGIN + DELETE FROM v2; + END; +---- +stmt 0 err 1 -1 no such trigger: x +stmt 18 err 1 -1 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 32 ok +==== 25.1 + + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(a, b, c); + CREATE TRIGGER ttt AFTER INSERT ON t1 BEGIN + UPDATE t1 SET a=t2.a FROM t2 WHERE t1.a=t2.a; + END; +---- +stmt 0 ok +stmt 28 ok +stmt 56 err 1 -1 no such table: main.t1 +==== 26.1 + + CREATE TABLE t1(x); + + CREATE TABLE t3(y); + CREATE TABLE t4(z); + + CREATE TRIGGER tr1 INSERT ON t3 BEGIN + UPDATE t3 SET y=z FROM (SELECT z FROM t4); + END; + + CREATE TRIGGER tr2 INSERT ON t3 BEGIN + UPDATE t3 SET y=abc FROM (SELECT x AS abc FROM t1); + END; +---- +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 +==== 26.2 + + ALTER TABLE t1 RENAME TO t2; +---- +stmt 0 err 1 -1 no such table: t1 +==== 26.3 + + ALTER TABLE t2 RENAME x TO xx; +---- +stmt 0 err 1 -1 no such table: t2 +==== 26.4 + + SELECT sql FROM sqlite_schema WHERE name='tr2' +---- +stmt 0 ok +==== 26.5 + + CREATE TABLE t1(xx); + CREATE TRIGGER xx INSERT ON t1 BEGIN + UPDATE t1 SET xx=xx FROM(SELECT xx); + END; +---- +stmt 0 ok +stmt 23 err 1 -1 no such table: main.t1 +==== 26.6 + + ALTER TABLE t1 RENAME TO t2; +---- +stmt 0 err 1 -1 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); +---- +stmt 0 ok +==== 27.2 + + ALTER TABLE t1 DROP COLUMN c; + SELECT sql FROM sqlite_schema WHERE name = 't1'; +---- +stmt 0 err 1 -1 no such table: t1 +stmt 32 ok +==== 28.1 + + CREATE TABLE t1(a,b,c,d); + CREATE TRIGGER AFTER INSERT ON t1 BEGIN + UPDATE t1 SET (c,d)=(a,b); + END; + 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 +==== 28.2 + + SELECT sql FROM sqlite_schema WHERE type='trigger' +---- +stmt 0 ok +==== 29.1 + + CREATE TABLE t1(x, y); + CREATE TRIGGER Trigger1 DELETE ON t1 + BEGIN + SELECT t1.*, t1.x FROM t1 ORDER BY t1.x; + END; +---- +stmt 0 ok +stmt 25 err 1 -1 no such table: main.t1 +==== 29.2 + + ALTER TABLE t1 RENAME x TO z; +---- +stmt 0 err 1 -1 no such table: t1 +==== 29.3 + + ALTER TABLE t1 RENAME TO t2; +---- +stmt 0 err 1 -1 no such table: t1 +==== 29.4 + + CREATE TRIGGER tr2 AFTER DELETE ON t2 BEGIN + SELECT z, y FROM ( + SELECT t2.* FROM t2 + ); + END; +---- +stmt 0 err 1 -1 no such table: main.t2 +==== 29.5 + + DELETE FROM t2 +---- +stmt 0 err 1 -1 no such table: t2 +==== 29.6 + + ALTER TABLE t2 RENAME TO t3; +---- +stmt 0 err 1 -1 no such table: t2 +==== 29.7 + + SELECT sql FROM sqlite_schema WHERE type='trigger' +---- +stmt 0 ok +==== 30.0 + + CREATE TABLE t1(a, b); + CREATE VIEW v1 AS + SELECT ( VALUES(a), (b) ) FROM ( + SELECT a, b FROM t1 + ) + ; +---- +stmt 0 ok +stmt 25 ok +==== 30.1 + + SELECT * FROM v1 +---- +stmt 0 err 1 -1 no such table: v1 +==== 30.1.dup1 + + ALTER TABLE t1 RENAME TO t2; +---- +stmt 0 err 1 -1 no such table: t1 +==== 30.2 + + SELECT sql FROM sqlite_schema WHERE type='view' +---- +stmt 0 ok +==== 31.0 + + CREATE TABLE t1(ii INTEGER PRIMARY KEY, tt INTEGER, rr REAL); + WITH s(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<50000 + ) + INSERT INTO t1 SELECT NULL, i, 5.0 FROM s; +---- +stmt 0 ok +stmt 64 err 1 -1 no such table: t1 +==== 31.2 + + SELECT rr FROM t1 LIMIT 1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 32.1.0 + + CREATE TABLE t1( + a INT, + b INT, + -- comment with comma + c INT + ); +---- +stmt 0 ok +==== 32.1.1 + + ALTER TABLE t1 DROP COLUMN c; +---- +stmt 0 err 1 -1 no such table: t1 +==== 32.1.2 + + SELECT sql FROM sqlite_schema +---- +stmt 0 ok +==== 32.2.0 + + CREATE TABLE t1( + a INT, + b INT, + -- comment with, comma + c INT + ); +---- +stmt 0 ok +==== 32.2.1 + + ALTER TABLE t1 DROP COLUMN c; +---- +stmt 0 err 1 -1 no such table: t1 +==== 32.2.2 + + SELECT sql FROM sqlite_schema +---- +stmt 0 ok +==== 33.1 + + CREATE TABLE x1(a TEXT, b INTEGER, c CHECK(c!=0)); +---- +stmt 0 ok +==== 33.2 + + ALTER TABLE x1 DROP COLUMN b; + SELECT sql FROM sqlite_schema; +---- +stmt 0 err 1 -1 no such table: x1 +stmt 32 ok diff --git a/parser/testdata/between.metadata.json b/parser/testdata/between.metadata.json new file mode 100644 index 0000000..f50dadd --- /dev/null +++ b/parser/testdata/between.metadata.json @@ -0,0 +1,8 @@ +{ + "todo": { + "between-2.0": true, + "between-3.0": true, + "between-3.1": true, + "between-3.2": true + } +} diff --git a/parser/testdata/between.test b/parser/testdata/between.test new file mode 100644 index 0000000..e0ee93a --- /dev/null +++ b/parser/testdata/between.test @@ -0,0 +1,28 @@ +==== between-2.0 + + CREATE TABLE t1(x TEXT, y TEXT COLLATE nocase); + INSERT INTO t1 VALUES('0', 'abc'); +---- +stmt 0 ok +stmt 50 err 1 -1 no such table: t1 +==== between-3.0 + + CREATE TABLE t1(x, y); + CREATE INDEX i1 ON t1(x); + INSERT INTO t1 VALUES(4, 4); + 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 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 +==== between-3.2 + + SELECT * FROM t1 LEFT JOIN t2 ON (x BETWEEN 5 AND 7); +---- +stmt 0 err 1 -1 no such table: t1 diff --git a/parser/testdata/e_createtable.metadata.json b/parser/testdata/e_createtable.metadata.json new file mode 100644 index 0000000..1f13c60 --- /dev/null +++ b/parser/testdata/e_createtable.metadata.json @@ -0,0 +1,76 @@ +{ + "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_createtable.test b/parser/testdata/e_createtable.test new file mode 100644 index 0000000..3e172b5 --- /dev/null +++ b/parser/testdata/e_createtable.test @@ -0,0 +1,693 @@ +==== e_createtable-1.0 + + ATTACH 'test.db2' AS auxa; + ATTACH 'test.db3' AS auxb; +---- +stmt 0 ok +stmt 29 ok +==== e_createtable-1.7.0 + + CREATE TABLE t1(x, y); + CREATE INDEX i1 ON t1(x); + CREATE VIEW v1 AS SELECT * FROM t1; + + CREATE TABLE auxa.tbl1(x, y); + CREATE INDEX auxa.idx1 ON tbl1(x); + CREATE VIEW auxa.view1 AS SELECT * FROM tbl1; +---- +stmt 0 ok +stmt 25 err 1 -1 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 +==== e_createtable-1.8.0 + + CREATE TABLE t1(x, y); + CREATE INDEX i1 ON t1(x); + CREATE VIEW v1 AS SELECT * FROM t1; + CREATE TABLE auxa.tbl1(x, y); + CREATE INDEX auxa.idx1 ON tbl1(x); + CREATE VIEW auxa.view1 AS SELECT * FROM tbl1; +---- +stmt 0 ok +stmt 25 err 1 -1 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 +==== e_createtable-1.10.0 + + CREATE TABLE t1(x, y); + CREATE TABLE auxb.t2(x, y); + + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + SELECT 1; + END; + CREATE TRIGGER auxb.tr2 AFTER INSERT ON t2 BEGIN + SELECT 1; + 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 +==== e_createtable-1.11.0 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); + CREATE TABLE auxa.t3(a, b); + CREATE TABLE auxa.t4(a, b); +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 66 unknown database auxa +stmt 80 err 1 96 unknown database auxa +==== e_createtable-1.11.1.1 + + SELECT * FROM t1; + SELECT * FROM t2; + 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 +==== e_createtable-1.11.1.2 + DROP TABLE t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== e_createtable-1.11.1.3 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== e_createtable-1.11.1.4 + DROP TABLE t3 +---- +stmt 0 err 1 -1 no such table: t3 +==== e_createtable-1.11.1.5 + + SELECT * FROM t3 +---- +stmt 0 err 1 -1 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 +==== e_createtable-1.11.2.2 + DROP TABLE t2 +---- +stmt 0 err 1 -1 no such table: t2 +==== e_createtable-1.11.2.3 + DROP TABLE t4 +---- +stmt 0 err 1 -1 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 +==== e_createtable-2.0 + + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(d, e, f); + CREATE TABLE t3(g BIGINT, h VARCHAR(10)); + CREATE TABLE t4(i BLOB, j ANYOLDATA); + CREATE TABLE t5(k FLOAT, l INTEGER); + CREATE TABLE t6(m DEFAULT 10, n DEFAULT 5, PRIMARY KEY(m, n)); + CREATE TABLE t7(x INTEGER PRIMARY KEY); + CREATE TABLE t8(o COLLATE nocase DEFAULT 'abc'); + CREATE TABLE t9(p NOT NULL, q DOUBLE CHECK (q!=0), r STRING UNIQUE); +---- +stmt 0 ok +stmt 28 ok +stmt 56 ok +stmt 100 ok +stmt 140 ok +stmt 179 ok +stmt 244 ok +stmt 286 ok +stmt 337 ok +==== e_createtable-2.3.2.1 + + INSERT INTO x1 DEFAULT VALUES; + INSERT INTO x2 DEFAULT VALUES; + 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 +==== e_createtable-2.3.2.2 + SELECT * FROM x1 +---- +stmt 0 err 1 -1 no such table: x1 +==== e_createtable-2.3.2.3 + SELECT * FROM x2 +---- +stmt 0 err 1 -1 no such table: x2 +==== e_createtable-2.3.2.4 + SELECT * FROM x3 +---- +stmt 0 err 1 -1 no such table: x3 +==== e_createtable-2.3.2.5 + SELECT * FROM x4 +---- +stmt 0 err 1 -1 no such table: x4 +==== e_createtable-2.4.0 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES('i', 'one'); + INSERT INTO t1 VALUES('ii', 'two'); + 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 +==== e_createtable-3.1.0 + + CREATE TABLE t1(x VARCHAR(10), y INTEGER, z DOUBLE); + CREATE TABLE t2(a DATETIME, b STRING, c REAL); + CREATE TABLE t3(o, t); +---- +stmt 0 ok +stmt 55 ok +stmt 104 ok +==== e_createtable-3.1.1 + + 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 +==== 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 +==== 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 +==== e_createtable-3.3.1 + + CREATE TABLE t4( + a DEFAULT NULL, + b DEFAULT 'string constant', + c DEFAULT X'424C4F42', + d DEFAULT 1, + e DEFAULT -1, + f DEFAULT 3.14, + g DEFAULT -3.14, + h DEFAULT ( substr('abcd', 0, 2) || 'cd' ), + i DEFAULT CURRENT_TIME, + j DEFAULT CURRENT_DATE, + k DEFAULT CURRENT_TIMESTAMP + ); +---- +stmt 0 ok +==== e_createtable-3.6.1 + + CREATE TABLE t5( + a DEFAULT NULL, + b DEFAULT 'text value', + c DEFAULT X'424C4F42', + d DEFAULT -45678.6, + e DEFAULT 394507 + ); +---- +stmt 0 ok +==== e_createtable-3.6.2 + + 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 +==== e_createtable-3.7.1 + + CREATE TABLE t6(a DEFAULT ( nextint() ), b DEFAULT ( nextint() )); +---- +stmt 0 ok +==== e_createtable-3.7.2 + + 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 +==== 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 +==== 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 +==== e_createtable-3.8.1 + + CREATE TABLE t7( + a DEFAULT CURRENT_TIME, + b DEFAULT CURRENT_DATE, + c DEFAULT CURRENT_TIMESTAMP + ); +---- +stmt 0 ok +==== e_createtable-3.8.2 + + 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 +==== e_createtable-3-9.1 + + CREATE TABLE t8(a COLLATE nocase, b COLLATE rtrim, c COLLATE binary, d); + INSERT INTO t8 VALUES('abc', 'abc', 'abc', 'abc'); + INSERT INTO t8 VALUES('abc ', 'abc ', 'abc ', 'abc '); + INSERT INTO t8 VALUES('ABC ', 'ABC ', 'ABC ', 'ABC '); + 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 +==== 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 +==== e_createtable-3.11.5 + + INSERT INTO t12 VALUES(randomblob(30001),randomblob(30000),randomblob(30000)); +---- +stmt 0 err 1 -1 no such table: t12 +==== 4.1.3 + + CREATE TABLE t6(a, b); --ok +---- +stmt 0 ok +==== 4.1.4 + + CREATE TABLE t7(a, b) WITHOUT ROWID; --Error, no PRIMARY KEY +---- +stmt 0 err 1 -1 PRIMARY KEY missing on table t7 +==== 4.3.0 + + CREATE TABLE t1(x PRIMARY KEY, y); + INSERT INTO t1 VALUES(0, 'zero'); + INSERT INTO t1 VALUES(45.5, 'one'); + INSERT INTO t1 VALUES('brambles', 'two'); + INSERT INTO t1 VALUES(X'ABCDEF', 'three'); + + CREATE TABLE t2(x, y, PRIMARY KEY(x, y)); + INSERT INTO t2 VALUES(0, 'zero'); + INSERT INTO t2 VALUES(45.5, 'one'); + INSERT INTO t2 VALUES('brambles', 'two'); + 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 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 +==== 4.5.2 + + CREATE TABLE t3(s, u INTEGER PRIMARY KEY, v); + INSERT INTO t3 VALUES(1, NULL, 2); + INSERT INTO t3 VALUES('x', NULL, 'y'); + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 4.7.0 + + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(4.3, 5.5); + INSERT INTO t1 VALUES('reveal', 'variableness'); + INSERT INTO t1 VALUES(X'123456', X'654321'); + + INSERT INTO t4 VALUES('xyx', 1, 1); + 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 +==== 4.10.0 + + CREATE TABLE t1(a, b PRIMARY KEY); + CREATE TABLE t2(a, b, c, UNIQUE(b, c)); +---- +stmt 0 ok +stmt 37 ok +==== 4.11 + + CREATE TABLE x1(a TEXT, b INTEGER CHECK( b>0 )); + CREATE TABLE t1(a TEXT, b INTEGER, CHECK( b>0 )); + INSERT INTO x1 VALUES('x', 'xx'); + INSERT INTO x1 VALUES('y', 'yy'); + INSERT INTO t1 SELECT * FROM x1; + + CREATE TABLE x2(a CHECK( a||b ), b); + CREATE TABLE t2(a, b, CHECK( a||b )); + INSERT INTO x2 VALUES(1, 'xx'); + INSERT INTO x2 VALUES(1, 'yy'); + INSERT INTO t2 SELECT * FROM x2; +---- +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 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 +==== 4.14.0 + + INSERT INTO t1 VALUES('x', 'y'); + INSERT INTO t1 VALUES('z', NULL); + + INSERT INTO t2 VALUES('x', 'y'); + INSERT INTO t2 VALUES('z', NULL); + + 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 +==== 4.15.0 + + CREATE TABLE t1_ab(a PRIMARY KEY ON CONFLICT ABORT, b); + CREATE TABLE t1_ro(a PRIMARY KEY ON CONFLICT ROLLBACK, b); + CREATE TABLE t1_ig(a PRIMARY KEY ON CONFLICT IGNORE, b); + CREATE TABLE t1_fa(a PRIMARY KEY ON CONFLICT FAIL, b); + CREATE TABLE t1_re(a PRIMARY KEY ON CONFLICT REPLACE, b); + CREATE TABLE t1_xx(a PRIMARY KEY, b); + + INSERT INTO t1_ab VALUES(1, 'one'); + INSERT INTO t1_ab VALUES(2, 'two'); + INSERT INTO t1_ro SELECT * FROM t1_ab; + INSERT INTO t1_ig SELECT * FROM t1_ab; + INSERT INTO t1_fa SELECT * FROM t1_ab; + INSERT INTO t1_re SELECT * FROM t1_ab; + INSERT INTO t1_xx SELECT * FROM t1_ab; + + CREATE TABLE t2_ab(a, b NOT NULL ON CONFLICT ABORT); + CREATE TABLE t2_ro(a, b NOT NULL ON CONFLICT ROLLBACK); + CREATE TABLE t2_ig(a, b NOT NULL ON CONFLICT IGNORE); + CREATE TABLE t2_fa(a, b NOT NULL ON CONFLICT FAIL); + CREATE TABLE t2_re(a, b NOT NULL ON CONFLICT REPLACE); + CREATE TABLE t2_xx(a, b NOT NULL); + + INSERT INTO t2_ab VALUES(1, 'one'); + INSERT INTO t2_ab VALUES(2, 'two'); + INSERT INTO t2_ro SELECT * FROM t2_ab; + INSERT INTO t2_ig SELECT * FROM t2_ab; + INSERT INTO t2_fa SELECT * FROM t2_ab; + INSERT INTO t2_re SELECT * FROM t2_ab; + INSERT INTO t2_xx SELECT * FROM t2_ab; + + CREATE TABLE t3_ab(a, b, UNIQUE(a, b) ON CONFLICT ABORT); + CREATE TABLE t3_ro(a, b, UNIQUE(a, b) ON CONFLICT ROLLBACK); + CREATE TABLE t3_ig(a, b, UNIQUE(a, b) ON CONFLICT IGNORE); + CREATE TABLE t3_fa(a, b, UNIQUE(a, b) ON CONFLICT FAIL); + CREATE TABLE t3_re(a, b, UNIQUE(a, b) ON CONFLICT REPLACE); + CREATE TABLE t3_xx(a, b, UNIQUE(a, b)); + + INSERT INTO t3_ab VALUES(1, 'one'); + INSERT INTO t3_ab VALUES(2, 'two'); + INSERT INTO t3_ro SELECT * FROM t3_ab; + INSERT INTO t3_ig SELECT * FROM t3_ab; + INSERT INTO t3_fa SELECT * FROM t3_ab; + INSERT INTO t3_re SELECT * FROM t3_ab; + INSERT INTO t3_xx SELECT * FROM t3_ab; +---- +stmt 0 ok +stmt 58 ok +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 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 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 +==== 4.18.1 + + CREATE TABLE t4(a, b CHECK (b!=10)); + INSERT INTO t4 VALUES(1, 2); + 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 +==== 4.18.2 + BEGIN; INSERT INTO t4 VALUES(5, 6) +---- +stmt 0 ok +stmt 7 err 1 -1 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 +==== 4.18.5 + SELECT * FROM t4 +---- +stmt 0 err 1 -1 no such table: t4 +==== 4.19.0 + + CREATE TABLE t5(a NOT NULL ON CONFLICT IGNORE, b NOT NULL ON CONFLICT ABORT); +---- +stmt 0 ok +==== 4.19.1 + INSERT INTO t5 VALUES(NULL, 'not null') +---- +stmt 0 err 1 -1 no such table: t5 +==== 4.19.2 + SELECT * FROM t5 +---- +stmt 0 err 1 -1 no such table: t5 +==== 4.19.3 + INSERT INTO t5 VALUES('not null', NULL) +---- +stmt 0 err 1 -1 no such table: t5 +==== 4.19.4 + SELECT * FROM t5 +---- +stmt 0 err 1 -1 no such table: t5 +==== 5.1.0 + + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES('one', 'first'); + INSERT INTO t1 VALUES('two', 'second'); + 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 +==== 5.2.0 + + CREATE TABLE t2(oid, b); + CREATE TABLE t3(a, _rowid_); + CREATE TABLE t4(a, b, rowid); + + INSERT INTO t2 VALUES('one', 'two'); + INSERT INTO t2 VALUES('three', 'four'); + + INSERT INTO t3 VALUES('five', 'six'); + INSERT INTO t3 VALUES('seven', 'eight'); + + INSERT INTO t4 VALUES('nine', 'ten', 'eleven'); + INSERT INTO t4 VALUES('twelve', 'thirteen', 'fourteen'); +---- +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 +==== 5.4.1 + + CREATE TABLE t6(pk INT primary key); + CREATE TABLE t7(pk BIGINT primary key); + CREATE TABLE t8(pk SHORT INTEGER primary key); + CREATE TABLE t9(pk UNSIGNED INTEGER primary key); +---- +stmt 0 ok +stmt 39 ok +stmt 81 ok +stmt 130 ok +==== 5.4.3 + + INSERT INTO t6 VALUES('2.0'); + INSERT INTO t7 VALUES('2.0'); + INSERT INTO t8 VALUES('2.0'); + INSERT INTO t9 VALUES('2.0'); + SELECT typeof(pk), pk FROM t6; + SELECT typeof(pk), pk FROM t7; + 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 +==== 5.4.4.1 + + INSERT INTO t6 VALUES(2) +---- +stmt 0 err 1 -1 no such table: t6 +==== 5.4.4.2 + + INSERT INTO t7 VALUES(2) +---- +stmt 0 err 1 -1 no such table: t7 +==== 5.4.4.3 + + INSERT INTO t8 VALUES(2) +---- +stmt 0 err 1 -1 no such table: t8 +==== 5.4.4.4 + + INSERT INTO t9 VALUES(2) +---- +stmt 0 err 1 -1 no such table: t9 +==== 5.7.0 + + CREATE TABLE t10(a, b); + INSERT INTO t10 VALUES('ten', 10); + + CREATE TABLE t11(a, b INTEGER PRIMARY KEY); + INSERT INTO t11 VALUES('ten', 10); +---- +stmt 0 ok +stmt 26 err 1 -1 no such table: t10 +stmt 63 ok +stmt 110 err 1 -1 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 +==== 5.10.0 + DELETE FROM t12 +---- +stmt 0 err 1 -1 no such table: t12 +==== 5.11.0 + DELETE FROM t12 +---- +stmt 0 err 1 -1 no such table: t12 diff --git a/parser/testdata/e_delete.metadata.json b/parser/testdata/e_delete.metadata.json new file mode 100644 index 0000000..4a29023 --- /dev/null +++ b/parser/testdata/e_delete.metadata.json @@ -0,0 +1,12 @@ +{ + "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_delete.test b/parser/testdata/e_delete.test new file mode 100644 index 0000000..78d1eb1 --- /dev/null +++ b/parser/testdata/e_delete.test @@ -0,0 +1,119 @@ +==== e_delete-0.0 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a); +---- +stmt 0 ok +stmt 25 err 1 -1 no such table: main.t1 +==== e_delete-2.0 + + ATTACH 'test.db2' AS aux; + ATTACH 'test.db3' AS aux2; + + CREATE TABLE temp.t7(a, b); INSERT INTO temp.t7 VALUES(1, 2); + CREATE TABLE main.t7(a, b); INSERT INTO main.t7 VALUES(3, 4); + CREATE TABLE aux.t7(a, b); INSERT INTO aux.t7 VALUES(5, 6); + CREATE TABLE aux2.t7(a, b); INSERT INTO aux2.t7 VALUES(7, 8); + + CREATE TABLE main.t8(a, b); INSERT INTO main.t8 VALUES(1, 2); + CREATE TABLE aux.t8(a, b); INSERT INTO aux.t8 VALUES(3, 4); + CREATE TABLE aux2.t8(a, b); INSERT INTO aux2.t8 VALUES(5, 6); + + CREATE TABLE aux.t9(a, b); INSERT INTO aux.t9 VALUES(1, 2); + CREATE TABLE aux2.t9(a, b); INSERT INTO aux2.t9 VALUES(3, 4); + + CREATE TABLE aux2.t10(a, b); INSERT INTO aux2.t10 VALUES(1, 2); +---- +stmt 0 ok +stmt 28 ok +stmt 57 ok +stmt 88 err 1 -1 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 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 +==== 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 +==== e_delete-2.3.0 + + DROP TRIGGER aux.tr1; + DROP TRIGGER main.tr1; + DELETE FROM main.t8 WHERE oid>1; + DELETE FROM aux.t8 WHERE oid>1; + 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 +==== e_delete-2.3.1 + + SELECT count(*) FROM temp.t7 UNION ALL SELECT count(*) FROM main.t7 UNION ALL + SELECT count(*) FROM aux.t7 UNION ALL SELECT count(*) FROM aux2.t7; + + SELECT count(*) FROM main.t8 UNION ALL SELECT count(*) FROM aux.t8 + UNION ALL SELECT count(*) FROM aux2.t8; + + SELECT count(*) FROM aux.t9 UNION ALL SELECT count(*) FROM aux2.t9; + + 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 +==== e_delete-2.3.2 + + CREATE TRIGGER temp.tr1 AFTER INSERT ON t7 BEGIN + DELETE FROM t7; + DELETE FROM t8; + DELETE FROM t9; + DELETE FROM 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 +==== e_delete-2.3.3 + + SELECT count(*) FROM temp.t7 UNION ALL SELECT count(*) FROM main.t7 UNION ALL + SELECT count(*) FROM aux.t7 UNION ALL SELECT count(*) FROM aux2.t7; + + SELECT count(*) FROM main.t8 UNION ALL SELECT count(*) FROM aux.t8 + UNION ALL SELECT count(*) FROM aux2.t8; + + SELECT count(*) FROM aux.t9 UNION ALL SELECT count(*) FROM aux2.t9; + + 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 +==== e_delete-2.4.0 + + CREATE INDEX i8 ON t8(a, b); +---- +stmt 0 err 1 -1 no such table: main.t8 diff --git a/parser/testdata/e_expr.metadata.json b/parser/testdata/e_expr.metadata.json new file mode 100644 index 0000000..e12feab --- /dev/null +++ b/parser/testdata/e_expr.metadata.json @@ -0,0 +1,244 @@ +{ + "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_expr.test b/parser/testdata/e_expr.test new file mode 100644 index 0000000..02d31a2 --- /dev/null +++ b/parser/testdata/e_expr.test @@ -0,0 +1,1129 @@ +==== e_expr-1.2.1 + + SELECT 0 < 2 LIKE 1, (0 < 2) LIKE 1, 0 < (2 LIKE 1) +---- +stmt 0 ok +==== e_expr-1.2.2 + + SELECT 0 LIKE 0 < 2, (0 LIKE 0) < 2, 0 LIKE (0 < 2) +---- +stmt 0 ok +==== e_expr-1.2.3 + + SELECT 2 LIKE 2 == 1, (2 LIKE 2) == 1, 2 LIKE (2 == 1) +---- +stmt 0 ok +==== e_expr-1.2.4 + + SELECT 2 == 2 LIKE 1, (2 == 2) LIKE 1, 2 == (2 LIKE 1) +---- +stmt 0 ok +==== e_expr-1.2.5 + + SELECT 0 < 2 == 1, (0 < 2) == 1, 0 < (2 == 1) +---- +stmt 0 ok +==== e_expr-1.6 + + SELECT 0 == 0 < 2, (0 == 0) < 2, 0 == (0 < 2) +---- +stmt 0 ok +==== e_expr-2.1 + SELECT - 10 +---- +stmt 0 ok +==== e_expr-2.2 + SELECT + 10 +---- +stmt 0 ok +==== e_expr-2.3 + SELECT ~ 10 +---- +stmt 0 ok +==== e_expr-2.4 + SELECT NOT 10 +---- +stmt 0 ok +==== e_expr-6.1 +SELECT 72%5 +---- +stmt 0 ok +==== e_expr-6.2 +SELECT 72%-5 +---- +stmt 0 ok +==== e_expr-6.3 +SELECT -72%-5 +---- +stmt 0 ok +==== e_expr-6.4 +SELECT -72%5 +---- +stmt 0 ok +==== e_expr-6.5 +SELECT 72.35%5 +---- +stmt 0 ok +==== e_expr-8.1.1 + SELECT NULL IS NULL +---- +stmt 0 ok +==== e_expr-8.1.2 + SELECT 'ab' IS NULL +---- +stmt 0 ok +==== e_expr-8.1.3 + SELECT NULL IS 'ab' +---- +stmt 0 ok +==== e_expr-8.1.4 + SELECT 'ab' IS 'ab' +---- +stmt 0 ok +==== e_expr-8.1.5 + SELECT NULL == NULL +---- +stmt 0 ok +==== e_expr-8.1.6 + SELECT 'ab' == NULL +---- +stmt 0 ok +==== e_expr-8.1.7 + SELECT NULL == 'ab' +---- +stmt 0 ok +==== e_expr-8.1.8 + SELECT 'ab' == 'ab' +---- +stmt 0 ok +==== e_expr-8.1.9 + SELECT NULL IS NOT NULL +---- +stmt 0 ok +==== e_expr-8.1.10 + SELECT 'ab' IS NOT NULL +---- +stmt 0 ok +==== e_expr-8.1.11 + SELECT NULL IS NOT 'ab' +---- +stmt 0 ok +==== e_expr-8.1.12 + SELECT 'ab' IS NOT 'ab' +---- +stmt 0 ok +==== e_expr-8.1.13 + SELECT NULL != NULL +---- +stmt 0 ok +==== e_expr-8.1.14 + SELECT 'ab' != NULL +---- +stmt 0 ok +==== e_expr-8.1.15 + SELECT NULL != 'ab' +---- +stmt 0 ok +==== e_expr-8.1.16 + SELECT 'ab' != 'ab' +---- +stmt 0 ok +==== e_expr-9.1 + SELECT 'abcd' < 'bbbb' COLLATE reverse +---- +stmt 0 err 1 -1 no such collation sequence: reverse +==== e_expr-9.2 + SELECT ('abcd' < 'bbbb') COLLATE reverse +---- +stmt 0 ok +==== e_expr-9.3 + SELECT 'abcd' <= 'bbbb' COLLATE reverse +---- +stmt 0 err 1 -1 no such collation sequence: reverse +==== e_expr-9.4 + SELECT ('abcd' <= 'bbbb') COLLATE reverse +---- +stmt 0 ok +==== e_expr-9.5 + SELECT 'abcd' > 'bbbb' COLLATE reverse +---- +stmt 0 err 1 -1 no such collation sequence: reverse +==== e_expr-9.6 + SELECT ('abcd' > 'bbbb') COLLATE reverse +---- +stmt 0 ok +==== e_expr-9.7 + SELECT 'abcd' >= 'bbbb' COLLATE reverse +---- +stmt 0 err 1 -1 no such collation sequence: reverse +==== e_expr-9.8 + SELECT ('abcd' >= 'bbbb') COLLATE reverse +---- +stmt 0 ok +==== e_expr-9.10 + SELECT 'abcd' = 'ABCD' COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.11 + SELECT ('abcd' = 'ABCD') COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.12 + SELECT 'abcd' == 'ABCD' COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.13 + SELECT ('abcd' == 'ABCD') COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.14 + SELECT 'abcd' IS 'ABCD' COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.15 + SELECT ('abcd' IS 'ABCD') COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.16 + SELECT 'abcd' != 'ABCD' COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.17 + SELECT ('abcd' != 'ABCD') COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.18 + SELECT 'abcd' <> 'ABCD' COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.19 + SELECT ('abcd' <> 'ABCD') COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.20 + SELECT 'abcd' IS NOT 'ABCD' COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.21 + SELECT ('abcd' IS NOT 'ABCD') COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.22 + + SELECT 'bbb' BETWEEN 'AAA' AND 'CCC' COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.23 + + SELECT ('bbb' BETWEEN 'AAA' AND 'CCC') COLLATE nocase +---- +stmt 0 ok +==== e_expr-9.24 + + CREATE TABLE t24(a COLLATE NOCASE, b); + INSERT INTO t24 VALUES('aaa', 1); + INSERT INTO t24 VALUES('bbb', 2); + 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 +==== e_expr-9.25 + SELECT 'BBB' = a FROM t24 +---- +stmt 0 err 1 -1 no such table: t24 +==== e_expr-9.25.dup1 + SELECT a = 'BBB' FROM t24 +---- +stmt 0 err 1 -1 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 +==== e_expr-9.25.dup3 + SELECT a COLLATE binary = 'BBB' FROM t24 +---- +stmt 0 err 1 -1 no such table: t24 +==== e_expr-10.1.1 + SELECT typeof(5) +---- +stmt 0 ok +==== e_expr-10.1.2 + SELECT typeof(5.1) +---- +stmt 0 ok +==== e_expr-10.1.3 + SELECT typeof('5.1') +---- +stmt 0 ok +==== e_expr-10.1.4 + SELECT typeof(X'ABCD') +---- +stmt 0 ok +==== e_expr-10.1.5 + SELECT typeof(NULL) +---- +stmt 0 ok +==== e_expr-10.2.1 + SELECT typeof(3.4e-02) +---- +stmt 0 ok +==== e_expr-10.2.2 + SELECT typeof(3e+5) +---- +stmt 0 ok +==== e_expr-10.2.3 + SELECT 3.4e-02 +---- +stmt 0 ok +==== e_expr-10.2.4 + SELECT 3e+4 +---- +stmt 0 ok +==== e_expr-10.3.1 + SELECT 'is not' +---- +stmt 0 ok +==== e_expr-10.3.2 + SELECT typeof('is not') +---- +stmt 0 ok +==== e_expr-10.3.3 + SELECT 'isn''t' +---- +stmt 0 ok +==== e_expr-10.3.4 + SELECT typeof('isn''t') +---- +stmt 0 ok +==== e_expr-10.4.1 + SELECT typeof(X'0123456789ABCDEF') +---- +stmt 0 ok +==== e_expr-10.4.2 + SELECT typeof(x'0123456789ABCDEF') +---- +stmt 0 ok +==== e_expr-10.4.3 + SELECT typeof(X'0123456789abcdef') +---- +stmt 0 ok +==== e_expr-10.4.4 + SELECT typeof(x'0123456789abcdef') +---- +stmt 0 ok +==== e_expr-10.4.5 + SELECT typeof(X'53514C697465') +---- +stmt 0 ok +==== e_expr-10.5.1 + SELECT NULL +---- +stmt 0 ok +==== e_expr-10.5.2 + SELECT typeof(NULL) +---- +stmt 0 ok +==== e_expr-12.1.1 + SELECT 0, +0, -0 +---- +stmt 0 ok +==== e_expr-12.1.2 + SELECT 1, +1, -1 +---- +stmt 0 ok +==== e_expr-12.1.3 + SELECT 2, +2, -2 +---- +stmt 0 ok +==== e_expr-12.1.4 + + SELECT 1.4, +1.4, -1.4 +---- +stmt 0 ok +==== e_expr-12.1.5 + + SELECT 1.5e+5, +1.5e+5, -1.5e+5 +---- +stmt 0 ok +==== e_expr-12.1.6 + + SELECT 0.0001, +0.0001, -0.0001 +---- +stmt 0 ok +==== e_expr-12.2.1 +SELECT 123 +---- +stmt 0 ok +==== e_expr-12.2.2 +SELECT 123.4e05 +---- +stmt 0 ok +==== e_expr-12.2.3 +SELECT 'abcde' +---- +stmt 0 ok +==== e_expr-12.2.4 +SELECT X'414243' +---- +stmt 0 ok +==== e_expr-12.2.5 +SELECT NULL +---- +stmt 0 ok +==== e_expr-12.2.6 +SELECT CURRENT_TIME +---- +stmt 0 ok +==== e_expr-12.2.7 +SELECT CURRENT_DATE +---- +stmt 0 ok +==== e_expr-12.2.8 +SELECT CURRENT_TIMESTAMP +---- +stmt 0 ok +==== e_expr-13.2.1 + SELECT 1 == 10 BETWEEN 0 AND 2 +---- +stmt 0 ok +==== e_expr-13.2.2 + SELECT (1 == 10) BETWEEN 0 AND 2 +---- +stmt 0 ok +==== e_expr-13.2.3 + SELECT 1 == (10 BETWEEN 0 AND 2) +---- +stmt 0 ok +==== e_expr-13.2.4 + SELECT 6 BETWEEN 4 AND 8 == 1 +---- +stmt 0 ok +==== e_expr-13.2.5 + SELECT (6 BETWEEN 4 AND 8) == 1 +---- +stmt 0 ok +==== e_expr-13.2.6 + SELECT 6 BETWEEN 4 AND (8 == 1) +---- +stmt 0 ok +==== e_expr-13.2.7 + SELECT 5 BETWEEN 0 AND 0 != 1 +---- +stmt 0 ok +==== e_expr-13.2.8 + SELECT (5 BETWEEN 0 AND 0) != 1 +---- +stmt 0 ok +==== e_expr-13.2.9 + SELECT 5 BETWEEN 0 AND (0 != 1) +---- +stmt 0 ok +==== e_expr-13.2.10 + SELECT 1 != 0 BETWEEN 0 AND 2 +---- +stmt 0 ok +==== e_expr-13.2.11 + SELECT (1 != 0) BETWEEN 0 AND 2 +---- +stmt 0 ok +==== e_expr-13.2.12 + SELECT 1 != (0 BETWEEN 0 AND 2) +---- +stmt 0 ok +==== e_expr-13.2.13 + SELECT 1 LIKE 10 BETWEEN 0 AND 2 +---- +stmt 0 ok +==== e_expr-13.2.14 + SELECT (1 LIKE 10) BETWEEN 0 AND 2 +---- +stmt 0 ok +==== e_expr-13.2.15 + SELECT 1 LIKE (10 BETWEEN 0 AND 2) +---- +stmt 0 ok +==== e_expr-13.2.16 + SELECT 6 BETWEEN 4 AND 8 LIKE 1 +---- +stmt 0 ok +==== e_expr-13.2.17 + SELECT (6 BETWEEN 4 AND 8) LIKE 1 +---- +stmt 0 ok +==== e_expr-13.2.18 + SELECT 6 BETWEEN 4 AND (8 LIKE 1) +---- +stmt 0 ok +==== e_expr-13.2.19 + SELECT 0 AND 0 BETWEEN 0 AND 1 +---- +stmt 0 ok +==== e_expr-13.2.20 + SELECT 0 AND (0 BETWEEN 0 AND 1) +---- +stmt 0 ok +==== e_expr-13.2.21 + SELECT (0 AND 0) BETWEEN 0 AND 1 +---- +stmt 0 ok +==== e_expr-13.2.22 + SELECT 0 BETWEEN -1 AND 1 AND 0 +---- +stmt 0 ok +==== e_expr-13.2.23 + SELECT (0 BETWEEN -1 AND 1) AND 0 +---- +stmt 0 ok +==== e_expr-13.2.24 + SELECT 0 BETWEEN -1 AND (1 AND 0) +---- +stmt 0 ok +==== e_expr-13.2.25 + SELECT 2 < 3 BETWEEN 0 AND 1 +---- +stmt 0 ok +==== e_expr-13.2.26 + SELECT (2 < 3) BETWEEN 0 AND 1 +---- +stmt 0 ok +==== e_expr-13.2.27 + SELECT 2 < (3 BETWEEN 0 AND 1) +---- +stmt 0 ok +==== e_expr-13.2.28 + SELECT 2 BETWEEN 1 AND 2 < 3 +---- +stmt 0 ok +==== e_expr-13.2.29 + SELECT 2 BETWEEN 1 AND (2 < 3) +---- +stmt 0 ok +==== e_expr-13.2.30 + SELECT (2 BETWEEN 1 AND 2) < 3 +---- +stmt 0 ok +==== e_expr-14.1.1 + SELECT 'abc%' LIKE 'abcde' +---- +stmt 0 ok +==== e_expr-14.1.2 + SELECT 'abcde' LIKE 'abc%' +---- +stmt 0 ok +==== e_expr-14.2.1 + SELECT 'abde' LIKE 'ab%de' +---- +stmt 0 ok +==== e_expr-14.2.2 + SELECT 'abXde' LIKE 'ab%de' +---- +stmt 0 ok +==== e_expr-14.2.3 + SELECT 'abABCde' LIKE 'ab%de' +---- +stmt 0 ok +==== e_expr-14.3.1 + SELECT 'abde' LIKE 'ab_de' +---- +stmt 0 ok +==== e_expr-14.3.2 + SELECT 'abXde' LIKE 'ab_de' +---- +stmt 0 ok +==== e_expr-14.3.3 + SELECT 'abABCde' LIKE 'ab_de' +---- +stmt 0 ok +==== e_expr-14.4.1 + SELECT 'abc' LIKE 'aBc' +---- +stmt 0 ok +==== e_expr-14.4.2 + SELECT 'aBc' LIKE 'aBc' +---- +stmt 0 ok +==== e_expr-14.4.3 + SELECT 'ac' LIKE 'aBc' +---- +stmt 0 ok +==== e_expr-14.5.1 + SELECT 'A' LIKE 'a' +---- +stmt 0 ok +==== e_expr-14.6.1 + + SELECT 'A' LIKE 'a' ESCAPE '12' +---- +stmt 0 ok +==== e_expr-14.6.2 + + SELECT 'A' LIKE 'a' ESCAPE '' +---- +stmt 0 ok +==== e_expr-14.6.3 + SELECT 'A' LIKE 'a' ESCAPE 'x' +---- +stmt 0 ok +==== e_expr-14.7.1 + SELECT 'abc%' LIKE 'abcX%' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.2 + SELECT 'abc5' LIKE 'abcX%' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.3 + SELECT 'abc' LIKE 'abcX%' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.4 + SELECT 'abcX%' LIKE 'abcX%' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.5 + SELECT 'abc%%' LIKE 'abcX%' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.6 + SELECT 'abc_' LIKE 'abcX_' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.7 + SELECT 'abc5' LIKE 'abcX_' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.8 + SELECT 'abc' LIKE 'abcX_' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.9 + SELECT 'abcX_' LIKE 'abcX_' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.10 + SELECT 'abc__' LIKE 'abcX_' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.11 + SELECT 'abcX' LIKE 'abcXX' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.12 + SELECT 'abc5' LIKE 'abcXX' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.13 + SELECT 'abc' LIKE 'abcXX' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-14.7.14 + SELECT 'abcXX' LIKE 'abcXX' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-15.1.1 + SELECT 'abc' LIKE 'def' +---- +stmt 0 ok +==== e_expr-15.1.3 + SELECT 'abc' LIKE 'def' ESCAPE 'X' +---- +stmt 0 ok +==== e_expr-16.1.1 + SELECT 'abcxyz' LIKE 'ABC%' +---- +stmt 0 ok +==== e_expr-16.1.2 + PRAGMA case_sensitive_like = 1 +---- +stmt 0 ok +==== e_expr-16.1.3 + SELECT 'abcxyz' LIKE 'ABC%' +---- +stmt 0 ok +==== e_expr-16.1.4 + SELECT 'ABCxyz' LIKE 'ABC%' +---- +stmt 0 ok +==== e_expr-16.1.5 + PRAGMA case_sensitive_like = 0 +---- +stmt 0 ok +==== e_expr-16.1.6 + SELECT 'abcxyz' LIKE 'ABC%' +---- +stmt 0 ok +==== e_expr-16.1.7 + SELECT 'ABCxyz' LIKE 'ABC%' +---- +stmt 0 ok +==== e_expr-17.1.1 + SELECT 'abcxyz' GLOB 'abc%' +---- +stmt 0 ok +==== e_expr-17.1.2 + SELECT 'abcxyz' GLOB 'abc*' +---- +stmt 0 ok +==== e_expr-17.1.3 + SELECT 'abcxyz' GLOB 'abc___' +---- +stmt 0 ok +==== e_expr-17.1.4 + SELECT 'abcxyz' GLOB 'abc???' +---- +stmt 0 ok +==== e_expr-17.1.5 + SELECT 'abcxyz' GLOB 'abc*' +---- +stmt 0 ok +==== e_expr-17.1.6 + SELECT 'ABCxyz' GLOB 'abc*' +---- +stmt 0 ok +==== e_expr-17.1.7 + SELECT 'abcxyz' GLOB 'ABC*' +---- +stmt 0 ok +==== e_expr-17.2.1 + SELECT 'abcxyz' NOT GLOB 'ABC*' +---- +stmt 0 ok +==== e_expr-17.2.2 + SELECT 'abcxyz' NOT GLOB 'abc*' +---- +stmt 0 ok +==== e_expr-17.2.3 + SELECT 'abcxyz' NOT LIKE 'ABC%' +---- +stmt 0 ok +==== e_expr-17.2.4 + SELECT 'abcxyz' NOT LIKE 'abc%' +---- +stmt 0 ok +==== e_expr-17.2.5 + SELECT 'abdxyz' NOT LIKE 'abc%' +---- +stmt 0 ok +==== e_expr-17.2.6 + SELECT 'abcxyz' NOT GLOB NULL +---- +stmt 0 ok +==== e_expr-17.2.7 + SELECT 'abcxyz' NOT LIKE NULL +---- +stmt 0 ok +==== e_expr-17.2.8 + SELECT NULL NOT GLOB 'abc*' +---- +stmt 0 ok +==== e_expr-17.2.9 + SELECT NULL NOT LIKE 'ABC%' +---- +stmt 0 ok +==== e_expr-17.3.1 + SELECT 'abc' GLOB 'def' +---- +stmt 0 ok +==== e_expr-17.3.3 + SELECT 'X' NOT GLOB 'Y' +---- +stmt 0 ok +==== e_expr-18.1.1 + + SELECT regexp('abc', 'def') +---- +stmt 0 err 1 13 no such function: regexp +==== e_expr-18.1.2 + + SELECT 'abc' REGEXP 'def' +---- +stmt 0 err 1 19 no such function: REGEXP +==== e_expr-18.2.1 + SELECT 'abc' REGEXP 'def' +---- +stmt 0 err 1 14 no such function: REGEXP +==== e_expr-18.2.3 + SELECT 'X' NOT REGEXP 'Y' +---- +stmt 0 err 1 16 no such function: REGEXP +==== e_expr-19.1.1 + + SELECT 'abc' MATCH 'def' +---- +stmt 0 ok +==== e_expr-19.1.2 + + SELECT match('abc', 'def') +---- +stmt 0 ok +==== e_expr-19.2.1 + SELECT 'abc' MATCH 'def' +---- +stmt 0 ok +==== e_expr-19.2.3 + SELECT 'X' NOT MATCH 'Y' +---- +stmt 0 ok +==== e_expr-20.1 + + SELECT CASE WHEN 1 THEN 'true' WHEN 0 THEN 'false' ELSE 'else' END; +---- +stmt 0 ok +==== e_expr-20.2 + + SELECT CASE 0 WHEN 1 THEN 'true' WHEN 0 THEN 'false' ELSE 'else' END; +---- +stmt 0 ok +==== e_expr-21.1.1 + + SELECT CASE WHEN var('a') THEN 'A' + WHEN var('b') THEN 'B' + WHEN var('c') THEN 'C' END +---- +stmt 0 err 1 20 no such function: var +==== e_expr-21.1.3 + + SELECT CASE WHEN var('c') THEN 'C' + WHEN var('b') THEN 'B' + WHEN var('a') THEN 'A' + ELSE 'no result' + END +---- +stmt 0 err 1 20 no such function: var +==== e_expr-21.2.1 + + SELECT CASE WHEN var('a') THEN 'A' + WHEN var('b') THEN 'B' + WHEN var('c') THEN 'C' + ELSE 'no result' + END +---- +stmt 0 err 1 20 no such function: var +==== e_expr-21.2.2 + + SELECT CASE WHEN var('a') THEN 'A' + WHEN var('b') THEN 'B' + WHEN var('c') THEN 'C' + ELSE 'no result' + END +---- +stmt 0 err 1 20 no such function: var +==== e_expr-21.2.3 + + SELECT CASE WHEN var('a') THEN 'A' + WHEN var('b') THEN 'B' + WHEN var('c') THEN 'C' + ELSE 'no result' + END +---- +stmt 0 err 1 20 no such function: var +==== e_expr-21.3.1 + + SELECT CASE WHEN var('a') THEN 'A' + WHEN var('b') THEN 'B' + WHEN var('c') THEN 'C' + ELSE 'no result' + END +---- +stmt 0 err 1 20 no such function: var +==== e_expr-21.3.2 + + SELECT CASE WHEN var('a') THEN 'A' + WHEN var('b') THEN 'B' + WHEN var('c') THEN 'C' + END +---- +stmt 0 err 1 20 no such function: var +==== e_expr-21.4.1a + + SELECT CASE WHEN NULL THEN 'A' WHEN 1 THEN 'B' END, iif(NULL,8,99); +---- +stmt 0 ok +==== e_expr-21.4.1b + + SELECT CASE WHEN NULL THEN 'A' WHEN 1 THEN 'B' END, if(NULL,8,99); +---- +stmt 0 ok +==== e_expr-21.4.2a + + SELECT CASE WHEN 0 THEN 'A' WHEN NULL THEN 'B' ELSE 'C' END, iif(0,8,99); +---- +stmt 0 ok +==== e_expr-21.4.2b + + SELECT CASE WHEN 0 THEN 'A' WHEN NULL THEN 'B' ELSE 'C' END, if(0,8,99); +---- +stmt 0 ok +==== e_expr-22.1.1 + + 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 +==== e_expr-22.2.1 + + SELECT CASE 23 WHEN 1 THEN 'A' WHEN 23 THEN 'B' WHEN 23 THEN 'C' END +---- +stmt 0 ok +==== e_expr-22.2.2 + + SELECT CASE 1 WHEN 1 THEN 'A' WHEN 23 THEN 'B' WHEN 23 THEN 'C' END +---- +stmt 0 ok +==== e_expr-22.3.1 + + SELECT CASE 24 WHEN 1 THEN 'A' WHEN 23 THEN 'B' WHEN 23 THEN 'C' ELSE 'D' END +---- +stmt 0 ok +==== e_expr-22.4.1 + + SELECT CASE 24 WHEN 1 THEN 'A' WHEN 23 THEN 'B' WHEN 23 THEN 'C' END +---- +stmt 0 ok +==== e_expr-22.4.2 + + SELECT CASE 24 WHEN 1 THEN 'A' WHEN 23 THEN 'B' WHEN 23 THEN 'C' END +---- +stmt 0 ok +==== e_expr-23.1.1 + + CREATE TABLE t1( + a TEXT COLLATE NOCASE, + b COLLATE REVERSE, + c INTEGER, + d BLOB + ); + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== e_expr-23.1.6 + + SELECT CASE 55 WHEN '55' THEN 'A' ELSE 'B' END +---- +stmt 0 ok +==== e_expr-23.1.7 + + SELECT CASE c WHEN '55' THEN 'A' ELSE 'B' END FROM t1 +---- +stmt 0 err 1 -1 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 +==== e_expr-23.1.9 + + SELECT CASE NULL WHEN NULL THEN 'A' ELSE 'B' END +---- +stmt 0 ok +==== e_expr-24.1.1 + + SELECT CASE NULL WHEN 'abc' THEN 'A' WHEN 'def' THEN 'B' END; +---- +stmt 0 ok +==== e_expr-24.1.2 + + SELECT CASE NULL WHEN 'abc' THEN 'A' WHEN 'def' THEN 'B' ELSE 'C' END; +---- +stmt 0 ok +==== e_expr-25.1.1 + + SELECT CASE WHEN var('a') THEN 'A' + WHEN var('b') THEN 'B' + WHEN var('c') THEN 'C' + END +---- +stmt 0 err 1 20 no such function: var +==== e_expr-25.1.3 + + SELECT CASE '0' WHEN var('a') THEN 'A' + WHEN var('b') THEN 'B' + WHEN var('c') THEN 'C' + END +---- +stmt 0 err 1 24 no such function: var +==== e_expr-26.1.1 + + CREATE TABLE t2(x, w1, r1, w2, r2, r3); + INSERT INTO t2 VALUES(1, 1, 'R1', 2, 'R2', 'R3'); + INSERT INTO t2 VALUES(2, 1, 'R1', 2, 'R2', 'R3'); + 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 +==== 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 +==== 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 +==== 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 +==== e_expr-26.1.6 + + SELECT CASE + WHEN ceval(x)=w1 THEN r1 + WHEN ceval(x)=w2 THEN r2 + ELSE r3 END + FROM t2 +---- +stmt 0 err 1 -1 no such table: t2 +==== e_expr-27.1.1 + + CREATE TABLE t3(a TEXT, b REAL, c INTEGER); + INSERT INTO t3 VALUES(X'555655', '1.23abc', 4.5); + 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 +==== e_expr-27.1.2 + + SELECT + typeof(CAST(X'555655' as TEXT)), CAST(X'555655' as TEXT), + typeof(CAST('1.23abc' as REAL)), CAST('1.23abc' as REAL), + typeof(CAST(4.5 as INTEGER)), CAST(4.5 as INTEGER) +---- +stmt 0 ok +==== e_expr-32.2.8 + + WITH t1(x) AS (VALUES + ('9000000000000000001'), + ('9000000000000000001x'), + ('9000000000000000001 '), + (' 9000000000000000001 '), + (' 9000000000000000001'), + (' 9000000000000000001.'), + ('9223372036854775807'), + ('9223372036854775807 '), + (' 9223372036854775807 '), + ('9223372036854775808'), + (' 9223372036854775808 '), + ('9223372036854775807.0'), + ('9223372036854775807e+0'), + ('-5.0'), + ('-5e+0')) + SELECT typeof(CAST(x AS NUMERIC)), CAST(x AS NUMERIC)||'' FROM t1; +---- +stmt 0 ok +==== e_expr-34.1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(NULL, 2); + INSERT INTO t1 VALUES(1, NULL); + 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 +==== e_expr-35.0 + + CREATE TABLE t2(a, b); + INSERT INTO t2 VALUES('one', 'two'); + INSERT INTO t2 VALUES('three', NULL); + 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 +==== e_expr-36.3.1 + + CREATE TABLE t4(x, y); + INSERT INTO t4 VALUES(1, 'one'); + INSERT INTO t4 VALUES(2, 'two'); + 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 +==== e_expr-37.1 + + SELECT CASE WHEN NULL THEN 'true' ELSE 'false' END, iif(NULL,'true','false'); +---- +stmt 0 ok +==== e_expr-37.2 + + SELECT CASE WHEN 0.0 THEN 'true' ELSE 'false' END, iif(0.0,'true','false'); +---- +stmt 0 ok +==== e_expr-37.3 + + SELECT CASE WHEN 0 THEN 'true' ELSE 'false' END, iif(0,'true','false'); +---- +stmt 0 ok +==== e_expr-37.4 + + SELECT CASE WHEN 'engligh' THEN 'true' ELSE 'false' END, iif('engligh','true','false'); +---- +stmt 0 ok +==== e_expr-37.5 + + SELECT CASE WHEN '0' THEN 'true' ELSE 'false' END, iif('0','true','false'); +---- +stmt 0 ok +==== e_expr-37.6a + + SELECT CASE WHEN 1 THEN 'true' ELSE 'false' END, iif(1,'true','false'); +---- +stmt 0 ok +==== e_expr-37.6b + + SELECT CASE WHEN 1 THEN 'true' ELSE 'false' END, if(1,'true'); +---- +stmt 0 ok +==== e_expr-37.7 + + SELECT CASE WHEN 1.0 THEN 'true' ELSE 'false' END, iif(1.0,'true','false'); +---- +stmt 0 ok +==== e_expr-37.8 + + SELECT CASE WHEN 0.1 THEN 'true' ELSE 'false' END, iif(0.1,'true','false'); +---- +stmt 0 ok +==== e_expr-37.9 + + SELECT CASE WHEN -0.1 THEN 'true' ELSE 'false' END, iif(-0.1,'true','false'); +---- +stmt 0 ok +==== e_expr-37.10 + + SELECT CASE WHEN '1english' THEN 'true' ELSE 'false' END, iif('1engl','true','false'); +---- +stmt 0 ok diff --git a/parser/testdata/e_insert.metadata.json b/parser/testdata/e_insert.metadata.json new file mode 100644 index 0000000..a0a04f7 --- /dev/null +++ b/parser/testdata/e_insert.metadata.json @@ -0,0 +1,11 @@ +{ + "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 + } +} diff --git a/parser/testdata/e_insert.test b/parser/testdata/e_insert.test new file mode 100644 index 0000000..eb0fe13 --- /dev/null +++ b/parser/testdata/e_insert.test @@ -0,0 +1,52 @@ +==== e_insert-0.0 + + CREATE TABLE a1(a, b); + CREATE TABLE a2(a, b, c DEFAULT 'xyz'); + CREATE TABLE a3(x DEFAULT 1.0, y DEFAULT 'string', z); + CREATE TABLE a4(c UNIQUE, d); +---- +stmt 0 ok +stmt 25 ok +stmt 67 ok +stmt 124 ok +==== e_insert-2.3.0 + + INSERT INTO a1 VALUES('x', 'y'); +---- +stmt 0 err 1 -1 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 +==== e_insert-generated +SELECT * FROM a4 +---- +stmt 0 err 1 -1 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 +==== e_insert-5.1.2 + + CREATE TEMP TABLE IF NOT EXISTS tmptable(a, b); + CREATE TRIGGER AFTER DELETE ON a3 BEGIN + INSERT INTO temp.tmptable VALUES(1, 2); + END; +---- +stmt 0 ok +stmt 50 err 1 -1 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 diff --git a/parser/testdata/e_select.metadata.json b/parser/testdata/e_select.metadata.json new file mode 100644 index 0000000..1d27274 --- /dev/null +++ b/parser/testdata/e_select.metadata.json @@ -0,0 +1,50 @@ +{ + "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_select.test b/parser/testdata/e_select.test new file mode 100644 index 0000000..b11a305 --- /dev/null +++ b/parser/testdata/e_select.test @@ -0,0 +1,716 @@ +==== e_select-1.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES('a', 'one'); + INSERT INTO t1 VALUES('b', 'two'); + INSERT INTO t1 VALUES('c', 'three'); + + CREATE TABLE t2(a, b); + INSERT INTO t2 VALUES('a', 'I'); + INSERT INTO t2 VALUES('b', 'II'); + INSERT INTO t2 VALUES('c', 'III'); + + CREATE TABLE t3(a, c); + INSERT INTO t3 VALUES('a', 1); + INSERT INTO t3 VALUES('b', 2); + + CREATE TABLE t4(a, c); + INSERT INTO t4 VALUES('a', NULL); + 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 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 272 ok +stmt 298 err 1 -1 no such table: t3 +stmt 331 err 1 -1 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 +==== 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 +==== 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 +==== e_select-1.2.0 + + CREATE TABLE xx(x, y); + INSERT INTO xx VALUES('IiJlsIPepMuAhU', X'10B00B897A15BAA02E3F98DCE8F2'); + INSERT INTO xx VALUES(NULL, -16.87); + 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 +==== e_select-1.4.0 + + CREATE TABLE x1(a, b); + CREATE TABLE x2(c, d, e); + CREATE TABLE x3(f, g, h, i); + + -- x1: 3 rows, 2 columns + INSERT INTO x1 VALUES(24, 'converging'); + INSERT INTO x1 VALUES(NULL, X'CB71'); + INSERT INTO x1 VALUES('blonds', 'proprietary'); + + -- x2: 2 rows, 3 columns + INSERT INTO x2 VALUES(-60.06, NULL, NULL); + INSERT INTO x2 VALUES(-58, NULL, 1.21); + + -- x3: 5 rows, 4 columns + INSERT INTO x3 VALUES(-39.24, NULL, 'encompass', -1); + INSERT INTO x3 VALUES('presenting', 51, 'reformation', 'dignified'); + INSERT INTO x3 VALUES('conducting', -87.24, 37.56, NULL); + INSERT INTO x3 VALUES('coldest', -96, 'dramatists', 82.3); + INSERT INTO x3 VALUES('alerting', NULL, -93.79, NULL); +---- +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 +==== e_select-1.4.4.1 + SELECT * FROM t1, t2 +---- +stmt 0 err 1 -1 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 +==== e_select-1.6.0 + + CREATE TABLE t5(a COLLATE nocase, b COLLATE binary); + INSERT INTO t5 VALUES('AA', 'cc'); + INSERT INTO t5 VALUES('BB', 'dd'); + INSERT INTO t5 VALUES(NULL, NULL); + CREATE TABLE t6(a COLLATE binary, b COLLATE nocase); + INSERT INTO t6 VALUES('aa', 'cc'); + INSERT INTO t6 VALUES('bb', 'DD'); + 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 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 +==== e_select-1.8.0 + + CREATE TABLE t7(a, b, c); + CREATE TABLE t8(a, d, e); + + INSERT INTO t7 VALUES('x', 'ex', 24); + INSERT INTO t7 VALUES('y', 'why', 25); + + INSERT INTO t8 VALUES('x', 'abc', 24); + INSERT INTO t8 VALUES('z', 'ghi', 26); +---- +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 +==== e_select-1.11.0 + + CREATE TABLE t10(x, y); + INSERT INTO t10 VALUES(1, 'true'); + 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 +==== e_select-3.0 + + CREATE TABLE x1(k, x, y, z); + INSERT INTO x1 VALUES(1, 'relinquished', 'aphasia', 78.43); + INSERT INTO x1 VALUES(2, X'A8E8D66F', X'07CF', -81); + INSERT INTO x1 VALUES(3, -22, -27.57, NULL); + INSERT INTO x1 VALUES(4, NULL, 'bygone', 'picky'); + INSERT INTO x1 VALUES(5, NULL, 96.28, NULL); + INSERT INTO x1 VALUES(6, 0, 1, 2); + + CREATE TABLE x2(k, x, y2); + INSERT INTO x2 VALUES(1, 50, X'B82838'); + INSERT INTO x2 VALUES(5, 84.79, 65.88); + INSERT INTO x2 VALUES(3, -22, X'0E1BE452A393'); + 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 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 +==== e_select-3.1.1 + SELECT k FROM x1 WHERE x +---- +stmt 0 err 1 -1 no such table: x1 +==== e_select-3.1.2 + SELECT k FROM x1 WHERE y +---- +stmt 0 err 1 -1 no such table: x1 +==== e_select-3.1.3 + SELECT k FROM x1 WHERE z +---- +stmt 0 err 1 -1 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 +==== e_select-3.1.5 + SELECT k FROM x1 WHERE x IS NULL +---- +stmt 0 err 1 -1 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 +==== e_select-3.2.1a + + SELECT k FROM x1 LEFT JOIN x2 USING(k) +---- +stmt 0 err 1 -1 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 +==== 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 +==== e_select-3.2.3 + + SELECT k FROM x1 NATURAL JOIN x2 WHERE x2.k +---- +stmt 0 err 1 -1 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 +==== e_select-4.0 + + CREATE TABLE z1(a, b, c); + CREATE TABLE z2(d, e); + CREATE TABLE z3(a, b); + + INSERT INTO z1 VALUES(51.65, -59.58, 'belfries'); + INSERT INTO z1 VALUES(-5, NULL, 75); + INSERT INTO z1 VALUES(-2.2, -23.18, 'suiters'); + INSERT INTO z1 VALUES(NULL, 67, 'quartets'); + INSERT INTO z1 VALUES(-1.04, -32.3, 'aspen'); + INSERT INTO z1 VALUES(63, 'born', -26); + + INSERT INTO z2 VALUES(NULL, 21); + INSERT INTO z2 VALUES(36, 6); + + INSERT INTO z3 VALUES('subsistence', 'gauze'); + INSERT INTO z3 VALUES(49.17, -67); +---- +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 +==== e_select-4.6.0 + + CREATE TABLE a1(one PRIMARY KEY, two); + INSERT INTO a1 VALUES(1, 1); + INSERT INTO a1 VALUES(2, 3); + INSERT INTO a1 VALUES(3, 6); + INSERT INTO a1 VALUES(4, 10); + + CREATE TABLE a2(one PRIMARY KEY, three); + INSERT INTO a2 VALUES(1, 1); + INSERT INTO a2 VALUES(3, 2); + INSERT INTO a2 VALUES(6, 3); + 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 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 +==== e_select-4.9.0 + + CREATE TABLE b1(one PRIMARY KEY, two); + INSERT INTO b1 VALUES(1, 'o'); + INSERT INTO b1 VALUES(4, 'f'); + INSERT INTO b1 VALUES(3, 't'); + INSERT INTO b1 VALUES(2, 't'); + INSERT INTO b1 VALUES(5, 'f'); + INSERT INTO b1 VALUES(7, 's'); + INSERT INTO b1 VALUES(6, 's'); + + CREATE TABLE b2(x, y); + INSERT INTO b2 VALUES(NULL, 0); + INSERT INTO b2 VALUES(NULL, 1); + INSERT INTO b2 VALUES('xyz', 2); + INSERT INTO b2 VALUES('abc', 3); + INSERT INTO b2 VALUES('xyz', 4); + + CREATE TABLE b3(a COLLATE nocase, b COLLATE binary); + INSERT INTO b3 VALUES('abc', 'abc'); + INSERT INTO b3 VALUES('aBC', 'aBC'); + INSERT INTO b3 VALUES('Def', 'Def'); + 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 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 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 +==== e_select-4.13.0 + + CREATE TABLE c1(up, down); + INSERT INTO c1 VALUES('x', 1); + INSERT INTO c1 VALUES('x', 2); + INSERT INTO c1 VALUES('x', 4); + INSERT INTO c1 VALUES('x', 8); + INSERT INTO c1 VALUES('y', 16); + INSERT INTO c1 VALUES('y', 32); + + CREATE TABLE c2(i, j); + INSERT INTO c2 VALUES(1, 0); + INSERT INTO c2 VALUES(2, 1); + INSERT INTO c2 VALUES(3, 3); + INSERT INTO c2 VALUES(4, 6); + INSERT INTO c2 VALUES(5, 10); + INSERT INTO c2 VALUES(6, 15); + INSERT INTO c2 VALUES(7, 21); + INSERT INTO c2 VALUES(8, 28); + INSERT INTO c2 VALUES(9, 36); + + CREATE TABLE c3(i PRIMARY KEY, k TEXT); + INSERT INTO c3 VALUES(1, 'hydrogen'); + INSERT INTO c3 VALUES(2, 'helium'); + INSERT INTO c3 VALUES(3, 'lithium'); + INSERT INTO c3 VALUES(4, 'beryllium'); + INSERT INTO c3 VALUES(5, 'boron'); + 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 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 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 +==== e_select-5.1.0 + + CREATE TABLE h1(a, b); + INSERT INTO h1 VALUES(1, 'one'); + INSERT INTO h1 VALUES(1, 'I'); + INSERT INTO h1 VALUES(1, 'i'); + INSERT INTO h1 VALUES(4, 'four'); + INSERT INTO h1 VALUES(4, 'IV'); + INSERT INTO h1 VALUES(4, 'iv'); + + CREATE TABLE h2(x COLLATE nocase); + INSERT INTO h2 VALUES('One'); + INSERT INTO h2 VALUES('Two'); + INSERT INTO h2 VALUES('Three'); + INSERT INTO h2 VALUES('Four'); + INSERT INTO h2 VALUES('one'); + INSERT INTO h2 VALUES('two'); + INSERT INTO h2 VALUES('three'); + INSERT INTO h2 VALUES('four'); + + CREATE TABLE h3(c, d); + INSERT INTO h3 VALUES(1, NULL); + INSERT INTO h3 VALUES(2, NULL); + INSERT INTO h3 VALUES(3, NULL); + INSERT INTO h3 VALUES(4, '2'); + INSERT INTO h3 VALUES(5, NULL); + INSERT INTO h3 VALUES(6, '2,3'); + INSERT INTO h3 VALUES(7, NULL); + INSERT INTO h3 VALUES(8, '2,4'); + 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 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 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 +==== e_select-7.1.0 + + CREATE TABLE j1(a, b, c); + CREATE TABLE j2(e, f); + CREATE TABLE j3(g); +---- +stmt 0 ok +stmt 28 ok +stmt 53 ok +==== e_select-7.4.0 + + CREATE TABLE q1(a TEXT, b INTEGER, c); + CREATE TABLE q2(d NUMBER, e BLOB); + CREATE TABLE q3(f REAL, g); + + INSERT INTO q1 VALUES(16, -87.66, NULL); + INSERT INTO q1 VALUES('legible', 94, -42.47); + INSERT INTO q1 VALUES('beauty', 36, NULL); + + INSERT INTO q2 VALUES('legible', 1); + INSERT INTO q2 VALUES('beauty', 2); + INSERT INTO q2 VALUES(-65.91, 4); + INSERT INTO q2 VALUES('emanating', -16.56); + + INSERT INTO q3 VALUES('beauty', 2); + INSERT INTO q3 VALUES('beauty', 2); +---- +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 +==== 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 +==== e_select-7.10.0.dup1 + + CREATE TABLE w1(a TEXT, b NUMBER); + CREATE TABLE w2(a, b TEXT); + + INSERT INTO w1 VALUES('1', 4.1); + INSERT INTO w2 VALUES(1, 4.1); +---- +stmt 0 ok +stmt 37 ok +stmt 67 err 1 -1 no such table: w1 +stmt 103 err 1 -1 no such table: w2 +==== e_select-7.12.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + 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 +==== e_select-8.1.0 + + CREATE TABLE d1(x, y, z); + + INSERT INTO d1 VALUES(1, 2, 3); + INSERT INTO d1 VALUES(2, 5, -1); + INSERT INTO d1 VALUES(1, 2, 8); + INSERT INTO d1 VALUES(1, 2, 7); + INSERT INTO d1 VALUES(2, 4, 93); + INSERT INTO d1 VALUES(1, 2, -20); + INSERT INTO d1 VALUES(1, 4, 93); + INSERT INTO d1 VALUES(1, 5, -1); + + CREATE TABLE d2(a, b); + INSERT INTO d2 VALUES('gently', 'failings'); + INSERT INTO d2 VALUES('commercials', 'bathrobe'); + INSERT INTO d2 VALUES('iterate', 'sexton'); + INSERT INTO d2 VALUES('babied', 'charitableness'); + INSERT INTO d2 VALUES('solemnness', 'annexed'); + INSERT INTO d2 VALUES('rejoicing', 'liabilities'); + INSERT INTO d2 VALUES('pragmatist', 'guarded'); + INSERT INTO d2 VALUES('barked', 'interrupted'); + INSERT INTO d2 VALUES('reemphasizes', 'reply'); + 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 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 +==== e_select-8.8.0 + + CREATE TABLE d3(a); + INSERT INTO d3 VALUES('text'); + INSERT INTO d3 VALUES(14.1); + INSERT INTO d3 VALUES(13); + INSERT INTO d3 VALUES(X'78787878'); + INSERT INTO d3 VALUES(15); + INSERT INTO d3 VALUES(12.9); + INSERT INTO d3 VALUES(null); + + CREATE TABLE d4(x COLLATE nocase); + INSERT INTO d4 VALUES('abc'); + INSERT INTO d4 VALUES('ghi'); + INSERT INTO d4 VALUES('DEF'); + 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 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 +==== e_select-8.8.1 + + SELECT a FROM d3 ORDER BY a +---- +stmt 0 err 1 -1 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 +==== e_select-8.9.1 + + SELECT x FROM d4 ORDER BY 1 COLLATE binary +---- +stmt 0 err 1 -1 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 +==== e_select-8.10.1 + + SELECT x COLLATE binary FROM d4 ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== e_select-8.11.1 + + SELECT x AS y FROM d4 ORDER BY y +---- +stmt 0 err 1 -1 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 +==== e_select-8.12.1 + + SELECT x FROM d4 ORDER BY x||'' +---- +stmt 0 err 1 -1 no such table: d4 +==== e_select-8.13.0 + + CREATE TABLE d5(a, b); + CREATE TABLE d6(c, d); + CREATE TABLE d7(e, f); + + INSERT INTO d5 VALUES(1, 'f'); + INSERT INTO d6 VALUES(2, 'e'); + INSERT INTO d7 VALUES(3, 'd'); + INSERT INTO d5 VALUES(4, 'c'); + INSERT INTO d6 VALUES(5, 'b'); + INSERT INTO d7 VALUES(6, 'a'); + + CREATE TABLE d8(x COLLATE nocase); + CREATE TABLE d9(y COLLATE nocase); + + INSERT INTO d8 VALUES('a'); + INSERT INTO d9 VALUES('B'); + INSERT INTO d8 VALUES('c'); + INSERT INTO d9 VALUES('D'); +---- +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 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 +==== e_select-9.0 + + CREATE TABLE f1(a, b); + INSERT INTO f1 VALUES(26, 'z'); + INSERT INTO f1 VALUES(25, 'y'); + INSERT INTO f1 VALUES(24, 'x'); + INSERT INTO f1 VALUES(23, 'w'); + INSERT INTO f1 VALUES(22, 'v'); + INSERT INTO f1 VALUES(21, 'u'); + INSERT INTO f1 VALUES(20, 't'); + INSERT INTO f1 VALUES(19, 's'); + INSERT INTO f1 VALUES(18, 'r'); + INSERT INTO f1 VALUES(17, 'q'); + INSERT INTO f1 VALUES(16, 'p'); + INSERT INTO f1 VALUES(15, 'o'); + INSERT INTO f1 VALUES(14, 'n'); + INSERT INTO f1 VALUES(13, 'm'); + INSERT INTO f1 VALUES(12, 'l'); + INSERT INTO f1 VALUES(11, 'k'); + INSERT INTO f1 VALUES(10, 'j'); + INSERT INTO f1 VALUES(9, 'i'); + INSERT INTO f1 VALUES(8, 'h'); + INSERT INTO f1 VALUES(7, 'g'); + INSERT INTO f1 VALUES(6, 'f'); + INSERT INTO f1 VALUES(5, 'e'); + INSERT INTO f1 VALUES(4, 'd'); + INSERT INTO f1 VALUES(3, 'c'); + INSERT INTO f1 VALUES(2, 'b'); + 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 diff --git a/parser/testdata/e_update.metadata.json b/parser/testdata/e_update.metadata.json new file mode 100644 index 0000000..dbb1614 --- /dev/null +++ b/parser/testdata/e_update.metadata.json @@ -0,0 +1,21 @@ +{ + "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/e_update.test b/parser/testdata/e_update.test new file mode 100644 index 0000000..d1f367c --- /dev/null +++ b/parser/testdata/e_update.test @@ -0,0 +1,239 @@ +==== e_update-0.0 + + ATTACH 'test.db2' AS aux; + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b, c); + CREATE TABLE t3(a, b UNIQUE); + CREATE TABLE t6(x, y); + CREATE INDEX i1 ON t1(a); + + CREATE TEMP TABLE t4(x, y); + CREATE TEMP TABLE t6(x, y); + + CREATE TABLE aux.t1(a, b); + CREATE TABLE aux.t5(a, b); +---- +stmt 0 ok +stmt 28 ok +stmt 53 ok +stmt 81 ok +stmt 113 ok +stmt 138 err 1 -1 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 +==== e_update-1.1.0 + + INSERT INTO main.t1 VALUES(1, 'i'); + INSERT INTO main.t1 VALUES(2, 'ii'); + INSERT INTO main.t1 VALUES(3, 'iii'); + + INSERT INTO aux.t1 VALUES(1, 'I'); + 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 +==== e_update-1.2.0 + + DELETE FROM main.t1; + INSERT INTO main.t1 VALUES(1, 'i'); + 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 +==== e_update-1.3.0 + + DELETE FROM main.t1; + INSERT INTO main.t1 VALUES(NULL, ''); + INSERT INTO main.t1 VALUES(1, 'i'); + 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 +==== e_update-1.4.0 + + DELETE FROM main.t1; + INSERT INTO main.t1 VALUES(NULL, ''); + INSERT INTO main.t1 VALUES(1, 'i'); + 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 +==== 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 +==== e_update-1.7.0 + + DELETE FROM t2; + 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 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 +==== e_update-1.8.0 + + DELETE FROM t3; + INSERT INTO t3 VALUES(1, 'one'); + INSERT INTO t3 VALUES(2, 'two'); + 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 +==== e_update-generated +SELECT * FROM t3 +---- +stmt 0 err 1 -1 no such table: t3 +==== e_update-2.1.3 + + CREATE TRIGGER tr1 AFTER DELETE ON t4 BEGIN + UPDATE main.t1 SET a=1, b=2; + END; + DROP TRIGGER tr1; +---- +stmt 0 err 1 -1 no such table: main.t4 +stmt 86 err 1 -1 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 +==== e_update-2.3.0 + + SELECT 'main', tbl_name FROM main.sqlite_master WHERE type = 'table'; + SELECT 'temp', tbl_name FROM sqlite_temp_master WHERE type = 'table'; + SELECT 'aux', tbl_name FROM aux.sqlite_master WHERE type = 'table'; +---- +stmt 0 ok +stmt 72 ok +stmt 144 err 1 -1 no such table: aux.sqlite_master +==== e_update-2.3.1 + + DELETE FROM main.t6; + DELETE FROM temp.t6; + INSERT INTO main.t6 VALUES(1, 2); + INSERT INTO temp.t6 VALUES(1, 2); + + CREATE TRIGGER temp.tr1 AFTER INSERT ON t4 BEGIN + UPDATE t6 SET x=x+1; + END; + + INSERT INTO t4 VALUES(1, 2); + 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 +==== e_update-2.3.2 + + DELETE FROM main.t1; + DELETE FROM aux.t1; + INSERT INTO main.t1 VALUES(1, 2); + INSERT INTO aux.t1 VALUES(1, 2); + + CREATE TRIGGER temp.tr2 AFTER DELETE ON t4 BEGIN + UPDATE t1 SET a=a+1; + END; + + DELETE FROM t4; + 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 +==== e_update-2.3.3 + + DELETE FROM aux.t5; + INSERT INTO aux.t5 VALUES(1, 2); + + INSERT INTO t4 VALUES('x', 'y'); + CREATE TRIGGER temp.tr3 AFTER UPDATE ON t4 BEGIN + UPDATE t5 SET a=a+1; + END; + + 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 +==== e_update-3.1.0 + + CREATE TABLE t7(q, r, s); + INSERT INTO t7 VALUES(1, 'one', 'X'); + INSERT INTO t7 VALUES(2, 'two', 'X'); + INSERT INTO t7 VALUES(3, 'three', 'X'); + INSERT INTO t7 VALUES(4, 'four', 'X'); + INSERT INTO t7 VALUES(5, 'five', 'X'); + INSERT INTO t7 VALUES(6, 'six', 'X'); + INSERT INTO t7 VALUES(7, 'seven', 'X'); + INSERT INTO t7 VALUES(8, 'eight', 'X'); + INSERT INTO t7 VALUES(9, 'nine', 'X'); + 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 +==== e_update-3.5.0 + + CREATE TABLE t8(x); + CREATE TRIGGER tr7 BEFORE UPDATE ON t7 BEGIN + INSERT INTO t8 VALUES(old.q); + END; +---- +stmt 0 ok +stmt 22 err 1 -1 no such table: main.t7 diff --git a/parser/testdata/expr.metadata.json b/parser/testdata/expr.metadata.json new file mode 100644 index 0000000..40d37db --- /dev/null +++ b/parser/testdata/expr.metadata.json @@ -0,0 +1,46 @@ +{ + "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/expr.test b/parser/testdata/expr.test new file mode 100644 index 0000000..bce94cb --- /dev/null +++ b/parser/testdata/expr.test @@ -0,0 +1,213 @@ +==== expr-1.127 + + SELECT 1 IS #1; +---- +stmt 0 err 1 -1 near "#1": syntax error +==== expr-7.1 +SELECT * FROM test1 ORDER BY a +---- +stmt 0 err 1 -1 no such table: test1 +==== expr-8.1 +SELECT CURRENT_TIME +---- +stmt 0 ok +==== expr-8.2 +SELECT CURRENT_DATE +---- +stmt 0 ok +==== expr-8.3 +SELECT CURRENT_TIMESTAMP +---- +stmt 0 ok +==== expr-8.4 +SELECT CURRENT_TIME==time('now'); +---- +stmt 0 ok +==== expr-8.5 +SELECT CURRENT_DATE==date('now'); +---- +stmt 0 ok +==== expr-8.6 +SELECT CURRENT_TIMESTAMP==datetime('now'); +---- +stmt 0 ok +==== expr-9.1 +SELECT round(-('-'||'123')) +---- +stmt 0 ok +==== expr-10.1 +SELECT 'abc' LIKE 'abc' ESCAPE '' +---- +stmt 0 ok +==== expr-10.2 +SELECT 'abc' LIKE 'abc' ESCAPE 'ab' +---- +stmt 0 ok +==== expr-11.1 +SELECT typeof(9223372036854775807) +---- +stmt 0 ok +==== expr-11.2 +SELECT typeof(00000009223372036854775807) +---- +stmt 0 ok +==== expr-11.3 +SELECT typeof(+9223372036854775807) +---- +stmt 0 ok +==== expr-11.4 +SELECT typeof(+000000009223372036854775807) +---- +stmt 0 ok +==== expr-11.5 +SELECT typeof(9223372036854775808) +---- +stmt 0 ok +==== expr-11.6 +SELECT typeof(00000009223372036854775808) +---- +stmt 0 ok +==== expr-11.7 +SELECT typeof(+9223372036854775808) +---- +stmt 0 ok +==== expr-11.8 +SELECT typeof(+0000009223372036854775808) +---- +stmt 0 ok +==== expr-11.11 +SELECT typeof(-9223372036854775808) +---- +stmt 0 ok +==== expr-11.12 +SELECT typeof(-00000009223372036854775808) +---- +stmt 0 ok +==== expr-11.13 +SELECT typeof(-9223372036854775809) +---- +stmt 0 ok +==== expr-11.14 +SELECT typeof(-00000009223372036854775809) +---- +stmt 0 ok +==== expr-12.1 + + SELECT (CASE a>4 THEN 1 ELSE 0 END) FROM test1; +---- +stmt 0 err 1 22 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 +==== expr-13.2 + + SELECT 0+'9223372036854775807' +---- +stmt 0 ok +==== expr-13.3 + + SELECT '9223372036854775807'+0 +---- +stmt 0 ok +==== expr-13.8 + + SELECT "" <= ''; +---- +stmt 0 ok +==== expr-13.9 + + SELECT '' <= ""; +---- +stmt 0 ok +==== expr-14.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(0),(1),(NULL),(0.5),('1x'),('0x'); + SELECT count(*) FROM t1 + WHERE (x OR (8==9)) != (CASE WHEN x THEN 1 ELSE 0 END); +---- +stmt 0 ok +stmt 27 ok +stmt 49 err 1 -1 no such table: t1 +stmt 108 err 1 -1 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 +==== expr-14.3 + + SELECT sum(NOT x) FROM t1 + WHERE x +---- +stmt 0 err 1 -1 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 +==== expr-generated + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(0),(1),(NULL),(0.5),('1x'),('0x'); +---- +stmt 0 ok +stmt 29 ok +stmt 53 err 1 -1 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 +==== expr-generated.dup2 + + SELECT count(*) FROM t1 + WHERE (x OR (8==9)) != (NOT NOT x); +---- +stmt 0 err 1 -1 no such table: t1 +==== expr-generated.dup3 + + SELECT sum(NOT x) FROM t1 + WHERE x +---- +stmt 0 err 1 -1 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 +==== expr-16.1 + + CREATE TABLE t1(a,b,c); + CREATE TABLE dual(dummy); + INSERT INTO dual VALUES('X'); +---- +stmt 0 ok +stmt 26 ok +stmt 54 err 1 -1 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 +==== 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 +==== 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 diff --git a/parser/testdata/expr2.metadata.json b/parser/testdata/expr2.metadata.json new file mode 100644 index 0000000..1b4c12b --- /dev/null +++ b/parser/testdata/expr2.metadata.json @@ -0,0 +1,11 @@ +{ + "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/expr2.test b/parser/testdata/expr2.test new file mode 100644 index 0000000..7c42239 --- /dev/null +++ b/parser/testdata/expr2.test @@ -0,0 +1,43 @@ +==== 1.0 + + CREATE TABLE t0(c0); + INSERT INTO t0(c0) VALUES ('val'); +---- +stmt 0 ok +stmt 23 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 1.4.1 + + SELECT (0 IS NOT FALSE) FROM t0 +---- +stmt 0 err 1 -1 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 diff --git a/parser/testdata/in.metadata.json b/parser/testdata/in.metadata.json new file mode 100644 index 0000000..99d7321 --- /dev/null +++ b/parser/testdata/in.metadata.json @@ -0,0 +1,112 @@ +{ + "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/in.test b/parser/testdata/in.test new file mode 100644 index 0000000..f71ea21 --- /dev/null +++ b/parser/testdata/in.test @@ -0,0 +1,790 @@ +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== in-2.6 +SELECT a FROM t1 WHERE b IN (b+8,64) +---- +stmt 0 err 1 -1 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 +==== 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 +==== in-2.9 +SELECT a FROM t1 WHERE b IN (max(5,10),20) +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== in-5.1 + + INSERT INTO t1 VALUES('hello', 'world'); + SELECT * FROM t1 + WHERE a IN ( + 'Do','an','IN','with','a','constant','RHS','but','where','the', + 'has','many','elements','We','need','to','test','that', + '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 +==== in-6.1 + + CREATE TABLE ta(a INTEGER PRIMARY KEY, b); + INSERT INTO ta VALUES(1,1); + INSERT INTO ta VALUES(2,2); + INSERT INTO ta VALUES(3,3); + INSERT INTO ta VALUES(4,4); + INSERT INTO ta VALUES(6,6); + INSERT INTO ta VALUES(8,8); + INSERT INTO ta VALUES(10, + 'This is a key that is long enough to require a malloc in the VDBE'); + 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 +==== in-6.2 + + CREATE TABLE tb(a INTEGER PRIMARY KEY, b); + INSERT INTO tb VALUES(1,1); + INSERT INTO tb VALUES(2,2); + INSERT INTO tb VALUES(3,3); + INSERT INTO tb VALUES(5,5); + INSERT INTO tb VALUES(7,7); + INSERT INTO tb VALUES(9,9); + INSERT INTO tb VALUES(11, + 'This is a key that is long enough to require a malloc in the VDBE'); + 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 +==== in-6.3 + + SELECT a FROM ta WHERE b IN (SELECT a FROM tb); +---- +stmt 0 err 1 -1 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 +==== in-6.5 + + SELECT a FROM ta WHERE b IN (SELECT b FROM tb); +---- +stmt 0 err 1 -1 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 +==== in-6.7 + + SELECT a FROM ta WHERE a IN (SELECT a FROM tb); +---- +stmt 0 err 1 -1 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 +==== in-6.9 + + SELECT a FROM ta WHERE a IN (SELECT b FROM tb); +---- +stmt 0 err 1 -1 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 +==== in-7.1 + + SELECT a FROM t1 WHERE a IN (); +---- +stmt 0 err 1 -1 no such table: t1 +==== in-7.2 + + SELECT a FROM t1 WHERE a IN (5); +---- +stmt 0 err 1 -1 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 +==== in-7.4 + + SELECT a FROM t1 WHERE a IN (5) AND b IN (); +---- +stmt 0 err 1 -1 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 +==== in-7.6.1 + + SELECT a FROM ta WHERE a IN (); +---- +stmt 0 err 1 -1 no such table: ta +==== in-7.7 + + SELECT a FROM ta WHERE a NOT IN (); +---- +stmt 0 err 1 -1 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 +==== in-8.3 + + SELECT b FROM t1 WHERE a IN ('hello','there') +---- +stmt 0 err 1 -1 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 +==== in-9.2 + + SELECT b FROM t1 WHERE a IN t4; +---- +stmt 0 err 1 -1 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 +==== in-9.4 + + SELECT b FROM t1 WHERE a NOT IN tb; +---- +stmt 0 err 1 -1 no such table: t1 +==== in-10.1 + + CREATE TABLE t5( + a INTEGER, + CHECK( a IN (111,222,333) ) + ); + INSERT INTO t5 VALUES(111); + SELECT * FROM t5; +---- +stmt 0 ok +stmt 79 err 1 -1 no such table: t5 +stmt 111 err 1 -1 no such table: t5 +==== in-10.2 + + INSERT INTO t5 VALUES(4); +---- +stmt 0 err 1 -1 no such table: t5 +==== in-11.1 + + CREATE TABLE t6(a,b NUMERIC); + INSERT INTO t6 VALUES(1,2); + INSERT INTO t6 VALUES(2,3); + 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 +==== in-11.5 + + SELECT * FROM t6 WHERE a IN (2); +---- +stmt 0 err 1 -1 no such table: t6 +==== in-12.1 + + CREATE TABLE t2(a, b, c); + CREATE TABLE t3(a, b, c); +---- +stmt 0 ok +stmt 30 ok +==== in-12.2 + + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== in-13.2 + + CREATE TABLE t7(a, b, c NOT NULL); + INSERT INTO t7 VALUES(1, 1, 1); + INSERT INTO t7 VALUES(2, 2, 2); + INSERT INTO t7 VALUES(3, 3, 3); + INSERT INTO t7 VALUES(NULL, 4, 4); + 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 +==== in-13.3 + SELECT 2 IN (SELECT a FROM t7) +---- +stmt 0 err 1 -1 no such table: t7 +==== in-13.4 + SELECT 6 IN (SELECT a FROM t7) +---- +stmt 0 err 1 -1 no such table: t7 +==== in-13.5 + SELECT 2 IN (SELECT b FROM t7) +---- +stmt 0 err 1 -1 no such table: t7 +==== in-13.6 + SELECT 6 IN (SELECT b FROM t7) +---- +stmt 0 err 1 -1 no such table: t7 +==== in-13.7 + SELECT 2 IN (SELECT c FROM t7) +---- +stmt 0 err 1 -1 no such table: t7 +==== in-13.8 + SELECT 6 IN (SELECT c FROM t7) +---- +stmt 0 err 1 -1 no such table: t7 +==== in-13.9 + + SELECT + 2 NOT IN (SELECT a FROM t7), + 6 NOT IN (SELECT a FROM t7), + 2 NOT IN (SELECT b FROM t7), + 6 NOT IN (SELECT b FROM t7), + 2 NOT IN (SELECT c FROM t7), + 6 NOT IN (SELECT c FROM t7) +---- +stmt 0 err 1 -1 no such table: t7 +==== in-13.10 + + SELECT b IN ( + SELECT inside.a + FROM t7 AS inside + WHERE inside.b BETWEEN outside.b+1 AND outside.b+2 + ) + FROM t7 AS outside ORDER BY b; +---- +stmt 0 err 1 -1 no such table: t7 +==== in-13.11 + + SELECT b NOT IN ( + SELECT inside.a + FROM t7 AS inside + WHERE inside.b BETWEEN outside.b+1 AND outside.b+2 + ) + FROM t7 AS outside ORDER BY b; +---- +stmt 0 err 1 -1 no such table: t7 +==== in-13.13 + + SELECT + 2 NOT IN (SELECT a FROM t7), + 6 NOT IN (SELECT a FROM t7), + 2 NOT IN (SELECT b FROM t7), + 6 NOT IN (SELECT b FROM t7), + 2 NOT IN (SELECT c FROM t7), + 6 NOT IN (SELECT c FROM t7) +---- +stmt 0 err 1 -1 no such table: t7 +==== in-13.14 + + BEGIN TRANSACTION; + CREATE TABLE a(id INTEGER); + INSERT INTO a VALUES(1); + INSERT INTO a VALUES(2); + INSERT INTO a VALUES(3); + CREATE TABLE b(id INTEGER); + INSERT INTO b VALUES(NULL); + INSERT INTO b VALUES(3); + INSERT INTO b VALUES(4); + INSERT INTO b VALUES(5); + COMMIT; + SELECT * FROM a WHERE id NOT IN (SELECT id FROM b); +---- +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 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 293 ok +stmt 305 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== in-15.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE IF NOT EXISTS t1(id INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES(1); + SELECT a.id FROM t1 AS a JOIN t1 AS b ON a.id=b.id WHERE a.id IN (1,2,3); +---- +stmt 0 ok +stmt 27 ok +stmt 84 err 1 -1 no such table: t1 +stmt 112 err 1 -1 no such table: t1 +==== in-15.1 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER PRIMARY KEY,b); + INSERT INTO t2 VALUES(1,11); + INSERT INTO t2 VALUES(2,22); + INSERT INTO t2 VALUES(3,33); + SELECT b, a IN (3,4,5) FROM t2 ORDER BY b; +---- +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 +==== in-15.2 + + DROP TABLE IF EXISTS t3; + CREATE TABLE t3(x INTEGER PRIMARY KEY); + INSERT INTO t3 VALUES(8); + SELECT CASE WHEN x NOT IN (5,6,7) THEN 'yes' ELSE 'no' END FROM t3; + SELECT CASE WHEN x NOT IN (NULL,6,7) THEN 'yes' ELSE 'no' END FROM t3; +---- +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 +==== 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 +==== in-15.4 + + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(a INTEGER PRIMARY KEY, b INT); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<20) + INSERT INTO t4(a,b) SELECT x, x+100 FROM c; + SELECT b FROM t4 WHERE a IN (3,null,8) ORDER BY +b; +---- +stmt 0 ok +stmt 27 ok +stmt 76 err 1 -1 no such table: t4 +stmt 200 err 1 -1 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 +==== in-15.6 + + DROP TABLE IF EXISTS t5; + DROP TABLE IF EXISTS t6; + CREATE TABLE t5(id INTEGER PRIMARY KEY, name TEXT); + CREATE TABLE t6(id INTEGER PRIMARY KEY, name TEXT, t5_id INT); + INSERT INTO t5 VALUES(1,'Alice'),(2,'Emma'); + INSERT INTO t6 VALUES(1,'Bob',1),(2,'Cindy',1),(3,'Dave',2); + SELECT a.* + FROM t5 AS 'a' JOIN t5 AS 'b' ON b.id=a.id + WHERE b.id IN ( + SELECT t6.t5_id + FROM t6 + WHERE name='Bob' + AND t6.t5_id IS NOT NULL + AND t6.id IN ( + SELECT id + FROM (SELECT t6.id, count(*) AS x + FROM t6 + WHERE name='Bob' + ) AS 't' + WHERE x=1 + ) + AND t6.id IN (1,id) + ); +---- +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 +==== in-16.0 + + CREATE TABLE x1(a, b); + INSERT INTO x1(a) VALUES(1), (2), (3), (4), (5), (6); + 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 +==== 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 +==== 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 +==== in-17.1 + + SELECT 1 IN ('1'); +---- +stmt 0 ok +==== in-17.2 + + SELECT 1 IN ('1' COLLATE nocase); +---- +stmt 0 ok +==== in-17.3 + + SELECT 1 IN (CAST('1' AS text)); +---- +stmt 0 ok +==== in-17.4 + + SELECT 1 IN (CAST('1' AS text) COLLATE nocase); +---- +stmt 0 ok +==== in-18.1 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 INT UNIQUE); + INSERT INTO t0(c0) VALUES (1); + SELECT * FROM t0 WHERE '1' IN (t0.c0); +---- +stmt 0 ok +stmt 27 ok +stmt 61 err 1 -1 no such table: t0 +stmt 94 err 1 -1 no such table: t0 +==== in-19.10 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 REAL UNIQUE); + INSERT INTO t0(c0) VALUES(2.0625E00); + SELECT 1 FROM t0 WHERE c0 IN ('2.0625'); +---- +stmt 0 ok +stmt 27 ok +stmt 62 err 1 -1 no such table: t0 +stmt 102 err 1 -1 no such table: t0 +==== in-19.20 + + SELECT c0 IN ('2.0625') FROM t0; +---- +stmt 0 err 1 -1 no such table: t0 +==== in-19.21 + + SELECT c0 = ('2.0625') FROM t0; +---- +stmt 0 err 1 -1 no such table: t0 +==== in-19.22 + + SELECT c0 = ('0.20625e+01') FROM t0; +---- +stmt 0 err 1 -1 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 +==== in-19.40 + + DROP TABLE t0; + CREATE TABLE t0(c0 TEXT, c1 REAL, c2, PRIMARY KEY(c2, c0, c1)); + CREATE INDEX i0 ON t0(c1 IN (c0)); + 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 17 ok +stmt 83 err 1 -1 no such table: main.t0 +stmt 120 err 1 -1 no such table: t0 +stmt 198 ok +==== in-20.1 + + SELECT (1 IN (2 IS TRUE)); +---- +stmt 0 ok +==== in-21.1 + + CREATE TABLE t0(c0); + SELECT COUNT(*) FROM t0 ORDER BY (t0.c0 IN ()); +---- +stmt 0 ok +stmt 23 err 1 -1 no such table: t0 +==== in-22.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x INT PRIMARY KEY, y INT); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<8) + INSERT INTO t1(x,y) SELECT x, x*100 FROM c; + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INT); + INSERT INTO t2 VALUES(2),(4),(6); + SELECT * FROM t1 WHERE x IN (SELECT a FROM t2); +---- +stmt 0 ok +stmt 27 ok +stmt 72 err 1 -1 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 +==== in-22.2 + + SELECT * FROM t1 WHERE x IN ((SELECT a FROM t2)); +---- +stmt 0 err 1 -1 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 +==== in-22.4 + + SELECT * FROM t1 WHERE x IN ((((((SELECT a FROM t2)))))); +---- +stmt 0 err 1 -1 no such table: t1 +==== in-23.0 + + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(a TEXT, b INT); + INSERT INTO t4(a,b) VALUES('abc',0),('ABC',1),('def',2); + CREATE INDEX t4x ON t4(a, +a COLLATE NOCASE); + SELECT a0.a, group_concat(a1.a) AS b + FROM t4 AS a0 JOIN t4 AS a1 + GROUP BY a0.a + HAVING (SELECT sum( (a1.a == +a0.a COLLATE NOCASE) IN (SELECT b FROM t4))); +---- +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 +==== in-23.0-b + + SELECT a0.a, group_concat(a1.a) AS b + FROM t4 AS a0 JOIN t4 AS a1 + 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 +==== in-23.1 + + CREATE VIEW t5 AS + SELECT 1 AS b + WHERE (SELECT count(0=NOT+a COLLATE NOCASE IN (SELECT 0)) + FROM t4 + GROUP BY a); + SELECT * FROM t5; +---- +stmt 0 ok +stmt 149 err 1 -1 no such table: t5 diff --git a/parser/testdata/in2.metadata.json b/parser/testdata/in2.metadata.json new file mode 100644 index 0000000..b88b1e8 --- /dev/null +++ b/parser/testdata/in2.metadata.json @@ -0,0 +1,5 @@ +{ + "todo": { + "in2-1": true + } +} diff --git a/parser/testdata/in2.test b/parser/testdata/in2.test new file mode 100644 index 0000000..5557d95 --- /dev/null +++ b/parser/testdata/in2.test @@ -0,0 +1,5 @@ +==== in2-1 + + CREATE TABLE a(i INTEGER PRIMARY KEY, a); +---- +stmt 0 ok diff --git a/parser/testdata/in3.metadata.json b/parser/testdata/in3.metadata.json new file mode 100644 index 0000000..191f266 --- /dev/null +++ b/parser/testdata/in3.metadata.json @@ -0,0 +1,10 @@ +{ + "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/in3.test b/parser/testdata/in3.test new file mode 100644 index 0000000..d5fb0ce --- /dev/null +++ b/parser/testdata/in3.test @@ -0,0 +1,43 @@ +==== in3-1.1 + + CREATE TABLE t1(a PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + 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 +==== 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 +==== in3-2.3 + + select rowid from t1 where rowid IN (-1,2,4) +---- +stmt 0 err 1 -1 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 +==== in3-4.6 + DROP INDEX t3_i2 +---- +stmt 0 err 1 -1 no such index: t3_i2 +==== in3-5.1 + + CREATE TABLE Folders( + folderid INTEGER PRIMARY KEY, + parentid INTEGER, + rootid INTEGER, + path VARCHAR(255) + ); +---- +stmt 0 ok diff --git a/parser/testdata/in4.metadata.json b/parser/testdata/in4.metadata.json new file mode 100644 index 0000000..0325f78 --- /dev/null +++ b/parser/testdata/in4.metadata.json @@ -0,0 +1,82 @@ +{ + "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/in4.test b/parser/testdata/in4.test new file mode 100644 index 0000000..9125976 --- /dev/null +++ b/parser/testdata/in4.test @@ -0,0 +1,599 @@ +==== in4-1.1 + + CREATE TABLE t1(a, b); + CREATE INDEX i1 ON t1(a); +---- +stmt 0 ok +stmt 27 err 1 -1 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 +==== in4-1.3 + + INSERT INTO t1 VALUES('aaa', 1); + INSERT INTO t1 VALUES('ddd', 2); + INSERT INTO t1 VALUES('ccc', 3); + 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 +==== in4-1.4 + + SELECT a FROM t1 WHERE rowid IN (1, 3); +---- +stmt 0 err 1 -1 no such table: t1 +==== in4-1.5 + + SELECT a FROM t1 WHERE rowid IN (); +---- +stmt 0 err 1 -1 no such table: t1 +==== in4-1.6 + + SELECT a FROM t1 WHERE a IN ('ddd'); +---- +stmt 0 err 1 -1 no such table: t1 +==== in4-2.1 + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b TEXT); + INSERT INTO t2 VALUES(-1, '-one'); + INSERT INTO t2 VALUES(0, 'zero'); + INSERT INTO t2 VALUES(1, 'one'); + INSERT INTO t2 VALUES(2, 'two'); + 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 +==== in4-2.2 + SELECT b FROM t2 WHERE a IN (0, 2) +---- +stmt 0 err 1 -1 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 +==== in4-2.4 + SELECT b FROM t2 WHERE a IN (2, -1) +---- +stmt 0 err 1 -1 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 +==== in4-2.6 + SELECT b FROM t2 WHERE a IN (1.0, 2.1) +---- +stmt 0 err 1 -1 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 +==== in4-2.8 + SELECT b FROM t2 WHERE a IN ('', '0.0.0', '2') +---- +stmt 0 err 1 -1 no such table: t2 +==== in4-3.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(x, id); + CREATE TABLE t2(x, id); + INSERT INTO t1 VALUES(NULL, NULL); + INSERT INTO t1 VALUES(0, NULL); + INSERT INTO t1 VALUES(1, 3); + INSERT INTO t1 VALUES(2, 4); + INSERT INTO t1 VALUES(3, 5); + INSERT INTO t1 VALUES(4, 6); + INSERT INTO t2 VALUES(0, NULL); + INSERT INTO t2 VALUES(4, 1); + INSERT INTO t2 VALUES(NULL, 1); + INSERT INTO t2 VALUES(NULL, NULL); +---- +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 +==== 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 +==== in4-3.4 + SELECT * FROM t3 WHERE x = 10 AND y IN () +---- +stmt 0 err 1 -1 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 +==== in4-3.6 + SELECT * FROM t3 WHERE x IN () OR x = 10 +---- +stmt 0 err 1 -1 no such table: t3 +==== in4-3.7 + SELECT * FROM t3 WHERE y IN () +---- +stmt 0 err 1 -1 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 +==== in4-3.9 + SELECT x IN() AS a FROM t3 WHERE NOT a +---- +stmt 0 err 1 -1 no such table: t3 +==== in4-3.10 + SELECT * FROM t3 WHERE oid IN () +---- +stmt 0 err 1 -1 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 +==== in4-3.12 + SELECT * FROM t3 WHERE x IN (1, 2) AND y IN () +---- +stmt 0 err 1 -1 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 +==== in4-3.22 + + SELECT * FROM t3 WHERE x IN (10) AND y=10; +---- +stmt 0 err 1 -1 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 +==== in4-3.24 + + SELECT * FROM t3 WHERE x=1 AND y NOT IN (10); +---- +stmt 0 err 1 -1 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 +==== 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 +==== in4-3.31 + + DROP INDEX t3i1; + CREATE UNIQUE INDEX t3xy ON t3(x,y); + + SELECT *, '|' FROM t3 A, t3 B + 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 +==== in4-3.32 + + EXPLAIN QUERY PLAN + SELECT *, '|' FROM t3 A, t3 B + 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 +==== 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 +==== in4-3.34 + + EXPLAIN QUERY PLAN + 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 +==== in4-3.41 + + SELECT * FROM t3 WHERE x IN (10,11); +---- +stmt 0 err 1 -1 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 +==== in4-3.43 + + SELECT * FROM t3 WHERE x IN (10); +---- +stmt 0 err 1 -1 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 +==== in4-3.46 + + EXPLAIN + SELECT * FROM t3 WHERE x NOT IN (10,11,99999); +---- +stmt 0 err 1 -1 no such table: t3 +==== in4-3.47 + + SELECT * FROM t3 WHERE x NOT IN (10); +---- +stmt 0 err 1 -1 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 +==== in4-4.1 + + CREATE TABLE t4a(a TEXT, b TEXT COLLATE nocase, c); + INSERT INTO t4a VALUES('ABC','abc',1); + INSERT INTO t4a VALUES('def','xyz',2); + INSERT INTO t4a VALUES('ghi','ghi',3); + 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 +==== in4-4.2 + + SELECT c FROM t4a WHERE b=a ORDER BY c; +---- +stmt 0 err 1 -1 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 +==== in4-4.4 + + SELECT c FROM t4a WHERE (a||'')=(b||'') ORDER BY c; +---- +stmt 0 err 1 -1 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 +==== in4-4.6 + + SELECT c FROM t4a WHERE (a||'') IN (b) ORDER BY c; +---- +stmt 0 err 1 -1 no such table: t4a +==== in4-4.11 + + CREATE TABLE t4b(a TEXT, b NUMERIC, c); + INSERT INTO t4b VALUES('1.0',1,4); + 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 +==== in4-4.12 + + SELECT c FROM t4b WHERE b=a; +---- +stmt 0 err 1 -1 no such table: t4b +==== in4-4.13 + + SELECT c FROM t4b WHERE +a=b; +---- +stmt 0 err 1 -1 no such table: t4b +==== in4-4.14 + + SELECT c FROM t4b WHERE a=+b; +---- +stmt 0 err 1 -1 no such table: t4b +==== in4-4.15 + + SELECT c FROM t4b WHERE +b=a; +---- +stmt 0 err 1 -1 no such table: t4b +==== in4-4.16 + + SELECT c FROM t4b WHERE b=+a; +---- +stmt 0 err 1 -1 no such table: t4b +==== in4-4.17 + + SELECT c FROM t4b WHERE a IN (b); +---- +stmt 0 err 1 -1 no such table: t4b +==== in4-4.18 + + SELECT c FROM t4b WHERE b IN (a); +---- +stmt 0 err 1 -1 no such table: t4b +==== in4-4.19 + + SELECT c FROM t4b WHERE +b IN (a); +---- +stmt 0 err 1 -1 no such table: t4b +==== in4-5.1 + + CREATE TABLE t5(c INTEGER PRIMARY KEY, d TEXT COLLATE nocase); + INSERT INTO t5 VALUES(17, 'fuzz'); + SELECT 1 FROM t5 WHERE 'fuzz' IN (d); -- match + SELECT 2 FROM t5 WHERE 'FUZZ' IN (d); -- no match + SELECT 3 FROM t5 WHERE d IN ('fuzz'); -- match + 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 +==== in4-6.1 + + CREATE TABLE t6a(a INTEGER PRIMARY KEY, b); + INSERT INTO t6a VALUES(1,2),(3,4),(5,6); + CREATE TABLE t6b(c INTEGER PRIMARY KEY, d); + INSERT INTO t6b VALUES(4,44),(5,55),(6,66); + + SELECT * FROM t6a, t6b WHERE a=3 AND b IN (c); +---- +stmt 0 ok +stmt 46 err 1 -1 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 +==== 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 +==== in4-6.2 + + SELECT * FROM t6a, t6b WHERE a=3 AND c IN (b); +---- +stmt 0 err 1 -1 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 +==== 7.0 + + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(d, e); + CREATE INDEX t1bc ON t1(c, b); + INSERT INTO t2(e) VALUES(1); + INSERT INTO t1 VALUES(NULL, NULL, NULL); +---- +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 +==== 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 +==== 7.2 + + CREATE VIRTUAL TABLE t1 USING rtree(a, b, c); + CREATE TABLE t2(d INTEGER, e INT); + INSERT INTO t2(e) VALUES(1); +---- +stmt 0 ok +stmt 50 ok +stmt 89 err 1 -1 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 +==== 8.0 + + CREATE TABLE t1(x INTEGER PRIMARY KEY, y); + CREATE UNIQUE INDEX t1y ON t1(y); + INSERT INTO t1 VALUES(111, 'AAA'),(222, 'BBB'),(333, 'CCC'); + CREATE TABLE t2(z); + INSERT INTO t2 VALUES('BBB'),('AAA'); + ANALYZE sqlite_schema; + 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 144 ok +stmt 166 err 1 -1 no such table: t2 +stmt 206 ok +stmt 231 err 1 -1 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 +==== 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 +==== 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 +==== 9.0 + + CREATE TABLE node(node_id INTEGER PRIMARY KEY); + CREATE TABLE edge(node_from INT, node_to INT); + CREATE TABLE sub_nodes(node_id INTEGER PRIMARY KEY); + CREATE INDEX edge_from_to ON edge(node_from,node_to); + CREATE INDEX edge_to_from ON edge(node_to,node_from); + ANALYZE; + DELETE FROM sqlite_stat1; + INSERT INTO sqlite_stat1 VALUES + ('sub_nodes',NULL,'1000000'), + ('edge','edge_to_from','20000000 2 2'), + ('edge','edge_from_to','20000000 2 2'), + ('node',NULL,'10000000'); + ANALYZE sqlite_schema; +---- +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 266 ok +stmt 277 err 1 -1 no such table: sqlite_stat1 +stmt 305 err 1 -1 no such table: sqlite_stat1 +stmt 491 ok +==== 10.0 + + CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,b,c)) WITHOUT ROWID; + INSERT INTO t1(a,b,c,d) VALUES + (0,-2,2,3), + (0,2,3,4), + (0,5,8,10), + (1,7,11,13); + ANALYZE sqlite_schema; + INSERT INTO sqlite_stat1 VALUES('t1','t1','10 3 2 1'); + ANALYZE sqlite_schema; + PRAGMA reverse_unordered_selects(1); + 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 158 ok +stmt 183 err 1 -1 no such table: sqlite_stat1 +stmt 240 ok +stmt 265 ok +stmt 304 err 1 -1 no such table: t1 +==== 11.0 + + CREATE TABLE t1(a TEXT, b INT, c INT, d INT); + INSERT INTO t1 VALUES('abc',123,4,5); + INSERT INTO t1 VALUES('xyz',1,'abcdefxyz',99); + CREATE INDEX t1abc ON t1(b,b,c); + ANALYZE sqlite_schema; + INSERT INTO sqlite_stat1 VALUES('t1','t1abc','10000 5 00 2003 10'); + 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 172 ok +stmt 197 err 1 -1 no such table: sqlite_stat1 +stmt 268 ok +==== 11.1 + + SELECT * FROM t1 + WHERE b IN (345, (SELECT 1 FROM t1 + WHERE b IN (coalesce(1,random())) + AND c GLOB 'abc*xyz')) + AND c BETWEEN 'abc' AND 'xyz'; +---- +stmt 0 err 1 -1 no such table: t1 +==== 11.2 + + EXPLAIN SELECT * FROM t1 + WHERE b IN (345, (SELECT 1 FROM t1 + WHERE b IN (coalesce(1,random())) + AND c GLOB 'abc*xyz')) + AND c BETWEEN 'abc' AND 'xyz'; +---- +stmt 0 err 1 -1 no such table: t1 +==== 12.0 + + CREATE TABLE t1(a,b,c); + CREATE INDEX t1abc ON t1(a,b,c); + CREATE INDEX t1bca on t1(b,c,a); + INSERT INTO t1 VALUES(56,1119,1115); + INSERT INTO t1 VALUES(57,1147,1137); + INSERT INTO t1 VALUES(100,1050,1023); + INSERT INTO t1 VALUES(101,1050,1023); + ANALYZE sqlite_schema; + INSERT INTO sqlite_stat1 VALUES('t1','t1abc','358677 2 2 1'); + INSERT INTO sqlite_stat1 VALUES('t1','t1bca','358677 4 2 1'); + ANALYZE sqlite_schema; + SELECT * FROM t1 NOT INDEXED + WHERE (b = 1137 AND c IN (97, 98)) + 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 254 ok +stmt 279 err 1 -1 no such table: sqlite_stat1 +stmt 343 err 1 -1 no such table: sqlite_stat1 +stmt 407 ok +stmt 432 err 1 -1 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 +==== 13.0 + + CREATE TABLE t1(id INTEGER PRIMARY KEY, a INT, b INT, c INT); + INSERT INTO t1 VALUES(10,1,2,5); + INSERT INTO t1 VALUES(20,1,3,5); + INSERT INTO t1 VALUES(30,1,2,4); + INSERT INTO t1 VALUES(40,1,3,4); + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1 VALUES('t1','t1x','84000 3 2 1'); + CREATE INDEX t1x ON t1(a,b,c); + PRAGMA writable_schema=RESET; + SELECT * FROM t1 + WHERE a=1 + AND b IN (2,3) + AND c BETWEEN 4 AND 5 + 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 204 ok +stmt 229 err 1 -1 no such table: sqlite_stat1 +stmt 290 err 1 -1 no such table: main.t1 +stmt 323 ok +stmt 355 err 1 -1 no such table: t1 diff --git a/parser/testdata/in5.metadata.json b/parser/testdata/in5.metadata.json new file mode 100644 index 0000000..1166648 --- /dev/null +++ b/parser/testdata/in5.metadata.json @@ -0,0 +1,41 @@ +{ + "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/in5.test b/parser/testdata/in5.test new file mode 100644 index 0000000..d3a68e0 --- /dev/null +++ b/parser/testdata/in5.test @@ -0,0 +1,285 @@ +==== in5-1.1 + + CREATE TABLE t1x(x INTEGER PRIMARY KEY); + INSERT INTO t1x VALUES(1),(3),(5),(7),(9); + CREATE TABLE t1y(y INTEGER UNIQUE); + INSERT INTO t1y VALUES(2),(4),(6),(8); + CREATE TABLE t1z(z TEXT UNIQUE); + INSERT INTO t1z VALUES('a'),('c'),('e'),('g'); + CREATE TABLE t2(a INTEGER, b INTEGER, c TEXT, d TEXT); + INSERT INTO t2 VALUES(1,2,'a','12a'),(1,2,'b','12b'), + (2,3,'g','23g'),(3,5,'c','35c'), + (4,6,'h','46h'),(5,6,'e','56e'); + CREATE TABLE t3x AS SELECT x FROM t1x; + CREATE TABLE t3y AS SELECT y FROM t1y; + CREATE TABLE t3z AS SELECT z FROM t1z; + 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 92 ok +stmt 132 err 1 -1 no such table: t1y +stmt 175 ok +stmt 212 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 6.1.1 + + CREATE TABLE t1(a COLLATE nocase); + INSERT INTO t1 VALUES('one'); + 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 +==== 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 +==== 6.2.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, 4); + INSERT INTO t3 VALUES(2, 5); + INSERT INTO t3 VALUES(2, 6); + INSERT INTO t3 VALUES(3, 7); + INSERT INTO t3 VALUES(3, 8); + 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 +==== 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 +==== 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 +==== 6.3.1 + + CREATE TABLE x1(a); + CREATE TABLE x2(b); + INSERT INTO x1 VALUES(1), (1), (2); + INSERT INTO x2 VALUES(1), (2); + SELECT count(*) FROM x2 WHERE b IN (SELECT DISTINCT a FROM x1 LIMIT 2); +---- +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 +==== 7.1 + + CREATE TABLE y1(a, b); + CREATE TABLE y2(c); + + INSERT INTO y1 VALUES(1, 'one'); + INSERT INTO y1 VALUES('two', 'two'); + INSERT INTO y1 VALUES(3, 'three'); + + INSERT INTO y2 VALUES('one'); + INSERT INTO y2 VALUES('two'); + INSERT INTO y2 VALUES('three'); +---- +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 +==== 7.2.1 + + SELECT a FROM y1 WHERE b NOT IN (SELECT a FROM y2); +---- +stmt 0 err 1 -1 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 +==== 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 +==== 7.3.2 + + SELECT a FROM y1 WHERE b IN (SELECT a FROM y2); +---- +stmt 0 err 1 -1 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 +==== 8.1 + + SELECT count(*) FROM n1 WHERE a IN (1, 2, 3) +---- +stmt 0 err 1 -1 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 +==== 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 +==== 8.4 + + SELECT count(*) FROM n1 WHERE a IN (SELECT +a FROM n1) +---- +stmt 0 err 1 -1 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 +==== 9.1 + + SELECT * FROM t9 WHERE a IN (44, 45, 44, 45) +---- +stmt 0 err 1 -1 no such table: t9 +==== 9.0.dup1 + + CREATE TABLE t0(c0); + CREATE VIEW v0(c0) AS SELECT LOWER(CAST('1e500' AS TEXT)) FROM t0; + INSERT INTO t0(c0) VALUES (NULL); +---- +stmt 0 ok +stmt 23 ok +stmt 92 err 1 -1 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 +==== 9.2 + + SELECT lower('1e500') FROM t0 WHERE rowid != lower('1e500'); +---- +stmt 0 err 1 -1 no such table: t0 +==== 10.0 + + CREATE TABLE t1(a, b TEXT COLLATE NOCASE); + INSERT INTO t1 VALUES('abc', 'def'); + 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 +==== 10.1 + + SELECT rowid FROM t1 WHERE (a, b) IN ( VALUES('abc', 'def'), ('ghi', 'JKL') ); +---- +stmt 0 err 1 -1 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 +==== 10.3 + + SELECT rowid FROM t1 WHERE (a, b) IN ( VALUES('abc', 'def'), ('ghi', 'JKL') ); +---- +stmt 0 err 1 -1 no such table: t1 diff --git a/parser/testdata/keyword1.metadata.json b/parser/testdata/keyword1.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/keyword1.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/keyword1.test b/parser/testdata/keyword1.test new file mode 100644 index 0000000..e69de29 diff --git a/parser/testdata/parser1.metadata.json b/parser/testdata/parser1.metadata.json new file mode 100644 index 0000000..8a87553 --- /dev/null +++ b/parser/testdata/parser1.metadata.json @@ -0,0 +1,13 @@ +{ + "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/parser1.test b/parser/testdata/parser1.test new file mode 100644 index 0000000..fd1b502 --- /dev/null +++ b/parser/testdata/parser1.test @@ -0,0 +1,89 @@ +==== parser1-1.1 + + CREATE TABLE t1( + a TEXT PRIMARY KEY, + b TEXT, + FOREIGN KEY(b COLLATE nocase DESC) REFERENCES t1(a COLLATE binary ASC) + ); +---- +stmt 0 err 1 -1 syntax error after column name "b" +==== parser1-1.2 + + CREATE TABLE t1( + a TEXT PRIMARY KEY, + b TEXT, + FOREIGN KEY(b) REFERENCES t1(a) + ); + INSERT INTO t1 VALUES('abc',NULL),('xyz','abc'); + PRAGMA writable_schema=on; + UPDATE sqlite_master SET sql='CREATE TABLE t1( + a TEXT PRIMARY KEY, + b TEXT, + FOREIGN KEY(b COLLATE nocase) REFERENCES t1(a) + )' WHERE name='t1'; + SELECT name FROM sqlite_master WHERE sql LIKE '%collate%'; +---- +stmt 0 ok +stmt 96 err 1 -1 no such table: t1 +stmt 147 ok +stmt 176 ok +stmt 334 ok +==== parser1-1.4 + + UPDATE sqlite_master SET sql='CREATE TABLE t1( + a TEXT PRIMARY KEY, + b TEXT, + FOREIGN KEY(b ASC) REFERENCES t1(a) + )' 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 147 ok +==== parser1-2.1 + + WITH RECURSIVE + 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" +==== 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" +==== parser1-3.1 + + CREATE TABLE t300(id INTEGER PRIMARY KEY); + CREATE TABLE t301( + id INTEGER PRIMARY KEY, + c1 INTEGER NOT NULL, + c2 INTEGER NOT NULL, + c3 BOOLEAN NOT NULL DEFAULT 0, + FOREIGN KEY(c1) REFERENCES t300(id) ON DELETE CASCADE ON UPDATE RESTRICT + /* no comma */ + FOREIGN KEY(c2) REFERENCES t300(id) ON DELETE CASCADE ON UPDATE RESTRICT + /* no comma */ + UNIQUE(c1, c2) + ); + PRAGMA foreign_key_list(t301); +---- +stmt 0 ok +stmt 45 ok +stmt 403 ok +==== parser1-4.2 + + SELECT max(x) AND 0 FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== parser1-4.3 + + SELECT max(x) IN () FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== parser1-4.4 + + SELECT max(x) NOT IN () FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 diff --git a/parser/testdata/returning1.metadata.json b/parser/testdata/returning1.metadata.json new file mode 100644 index 0000000..07d8c23 --- /dev/null +++ b/parser/testdata/returning1.metadata.json @@ -0,0 +1,89 @@ +{ + "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/returning1.test b/parser/testdata/returning1.test new file mode 100644 index 0000000..50c4fd7 --- /dev/null +++ b/parser/testdata/returning1.test @@ -0,0 +1,613 @@ +==== 1.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY,b,c DEFAULT 'pax'); + INSERT INTO t1(b) VALUES(10),('happy'),(NULL) RETURNING a,b,c; +---- +stmt 0 ok +stmt 60 err 1 -1 no such table: t1 +==== 1.1 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 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 +==== 1.3 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.4 + + INSERT INTO t1 DEFAULT VALUES RETURNING *; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.5 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 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 +==== 1.7 + + INSERT INTO t1 SELECT * FROM t2 RETURNING *; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.8 + + SELECT *, '|' FROM t1; +---- +stmt 0 err 1 -1 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 +==== 2.2 + + SELECT *, '|' FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.1 + + DELETE FROM t1 WHERE c='bellum' RETURNING rowid, *, '|'; +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.2 + + SELECT *, '|' FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 4.1 + + CREATE TABLE t4(a INT, b INT DEFAULT 1234, c INT DEFAULT -16); + CREATE UNIQUE INDEX t4a ON t4(a); + 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 +==== 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 +==== 4.3 + + SELECT * FROM t4; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 5.0 + + CREATE TABLE t1(xyz); + CREATE TABLE t2(a as (1+1), b); +---- +stmt 0 ok +stmt 24 ok +==== 5.1 + + UPDATE t2 SET b='123' WHERE b='abc' RETURNING (SELECT b FROM t1); +---- +stmt 0 err 1 -1 no such table: t2 +==== 5.2 + + INSERT INTO t2(b) VALUES('abc'); +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 6.0 + + CREATE TABLE t1(id INTEGER PRIMARY KEY); + CREATE TABLE t2(x INT, y INT); + INSERT INTO t1 VALUES(1),(2),(4),(9); + INSERT INTO t2 VALUES(3,7), (4,25), (5,99); + UPDATE t1 SET id=id+y FROM t2 WHERE t1.id=t2.x RETURNING 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 +==== 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 +==== 7.1 + + CREATE TABLE t1(a INT, b INT); + CREATE TABLE t2(x INT, y INT); + INSERT INTO t1(a,b) VALUES(1,2); + INSERT INTO t2(x,y) VALUES(1,30); +---- +stmt 0 ok +stmt 33 ok +stmt 66 err 1 -1 no such table: t1 +stmt 101 err 1 -1 no such table: t2 +==== 7.2 + + UPDATE t1 SET b=b+1 RETURNING new.b; +---- +stmt 0 err 1 -1 no such table: t1 +==== 7.3 + + UPDATE t1 SET b=b+1 RETURNING old.b; +---- +stmt 0 err 1 -1 no such table: t1 +==== 7.4 + + UPDATE t1 SET b=b+1 RETURNING another.b; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 7.7 + + UPDATE t1 AS alias SET b=123 RETURNING alias.b; +---- +stmt 0 err 1 -1 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 +==== 8.1 + + CREATE TABLE t1(a); + CREATE TABLE t2(b,c); + INSERT INTO t1 VALUES(1); + INSERT INTO t2 VALUES(3,40); +---- +stmt 0 ok +stmt 22 ok +stmt 46 err 1 -1 no such table: t1 +stmt 74 err 1 -1 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 +==== 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 +==== 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 +==== 9.1 + + UPDATE pragma_encoding SET encoding='UTF-8' RETURNING a, b, *; +---- +stmt 0 err 1 -1 table pragma_encoding may not be modified +==== 10.1 + + CREATE TABLE t1_a(a, b); + CREATE VIEW t1 AS SELECT a, b FROM t1_a; + + INSERT INTO t1_a VALUES('x', 'y'); + INSERT INTO t1_a VALUES('x', 'y'); + INSERT INTO t1_a VALUES('x', 'y'); + + CREATE TABLE log(op, r, a, b); +---- +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 182 ok +==== 10.2 + + CREATE TRIGGER tr1 INSTEAD OF INSERT ON t1 BEGIN + INSERT INTO log VALUES('insert', new.rowid, new.a, new.b); + END; + CREATE TRIGGER tr2 INSTEAD OF UPDATE ON t1 BEGIN + 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 +==== 10.3a + + INSERT INTO t1(a, b) VALUES(1234, 5678) RETURNING rowid; +---- +stmt 0 err 1 -1 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 +==== 10.4 + + SELECT * FROM log; +---- +stmt 0 err 1 -1 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 +==== 10.3b.dup1 + + UPDATE t1 SET a='z' WHERE b='y' RETURNING rowid; +---- +stmt 0 err 1 -1 no such table: t1 +==== 10.4.dup1 + + SELECT * FROM log; +---- +stmt 0 err 1 -1 no such table: log +==== 11.1 + + CREATE TEMP TABLE t1(a,b); + CREATE TEMP TABLE t2(c,d); + CREATE TEMP TABLE t3(e,f); + CREATE TEMP TABLE log(op,x,y); + CREATE TEMP TRIGGER t1r1 AFTER INSERT ON t1 BEGIN + INSERT INTO log(op,x,y) VALUES('I1',new.a,new.b); + END; + CREATE TEMP TRIGGER t1r2 BEFORE DELETE ON t1 BEGIN + INSERT INTO log(op,x,y) VALUES('D1',old.a,old.b); + END; + CREATE TEMP TRIGGER t2r3 AFTER UPDATE ON t1 BEGIN + INSERT INTO log(op,x,y) VALUES('U1',new.a,new.b); + END; + CREATE TEMP TRIGGER t2r1 BEFORE INSERT ON t2 BEGIN + INSERT INTO log(op,x,y) VALUES('I2',new.c,new.d); + END; + CREATE TEMP TRIGGER t3r1 AFTER DELETE ON t3 BEGIN + INSERT INTO log(op,x,y) VALUES('D3',old.e,old.f); + END; + CREATE TEMP TRIGGER t3r2 BEFORE UPDATE ON t3 BEGIN + INSERT INTO log(op,x,y) VALUES('U3',new.e,new.f); + END; + INSERT INTO t1(a,b) VALUES(1,2),('happy','glad') RETURNING a, b, '|'; +---- +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 +==== 11.2 + + UPDATE t1 SET b=9 WHERE a=1 RETURNING a, b, 'x'; +---- +stmt 0 err 1 -1 no such table: t1 +==== 11.3 + + DELETE FROM t1 WHERE a<>'xray' RETURNING a, b, '@'; +---- +stmt 0 err 1 -1 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 +==== 11.5 + + INSERT INTO t2 VALUES('bravo','charlie') RETURNING d, c, 'z'; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 11.11 + + CREATE TEMP TABLE t1(a,b); + CREATE TRIGGER r1 BEFORE INSERT ON t1 BEGIN SELECT 1; END; + DELETE FROM t1 RETURNING *; + DROP TRIGGER r1; + 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 +==== 11.12 + + SELECT * FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 13.0 + + CREATE VIRTUAL TABLE t1 USING rtree(a, b, c); + CREATE TABLE t2(x); +---- +stmt 0 ok +stmt 48 ok +==== 13.1 + + INSERT INTO t1(a,b,c) VALUES(1,2,3) + RETURNING (SELECT b FROM t2); +---- +stmt 0 err 1 -1 no such table: t1 +==== 14.0 + + PRAGMA foreign_keys(1); + CREATE TABLE Parent(id INTEGER PRIMARY KEY); + CREATE TABLE Child(id INTEGER PRIMARY KEY, parent_id INTEGER REFERENCES Parent(id)); +---- +stmt 0 ok +stmt 26 ok +stmt 73 ok +==== 14.1 + + INSERT INTO child(parent_id) VALUES(123) RETURNING id; +---- +stmt 0 err 1 -1 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 +==== 15.1 + + UPDATE t1 SET x=x+1 RETURNING x, affinity(x); +---- +stmt 0 err 1 -1 no such table: t1 +==== 15.2 + + DELETE FROM t1 RETURNING x, affinity(x); +---- +stmt 0 err 1 -1 no such table: t1 +==== 16.0 + + CREATE TABLE t1(a,b,c); + INSERT INTO t1 VALUES(1,2,3),('a','b','c'); + CREATE TEMP TABLE t2(x,y,z); + INSERT INTO t2 SELECT * FROM t1 RETURNING *; +---- +stmt 0 ok +stmt 26 err 1 -1 no such table: t1 +stmt 72 ok +stmt 103 err 1 -1 no such table: t2 +==== 16.1 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 no such table: t2 +==== returning1-generated + + INSERT INTO foo (fooval) VALUES (17), (4711), (17) + ON CONFLICT DO + UPDATE SET refcnt = refcnt+1 + RETURNING fooid; +---- +stmt 0 err 1 -1 no such table: foo +==== 17.0 + + CREATE TABLE bug(id INTEGER PRIMARY KEY NOT NULL, x); + INSERT INTO bug(id,x) VALUES(20, NULL); + 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 +==== 18.0 + + CREATE TABLE v0(c1 INT); + CREATE VIEW view_2(c1) AS SELECT CASE WHEN c1 COLLATE TRUE THEN TRUE ELSE TRUE END FROM v0; + CREATE TRIGGER x1 INSTEAD OF INSERT ON view_2 BEGIN SELECT true; END; +---- +stmt 0 ok +stmt 27 ok +stmt 121 err 1 -1 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 +==== 19.0 + + DROP TABLE IF EXISTS t1;CREATE TABLE t1(a); + CREATE TRIGGER r1 AFTER UPDATE ON t1 BEGIN VALUES(0); END; +---- +stmt 0 ok +stmt 27 ok +stmt 46 err 1 -1 no such table: main.t1 +==== 19.1 + + CREATE TRIGGER IF NOT EXISTS r1 AFTER DELETE ON t1 BEGIN + INSERT INTO t1(a) VALUES (1) RETURNING FALSE; + INSERT INTO t1(a) VALUES (2) RETURNING TRUE; + END; +---- +stmt 0 err 1 -1 no such table: main.t1 +==== 20.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT); + INSERT INTO t1 VALUES(1,10),(2,20),(3,30),(4,40),(6,60),(8,80); + BEGIN; + DELETE FROM t1 WHERE a<>3 + RETURNING a, + (SELECT min(a) FROM t1), + (SELECT max(a) FROM t1), + (SELECT round(avg(a),2) FROM t1); + ROLLBACK; +---- +stmt 0 ok +stmt 49 err 1 -1 no such table: t1 +stmt 115 ok +stmt 124 err 1 -1 no such table: t1 +stmt 295 ok +==== 20.2 + + BEGIN; + DELETE FROM t1 + RETURNING a, + (SELECT min(a) FROM t1), + (SELECT max(a) FROM t1), + (SELECT round(avg(a),2) FROM t1); + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 no such table: t1 +stmt 169 ok +==== 20.3 + + BEGIN; + DELETE FROM t1 + RETURNING a, + (SELECT min(t2.a)+t1.a*100 FROM t1 AS t2), + (SELECT max(t2.a)+t1.a*100 FROM t1 AS t2), + (SELECT round(avg(t2.a),2)+t1.a*100 FROM t1 AS t2); + ROLLBACK; +---- +stmt 0 ok +stmt 9 err 1 -1 no such table: t1 +stmt 223 ok +==== 21.0 + + PRAGMA writable_schema=ON; + INSERT INTO sqlite_schema DEFAULT VALUES RETURNING sqlite_schema.name; +---- +stmt 0 ok +stmt 29 ok +==== 21.1 + + 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 +==== 22.0 + + PRAGMA writable_schema=ON; + CREATE TABLE xyz (a); +---- +stmt 0 ok +stmt 29 ok +==== 22.1 + + INSERT INTO sqlite_temp_schema DEFAULT VALUES + 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 +==== 23.0 + + PRAGMA recursive_triggers = 1; + CREATE TABLE t1(x, y); + CREATE TRIGGER t1insert AFTER INSERT ON t1 WHEN new.x<5 BEGIN + INSERT INTO t1 VALUES(new.x+1, new.y); + END; +---- +stmt 0 ok +stmt 33 ok +stmt 58 err 1 -1 no such table: main.t1 +==== 23.1 + + INSERT INTO t1 VALUES(1, 'one') RETURNING *; +---- +stmt 0 err 1 -1 no such table: t1 +==== 23.2 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 24.0 + + CREATE VIRTUAL TABLE ft USING fts5(c); + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('x'); +---- +stmt 0 ok +stmt 43 ok +stmt 67 err 1 -1 no such table: t1 +==== 24.1 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 24.3 + + INSERT INTO ft VALUES('hello world') RETURNING * +---- +stmt 0 err 1 -1 no such table: ft diff --git a/parser/testdata/select1.metadata.json b/parser/testdata/select1.metadata.json new file mode 100644 index 0000000..0773d25 --- /dev/null +++ b/parser/testdata/select1.metadata.json @@ -0,0 +1,91 @@ +{ + "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/select1.test b/parser/testdata/select1.test new file mode 100644 index 0000000..b9ec87a --- /dev/null +++ b/parser/testdata/select1.test @@ -0,0 +1,570 @@ +==== select1-1.4 +SELECT f1 FROM test1 +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-1.5 +SELECT f2 FROM test1 +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-1.6 +SELECT f2, f1 FROM test1 +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-1.7 +SELECT f1, f2 FROM test1 +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-1.8 +SELECT * FROM test1 +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-1.8.1 +SELECT *, * FROM test1 +---- +stmt 0 err 1 -1 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 +==== select1-1.8.3 +SELECT 'one', *, 'two', * FROM test1 +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-1.9 +SELECT * FROM test1, test2 +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-1.9.1 +SELECT *, 'hi' FROM test1, test2 +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-1.9.2 +SELECT 'one', *, 'two', * FROM test1, test2 +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-1.10 +SELECT test1.f1, test2.r1 FROM test1, test2 +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-1.11 +SELECT test1.f1, test2.r1 FROM test2, test1 +---- +stmt 0 err 1 -1 no such table: test2 +==== select1-1.11.1 +SELECT * FROM test2, test1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== select1-2.5.1 +SELECT count(*),count(a),count(b) FROM t3 +---- +stmt 0 err 1 -1 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 +==== select1-2.5.3 +SELECT count(*),count(a),count(b) FROM t4 WHERE b=5 +---- +stmt 0 err 1 -1 no such table: t4 +==== select1-2.8.1 +SELECT coalesce(min(a),'xyzzy') FROM t3 +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-2.8.2 +SELECT min(coalesce(a,'xyzzy')) FROM t3 +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-2.8.3 +SELECT min(b), min(b) FROM t4 +---- +stmt 0 err 1 -1 no such table: t4 +==== select1-2.13.1 +SELECT coalesce(max(a),'xyzzy') FROM t3 +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-2.13.2 +SELECT max(coalesce(a,'xyzzy')) FROM t3 +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-2.17.1 +SELECT sum(a) FROM t3 +---- +stmt 0 err 1 -1 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 +==== 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 +==== select1-4.5 + + INSERT INTO test1(f1) SELECT f1 FROM test1 ORDER BY min(f1); +---- +stmt 0 err 1 -1 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 +==== select1-4.6 + + SELECT f1 FROM test1 ORDER BY '8.4' +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-4.8 + + CREATE TABLE t5(a,b); + INSERT INTO t5 VALUES(1,10); + INSERT INTO t5 VALUES(2,9); + 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 +==== select1-4.9.1 + + SELECT * FROM t5 ORDER BY 2; +---- +stmt 0 err 1 -1 no such table: t5 +==== select1-4.9.2 + + SELECT * FROM t5 ORDER BY +2; +---- +stmt 0 err 1 -1 no such table: t5 +==== select1-4.10.1 + + SELECT * FROM t5 ORDER BY 3; +---- +stmt 0 err 1 -1 no such table: t5 +==== select1-4.10.2 + + SELECT * FROM t5 ORDER BY -1; +---- +stmt 0 err 1 -1 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 +==== select1-4.12 + + SELECT * FROM t5 ORDER BY 1 DESC, b; +---- +stmt 0 err 1 -1 no such table: t5 +==== select1-4.13 + + SELECT * FROM t5 ORDER BY b DESC, 1; +---- +stmt 0 err 1 -1 no such table: t5 +==== select1-6.20 + + CREATE TABLE t6(a TEXT, b TEXT); + INSERT INTO t6 VALUES('a','0'); + INSERT INTO t6 VALUES('b','1'); + INSERT INTO t6 VALUES('c','2'); + INSERT INTO t6 VALUES('d','3'); + SELECT a FROM t6 WHERE b IN + (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x + 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 +==== 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 +==== select1-6.22 + + SELECT a FROM t6 WHERE b IN + (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x + ORDER BY b LIMIT 2) + ORDER BY a; +---- +stmt 0 err 1 -1 no such table: t6 +==== select1-6.23 + + SELECT a FROM t6 WHERE b IN + (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x + ORDER BY x DESC LIMIT 2) + ORDER BY a; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== select1-8.3 + + SELECT f1 FROM test1 WHERE 5-3==2 + ORDER BY f1 +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-8.4 + + SELECT coalesce(f1/(f1-11),'x'), + coalesce(min(f1/(f1-11),5),'y'), + coalesce(max(f1/(f1-33),6),'z') + FROM test1 ORDER BY f1 +---- +stmt 0 err 1 -1 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 +==== select1-10.1 + + SELECT f1 AS x FROM test1 ORDER BY x +---- +stmt 0 err 1 -1 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 +==== select1-10.3 + + SELECT f1-23 AS x FROM test1 ORDER BY abs(x) +---- +stmt 0 err 1 -1 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 +==== select1-10.5 + + SELECT f1-22 AS x, f2-22 as y FROM test1 +---- +stmt 0 err 1 -1 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 +==== select1-10.7 + + SELECT f1 COLLATE nocase AS x FROM test1 ORDER BY x +---- +stmt 0 err 1 -1 no such table: test1 +==== select1-11.1 + + DELETE FROM t3; + DELETE FROM t4; + INSERT INTO t3 VALUES(1,2); + 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 +==== select1-11.2.1 + + SELECT * FROM t3, t4; +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-11.4.1 + + SELECT t3.*, t4.b FROM t3, t4; +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-11.4.2 + + SELECT "t3".*, t4.b FROM t3, t4; +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-11.7 + + SELECT t3.b, t4.* FROM t3, t4; +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-11.10 + + SELECT t5.* FROM t3, t4; +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-11.11 + + SELECT t3.* FROM t3 AS x, t4; +---- +stmt 0 err 1 -1 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 +==== select1-12.5 + + SELECT * FROM t3 UNION SELECT 3 AS 'a', 4 ORDER BY a; +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-12.6 + + SELECT 3, 4 UNION SELECT * FROM t3; +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-12.7 + + SELECT * FROM t3 WHERE a=(SELECT 1); +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-12.8 + + SELECT * FROM t3 WHERE a=(SELECT 2); +---- +stmt 0 err 1 -1 no such table: t3 +==== select1-14.1 + + SELECT * FROM sqlite_master WHERE rowid>10; + SELECT * FROM sqlite_master WHERE rowid=10; + SELECT * FROM sqlite_master WHERE rowid<10; + SELECT * FROM sqlite_master WHERE rowid<=10; + SELECT * FROM sqlite_master WHERE rowid>=10; + SELECT * FROM sqlite_master; +---- +stmt 0 ok +stmt 49 ok +stmt 98 ok +stmt 146 ok +stmt 195 ok +stmt 244 ok +==== select1-14.2 + + SELECT 10 IN (SELECT rowid FROM sqlite_master); +---- +stmt 0 ok +==== select1-15.1 + + CREATE TABLE t1(a); + CREATE INDEX i1 ON t1(a); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + 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 +==== select1-15.3 + SELECT 2 IN (SELECT a FROM t1) +---- +stmt 0 err 1 -1 no such table: t1 +==== select1-16.1 +SELECT 1 FROM (SELECT *) +---- +stmt 0 err 1 -1 no tables specified +==== select1-16.2 + + SELECT 1 FROM sqlite_master LIMIT 1,#1; +---- +stmt 0 err 1 -1 near "#1": syntax error +==== select1-17.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(x); INSERT INTO t1 VALUES(1); + CREATE TABLE t2(y,z); INSERT INTO t2 VALUES(2,3); + CREATE INDEX t2y ON t2(y); + SELECT * FROM t1,(SELECT * FROM t2 WHERE y=2 ORDER BY y,z); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 76 err 1 -1 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 +==== 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 +==== 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 +==== select1-18.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(c); + CREATE TABLE t2(x PRIMARY KEY, y); + INSERT INTO t1(c) VALUES(123); + INSERT INTO t2(x) VALUES(123); + SELECT x FROM t2, t1 WHERE x BETWEEN c AND null OR x AND + x IN ((SELECT x FROM (SELECT x FROM t2, t1 + WHERE x BETWEEN (SELECT x FROM (SELECT x COLLATE rtrim + FROM t2, t1 WHERE x BETWEEN c AND null + OR x AND x IN (c)), t1 WHERE x BETWEEN c AND null + OR x AND x IN (c)) AND null + OR NOT EXISTS(SELECT -4.81 FROM t1, t2 WHERE x BETWEEN c AND null + OR x AND x IN ((SELECT x FROM (SELECT x FROM t2, t1 + WHERE x BETWEEN (SELECT x FROM (SELECT x BETWEEN c AND null + OR x AND x IN (c)), t1 WHERE x BETWEEN c AND null + OR x AND x IN (c)) AND null + OR x AND x IN (c)), t1 WHERE x BETWEEN c AND null + OR x AND x IN (c)))) AND x IN (c) + ), t1 WHERE x BETWEEN c AND null + OR x AND x IN (c))); +---- +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 +==== select1-18.2 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(c); + CREATE TABLE t2(x PRIMARY KEY, y); + INSERT INTO t1(c) VALUES(123); + INSERT INTO t2(x) VALUES(123); + SELECT x FROM t2, t1 WHERE x BETWEEN c AND (c+1) OR x AND + x IN ((SELECT x FROM (SELECT x FROM t2, t1 + WHERE x BETWEEN (SELECT x FROM (SELECT x COLLATE rtrim + FROM t2, t1 WHERE x BETWEEN c AND (c+1) + OR x AND x IN (c)), t1 WHERE x BETWEEN c AND (c+1) + OR x AND x IN (c)) AND (c+1) + OR NOT EXISTS(SELECT -4.81 FROM t1, t2 WHERE x BETWEEN c AND (c+1) + OR x AND x IN ((SELECT x FROM (SELECT x FROM t2, t1 + WHERE x BETWEEN (SELECT x FROM (SELECT x BETWEEN c AND (c+1) + OR x AND x IN (c)), t1 WHERE x BETWEEN c AND (c+1) + OR x AND x IN (c)) AND (c+1) + OR x AND x IN (c)), t1 WHERE x BETWEEN c AND (c+1) + OR x AND x IN (c)))) AND x IN (c) + ), t1 WHERE x BETWEEN c AND (c+1) + OR x AND x IN (c))); +---- +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 +==== select1-18.3 + + SELECT 1 FROM t1 WHERE ( + SELECT 2 FROM t2 WHERE ( + SELECT 3 FROM ( + SELECT x FROM t2 WHERE x=c OR x=(SELECT x FROM (VALUES(0))) + ) WHERE x>c OR x=c + ) + ); +---- +stmt 0 err 1 -1 no such table: t1 +==== select1-18.4 + + SELECT 1 FROM t1, t2 WHERE ( + SELECT 3 FROM ( + SELECT x FROM t2 WHERE x=c OR x=(SELECT x FROM (VALUES(0))) + ) WHERE x>c OR x=c + ); +---- +stmt 0 err 1 -1 no such table: t1 +==== select1-19.10 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); +---- +stmt 0 ok +stmt 27 ok +==== select1-19.20 + + INSERT INTO t1 + SELECT 1,2,3,4,5,6,7 + UNION ALL SELECT 1,2,3,4,5,6,7 + ORDER BY 1; +---- +stmt 0 err 1 -1 no such table: t1 +==== select1-19.21 + + INSERT INTO t1 + SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + 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 +==== select1-20.10 + + CREATE TABLE t1 ( + a INTEGER PRIMARY KEY, + b AS('Y') UNIQUE + ); + INSERT INTO t1(a) VALUES (10); + SELECT * FROM t1 JOIN t1 USING(a,b) + WHERE ((SELECT t1.a FROM t1 AS x GROUP BY b) AND b=0) + OR a = 10; +---- +stmt 0 ok +stmt 73 err 1 -1 no such table: t1 +stmt 106 err 1 -1 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 +==== select1-21.1 + + CREATE TABLE t1(a IMTEGES PRIMARY KEY,R); + CREATE TABLE t2(x UNIQUE); + CREATE VIEW v1a(z,y) AS SELECT x IS NULL, x FROM t2; + SELECT a,(+a)b,(+a)b,(+a)b,NOT EXISTS(SELECT null FROM t2),CASE z WHEN 487 THEN 992 WHEN 391 THEN 203 WHEN 10 THEN '?k1000 +---- +stmt 0 err 1 -1 no such table: tbl2 +==== select2-3.1 +SELECT f1 FROM tbl2 WHERE 1000=f2 +---- +stmt 0 err 1 -1 no such table: tbl2 +==== select2-3.2a +CREATE INDEX idx1 ON tbl2(f2) +---- +stmt 0 err 1 -1 no such table: main.tbl2 +==== select2-3.2b +SELECT f1 FROM tbl2 WHERE 1000=f2 +---- +stmt 0 err 1 -1 no such table: tbl2 +==== select2-3.2c +SELECT f1 FROM tbl2 WHERE f2=1000 +---- +stmt 0 err 1 -1 no such table: tbl2 +==== select2-4.1 + + CREATE TABLE aa(a); + CREATE TABLE bb(b); + INSERT INTO aa VALUES(1); + INSERT INTO aa VALUES(3); + INSERT INTO bb VALUES(2); + INSERT INTO bb VALUES(4); + SELECT * FROM aa, bb WHERE max(a,b)>2; +---- +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 +==== 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 +==== select2-4.3 + + SELECT * FROM aa CROSS JOIN bb WHERE NOT b; +---- +stmt 0 err 1 -1 no such table: aa +==== select2-4.4 + + SELECT * FROM aa, bb WHERE min(a,b); +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 diff --git a/parser/testdata/select3.metadata.json b/parser/testdata/select3.metadata.json new file mode 100644 index 0000000..7c6f47f --- /dev/null +++ b/parser/testdata/select3.metadata.json @@ -0,0 +1,57 @@ +{ + "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/select3.test b/parser/testdata/select3.test new file mode 100644 index 0000000..71757be --- /dev/null +++ b/parser/testdata/select3.test @@ -0,0 +1,327 @@ +==== select3-1.1 +SELECT count(*) FROM t1 +---- +stmt 0 err 1 -1 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 +==== select3-1.3 +SELECT max(n)/avg(n), max(log)/avg(log) FROM t1 +---- +stmt 0 err 1 -1 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 +==== select3-2.2 +SELECT log, min(n) FROM t1 GROUP BY log ORDER BY log +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== select3-2.10 + + SELECT log, count(*) FROM t1 GROUP BY 0 ORDER BY log; +---- +stmt 0 err 1 -1 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 +==== select3-2.12 + + SELECT log, count(*) FROM t1 GROUP BY 1 ORDER BY log; +---- +stmt 0 err 1 -1 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 +==== select3-2.14 + + SELECT log, count(*) FROM t1 GROUP BY; +---- +stmt 0 err 1 42 near ";": syntax error +==== select3-3.1 + + SELECT log, count(*) FROM t1 HAVING log>=4 +---- +stmt 0 err 1 -1 no such table: t1 +==== select3-3.2 + + SELECT count(*) FROM t1 HAVING log>=4 +---- +stmt 0 err 1 -1 no such table: t1 +==== select3-3.3 + + SELECT count(*) FROM t1 HAVING log!=400 +---- +stmt 0 err 1 -1 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 +==== select3-4.2 + + SELECT log, count(*) FROM t1 + GROUP BY log + HAVING count(*)>=4 + ORDER BY log +---- +stmt 0 err 1 -1 no such table: t1 +==== select3-4.3 + + SELECT log, count(*) FROM t1 + GROUP BY log + HAVING count(*)>=4 + ORDER BY max(n)+0 +---- +stmt 0 err 1 -1 no such table: t1 +==== select3-4.4 + + SELECT log AS x, count(*) AS y FROM t1 + GROUP BY x + HAVING y>=4 + ORDER BY max(n)+0 +---- +stmt 0 err 1 -1 no such table: t1 +==== select3-4.5 + + SELECT log AS x FROM t1 + GROUP BY x + HAVING count(*)>=4 + ORDER BY max(n)+0 +---- +stmt 0 err 1 -1 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 +==== 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 +==== select3-6.1 + + SELECT log, min(n) FROM t1 GROUP BY log ORDER BY log; +---- +stmt 0 err 1 -1 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 +==== select3-6.3 + + SELECT log, min(n) FROM t1 GROUP BY log ORDER BY 1; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== select3-6.7 + + SELECT log, min(n) FROM t1 GROUP BY log ORDER BY 1; +---- +stmt 0 err 1 -1 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 +==== select3-7.1 + + CREATE TABLE t2(a,b); + INSERT INTO t2 VALUES(1,2); + 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 +==== select3-7.2 + + SELECT a, sum(b) FROM t2 WHERE b=5; +---- +stmt 0 err 1 -1 no such table: t2 +==== select3-8.1 + + CREATE TABLE A ( + A1 DOUBLE, + A2 VARCHAR COLLATE NOCASE, + A3 DOUBLE + ); + INSERT INTO A VALUES(39136,'ABC',1201900000); + INSERT INTO A VALUES(39136,'ABC',1207000000); + 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 +==== select3-8.2 + + SELECT typeof(sum(a3)) FROM a GROUP BY a1; +---- +stmt 0 err 1 -1 no such table: a +==== select3-9.100 + + CREATE TABLE t0(c0 REAL, c1 REAL GENERATED ALWAYS AS (c0)); + INSERT INTO t0(c0) VALUES (1); + 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 +==== select3.10.100 + + CREATE TABLE t1(a, b); + CREATE TABLE t2(c, d); + SELECT max(t1.a), + (SELECT 'xyz' FROM (SELECT * FROM t2 WHERE 0) WHERE t1.b=1) + FROM t1; +---- +stmt 0 ok +stmt 25 ok +stmt 50 err 1 -1 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 +==== select3-generated.dup1 + + INSERT INTO t2 VALUES(123); + 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: t2 +stmt 32 err 1 -1 no such table: t1 +==== select3-generated.dup2 + + INSERT INTO t2 VALUES(1234); + 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: t2 +stmt 33 err 1 -1 no such table: t1 +==== 12.0 + + CREATE TABLE t1(a); + CREATE TABLE t2(x); +---- +stmt 0 ok +stmt 22 ok +==== 12.1 + + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 12.6 + + DELETE FROM t2; + DELETE FROM 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 +==== 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 +==== 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 diff --git a/parser/testdata/select4.metadata.json b/parser/testdata/select4.metadata.json new file mode 100644 index 0000000..ca2869b --- /dev/null +++ b/parser/testdata/select4.metadata.json @@ -0,0 +1,94 @@ +{ + "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/select4.test b/parser/testdata/select4.test new file mode 100644 index 0000000..285a450 --- /dev/null +++ b/parser/testdata/select4.test @@ -0,0 +1,703 @@ +==== select4-1.0 +SELECT DISTINCT log FROM t1 ORDER BY log +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-1.1c + + SELECT DISTINCT log FROM t1 + UNION ALL + SELECT n FROM t1 WHERE log=3 + ORDER BY log; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-1.1d + + CREATE TABLE t2 AS + SELECT DISTINCT log FROM t1 + UNION ALL + SELECT n FROM t1 WHERE log=3 + ORDER BY log; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 no such table: t1 +stmt 128 err 1 -1 no such table: t2 +==== select4-1.1e + + CREATE TABLE t2 AS + SELECT DISTINCT log FROM t1 + UNION ALL + SELECT n FROM t1 WHERE log=3 + 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 +==== 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 +==== select4-1.1g + + CREATE TABLE t2 AS + SELECT DISTINCT log FROM t1 + UNION ALL + 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 +==== select4-1.2 + + SELECT log FROM t1 WHERE n IN + (SELECT DISTINCT log FROM t1 UNION ALL + SELECT n FROM t1 WHERE log=3) + ORDER BY log; +---- +stmt 0 err 1 -1 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 +==== select4-2.1 + + SELECT DISTINCT log FROM t1 + UNION + SELECT n FROM t1 WHERE log=3 + ORDER BY log; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-2.2 + + SELECT log FROM t1 WHERE n IN + (SELECT DISTINCT log FROM t1 UNION + SELECT n FROM t1 WHERE log=3) + ORDER BY log; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-2.5 + + SELECT 123 AS x ORDER BY (SELECT x ORDER BY 1); +---- +stmt 0 ok +==== select4-3.1.1 + + SELECT DISTINCT log FROM t1 + EXCEPT + SELECT n FROM t1 WHERE log=3 + ORDER BY log; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-3.1.2 + + CREATE TABLE t2 AS + SELECT DISTINCT log FROM t1 + EXCEPT + SELECT n FROM t1 WHERE log=3 + ORDER BY log; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 no such table: t1 +stmt 126 err 1 -1 no such table: t2 +==== select4-3.1.3 + + CREATE TABLE t2 AS + SELECT DISTINCT log FROM t1 + EXCEPT + SELECT n FROM t1 WHERE log=3 + 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 +==== select4-3.2 + + SELECT log FROM t1 WHERE n IN + (SELECT DISTINCT log FROM t1 EXCEPT + SELECT n FROM t1 WHERE log=3) + ORDER BY log; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-4.1.1 + + SELECT DISTINCT log FROM t1 + INTERSECT + SELECT n FROM t1 WHERE log=3 + ORDER BY log; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-4.1.2 + + SELECT DISTINCT log FROM t1 + UNION ALL + SELECT 6 + INTERSECT + SELECT n FROM t1 WHERE log=3 + ORDER BY t1.log; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-4.1.3 + + CREATE TABLE t2 AS + SELECT DISTINCT log FROM t1 UNION ALL SELECT 6 + INTERSECT + SELECT n FROM t1 WHERE log=3 + ORDER BY log; + SELECT * FROM t2; +---- +stmt 0 err 1 -1 no such table: t1 +stmt 147 err 1 -1 no such table: t2 +==== select4-4.1.4 + + CREATE TABLE t2 AS + SELECT DISTINCT log FROM t1 UNION ALL SELECT 6 + INTERSECT + SELECT n FROM t1 WHERE log=3 + 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 +==== select4-4.2 + + SELECT log FROM t1 WHERE n IN + (SELECT DISTINCT log FROM t1 INTERSECT + SELECT n FROM t1 WHERE log=3) + ORDER BY log; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-4.4 + + SELECT 3 IN ( + SELECT 0 ORDER BY 1 + INTERSECT + SELECT 1 + INTERSECT + SELECT 2 + ORDER BY 1 + ); +---- +stmt 0 err 1 -1 ORDER BY clause should come after INTERSECT not before +==== select4-5.2f + + SELECT DISTINCT log FROM t1 + UNION ALL + SELECT n FROM t1 WHERE log=3 + ORDER BY log; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-5.2g + + SELECT DISTINCT log FROM t1 + UNION ALL + SELECT n FROM t1 WHERE log=3 + ORDER BY 1; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-5.2h + + SELECT DISTINCT log FROM t1 + UNION ALL + SELECT n FROM t1 WHERE log=3 + ORDER BY 2; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-5.2i + + SELECT DISTINCT 1, log FROM t1 + UNION ALL + SELECT 2, n FROM t1 WHERE log=3 + ORDER BY 2, 1; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-5.2j + + SELECT DISTINCT 1, log FROM t1 + UNION ALL + SELECT 2, n FROM t1 WHERE log=3 + ORDER BY 1, 2 DESC; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-5.2k + + SELECT DISTINCT 1, log FROM t1 + UNION ALL + SELECT 2, n FROM t1 WHERE log=3 + ORDER BY n, 1; +---- +stmt 0 err 1 -1 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 +==== select4-6.1 + + SELECT log, count(*) as cnt FROM t1 GROUP BY log + UNION + SELECT log, n FROM t1 WHERE n=7 + ORDER BY cnt, log; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-6.2 + + SELECT log, count(*) FROM t1 GROUP BY log + UNION + SELECT log, n FROM t1 WHERE n=7 + ORDER BY count(*), log; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-6.3 + + SELECT NULL UNION SELECT NULL UNION + SELECT 1 UNION SELECT 2 AS 'x' + ORDER BY x; +---- +stmt 0 ok +==== select4-6.3.1 + + SELECT NULL UNION ALL SELECT NULL UNION ALL + SELECT 1 UNION ALL SELECT 2 AS 'x' + ORDER BY x; +---- +stmt 0 ok +==== select4-6.4 + + SELECT * FROM ( + SELECT NULL, 1 UNION ALL SELECT NULL, 1 + ); +---- +stmt 0 ok +==== select4-6.5 + + SELECT DISTINCT * FROM ( + SELECT NULL, 1 UNION ALL SELECT NULL, 1 + ); +---- +stmt 0 ok +==== select4-6.6 + + SELECT DISTINCT * FROM ( + SELECT 1,2 UNION ALL SELECT 1,2 + ); +---- +stmt 0 ok +==== select4-6.7 + + SELECT NULL EXCEPT SELECT NULL +---- +stmt 0 ok +==== select4-7.1 + + 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 +==== select4-8.2 + + SELECT DISTINCT c FROM t3 ORDER BY c; +---- +stmt 0 err 1 -1 no such table: t3 +==== select4-9.8 + + SELECT 0 AS x, 1 AS y + UNION + SELECT 2 AS y, -3 AS x + ORDER BY x LIMIT 1; +---- +stmt 0 ok +==== select4-10.1 + + SELECT DISTINCT log FROM t1 ORDER BY log +---- +stmt 0 err 1 -1 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 +==== select4-10.3 + + SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 0 +---- +stmt 0 err 1 -1 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 +==== select4-10.5 + + SELECT DISTINCT log FROM t1 ORDER BY log LIMIT -1 OFFSET 2 +---- +stmt 0 err 1 -1 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 +==== select4-10.7 + + SELECT DISTINCT log FROM t1 ORDER BY +log LIMIT 3 OFFSET 20 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== select4-11.11 + + SELECT x FROM t2 + UNION + SELECT x FROM t2 + UNION ALL + SELECT x FROM t2 + EXCEPT + 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,x FROM t2 +---- +stmt 0 err 1 -1 no such table: t2 +==== select4-11.12 + + SELECT x FROM t2 + UNION + SELECT x FROM t2 + UNION ALL + 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,x FROM t2 + EXCEPT + SELECT x FROM t2 +---- +stmt 0 err 1 -1 no such table: t2 +==== select4-11.13 + + SELECT x FROM t2 + UNION + 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,x FROM t2 + UNION ALL + SELECT x FROM t2 + EXCEPT + SELECT x FROM t2 +---- +stmt 0 err 1 -1 no such table: t2 +==== select4-11.14 + + 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,x FROM t2 + UNION + SELECT x FROM t2 + UNION ALL + SELECT x FROM t2 + EXCEPT + SELECT x FROM t2 +---- +stmt 0 err 1 -1 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 + UNION + SELECT x FROM t2 + INTERSECT + SELECT x FROM t2 + UNION ALL + SELECT x FROM t2 + EXCEPT + SELECT x FROM t2 +---- +stmt 0 err 1 -1 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 +==== select4-14.1 + + CREATE TABLE t14(a,b,c); + INSERT INTO t14 VALUES(1,2,3),(4,5,6); + 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 +==== select4-14.2 + + SELECT * FROM t14 INTERSECT VALUES(1,2,3); +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== select4-14.6 + + SELECT * FROM t14 EXCEPT VALUES(1,2,3) +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== select4-14.10 + + SELECT (VALUES(1),(2),(3),(4)) +---- +stmt 0 ok +==== select4-14.11 + + SELECT (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) +---- +stmt 0 ok +==== select4-14.12 + + VALUES(1) UNION VALUES(2); +---- +stmt 0 ok +==== select4-14.13 + + VALUES(1),(2),(3) EXCEPT VALUES(2); +---- +stmt 0 ok +==== select4-14.14 + + VALUES(1),(2),(3) EXCEPT VALUES(1),(3); +---- +stmt 0 ok +==== select4-14.15 + + SELECT * FROM (SELECT 123), (SELECT 456) ON likely(0 OR 1) OR 0; +---- +stmt 0 ok +==== select4-14.16 + + VALUES(1),(2),(3),(4) UNION ALL SELECT 5 LIMIT 99; +---- +stmt 0 ok +==== select4-14.17 + + VALUES(1),(2),(3),(4) UNION ALL SELECT 5 LIMIT 3; +---- +stmt 0 ok +==== select4-15.1 + + DROP TABLE IF EXISTS tx; + CREATE TABLE tx(id INTEGER PRIMARY KEY, a, b); + INSERT INTO tx(a,b) VALUES(33,456); + INSERT INTO tx(a,b) VALUES(33,789); + + SELECT DISTINCT t0.id, t0.a, t0.b + FROM tx AS t0, tx AS t1 + WHERE t0.a=t1.a AND t1.a=33 AND t0.b=456 + UNION + SELECT DISTINCT t0.id, t0.a, t0.b + FROM tx AS t0, tx AS t1 + WHERE t0.a=t1.a AND t1.a=33 AND t0.b=789 + ORDER BY 1; +---- +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 +==== select4-16.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(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,z, + PRIMARY KEY(a,b DESC)) 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,d) + SELECT x%10, x/10, x, printf('xyz%dabc',x) FROM c; + + SELECT t3.c FROM + (SELECT a,max(b) AS m FROM t1 WHERE a>=5 GROUP BY a) AS t2 + JOIN t1 AS t3 + WHERE t2.a=t3.a AND t2.m=t3.b + ORDER BY t3.a; +---- +stmt 0 ok +stmt 27 ok +stmt 138 err 1 -1 no such table: t1 +stmt 297 err 1 -1 no such table: t1 +==== select4-16.2 + + SELECT t3.c FROM + (SELECT a,max(b) AS m FROM t1 WHERE a>=5 GROUP BY a) AS t2 + CROSS JOIN t1 AS t3 + WHERE t2.a=t3.a AND t2.m=t3.b + ORDER BY t3.a; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-16.3 + + SELECT t3.c FROM + (SELECT a,max(b) AS m FROM t1 WHERE a>=5 GROUP BY a) AS t2 + LEFT JOIN t1 AS t3 + WHERE t2.a=t3.a AND t2.m=t3.b + ORDER BY t3.a; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-17.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a int, b int); + INSERT INTO t1 VALUES(1,2),(1,18),(2,19); + SELECT x, y FROM ( + SELECT 98 AS x, 99 AS y + UNION + SELECT a AS x, sum(b) AS y FROM t1 GROUP BY a + ) AS w WHERE y>=20 + ORDER BY +x; +---- +stmt 0 ok +stmt 27 ok +stmt 60 err 1 -1 no such table: t1 +stmt 104 err 1 -1 no such table: t1 +==== select4-17.2 + + SELECT x, y FROM ( + SELECT a AS x, sum(b) AS y FROM t1 GROUP BY a + UNION + SELECT 98 AS x, 99 AS y + ) AS w WHERE y>=20 + ORDER BY +x; +---- +stmt 0 err 1 -1 no such table: t1 +==== select4-17.3 + + SELECT x, y FROM ( + SELECT a AS x, sum(b) AS y FROM t1 GROUP BY a LIMIT 3 + UNION + SELECT 98 AS x, 99 AS y + ) AS w WHERE y>=20 + ORDER BY +x; +---- +stmt 0 err 1 -1 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 +==== select4-18.2 + + CREATE VIEW t1(aa) AS + WITH t2(bb) AS (SELECT 123) + SELECT (SELECT min(bb) OVER()) FROM t2 GROUP BY bb; + SELECT * FROM t1; +---- +stmt 0 ok +stmt 114 err 1 -1 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 +==== select4-19.1 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(99); + 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 diff --git a/parser/testdata/select5.metadata.json b/parser/testdata/select5.metadata.json new file mode 100644 index 0000000..78d68ee --- /dev/null +++ b/parser/testdata/select5.metadata.json @@ -0,0 +1,34 @@ +{ + "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/select5.test b/parser/testdata/select5.test new file mode 100644 index 0000000..535b2d2 --- /dev/null +++ b/parser/testdata/select5.test @@ -0,0 +1,206 @@ +==== select5-1.0 +SELECT DISTINCT y FROM t1 ORDER BY y +---- +stmt 0 err 1 -1 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 +==== select5-1.2 +SELECT y, count(*) FROM t1 GROUP BY y ORDER BY count(*), y +---- +stmt 0 err 1 -1 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 +==== select5-2.1.1 + + SELECT y, count(*) FROM t1 GROUP BY z ORDER BY y +---- +stmt 0 err 1 -1 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 +==== 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 +==== select5-4.1 + + SELECT avg(x) FROM t1 WHERE x>100 +---- +stmt 0 err 1 -1 no such table: t1 +==== select5-4.2 + + SELECT count(x) FROM t1 WHERE x>100 +---- +stmt 0 err 1 -1 no such table: t1 +==== select5-4.3 + + SELECT min(x) FROM t1 WHERE x>100 +---- +stmt 0 err 1 -1 no such table: t1 +==== select5-4.4 + + SELECT max(x) FROM t1 WHERE x>100 +---- +stmt 0 err 1 -1 no such table: t1 +==== select5-4.5 + + SELECT sum(x) FROM t1 WHERE x>100 +---- +stmt 0 err 1 -1 no such table: t1 +==== select5-5.1 + + CREATE TABLE t2(a, b, c); + INSERT INTO t2 VALUES(1, 2, 3); + INSERT INTO t2 VALUES(1, 4, 5); + INSERT INTO t2 VALUES(6, 4, 7); + 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 +==== select5-5.2 + + SELECT a FROM t2 GROUP BY a; +---- +stmt 0 err 1 -1 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 +==== select5-5.4 + + SELECT a, b FROM t2 GROUP BY a, b; +---- +stmt 0 err 1 -1 no such table: t2 +==== select5-5.5 + + SELECT a, b FROM t2 GROUP BY a; +---- +stmt 0 err 1 -1 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 +==== select5-6.1 + + CREATE TABLE t3(x,y); + INSERT INTO t3 VALUES(1,NULL); + INSERT INTO t3 VALUES(2,NULL); + INSERT INTO t3 VALUES(3,4); + 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 +==== select5-6.2 + + CREATE TABLE t4(x,y,z); + INSERT INTO t4 VALUES(1,2,NULL); + INSERT INTO t4 VALUES(2,3,NULL); + INSERT INTO t4 VALUES(3,NULL,5); + INSERT INTO t4 VALUES(4,NULL,6); + INSERT INTO t4 VALUES(4,NULL,6); + INSERT INTO t4 VALUES(5,NULL,NULL); + INSERT INTO t4 VALUES(5,NULL,NULL); + INSERT INTO t4 VALUES(6,7,8); + 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 +==== 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 +==== select5-8.1 + + CREATE TABLE t8a(a,b); + CREATE TABLE t8b(x); + INSERT INTO t8a VALUES('one', 1); + INSERT INTO t8a VALUES('one', 2); + INSERT INTO t8a VALUES('two', 3); + INSERT INTO t8a VALUES('one', NULL); + INSERT INTO t8b(rowid,x) VALUES(1,111); + INSERT INTO t8b(rowid,x) VALUES(2,222); + INSERT INTO t8b(rowid,x) VALUES(3,333); + SELECT a, count(b) FROM t8a, t8b WHERE b=t8b.rowid GROUP BY a ORDER BY a; +---- +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 +==== 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 +==== 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 +==== 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 +==== select5-8.5 + + SELECT a, count(b) FROM t8a, t8b WHERE b10 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== select6-5.1 + + SELECT a,x,b FROM + (SELECT x+3 AS 'a', x FROM t1 WHERE y=3) AS 'p', + (SELECT x AS 'b' FROM t1 WHERE y=4) AS 'q' + WHERE a=b + ORDER BY a +---- +stmt 0 err 1 -1 no such table: t1 +==== select6-5.2 + + SELECT a,x,b FROM + (SELECT x+3 AS 'a', x FROM t1 WHERE y=3), + (SELECT x AS 'b' FROM t1 WHERE y=4) + WHERE a=b + ORDER BY a +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== select6-7.1 + + SELECT * FROM (SELECT 1) +---- +stmt 0 ok +==== select6-7.2 + + SELECT c,b,a,* FROM (SELECT 1 AS 'a', 2 AS 'b', 'abc' AS 'c') +---- +stmt 0 ok +==== select6-7.3 + + SELECT c,b,a,* FROM (SELECT 1 AS 'a', 2 AS 'b', 'abc' AS 'c' WHERE 0) +---- +stmt 0 ok +==== select6-8.1 + + BEGIN; + CREATE TABLE t3(p,q); + INSERT INTO t3 VALUES(1,11); + INSERT INTO t3 VALUES(2,22); + CREATE TABLE t4(q,r); + INSERT INTO t4 VALUES(11,111); + INSERT INTO t4 VALUES(22,222); + COMMIT; + SELECT * FROM t3 NATURAL JOIN t4; +---- +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 103 ok +stmt 129 err 1 -1 no such table: t4 +stmt 164 err 1 -1 no such table: t4 +stmt 199 ok +stmt 211 err 1 -1 no such table: t3 +==== select6-8.2 + + SELECT y, p, q, r FROM + (SELECT t1.y AS y, t2.b AS b FROM t1, t2 WHERE t1.x=t2.a) AS m, + (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 +==== select6-8.4 + + SELECT DISTINCT y, p, q, r FROM + (SELECT t1.y AS y, t2.b AS b FROM t1, t2 WHERE t1.x=t2.a) AS m, + (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 +==== select6-8.5 + + SELECT * FROM + (SELECT y, p, q, r FROM + (SELECT t1.y AS y, t2.b AS b FROM t1, t2 WHERE t1.x=t2.a) AS m, + (SELECT t3.p AS p, t3.q AS q, t4.r AS r FROM t3 NATURAL JOIN t4) as n + WHERE y=p) AS e, + (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 +==== 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 +==== select6-9.2 + + SELECT x FROM (SELECT x FROM t1 LIMIT 2); +---- +stmt 0 err 1 -1 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 +==== select6-9.4 + + SELECT x FROM (SELECT x FROM t1) LIMIT 2; +---- +stmt 0 err 1 -1 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 +==== select6-9.6 + + SELECT x FROM (SELECT x FROM t1 LIMIT 2) LIMIT 3; +---- +stmt 0 err 1 -1 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 +==== select6-9.8 + + SELECT x FROM (SELECT x FROM t1 LIMIT -1); +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 10.1 + + CREATE TABLE t(i,j,k); + CREATE TABLE j(l,m); + CREATE TABLE k(o); +---- +stmt 0 ok +stmt 25 ok +stmt 48 ok +==== 10.2 + + SELECT * FROM (SELECT * FROM t), j; +---- +stmt 0 err 1 -1 no such table: t +==== 10.3 + + SELECT * FROM t UNION ALL SELECT * FROM j +---- +stmt 0 err 1 -1 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 +==== 10.5 + + SELECT * FROM (SELECT j FROM t UNION ALL SELECT * FROM j) +---- +stmt 0 err 1 -1 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 +==== 10.7 + + SELECT * FROM ( + SELECT * FROM t UNION ALL + SELECT l,m,l FROM j UNION ALL + SELECT * FROM k + ) +---- +stmt 0 err 1 -1 no such table: k +==== 10.8 + + SELECT * FROM ( + SELECT * FROM k UNION ALL + SELECT * FROM t UNION ALL + SELECT l,m,l FROM j + ) +---- +stmt 0 err 1 -1 no such table: j +==== 11.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(w INT, x INT); + INSERT INTO t1(w,x) + VALUES(1,10),(2,20),(3,30), + (2,21),(3,31), + (3,32); + CREATE INDEX t1wx ON t1(w,x); + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(w INT, y VARCHAR(8)); + INSERT INTO t2(w,y) VALUES(1,'one'),(2,'two'),(3,'three'),(4,'four'); + CREATE INDEX t2wy ON t2(w,y); + + SELECT cnt, xyz, (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 ok +stmt 27 ok +stmt 60 err 1 -1 no such table: t1 +stmt 154 err 1 -1 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 +==== 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 +==== 11.3 + + SELECT cnt, xyz, '|' + FROM (SELECT count(*) AS cnt, w AS xyz FROM t1 GROUP BY 2) + WHERE (SELECT y FROM t2 WHERE w=cnt)!='two' + ORDER BY cnt, xyz; +---- +stmt 0 err 1 -1 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 +==== 11.5 + + SELECT cnt, xyz, + CASE WHEN (SELECT y FROM t2 WHERE w=cnt)=='two' + THEN 'aaa' ELSE 'bbb' + END, '|' + 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 +==== 11.100 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t1(x); + CREATE TABLE t2(y, z); + 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 34 ok +stmt 56 ok +stmt 81 err 1 -1 no such table: t1 +==== 12.100 + + DROP TABLE t1; + DROP TABLE t2; + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + CREATE TABLE t2(b); + INSERT INTO t2 VALUES(3); + SELECT * FROM ( + SELECT * FROM (SELECT * FROM t1 LIMIT 1) + UNION ALL + SELECT * from t2); +---- +stmt 0 err 1 -1 no such table: t1 +stmt 17 err 1 -1 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 112 ok +stmt 134 err 1 -1 no such table: t2 +stmt 162 err 1 -1 no such table: t2 +==== 13.100 + + + CREATE TABLE t1(y INT); + INSERT INTO t1 (y) VALUES (1); + + CREATE TABLE t2(x INTEGER); + INSERT INTO t2 VALUES(0); + + CREATE TABLE empty1(z); +---- +stmt 0 ok +stmt 29 err 1 -1 no such table: t1 +stmt 62 ok +stmt 95 err 1 -1 no such table: t2 +stmt 123 ok +==== 13.110 + + SELECT t1.y + FROM ( SELECT 'AAA' ) + INNER JOIN ( + SELECT 1 AS abc FROM ( + SELECT 1 FROM t2 LEFT JOIN empty1 + ) + ) AS sub0 ON sub0.abc + , t1 + RIGHT JOIN (SELECT 'BBB' FROM ( SELECT 'CCC' )) +---- +stmt 0 err 1 -1 no such table: t2 +==== 13.120 + + SELECT t1.y + FROM ( SELECT 'AAA' ) + INNER JOIN ( + SELECT 1 AS abc FROM ( + SELECT 1 FROM t2 LEFT JOIN empty1 + ) + ) AS sub0 ON sub0.abc + , t1 + RIGHT JOIN (SELECT 'BBB' FROM ( SELECT 'CCC' )) + WHERE t1.y +---- +stmt 0 err 1 -1 no such table: t2 diff --git a/parser/testdata/select7.metadata.json b/parser/testdata/select7.metadata.json new file mode 100644 index 0000000..089d10d --- /dev/null +++ b/parser/testdata/select7.metadata.json @@ -0,0 +1,28 @@ +{ + "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/select7.test b/parser/testdata/select7.test new file mode 100644 index 0000000..10ed2b8 --- /dev/null +++ b/parser/testdata/select7.test @@ -0,0 +1,202 @@ +==== select7-1.1 + + create temp table t1(x); + insert into t1 values('amx'); + insert into t1 values('anx'); + insert into t1 values('amy'); + insert into t1 values('bmy'); + select * from t1 where x like 'a__' + intersect select * from t1 where x like '_m_' + 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 +==== select7-2.1 + + CREATE TABLE x(id integer primary key, a TEXT NULL); + INSERT INTO x (a) VALUES ('first'); + CREATE TABLE tempx(id integer primary key, a TEXT NULL); + INSERT INTO tempx (a) VALUES ('t-first'); + CREATE VIEW tv1 AS SELECT x.id, tx.id FROM x JOIN tempx tx ON tx.id=x.id; + CREATE VIEW tv1b AS SELECT x.id, tx.id FROM x JOIN tempx tx on tx.id=x.id; + CREATE VIEW tv2 AS SELECT * FROM tv1 UNION SELECT * FROM tv1b; + SELECT * FROM tv2; +---- +stmt 0 ok +stmt 57 err 1 -1 no such table: x +stmt 97 ok +stmt 158 err 1 -1 no such table: tempx +stmt 204 ok +stmt 282 ok +stmt 361 ok +stmt 428 err 1 -1 no such table: tv2 +==== select7-3.1 + + SELECT * FROM (SELECT * FROM sqlite_master) GROUP BY name +---- +stmt 0 ok +==== select7-4.1 + + CREATE TABLE IF NOT EXISTS photo(pk integer primary key, x); + CREATE TABLE IF NOT EXISTS tag(pk integer primary key, fk int, name); + + SELECT P.pk from PHOTO P WHERE NOT EXISTS ( + SELECT T2.pk from TAG T2 WHERE T2.fk = P.pk + EXCEPT + SELECT T3.pk from TAG T3 WHERE T3.fk = P.pk AND T3.name LIKE '%foo%' + ); +---- +stmt 0 ok +stmt 67 ok +stmt 143 err 1 -1 no such table: PHOTO +==== select7-4.2 + + INSERT INTO photo VALUES(1,1); + INSERT INTO photo VALUES(2,2); + INSERT INTO photo VALUES(3,3); + INSERT INTO tag VALUES(11,1,'one'); + INSERT INTO tag VALUES(12,1,'two'); + INSERT INTO tag VALUES(21,1,'one-b'); + SELECT P.pk from PHOTO P WHERE NOT EXISTS ( + SELECT T2.pk from TAG T2 WHERE T2.fk = P.pk + EXCEPT + 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 +==== 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 +==== select7-5.2 + + SELECT 5 IN (SELECT * FROM t2); +---- +stmt 0 err 1 -1 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 +==== select7-5.4 + + SELECT 5 IN (SELECT * FROM t2 UNION SELECT * FROM t2); +---- +stmt 0 err 1 -1 no such table: t2 +==== select7-6.5 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a,b,c); +---- +stmt 0 ok +stmt 27 ok +==== select7-6.6 + + INSERT INTO t1 VALUES + (NULL,0,""), (X'',0.0,0.0), (X'',X'',""), (0.0,0.0,""), (NULL,NULL,0.0), + (0,"",0), (0.0,X'',0), ("",X'',0.0), (0.0,X'',NULL), (0,NULL,""), + (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 +==== select7-6.7 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== select7-6.8 + + INSERT INTO t1 VALUES + (NULL,0,""), (X'',0.0,0.0), (X'',X'',""), (0.0,0.0,""), (NULL,NULL,0.0), + (0,"",0), (0.0,X'',0), ("",X'',0.0), (0.0,X'',NULL), (0,NULL,""), + (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 +==== select7-6.9 + + SELECT count(*) FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== select7-7.1 + + CREATE TABLE t3(a REAL); + INSERT INTO t3 VALUES(44.0); + 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 +==== select7-7.2 + + pragma vdbe_trace = 0; + SELECT (CASE WHEN a=0 THEN 0 ELSE (a + 25) / 50 END) AS categ, count(*) + FROM t3 GROUP BY categ +---- +stmt 0 ok +stmt 27 err 1 -1 no such table: t3 +==== select7-7.3 + + CREATE TABLE t4(a REAL); + INSERT INTO t4 VALUES( 2.0 ); + 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 +==== 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 +==== select7-7.5 + SELECT a=0, typeof(a) FROM t4 +---- +stmt 0 err 1 -1 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 +==== select7-7.7 + + CREATE TABLE t5(a TEXT, b INT); + INSERT INTO t5 VALUES(123, 456); + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== selectA-2.68 + + SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT b,c,a FROM t3 + ORDER BY c DESC, a +---- +stmt 0 err 1 -1 no such table: t3 +==== selectA-2.69 + + SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT b,c,a FROM t3 + ORDER BY c COLLATE NOCASE +---- +stmt 0 err 1 -1 no such table: t3 +==== selectA-2.70 + + SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT b,c,a FROM t3 + ORDER BY c +---- +stmt 0 err 1 -1 no such table: t3 +==== selectA-2.71 + + SELECT a,b,c FROM t1 WHERE b<'d' + INTERSECT SELECT a,b,c FROM t1 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT b,c,a FROM t3 + INTERSECT SELECT a,b,c FROM t1 + EXCEPT SELECT x,y,z FROM t2 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT y,x,z FROM t2 + INTERSECT SELECT a,b,c FROM t1 + EXCEPT SELECT c,b,a FROM t3 + ORDER BY c +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== selectA-2.92 + + SELECT x,y,z FROM t2 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT c,b,a FROM t1 + UNION SELECT a,b,c FROM t3 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT c,b,a FROM 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== selectA-3.0 + + CREATE UNIQUE INDEX t1a ON t1(a); + CREATE UNIQUE INDEX t1b ON t1(b); + CREATE UNIQUE INDEX t1c ON t1(c); + CREATE UNIQUE INDEX t2x ON t2(x); + CREATE UNIQUE INDEX t2y ON t2(y); + 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 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== selectA-3.68 + + SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d' + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT b,c,a FROM t3 + ORDER BY c DESC, a +---- +stmt 0 err 1 -1 no such table: t3 +==== selectA-3.69 + + SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d' + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT b,c,a FROM t3 + ORDER BY c COLLATE NOCASE +---- +stmt 0 err 1 -1 no such table: t3 +==== selectA-3.70 + + SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT b,c,a FROM t3 + ORDER BY c +---- +stmt 0 err 1 -1 no such table: t3 +==== selectA-3.71 + + SELECT a,b,c FROM t1 WHERE b<'d' + INTERSECT SELECT a,b,c FROM t1 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT b,c,a FROM t3 + INTERSECT SELECT a,b,c FROM t1 + EXCEPT SELECT x,y,z FROM t2 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT y,x,z FROM t2 + INTERSECT SELECT a,b,c FROM t1 + EXCEPT SELECT c,b,a FROM t3 + ORDER BY c +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== selectA-3.92 + + SELECT x,y,z FROM t2 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT c,b,a FROM t1 + UNION SELECT a,b,c FROM t3 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT c,b,a FROM 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== selectA-3.97 + + SELECT upper((SELECT x FROM ( + SELECT x,y,z FROM t2 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT c,b,a FROM t1 + UNION SELECT a,b,c FROM t3 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT c,b,a FROM 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 +==== selectA-3.98 + + WITH RECURSIVE + xyz(n) AS ( + SELECT upper((SELECT x FROM ( + SELECT x,y,z FROM t2 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT c,b,a FROM t1 + UNION SELECT a,b,c FROM t3 + INTERSECT SELECT a,b,c FROM t3 + EXCEPT SELECT c,b,a FROM t1 + UNION SELECT a,b,c FROM t3 + ORDER BY y COLLATE NOCASE DESC,x,z))) + UNION ALL + SELECT n || '+' FROM xyz WHERE length(n)<5 + ) + SELECT n FROM xyz ORDER BY +n; +---- +stmt 0 err 1 -1 no such table: t3 +==== 4.1.1 + + CREATE TABLE t4(a, b); + CREATE TABLE t5(c, d); + + INSERT INTO t5 VALUES(1, 'x'); + INSERT INTO t5 VALUES(2, 'x'); + INSERT INTO t4 VALUES(3, 'x'); + INSERT INTO t4 VALUES(4, 'x'); + + CREATE INDEX i1 ON t4(a); + CREATE INDEX i2 ON t5(c); +---- +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 +==== 4.1.3 + + SELECT c, d FROM t5 + UNION ALL + SELECT a, b FROM t4 WHERE f()==f() + ORDER BY 1,2 +---- +stmt 0 err 1 -1 no such table: t4 +==== 4.2.1 + + CREATE TABLE t6(a, b); + CREATE TABLE t7(c, d); + + INSERT INTO t7 VALUES(2, 9); + INSERT INTO t6 VALUES(3, 0); + INSERT INTO t6 VALUES(4, 1); + INSERT INTO t7 VALUES(5, 6); + INSERT INTO t6 VALUES(6, 0); + INSERT INTO t7 VALUES(7, 6); + + CREATE INDEX i6 ON t6(a); + CREATE INDEX i7 ON t7(c); +---- +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 +==== 4.2.2 + + SELECT c, f(d,c,d,c,d) FROM t7 + UNION ALL + SELECT a, b FROM t6 + ORDER BY 1,2 +---- +stmt 0 err 1 -1 no such table: t6 +==== 5.0 + + CREATE TABLE t8(a, b); + CREATE TABLE t9(c, d); +---- +stmt 0 ok +stmt 25 ok +==== 5.4 + + SELECT * FROM t8 UNION SELECT * FROM t9 ORDER BY a+b COLLATE NOCASE +---- +stmt 0 err 1 -1 no such table: t9 +==== 6.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER); + CREATE TABLE t2(b TEXT); + INSERT INTO t2(b) VALUES('12345'); + SELECT * FROM (SELECT a FROM t1 UNION SELECT b FROM t2) WHERE a=a; +---- +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 +==== 7.1 + + CREATE TABLE t1(c1); INSERT INTO t1 VALUES(12),(123),(1234),(NULL),('abc'); + CREATE TABLE t2(c2); INSERT INTO t2 VALUES(44),(55),(123); + CREATE TABLE t3(c3,c4); INSERT INTO t3 VALUES(66,1),(123,2),(77,3); + CREATE VIEW t4 AS SELECT c3 FROM t3; + CREATE VIEW t5 AS SELECT c3 FROM t3 ORDER BY c4; +---- +stmt 0 ok +stmt 23 err 1 -1 no such table: t1 +stmt 82 ok +stmt 105 err 1 -1 no such table: t2 +stmt 147 ok +stmt 173 err 1 -1 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 +==== 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 +==== 7.4 + + CREATE TABLE a(b); + CREATE VIEW c(d) AS SELECT b FROM a ORDER BY b; + SELECT sum(d) OVER( PARTITION BY(SELECT 0 FROM c JOIN a WHERE b =(SELECT b INTERSECT SELECT d FROM c) AND b = 123)) FROM c; +---- +stmt 0 ok +stmt 21 ok +stmt 71 err 1 -1 no such table: c +==== 8.0 + + CREATE TABLE x1(x); + CREATE TABLE t1(a, b, c, d); + CREATE INDEX t1a ON t1(a); + CREATE INDEX t1b ON t1(b); +---- +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 +==== 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 +==== 9.0 + + CREATE TABLE t1(a COLLATE nocase); + CREATE TABLE t2(b COLLATE nocase); + + INSERT INTO t1 VALUES('ABC'); + INSERT INTO t2 VALUES('abc'); +---- +stmt 0 ok +stmt 37 ok +stmt 74 err 1 -1 no such table: t1 +stmt 107 err 1 -1 no such table: t2 +==== 9.1 + + SELECT a FROM t1 INTERSECT SELECT b FROM t2; +---- +stmt 0 err 1 -1 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 diff --git a/parser/testdata/selectB.metadata.json b/parser/testdata/selectB.metadata.json new file mode 100644 index 0000000..e8fa811 --- /dev/null +++ b/parser/testdata/selectB.metadata.json @@ -0,0 +1,33 @@ +{ + "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/selectB.test b/parser/testdata/selectB.test new file mode 100644 index 0000000..b494efe --- /dev/null +++ b/parser/testdata/selectB.test @@ -0,0 +1,240 @@ +==== selectB-1.1 + + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(d, e, f); + + INSERT INTO t1 VALUES( 2, 4, 6); + INSERT INTO t1 VALUES( 8, 10, 12); + INSERT INTO t1 VALUES(14, 16, 18); + + INSERT INTO t2 VALUES(3, 6, 9); + INSERT INTO t2 VALUES(12, 15, 18); + INSERT INTO t2 VALUES(21, 24, 27); +---- +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 +==== 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 +==== 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 +==== selectB-5.0 + + CREATE INDEX i1 ON t1(a); + CREATE INDEX i2 ON t1(b); + CREATE INDEX i3 ON t1(c); + CREATE INDEX i4 ON t2(d); + 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 +==== 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 +==== 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 +==== 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 +==== selectB-generated.dup3 + + SELECT t4.c, t3.a FROM + (SELECT c FROM t1 UNION ALL SELECT e FROM t2) AS t4, t1 AS t3 + WHERE t3.a=14 + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== selectB-generated.dup8 + + SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) + EXCEPT + SELECT c FROM t1 + ORDER BY c DESC +---- +stmt 0 err 1 -1 no such table: t1 +==== selectB-generated.dup9 + + SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) + UNION + SELECT c FROM t1 + ORDER BY c DESC +---- +stmt 0 err 1 -1 no such table: t1 +==== selectB-generated.dup10 + + SELECT c FROM t1 + UNION + SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) + ORDER BY c +---- +stmt 0 err 1 -1 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 +==== selectB-generated.dup12 + + SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) + UNION + SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== selectB-generated.dup13 + + SELECT c FROM t1 + INTERSECT + SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== selectB-generated.dup14 + + SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) + INTERSECT + SELECT c FROM t1 + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t1 +==== selectB-generated.dup15 + + SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) + INTERSECT + SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== selectB-generated.dup22 + + SELECT x, y FROM ( + SELECT a AS x, b AS y FROM t1 + UNION ALL + SELECT a*10 + 0.1, f*10 + 0.1 FROM t1 JOIN t2 ON (c=d) + UNION ALL + SELECT a*100, b*100 FROM t1 + ) ORDER BY 1; +---- +stmt 0 err 1 -1 no such table: t1 +==== selectB-generated.dup23 + + SELECT x, y FROM ( + SELECT a AS x, b AS y FROM t1 + UNION ALL + SELECT a*10 + 0.1, f*10 + 0.1 FROM t1 LEFT JOIN t2 ON (c=d) + UNION ALL + SELECT a*100, b*100 FROM t1 + ) ORDER BY 1; +---- +stmt 0 err 1 -1 no such table: t1 +==== selectB-generated.dup24 + + SELECT x+y FROM ( + SELECT a AS x, b AS y FROM t1 + UNION ALL + SELECT a*10 + 0.1, f*10 + 0.1 FROM t1 LEFT JOIN t2 ON (c=d) + UNION ALL + SELECT a*100, b*100 FROM t1 + ) WHERE y+x NOT NULL ORDER BY 1; +---- +stmt 0 err 1 -1 no such table: t1 diff --git a/parser/testdata/selectC.metadata.json b/parser/testdata/selectC.metadata.json new file mode 100644 index 0000000..25a998d --- /dev/null +++ b/parser/testdata/selectC.metadata.json @@ -0,0 +1,33 @@ +{ + "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/selectC.test b/parser/testdata/selectC.test new file mode 100644 index 0000000..62462f2 --- /dev/null +++ b/parser/testdata/selectC.test @@ -0,0 +1,274 @@ +==== selectC-1.1 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1,'aaa','bbb'); + INSERT INTO t1 SELECT * FROM t1; + INSERT INTO t1 VALUES(2,'ccc','ddd'); + + SELECT DISTINCT a AS x, b||c AS y + FROM t1 + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== selectC-1.8 + + SELECT a AS x, b||c AS y + FROM t1 + GROUP BY x, y + HAVING y='aaabbb' +---- +stmt 0 err 1 -1 no such table: t1 +==== selectC-1.9 + + SELECT a AS x, b||c AS y + FROM t1 + GROUP BY x, y + HAVING b||c='aaabbb' +---- +stmt 0 err 1 -1 no such table: t1 +==== selectC-1.10 + + SELECT a AS x, b||c AS y + FROM t1 + WHERE y='aaabbb' + GROUP BY x, y +---- +stmt 0 err 1 -1 no such table: t1 +==== selectC-1.11 + + SELECT a AS x, b||c AS y + FROM t1 + WHERE b||c='aaabbb' + GROUP BY x, y +---- +stmt 0 err 1 -1 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 +==== selectC-1.12.2 + + SELECT DISTINCT uppercaseconversionfunctionwithaverylongname(b) AS x + FROM t1 + ORDER BY x +---- +stmt 0 err 1 -1 no such table: t1 +==== selectC-1.13.1 + + SELECT upper(b) AS x + FROM t1 + GROUP BY x + ORDER BY x +---- +stmt 0 err 1 -1 no such table: t1 +==== selectC-1.13.2 + + SELECT uppercaseconversionfunctionwithaverylongname(b) AS x + FROM t1 + GROUP BY x + ORDER BY x +---- +stmt 0 err 1 -1 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 +==== selectC-1.14.2 + + SELECT uppercaseconversionfunctionwithaverylongname(b) AS x + FROM t1 + ORDER BY x DESC +---- +stmt 0 err 1 -1 no such table: t1 +==== selectC-2.1 + + CREATE TABLE t21a(a,b); + INSERT INTO t21a VALUES(1,2); + CREATE TABLE t21b(n); + CREATE TRIGGER r21 AFTER INSERT ON t21b BEGIN + SELECT a FROM t21a WHERE a>new.x UNION ALL + SELECT b FROM t21a WHERE b>new.x ORDER BY 1 LIMIT 2; + END; + INSERT INTO t21b VALUES(6); +---- +stmt 0 ok +stmt 30 err 1 -1 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 +==== selectC-3.1 + + CREATE TABLE person ( + org_id TEXT NOT NULL, + nickname TEXT NOT NULL, + license TEXT, + CONSTRAINT person_pk PRIMARY KEY (org_id, nickname), + CONSTRAINT person_license_uk UNIQUE (license) + ); + INSERT INTO person VALUES('meyers', 'jack', '2GAT123'); + INSERT INTO person VALUES('meyers', 'hill', 'V345FMP'); + INSERT INTO person VALUES('meyers', 'jim', '2GAT138'); + INSERT INTO person VALUES('smith', 'maggy', ''); + INSERT INTO person VALUES('smith', 'jose', 'JJZ109'); + INSERT INTO person VALUES('smith', 'jack', 'THX138'); + INSERT INTO person VALUES('lakeside', 'dave', '953OKG'); + INSERT INTO person VALUES('lakeside', 'amy', NULL); + INSERT INTO person VALUES('lake-apts', 'tom', NULL); + INSERT INTO person VALUES('acorn', 'hideo', 'CQB421'); + + SELECT + org_id, + count((NOT (org_id IS NULL)) AND (NOT (nickname IS NULL))) + FROM person + WHERE (CASE WHEN license != '' THEN 1 ELSE 0 END) + 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 +==== selectC-3.2 + + CREATE TABLE t2(a PRIMARY KEY, b); + INSERT INTO t2 VALUES('abc', 'xxx'); + INSERT INTO t2 VALUES('def', 'yyy'); + 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 +==== 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 +==== selectC-4.1 + + create table t_distinct_bug (a, b, c); + insert into t_distinct_bug values ('1', '1', 'a'); + insert into t_distinct_bug values ('1', '2', 'b'); + insert into t_distinct_bug values ('1', '3', 'c'); + insert into t_distinct_bug values ('1', '1', 'd'); + insert into t_distinct_bug values ('1', '2', 'e'); + 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 +==== 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 +==== 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 +==== 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 +==== 5.0 + + CREATE TABLE x1(a); + CREATE TABLE x2(b); + CREATE TABLE x3(c); + CREATE VIEW vvv AS SELECT b FROM x2 ORDER BY 1; + + INSERT INTO x1 VALUES('a'), ('b'); + INSERT INTO x2 VALUES(22), (23), (25), (24), (21); + INSERT INTO x3 VALUES(302), (303), (301); +---- +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 +==== 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 +==== 5.2 + + SELECT * FROM x1, x4 +---- +stmt 0 err 1 -1 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 diff --git a/parser/testdata/selectD.metadata.json b/parser/testdata/selectD.metadata.json new file mode 100644 index 0000000..1baabba --- /dev/null +++ b/parser/testdata/selectD.metadata.json @@ -0,0 +1,6 @@ +{ + "todo": { + "selectD-4.1": true, + "selectD-generated": true + } +} diff --git a/parser/testdata/selectD.test b/parser/testdata/selectD.test new file mode 100644 index 0000000..8cecd4d --- /dev/null +++ b/parser/testdata/selectD.test @@ -0,0 +1,26 @@ +==== selectD-generated + + SELECT * + FROM t1 JOIN (t2 JOIN (main.t4 JOIN aux.t4 ON aux.t4.a=main.t4.a+111) + ON main.t4.a=t2.a+222) + ON t2.a=t1.a+111; +---- +stmt 0 err 1 -1 no such table: t1 +==== selectD-4.1 + + CREATE TABLE t41(a INTEGER PRIMARY KEY, b INTEGER); + CREATE TABLE t42(d INTEGER PRIMARY KEY, e INTEGER); + CREATE TABLE t43(f INTEGER PRIMARY KEY, g INTEGER); + EXPLAIN QUERY PLAN + SELECT * + FROM t41 + LEFT JOIN (SELECT count(*) AS cnt, x1.d + FROM (t42 INNER JOIN t43 ON d=g) AS x1 + WHERE x1.d>5 + GROUP BY x1.d) AS x2 + ON t41.b=x2.d; +---- +stmt 0 ok +stmt 54 ok +stmt 108 ok +stmt 162 err 1 -1 no such table: t41 diff --git a/parser/testdata/selectE.metadata.json b/parser/testdata/selectE.metadata.json new file mode 100644 index 0000000..b5cb5f1 --- /dev/null +++ b/parser/testdata/selectE.metadata.json @@ -0,0 +1,5 @@ +{ + "todo": { + "selectE-3.1": true + } +} diff --git a/parser/testdata/selectE.test b/parser/testdata/selectE.test new file mode 100644 index 0000000..4695804 --- /dev/null +++ b/parser/testdata/selectE.test @@ -0,0 +1,5 @@ +==== selectE-3.1 + + 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 diff --git a/parser/testdata/selectF.metadata.json b/parser/testdata/selectF.metadata.json new file mode 100644 index 0000000..dab7b6d --- /dev/null +++ b/parser/testdata/selectF.metadata.json @@ -0,0 +1,6 @@ +{ + "todo": { + "1": true, + "2": true + } +} diff --git a/parser/testdata/selectF.test b/parser/testdata/selectF.test new file mode 100644 index 0000000..a8c9e8e --- /dev/null +++ b/parser/testdata/selectF.test @@ -0,0 +1,28 @@ +==== 1 + + BEGIN TRANSACTION; + CREATE TABLE t1(a, b, c); + INSERT INTO "t1" VALUES(1,'one','I'); + CREATE TABLE t2(d, e, f); + INSERT INTO "t2" VALUES(5,'ten','XX'); + INSERT INTO "t2" VALUES(6,NULL,NULL); + + CREATE INDEX i1 ON t1(b, a); + COMMIT; +---- +stmt 0 ok +stmt 21 ok +stmt 49 err 1 -1 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 230 ok +==== 2 + + SELECT * FROM t2 + UNION ALL + SELECT * FROM t1 WHERE a<5 + ORDER BY 2, 1 +---- +stmt 0 err 1 -1 no such table: t1 diff --git a/parser/testdata/selectG.metadata.json b/parser/testdata/selectG.metadata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/parser/testdata/selectG.metadata.json @@ -0,0 +1 @@ +{} diff --git a/parser/testdata/selectG.test b/parser/testdata/selectG.test new file mode 100644 index 0000000..e69de29 diff --git a/parser/testdata/selectH.metadata.json b/parser/testdata/selectH.metadata.json new file mode 100644 index 0000000..f1e164e --- /dev/null +++ b/parser/testdata/selectH.metadata.json @@ -0,0 +1,16 @@ +{ + "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/selectH.test b/parser/testdata/selectH.test new file mode 100644 index 0000000..2633135 --- /dev/null +++ b/parser/testdata/selectH.test @@ -0,0 +1,113 @@ +==== 1.1 + + CREATE TABLE t1( + c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, + 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, + c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, + c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, + c60, c61, c62, c63, c64, c65 + ); + INSERT INTO t1 VALUES( + 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, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65 + ); + 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 +==== 1.2 + + SELECT DISTINCT c44 FROM ( + SELECT c0 AS a, *, counter(1) FROM t1 + UNION ALL + SELECT c1 AS a, *, counter(1) FROM t1 + ) WHERE c60=60; +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.1 + + SELECT a FROM ( + SELECT counter(1) AS cnt, c15 AS a, *, c62 AS b FROM t1 + UNION ALL + SELECT counter(1) AS cnt, c16 AS a, *, c61 AS b FROM t1 + ORDER BY b + ); +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.1 + + CREATE VIEW v1 AS + SELECT c16 AS a, *, counter(1) AS x FROM t1 + UNION ALL + SELECT c17 AS a, *, counter(1) AS x FROM t1 + UNION ALL + SELECT c18 AS a, *, counter(1) AS x FROM t1 + UNION ALL + SELECT c19 AS a, *, counter(1) AS x FROM t1; + SELECT count(*) FROM v1 WHERE c60=60; +---- +stmt 0 ok +stmt 255 err 1 -1 no such table: v1 +==== 3.3 + + SELECT count(a) FROM v1 WHERE c60=60; +---- +stmt 0 err 1 -1 no such table: v1 +==== 3.4 + + SELECT a FROM v1 WHERE c60=60; +---- +stmt 0 err 1 -1 no such table: v1 +==== 3.6 + + SELECT x FROM v1 WHERE c60=60; +---- +stmt 0 err 1 -1 no such table: v1 +==== 4.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); + SELECT 1 FROM (SELECT DISTINCT name COLLATE rtrim FROM sqlite_schema + UNION ALL SELECT a FROM t1); +---- +stmt 0 ok +stmt 27 ok +stmt 77 err 1 -1 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 +==== 5.0 + + CREATE TABLE t1 (val1); + INSERT INTO t1 VALUES(4); + INSERT INTO t1 VALUES(5); + 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 82 ok +==== 5.1 + + SELECT DISTINCT val1 FROM t1 UNION ALL SELECT val2 FROM t2; +---- +stmt 0 err 1 -1 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 diff --git a/parser/testdata/tokenize.metadata.json b/parser/testdata/tokenize.metadata.json new file mode 100644 index 0000000..3b79055 --- /dev/null +++ b/parser/testdata/tokenize.metadata.json @@ -0,0 +1,18 @@ +{ + "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/tokenize.test b/parser/testdata/tokenize.test new file mode 100644 index 0000000..97f9f33 --- /dev/null +++ b/parser/testdata/tokenize.test @@ -0,0 +1,56 @@ +==== tokenize-1.1 +SELECT 1.0e+ +---- +stmt 0 err 1 7 unrecognized token: "1.0e" +==== tokenize-1.2 +SELECT 1.0E+ +---- +stmt 0 err 1 7 unrecognized token: "1.0E" +==== tokenize-1.3 +SELECT 1.0e- +---- +stmt 0 err 1 7 unrecognized token: "1.0e" +==== tokenize-1.4 +SELECT 1.0E- +---- +stmt 0 err 1 7 unrecognized token: "1.0E" +==== tokenize-1.5 +SELECT 1.0e+/ +---- +stmt 0 err 1 7 unrecognized token: "1.0e" +==== tokenize-1.6 +SELECT 1.0E+: +---- +stmt 0 err 1 7 unrecognized token: "1.0E" +==== tokenize-1.7 +SELECT 1.0e-: +---- +stmt 0 err 1 7 unrecognized token: "1.0e" +==== tokenize-1.8 +SELECT 1.0E-/ +---- +stmt 0 err 1 7 unrecognized token: "1.0E" +==== tokenize-1.9 +SELECT 1.0F+5 +---- +stmt 0 err 1 7 unrecognized token: "1.0F" +==== tokenize-1.10 +SELECT 1.0d-10 +---- +stmt 0 err 1 7 unrecognized token: "1.0d" +==== tokenize-1.11 +SELECT 1.0e,5 +---- +stmt 0 err 1 7 unrecognized token: "1.0e" +==== tokenize-1.12 +SELECT 1.0E.10 +---- +stmt 0 err 1 7 unrecognized token: "1.0E" +==== tokenize-2.1 +SELECT 1, 2 /* +---- +stmt 0 ok +==== tokenize-2.2 +SELECT 1, 2 /* +---- +stmt 0 ok diff --git a/parser/testdata/trigger1.metadata.json b/parser/testdata/trigger1.metadata.json new file mode 100644 index 0000000..60239c0 --- /dev/null +++ b/parser/testdata/trigger1.metadata.json @@ -0,0 +1,77 @@ +{ + "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 + } +} diff --git a/parser/testdata/trigger1.test b/parser/testdata/trigger1.test new file mode 100644 index 0000000..0aa24f1 --- /dev/null +++ b/parser/testdata/trigger1.test @@ -0,0 +1,689 @@ +==== trigger1-1.1.1 + + CREATE TRIGGER trig UPDATE ON no_such_table BEGIN + SELECT * from sqlite_master; + END; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== trigger1-1.3 + + BEGIN; + CREATE TRIGGER tr2 INSERT ON t1 BEGIN + SELECT * from sqlite_master; END; + ROLLBACK; + CREATE TRIGGER tr2 INSERT ON t1 BEGIN + SELECT * from sqlite_master; END; +---- +stmt 0 ok +stmt 15 err 1 -1 no such table: main.t1 +stmt 107 ok +stmt 125 err 1 -1 no such table: main.t1 +==== trigger1-1.4 + + DROP TRIGGER IF EXISTS tr1; + CREATE TRIGGER tr1 DELETE ON t1 BEGIN + SELECT * FROM sqlite_master; + END +---- +stmt 0 ok +stmt 36 err 1 -1 no such table: main.t1 +==== trigger1-1.5 + + BEGIN; + DROP TRIGGER tr2; + ROLLBACK; + DROP TRIGGER tr2; +---- +stmt 0 ok +stmt 15 err 1 -1 no such trigger: tr2 +stmt 41 ok +stmt 59 err 1 -1 no such trigger: tr2 +==== trigger1-1.6.1 + + DROP TRIGGER IF EXISTS biggles; +---- +stmt 0 ok +==== trigger1-1.6.2 + + DROP TRIGGER biggles; +---- +stmt 0 err 1 -1 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 +==== trigger1-1.8 + + CREATE TRIGGER temp_trig UPDATE ON temp_table BEGIN + SELECT * from sqlite_master; + END; + SELECT count(*) FROM sqlite_master WHERE name = 'temp_trig'; +---- +stmt 0 err 1 -1 no such table: main.temp_table +stmt 120 ok +==== trigger1-1.9 + + CREATE TRIGGER tr1 AFTER UPDATE ON sqlite_master BEGIN + SELECT * FROM sqlite_master; + END; +---- +stmt 0 err 1 -1 cannot create trigger on system table +==== trigger1-1.10 + + create table t1(a,b); + insert into t1 values(1,'a'); + insert into t1 values(2,'b'); + insert into t1 values(3,'c'); + insert into t1 values(4,'d'); + create trigger r1 after delete on t1 for each row begin + delete from t1 WHERE a=old.a+2; + end; + delete from t1 where a=1 OR a=3; + select * from 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 306 err 1 -1 no such table: t1 +stmt 328 err 1 -1 no such table: t1 +==== trigger1-1.11 + + create table t1(a,b); + insert into t1 values(1,'a'); + insert into t1 values(2,'b'); + insert into t1 values(3,'c'); + insert into t1 values(4,'d'); + create trigger r1 after update on t1 for each row begin + delete from t1 WHERE a=old.a+2; + end; + update t1 set b='x-' || b where a=1 OR a=3; + select * from 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 +==== trigger1-1.12 + + create table t1(a,b); + create trigger t1t instead of update on t1 for each row begin + delete from t1 WHERE a=old.a+2; + end; +---- +stmt 0 ok +stmt 26 err 1 -1 no such table: main.t1 +==== trigger1-1.13 + + create view v1 as select * from t1; + create trigger v1t before update on v1 for each row begin + delete from t1 WHERE a=old.a+2; + end; +---- +stmt 0 ok +stmt 40 err 1 -1 no such table: main.v1 +==== trigger1-1.14 + + drop view v1; + create view v1 as select * from t1; + create trigger v1t AFTER update on v1 for each row begin + delete from t1 WHERE a=old.a+2; + end; +---- +stmt 0 err 1 -1 no such view: v1 +stmt 18 ok +stmt 58 err 1 -1 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 +==== trigger1-2.2 + + CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN + SELECT * FROM t1; + SELECT * FROM; -- Syntax error + END; +---- +stmt 0 err 1 -1 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 +==== 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 +==== trigger1-3.5 + + CREATE TEMP TABLE t2(x,y); + INSERT INTO t1 VALUES(1,2); + SELECT * FROM t2; +---- +stmt 0 ok +stmt 33 err 1 -1 no such table: t1 +stmt 67 err 1 -1 no such table: t2 +==== trigger1-3.6.1 + + DROP TRIGGER r1; + CREATE TEMP TRIGGER r1 AFTER INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(NEW.a,NEW.b), (NEW.b*100, NEW.a*100); + END; + 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 +==== trigger1-3.6.2 + + DROP TRIGGER r1; + DELETE FROM t1; + DELETE FROM t2; + CREATE TEMP TRIGGER r1 AFTER INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(NEW.a,NEW.b); + END; + 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 +==== trigger1-3.7 + + DROP TABLE t2; + CREATE TABLE t2(x,y); + SELECT * FROM t2; +---- +stmt 0 err 1 -1 no such table: t2 +stmt 21 ok +stmt 49 err 1 -1 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 +==== 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 +==== trigger1-4.1 + + CREATE TEMP TRIGGER r1 BEFORE INSERT ON t1 BEGIN + INSERT INTO t2 VALUES(NEW.a,NEW.b); + END; + 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 +==== trigger1-6.1 +SELECT type, name FROM sqlite_master +---- +stmt 0 ok +==== trigger1-6.2 + + CREATE TRIGGER t2 BEFORE DELETE ON t2 BEGIN + SELECT RAISE(ABORT,'deletes are not permitted'); + END; + SELECT type, name FROM sqlite_master; +---- +stmt 0 err 1 -1 no such table: main.t2 +stmt 112 ok +==== trigger1-6.3 +DELETE FROM t2 +---- +stmt 0 err 1 -1 no such table: t2 +==== trigger1-6.4 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 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 21 ok +==== trigger1-6.7 +SELECT * FROM t2 +---- +stmt 0 err 1 -1 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 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 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 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 28 ok +==== trigger1-9.1 + + CREATE TABLE t3(a,b); + CREATE TABLE t4(x UNIQUE, b); + CREATE TRIGGER r34 AFTER INSERT ON t3 BEGIN + REPLACE INTO t4 VALUES(new.a,new.b); + END; + INSERT INTO t3 VALUES(1,2); + SELECT * FROM t3 UNION ALL SELECT 99, 99 UNION ALL SELECT * FROM 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: 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 +==== trigger1-9.1.dup1 + + CREATE TABLE t3(a,b); + CREATE TABLE t4(x UNIQUE, b); + CREATE TRIGGER r34 AFTER INSERT ON t3 BEGIN + REPLACE INTO t4 VALUES(new.a,new.b); + END; + INSERT INTO t3 VALUES(1,2); + SELECT * FROM t3; SELECT 99, 99; SELECT * FROM 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 242 ok +stmt 257 err 1 -1 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 62 ok +stmt 77 err 1 -1 no such table: t4 +==== trigger1-10.1 + + CREATE TABLE main.t4(a, b, c); + CREATE TABLE temp.t4(a, b, c); + CREATE TABLE aux.t4(a, b, c); + CREATE TABLE insert_log(db, a, b, c); +---- +stmt 0 ok +stmt 37 ok +stmt 74 err 1 94 unknown database aux +stmt 110 ok +==== trigger1-10.2 + + CREATE TEMP TRIGGER trig1 AFTER INSERT ON main.t4 BEGIN + INSERT INTO insert_log VALUES('main', new.a, new.b, new.c); + END; + CREATE TEMP TRIGGER trig2 AFTER INSERT ON temp.t4 BEGIN + INSERT INTO insert_log VALUES('temp', new.a, new.b, new.c); + END; + CREATE TEMP TRIGGER trig3 AFTER INSERT ON aux.t4 BEGIN + 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 +==== 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 +==== trigger1-10.4 + + SELECT * FROM insert_log; +---- +stmt 0 err 1 -1 no such table: insert_log +==== trigger1-10.5 + + BEGIN; + INSERT INTO main.t4 VALUES(1, 2, 3); + INSERT INTO temp.t4 VALUES(4, 5, 6); + INSERT INTO aux.t4 VALUES(7, 8, 9); + 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 142 ok +==== trigger1-10.6 + + SELECT * FROM insert_log; +---- +stmt 0 err 1 -1 no such table: insert_log +==== trigger1-10.7 + + DELETE FROM insert_log; + INSERT INTO main.t4 VALUES(11, 12, 13); + 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 +==== trigger1-10.8 + + SELECT * FROM insert_log; +---- +stmt 0 err 1 -1 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 +==== trigger1-10.11 + + SELECT * FROM insert_log; +---- +stmt 0 err 1 -1 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 +==== trigger1-15.2 + INSERT INTO tA VALUES('abc', 2, 3) +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== trigger1-17.0 + + CREATE TABLE t17a(ii INT); + CREATE TABLE t17b(tt TEXT PRIMARY KEY, ss); + CREATE TRIGGER t17a_ai AFTER INSERT ON t17a BEGIN + INSERT INTO t17b(tt) VALUES(new.ii); + END; + CREATE TRIGGER t17b_ai AFTER INSERT ON t17b BEGIN + UPDATE t17b SET ss = 4; + END; + INSERT INTO t17a(ii) VALUES('1'); + PRAGMA integrity_check; +---- +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 298 ok +==== trigger1-18.0 + + CREATE TABLE t18(a PRIMARY KEY,b,c); + INSERT INTO t18(a,b,c) VALUES(1,2,3); + CREATE TRIGGER t18r1 BEFORE UPDATE ON t18 BEGIN + UPDATE t18 SET b=1000 WHERE a=old.a; + END; + UPDATE t18 SET c=b WHERE a=1; + 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 +==== trigger1-18.1 + + DELETE FROM t18; + INSERT INTO t18(a,b,c) VALUES(1,2,3); + 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 +==== trigger1-19.0 + + CREATE TABLE t19(a INT PRIMARY KEY, b, c)WITHOUT ROWID; + INSERT INTO t19(a,b,c) VALUES(1,2,3); + CREATE TRIGGER t19r3 BEFORE UPDATE ON t19 BEGIN SELECT new.b; END; + UPDATE t19 SET c=b WHERE a=1; + 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 +==== trigger1-19.1 + + DELETE FROM t19; + INSERT INTO t19(a,b,c) VALUES(1,2,3); + 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 +==== trigger1-20.1 + + CREATE TABLE t20_1(x); + ATTACH ':memory:' AS aux; + CREATE TABLE aux.t20_2(y); + CREATE TABLE aux.t20_3(z); + CREATE TEMP TRIGGER r20_3 AFTER INSERT ON t20_2 BEGIN UPDATE t20_3 SET z=z+1; END; + DETACH aux; + DROP TRIGGER r20_3; +---- +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 196 ok +stmt 210 err 1 -1 no such trigger: r20_3 +==== trigger1-21.1 + + PRAGMA recursive_triggers = true; + CREATE TABLE t0(a, b, c UNIQUE); + CREATE UNIQUE INDEX i0 ON t0(b) WHERE a; + CREATE TRIGGER tr0 AFTER DELETE ON t0 BEGIN + DELETE FROM t0; + END; + INSERT INTO t0(a,b,c) VALUES(0,0,9),(1,1,1); + REPLACE INTO t0(a,b,c) VALUES(2,0,9); + SELECT * FROM t0; +---- +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 +==== trigger1-22.10 + + CREATE TABLE t1( + a INTEGER PRIMARY KEY, + b DOUBLE + ); + CREATE TRIGGER x AFTER UPDATE ON t1 BEGIN + SELECT sum(b)OVER(ORDER BY (SELECT b FROM t1 AS x + WHERE b IN (t1.a,127,t1.b) + GROUP BY b)) + FROM t1 + GROUP BY a; + END; + CREATE TEMP TRIGGER x BEFORE INSERT ON t1 BEGIN + UPDATE t1 + SET b=randomblob(10) + WHERE b >= 'E' + AND a < (SELECT a FROM t1 WHERE a<22 GROUP BY b); + END; + INSERT INTO t1(b) VALUES('Y'),('X'),('Z'); + 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 +==== trigger1-23.1 + + CREATE TABLE t1(a INT); + CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN + INSERT INTO t1 SELECT e_master LIMIT 1,#1; + END; +---- +stmt 0 ok +stmt 26 err 1 -1 no such table: main.t1 +==== trigger1-24.1 + + CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN + SELECT raise(abort,format('attempt to insert %d where is not a power of 2',new.a)) + WHERE (new.a & (new.a-1))!=0; + 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 +==== trigger1-24.2 + + INSERT INTO t1 VALUES(9876); +---- +stmt 0 err 1 -1 no such table: t1 diff --git a/parser/testdata/upsert1.metadata.json b/parser/testdata/upsert1.metadata.json new file mode 100644 index 0000000..9754cae --- /dev/null +++ b/parser/testdata/upsert1.metadata.json @@ -0,0 +1,39 @@ +{ + "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/upsert1.test b/parser/testdata/upsert1.test new file mode 100644 index 0000000..796cab6 --- /dev/null +++ b/parser/testdata/upsert1.test @@ -0,0 +1,395 @@ +==== upsert1-100 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c DEFAULT 0); + CREATE UNIQUE INDEX t1x1 ON t1(b); + INSERT INTO t1(a,b) VALUES(1,2) ON CONFLICT DO NOTHING; + INSERT INTO t1(a,b) VALUES(1,99),(99,2) ON CONFLICT DO NOTHING; + 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 +==== upsert1-101 + + DELETE FROM t1; + INSERT INTO t1(a,b) VALUES(2,3) ON CONFLICT(a) DO NOTHING; + 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 +==== upsert1-102 + + DELETE FROM t1; + INSERT INTO t1(a,b) VALUES(3,4) ON CONFLICT(b) DO NOTHING; + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== upsert1-200 + + DROP TABLE t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT, c DEFAULT 0); + CREATE UNIQUE INDEX t1x1 ON t1(a+b); + INSERT INTO t1(a,b) VALUES(7,8) ON CONFLICT(a+b) DO NOTHING; + 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 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 +==== 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 +==== 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 +==== upsert1-300 + + DROP INDEX t1x1; + DELETE FROM t1; + CREATE UNIQUE INDEX t1x1 ON t1(b) WHERE b>10; + 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 +==== 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 +==== upsert1-320 + + DELETE FROM t1; + INSERT INTO t1(a,b) VALUES(1,2),(3,2),(4,20),(5,20) + 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 +==== upsert1-400 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a TEXT UNIQUE, b INT DEFAULT 1); + INSERT INTO t2(a) VALUES('one'),('two'),('three'); + PRAGMA count_changes=ON; + INSERT INTO t2(a) VALUES('one'),('one'),('three'),('four') + ON CONFLICT(a) DO UPDATE SET b=b+1; +---- +stmt 0 ok +stmt 27 ok +stmt 78 err 1 -1 no such table: t2 +stmt 131 ok +stmt 158 err 1 -1 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 +==== upsert1-500 + + DROP TABLE t1; + CREATE TABLE t1(x INTEGER PRIMARY KEY, y INT UNIQUE); + INSERT INTO t1(x,y) SELECT 1,2 WHERE true + 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 17 ok +stmt 73 err 1 -1 no such table: t1 +stmt 183 err 1 -1 no such table: t1 +==== upsert1-600 + + DROP TABLE t1; + CREATE TABLE t1(b UNIQUE, a INT PRIMARY KEY) WITHOUT ROWID; + 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 17 ok +stmt 79 err 1 -1 no such table: t1 +stmt 148 ok +==== upsert1-610 + + DELETE FROM t1; + 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 91 ok +==== upsert1-700 + + DROP TABLE t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT, c INT, d INT, e INT); + CREATE UNIQUE INDEX t1b ON t1(b); + CREATE UNIQUE INDEX t1e ON t1(e); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(e) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 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 +==== upsert1-710 + + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + 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 +==== upsert1-720 + + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + 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 +==== upsert1-730 + + DROP TABLE t1; + CREATE TABLE t1(a INT, b INT, c INT, d INT, e INT); + CREATE UNIQUE INDEX t1a ON t1(a); + CREATE UNIQUE INDEX t1b ON t1(b); + CREATE UNIQUE INDEX t1e ON t1(e); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(e) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 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 +==== upsert1-740 + + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + 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 +==== upsert1-750 + + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + 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 +==== upsert1-760 + + DROP TABLE t1; + CREATE TABLE t1(a INT PRIMARY KEY, b INT, c INT, d INT, e INT) WITHOUT ROWID; + CREATE UNIQUE INDEX t1a ON t1(a); + CREATE UNIQUE INDEX t1b ON t1(b); + CREATE UNIQUE INDEX t1e ON t1(e); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + ON CONFLICT(e) DO UPDATE SET c=excluded.c; + SELECT * FROM t1; +---- +stmt 0 err 1 -1 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 +==== upsert1-770 + + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + 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 +==== upsert1-780 + + DELETE FROM t1; + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5); + INSERT INTO t1(a,b,c,d,e) VALUES(1,2,33,44,5) + 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 +==== upsert1-800 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 REAL UNIQUE, c1); + CREATE UNIQUE INDEX test800i0 ON t0(0 || c1); + INSERT INTO t0(c0, c1) VALUES (1, 2), (2, 1); + INSERT INTO t0(c0) VALUES (1) ON CONFLICT(c0) DO UPDATE SET c1=excluded.c0; + PRAGMA integrity_check; + REINDEX; +---- +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 241 ok +stmt 267 ok +==== upsert1-900 + + CREATE VIEW t1(a) AS SELECT 1; + CREATE TRIGGER t1r1 INSTEAD OF INSERT ON t1 BEGIN + SELECT 2; + END; +---- +stmt 0 ok +stmt 33 err 1 -1 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 +==== upsert1-1000 + + CREATE TABLE t0(c0 PRIMARY KEY, c1, c2 UNIQUE) WITHOUT ROWID; + INSERT OR FAIL INTO t0(c2) VALUES (0), (NULL) + ON CONFLICT(c2) DO UPDATE SET c1 = c0; +---- +stmt 0 ok +stmt 64 err 1 -1 no such table: t0 +==== upsert1-1100 + + CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT REPLACE, b UNIQUE); + INSERT INTO t1(b) VALUES(22); + INSERT INTO t1 VALUES(2,22) ON CONFLICT (b) DO NOTHING; + 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 +==== 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 +==== 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 +==== upsert1-1300 + + CREATE TABLE t1(x INT, y TEXT); + INSERT INTO t1 VALUES + (11, printf('%.9000c','a')), + (11, printf('%.9000c','a')), + (33, printf('%.9000c','b')), + (33, printf('%.9000c','b')); + CREATE TABLE t2(x INT UNIQUE, y TEXT); + CREATE TRIGGER r1 BEFORE UPDATE ON t2 BEGIN + SELECT raise(ABORT,'Incorrect old.y value passed to trigger!') + WHERE old.y != new.y; + /* ^^^ This trigger will fire and cause the ABORT if the problem has + ** not been fixed, or if there is a regression. */ + END; + INSERT INTO t2(x, y) SELECT x, y FROM t1 + WHERE true + ON CONFLICT (x) DO UPDATE SET y = excluded.y; +---- +stmt 0 ok +stmt 34 err 1 -1 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 diff --git a/parser/testdata/upsert2.metadata.json b/parser/testdata/upsert2.metadata.json new file mode 100644 index 0000000..f4d372b --- /dev/null +++ b/parser/testdata/upsert2.metadata.json @@ -0,0 +1,18 @@ +{ + "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/upsert2.test b/parser/testdata/upsert2.test new file mode 100644 index 0000000..073c7e7 --- /dev/null +++ b/parser/testdata/upsert2.test @@ -0,0 +1,202 @@ +==== upsert2-100 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b int, c DEFAULT 0); + INSERT INTO t1(a,b) VALUES(1,2),(3,4); + INSERT INTO t1(a,b) VALUES(1,8),(2,11),(3,1) + ON CONFLICT(a) DO UPDATE SET b=excluded.b, c=c+1 WHERE t1.b1 + ORDER BY b LIMIT 1; +---- +stmt 0 ok +stmt 27 ok +stmt 76 err 1 -1 no such table: t1 +stmt 116 err 1 -1 no such table: t1 +stmt 156 err 1 -1 no such table: t1 +stmt 198 err 1 -1 no such table: t1 +stmt 238 err 1 -1 no such table: t1 +stmt 278 err 1 -1 no such table: t1 +==== 12.110 + + INSERT INTO t1 VALUES(6, 'F', 'three'); + INSERT INTO t1 VALUES(7, 'G', 'one'); + SELECT id, b, lead(c,1) OVER(ORDER BY c) AS x + FROM t1 WHERE id>1 + 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 +==== 13.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a int, b int); + INSERT INTO t1 VALUES(1,11); + INSERT INTO t1 VALUES(2,12); +---- +stmt 0 ok +stmt 27 ok +stmt 60 err 1 -1 no such table: t1 +stmt 91 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 14.0 + + SELECT * FROM( + SELECT * FROM (SELECT 1 AS c) WHERE c IN ( + SELECT (row_number() OVER()) FROM (VALUES (0)) + ) + ); +---- +stmt 0 ok +==== 14.1 + + CREATE TABLE t1(x); INSERT INTO t1(x) VALUES(12345); + CREATE TABLE t2(c); INSERT INTO t2(c) VALUES(1); + SELECT y, y+1, y+2 FROM ( + SELECT c IN ( + SELECT (row_number() OVER()) FROM t1 + ) AS y FROM t2 + ); +---- +stmt 0 ok +stmt 22 err 1 -1 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 +==== 15.0 + + WITH t(id, parent) AS ( + SELECT CAST(1 AS INT), CAST(NULL AS INT) + UNION ALL + SELECT 2, NULL + UNION ALL + SELECT 3, 1 + UNION ALL + SELECT 4, 1 + UNION ALL + SELECT 5, 2 + UNION ALL + SELECT 6, 2 + ), q AS ( + SELECT t.*, ROW_NUMBER() OVER (ORDER BY t.id) AS rn + FROM t + WHERE parent IS NULL + UNION ALL + SELECT t.*, ROW_NUMBER() OVER (ORDER BY t.id) AS rn + FROM q + JOIN t + ON t.parent = q.id + ) + SELECT * + FROM q; +---- +stmt 0 err 1 -1 cannot use window functions in recursive queries +==== 15.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('a'), ('b'), ('c'); + CREATE TABLE t2(a, b); + INSERT INTO t2 VALUES('X', 1), ('X', 2), ('Y', 2), ('Y', 3); + SELECT x, ( + SELECT sum(b) + OVER (PARTITION BY a ROWS BETWEEN UNBOUNDED PRECEDING + AND UNBOUNDED FOLLOWING) + FROM t2 WHERE b=10; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 50.2 + + SELECT * FROM ( + SELECT * FROM t1 WHERE a%1 OR (SELECT sum(a) OVER (ORDER BY a%2)) + ) + WHERE a=1 OR ( (SELECT sum(a) OVER (ORDER BY a%4)) AND a<=10 ) +---- +stmt 0 err 1 -1 no such table: t1 +==== 50.3 + + SELECT a FROM ( + SELECT * FROM ( + SELECT * FROM t1 WHERE a%1 OR (SELECT sum(a) OVER (ORDER BY a%2)) + ) + WHERE a=1 OR ( (SELECT sum(a) OVER (ORDER BY a%4)) AND a<=10 ) + ) + WHERE a=1 OR a=10.0 +---- +stmt 0 err 1 -1 no such table: t1 +==== 50.4 + + SELECT a FROM ( + SELECT * FROM ( + SELECT * FROM t1 WHERE a%1 OR (SELECT sum(a) OVER (ORDER BY a%2)) + ) + WHERE a=1 OR ( (SELECT sum(a) OVER (ORDER BY a%4)) AND a<=10 ) + ) + WHERE a=1 OR ((SELECT sum(a) OVER(ORDER BY a%8)) AND 10<=a) +---- +stmt 0 err 1 -1 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 +==== 51.1 + + CREATE TABLE a(b, c); + SELECT c FROM a GROUP BY c + HAVING(SELECT(sum(b) OVER(ORDER BY b), + sum(b) OVER(PARTITION BY min(DISTINCT c), c ORDER BY b))); +---- +stmt 0 ok +stmt 24 err 1 -1 no such table: a +==== 52.1 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES('AA','bb',356); + INSERT INTO t1 VALUES('CC','aa',158); + INSERT INTO t1 VALUES('BB','aa',399); + 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 +==== 52.2 + + SELECT + count() OVER win1, + sum(c) OVER win2, + first_value(c) OVER win2, + count(a) OVER (ORDER BY b) + FROM t1 + WINDOW + win1 AS (ORDER BY a), + win2 AS (PARTITION BY 6 ORDER BY a + RANGE BETWEEN 5 PRECEDING AND 0 PRECEDING ); +---- +stmt 0 err 1 -1 no such table: t1 +==== 52.3 + +SELECT + count() OVER (), + sum(c) OVER win2, + first_value(c) OVER win2, + count(a) OVER (ORDER BY b) +FROM t1 +WINDOW + win1 AS (ORDER BY a), + 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 +==== 52.4 + + SELECT + count() OVER win1, + sum(c) OVER win2, + first_value(c) OVER win2, + count(a) OVER (ORDER BY b) + FROM t1 + WINDOW + win1 AS (ORDER BY a), + 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 +==== 53.0 + + CREATE TABLE a(c UNIQUE); + INSERT INTO a VALUES(4),(0),(9),(-9); + SELECT a.c + FROM a + JOIN a AS b ON a.c=4 + JOIN a AS e ON a.c=e.c + WHERE a.c=(SELECT (SELECT coalesce(lead(2) OVER(),0) + sum(d.c)) + FROM a AS d + WHERE a.c); +---- +stmt 0 ok +stmt 28 err 1 -1 no such table: a +stmt 68 err 1 -1 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 +==== 54.2 + + SELECT * FROM ( + SELECT sum(b) OVER() AS c FROM t1 + UNION + SELECT b AS c FROM t1 + ) WHERE c>10; +---- +stmt 0 err 1 -1 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 +==== 54.4 + + SELECT * FROM ( + SELECT sum(b) OVER() AS c FROM t1 + UNION + SELECT b AS c FROM t1 + ) WHERE c>10; +---- +stmt 0 err 1 -1 no such table: t1 +==== 55.1 + + CREATE TABLE a(b); + SELECT + (SELECT b FROM a + GROUP BY b + HAVING (SELECT COUNT()OVER() + lead(b)OVER(ORDER BY SUM(DISTINCT b) + b)) + ) + FROM a + UNION + SELECT 99 + ORDER BY 1; +---- +stmt 0 ok +stmt 22 err 1 -1 no such table: a +==== 56.1 + + CREATE TABLE t1(a, b INTEGER); + CREATE TABLE t2(c, d); +---- +stmt 0 ok +stmt 33 ok +==== 56.2 + + SELECT avg(b) FROM t1 + UNION ALL + SELECT min(c) OVER () FROM t2 + ORDER BY nosuchcolumn; +---- +stmt 0 err 1 -1 no such table: t2 +==== 57.1 + + CREATE TABLE t4(a, b, c, d, e); +---- +stmt 0 ok +==== 57.2 + + SELECT b FROM t4 + UNION + SELECT a FROM t4 + ORDER BY ( + SELECT sum(x) OVER() FROM ( + SELECT c AS x FROM t4 + UNION + SELECT d FROM t4 + ORDER BY (SELECT e FROM t4) + ) + ); +---- +stmt 0 err 1 -1 no such table: t4 +==== 57.1.dup1 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(NULL,NULL,NULL); + SELECT + sum(a), + min(b) OVER (), + count(c) OVER (ORDER BY b) + FROM t1; +---- +stmt 0 ok +stmt 28 err 1 -1 no such table: t1 +stmt 69 err 1 -1 no such table: t1 +==== 57.2.dup1 + + CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; + INSERT INTO v0 VALUES ( 10 ) ; + 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 +==== 57.3 + + DROP TABLE t1; + CREATE TABLE t1(a); + INSERT INTO t1(a) VALUES(22); + CREATE TABLE t3(y); + INSERT INTO t3(y) VALUES(5),(11),(-9); + SELECT ( + SELECT max(y) OVER( ORDER BY (SELECT x FROM (SELECT sum(y) AS x FROM t1))) + ) + FROM t3; +---- +stmt 0 err 1 -1 no such table: t1 +stmt 17 ok +stmt 39 err 1 -1 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 +==== 58.1 + + CREATE TABLE a(a, b, c); + INSERT INTO a VALUES(1, 2, 3); + INSERT INTO a VALUES(4, 5, 6); + SELECT sum(345+b) OVER (ORDER BY b), + 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 +==== 59.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES (123); + SELECT + ntile( (SELECT sum(x)) ) OVER(ORDER BY x), + min(x) OVER(ORDER BY x) + FROM t1; +---- +stmt 0 ok +stmt 27 ok +stmt 69 err 1 -1 no such table: t1 +stmt 100 err 1 -1 no such table: t1 +==== 60.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1 (x INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES (99); + SELECT EXISTS(SELECT count(*) OVER() FROM t1 ORDER BY sum(x) OVER()); +---- +stmt 0 ok +stmt 27 ok +stmt 70 err 1 -1 no such table: t1 +stmt 100 err 1 -1 no such table: t1 +==== 61.1 + +CREATE TABLE t1(a); +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 +==== window1-generated + + SELECT + (SELECT max(x)OVER(ORDER BY x) / min(x) OVER() ) + FROM ( + SELECT (SELECT sum(a) FROM t1 ) AS x FROM t1 + ) +---- +stmt 0 err 1 -1 no such table: t1 +==== 61.3.0 + + CREATE TABLE t1(a); + CREATE TABLE t2(y); +---- +stmt 0 ok +stmt 22 ok +==== 61.3.1 + + SELECT ( + SELECT count(a) OVER ( ORDER BY (SELECT sum(y) FROM t2) ) + + total(a) OVER() + ) + FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 61.4.2 + + SELECT ( + SELECT count(a) OVER ( ORDER BY sum(a) ) + + total(a) OVER() + ) + FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 61.4.3 + + SELECT + sum(a) OVER ( ORDER BY a ) + FROM t1 + ORDER BY (SELECT sum(a) FROM t2) +---- +stmt 0 err 1 -1 no such table: t1 +==== 61.4.4 + + SELECT + sum(a) OVER ( ORDER BY a ) + FROM t1 + ORDER BY (SELECT sum(y) FROM t2) +---- +stmt 0 err 1 -1 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 +==== 62.2 + + SELECT * FROM ( + SELECT sum(b) OVER() AS c FROM t1 + UNION + SELECT b AS c FROM t1 + ) WHERE c>10; +---- +stmt 0 err 1 -1 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 +==== 62.4 + + SELECT * FROM ( + SELECT sum(b) OVER() AS c FROM t1 + UNION + SELECT b AS c FROM t1 + ) WHERE c>10; +---- +stmt 0 err 1 -1 no such table: t1 +==== 63.1 + + CREATE TABLE t1(b, x); + CREATE TABLE t2(c, d); + CREATE TABLE t3(e, f); +---- +stmt 0 ok +stmt 25 ok +stmt 50 ok +==== 63.2 + + SELECT max(b) OVER( + ORDER BY SUM( + (SELECT c FROM t2 UNION SELECT x ORDER BY c) + ) + ) FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 63.3 + + SELECT sum(b) over( + ORDER BY ( + SELECT max(b) OVER( + ORDER BY sum( + (SELECT x AS c UNION SELECT 1234 ORDER BY c) + ) + ) AS e + ORDER BY e + ) + ) + FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 64.1 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, 'abcd'); + INSERT INTO t1 VALUES(2, 'BCDE'); + INSERT INTO t1 VALUES(3, 'cdef'); + 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 +==== 64.2 + + SELECT rowid, max(b COLLATE nocase)||'' + FROM t1 + GROUP BY rowid + ORDER BY max(b COLLATE nocase)||''; +---- +stmt 0 err 1 -1 no such table: t1 +==== 64.3 + + SELECT count() OVER (), rowid, max(b COLLATE nocase)||'' + FROM t1 + GROUP BY rowid + ORDER BY max(b COLLATE nocase)||''; +---- +stmt 0 err 1 -1 no such table: t1 +==== 64.4 + + SELECT count() OVER (), rowid, max(b COLLATE nocase) + FROM t1 + GROUP BY rowid + ORDER BY max(b COLLATE nocase); +---- +stmt 0 err 1 -1 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 +==== 65.2 + + SELECT max(c1 COLLATE nocase) IN (SELECT 'aBCd') FROM t1; +---- +stmt 0 err 1 -1 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 +==== 65.4 + + SELECT COUNT() OVER () LIKE lead(102030) OVER( + ORDER BY sum('abcdef' COLLATE nocase) IN (SELECT 54321) + ) + FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 66.1 + + CREATE TABLE t1(a INTEGER); + INSERT INTO t1 VALUES(3578824042033200656); + 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 +==== 66.3 + + CREATE TABLE t2(a INTEGER); + INSERT INTO t2 VALUES(45); + 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 +==== 67.0 + + CREATE TABLE t1(a, b, c); + CREATE TABLE t2(a, b, c); +---- +stmt 0 ok +stmt 28 ok +==== 67.1 + + SELECT a,c,b FROM t1 INTERSECT SELECT a,b,c FROM t1 ORDER BY ( + SELECT nth_value(a,2) OVER w1 + WINDOW w1 AS ( ORDER BY ((SELECT 1 FROM v1)) ) + ) +---- +stmt 0 err 1 -1 no such table: t1 +==== 67.2 + + SELECT a,c,b FROM t1 INTERSECT SELECT a,b,c FROM t1 ORDER BY ( + SELECT nth_value(a,2) OVER w1 + WINDOW w1 AS ( ORDER BY ((SELECT 1 FROM t2)) ) + ) +---- +stmt 0 err 1 -1 no such table: t1 +==== 68.0 + + CREATE TABLE t1(a,b); + INSERT INTO t1(a,b) VALUES(0,0),(1,1),(2,4),(3,9),(4,99); + 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 +==== 69.0 + + CREATE TABLE t1(a,b); + CREATE INDEX t1ba ON t1(b,a); + 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 +==== 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 +==== 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 +==== 70.0 + + CREATE TABLE t1(a); +---- +stmt 0 ok +==== 70.1 + + 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 +==== 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 +==== 71.0 + + CREATE TABLE t0(a); + SELECT a FROM t0, (SELECT a AS b FROM t0) + WHERE (a,1)=(SELECT 2,2 UNION SELECT sum(b),max(b) OVER(ORDER BY b) ORDER BY 2) + AND b=4 + ORDER BY b; +---- +stmt 0 ok +stmt 22 err 1 -1 no such table: t0 +==== 72.1 + + CREATE TABLE dual(dummy); INSERT INTO dual VALUES('X'); + CREATE VIEW v1(x,y) AS SELECT RANK() OVER (PARTITION BY 0), SUM(0) FROM dual; + SELECT * FROM v1 WHERE true; +---- +stmt 0 ok +stmt 28 err 1 -1 no such table: dual +stmt 59 ok +stmt 139 err 1 -1 no such table: v1 +==== 72.0 + + CREATE TABLE t0(c0); + INSERT INTO t0(c0) VALUES (0); + 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 56 ok +==== 72.1.dup1 + + SELECT COUNT(*) FROM ( + SELECT TOTAL(0) OVER (PARTITION BY t0.c0) FROM t0 + ) + WHERE ('1' IS NOT ('abcde' NOTNULL)); +---- +stmt 0 err 1 -1 no such table: t0 +==== 73.0 + + CREATE TABLE t1(a INT); + INSERT INTO t1(a) VALUES(1),(2),(4); + CREATE VIEW t2(b,c) AS SELECT * FROM t1 JOIN t1 A ORDER BY sum(0) OVER(PARTITION BY 0); + 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 65 ok +stmt 155 err 1 -1 no such table: main.t2 +==== 73.1 + + SELECT * FROM t2; +---- +stmt 0 err 1 -1 no such table: t2 +==== 73.2 + + UPDATE t2 SET c=99 WHERE b=4 RETURNING *; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 73.5 + + DROP TRIGGER x1; +---- +stmt 0 err 1 -1 no such trigger: x1 +==== 73.6 + + UPDATE t2 SET c=99 WHERE b=4 RETURNING *; +---- +stmt 0 err 1 -1 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 +==== 74.0 + + CREATE TABLE t1 (a INT, b INT); + CREATE TABLE t2 (c INT, d INT); + CREATE INDEX idx ON t1(abs(a)); + INSERT INTO t1 VALUES(1,2),(3,4); + INSERT INTO t2 VALUES(5,6),(7,8); +---- +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 +==== 74.1 + + SELECT ( + SELECT count( a ) FROM t2 LIMIT 1 + ) + FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 74.2 + + SELECT ( + SELECT count( a+c ) FROM t2 LIMIT 1 + ) + FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 74.3 + + SELECT ( + SELECT count( ( SELECT(sum(0) OVER(ORDER BY c, abs(a))) ) ) + FROM t2 GROUP BY c LIMIT 1 + ) + FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 74.4 + + /* Original test case reported in https://sqlite.org/forum/forumpost/bad532820c + CREATE TABLE v0 (c1); + CREATE INDEX i ON v0 (c1, c1=1); + SELECT 0 FROM v0 AS a1 + WHERE (SELECT count((SELECT(sum(0) OVER(PARTITION BY(c1), (a1.c1=1) )))) + FROM v0 + GROUP BY hex(0)) + AND a1.c1=0; +---- +==== 75.0 + + DROP 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 17 ok +stmt 50 err 1 -1 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 +==== 76.0 + + CREATE TABLE t1(a INT, b INT); + INSERT INTO t1(a,b) VALUES (111,222),(111,223),(118,229); + CREATE INDEX t1a ON t1(a); + CREATE TABLE t2(x INT); + 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 122 ok +stmt 148 err 1 -1 no such table: t2 +==== 76.1 + + SELECT c, (SELECT c + sum(1) OVER ()) AS "res" + FROM t2 LEFT JOIN (SELECT +a AS c FROM t1) AS v1 ON true + GROUP BY c + ORDER by c; +---- +stmt 0 err 1 -1 no such table: t2 +==== 76.2 + + CREATE TABLE t3(x); + CREATE TABLE t4(y); + INSERT INTO t3 VALUES(100), (200), (400); + INSERT INTO t4 VALUES(100), (300), (400); +---- +stmt 0 ok +stmt 22 ok +stmt 44 err 1 -1 no such table: t3 +stmt 88 err 1 -1 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 +==== 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 +==== 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 +==== 77.1 + + CREATE TABLE t1(x INT); + CREATE INDEX t1x ON t1(likely(x)); + 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 +==== 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 +==== 78.1 + + SELECT quote(group_concat(x) OVER ()) FROM (SELECT '' AS x); +---- +stmt 0 ok +==== 78.2 + + SELECT quote(group_concat(x) OVER ( + ORDER BY y RANGE BETWEEN 1 FOLLOWING AND 2 FOLLOWING + )) FROM (SELECT 'abc' AS x, 1 AS y); +---- +stmt 0 ok +==== 79.0 + + CREATE TABLE t0 (c0 INTEGER ); + INSERT INTO t0 VALUES(1); + INSERT INTO t0 VALUES(2); + 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 +==== 79.1 + + SELECT COUNT(*) + OVER ( ROWS BETWEEN 0 FOLLOWING AND 100 FOLLOWING) + FROM t0; +---- +stmt 0 err 1 -1 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 +==== 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 diff --git a/parser/testdata/window2.metadata.json b/parser/testdata/window2.metadata.json new file mode 100644 index 0000000..4137091 --- /dev/null +++ b/parser/testdata/window2.metadata.json @@ -0,0 +1,69 @@ +{ + "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/window2.test b/parser/testdata/window2.test new file mode 100644 index 0000000..c315d16 --- /dev/null +++ b/parser/testdata/window2.test @@ -0,0 +1,551 @@ +==== 1.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d INTEGER); + INSERT INTO t1 VALUES(1, 'odd', 'one', 1); + INSERT INTO t1 VALUES(2, 'even', 'two', 2); + INSERT INTO t1 VALUES(3, 'odd', 'three', 3); + INSERT INTO t1 VALUES(4, 'even', 'four', 4); + INSERT INTO t1 VALUES(5, 'odd', 'five', 5); + INSERT INTO t1 VALUES(6, 'even', 'six', 6); +---- +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 +==== 1.1 + + SELECT c, sum(d) OVER (PARTITION BY b ORDER BY c) FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.2 + + SELECT sum(d) OVER () FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.3 + + SELECT sum(d) OVER (PARTITION BY b) FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.1 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1000 PRECEDING AND 1 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.2 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1000 PRECEDING AND 1000 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.3 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1000 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.4 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.5 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 0 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.6 + + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.7 + + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 0 PRECEDING AND 0 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.8 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.9 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.10 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.11 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 2 PRECEDING AND CURRENT ROW + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.13 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.14 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 3 PRECEDING AND 1 PRECEDING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.15 + + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.16 + + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.17 + + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.18 + + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.19 + + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND 3 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.20 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.21 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.22 + + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.23 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.24 + + SELECT a, sum(d) OVER ( + PARTITION BY a%2 + ORDER BY d + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.25 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.26 + + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.27 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.28 + + SELECT a, sum(d) OVER ( + PARTITION BY b + ORDER BY d + ROWS BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.29 + + SELECT a, sum(d) OVER ( + ORDER BY d + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.30 + + SELECT a, sum(d) OVER ( + ORDER BY b + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.1 + + SELECT a, sum(d) OVER ( + PARTITION BY b ORDER BY d + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.2 + + SELECT a, sum(d) OVER ( + ORDER BY b + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.3 + + SELECT a, sum(d) OVER ( + ORDER BY d + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.4 + + SELECT a, sum(d) OVER ( + ORDER BY d/2 + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 4.0 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER); + INSERT INTO t2(a, b) VALUES + (1,0), (2,74), (3,41), (4,74), (5,23), (6,99), (7,26), (8,33), (9,2), + (10,89), (11,81), (12,96), (13,59), (14,38), (15,68), (16,39), (17,62), + (18,91), (19,46), (20,6), (21,99), (22,97), (23,27), (24,46), (25,78), + (26,54), (27,97), (28,8), (29,67), (30,29), (31,93), (32,84), (33,77), + (34,23), (35,16), (36,16), (37,93), (38,65), (39,35), (40,47), (41,7), + (42,86), (43,74), (44,61), (45,91), (46,85), (47,24), (48,85), (49,43), + (50,59), (51,12), (52,32), (53,56), (54,3), (55,91), (56,22), (57,90), + (58,55), (59,15), (60,28), (61,89), (62,25), (63,47), (64,1), (65,56), + (66,40), (67,43), (68,56), (69,16), (70,75), (71,36), (72,89), (73,98), + (74,76), (75,81), (76,4), (77,94), (78,42), (79,30), (80,78), (81,33), + (82,29), (83,53), (84,63), (85,2), (86,87), (87,37), (88,80), (89,84), + (90,72), (91,41), (92,9), (93,61), (94,73), (95,95), (96,65), (97,13), + (98,58), (99,96), (100,98), (101,1), (102,21), (103,74), (104,65), (105,35), + (106,5), (107,73), (108,11), (109,51), (110,87), (111,41), (112,12), (113,8), + (114,20), (115,31), (116,31), (117,15), (118,95), (119,22), (120,73), + (121,79), (122,88), (123,34), (124,8), (125,11), (126,49), (127,34), + (128,90), (129,59), (130,96), (131,60), (132,55), (133,75), (134,77), + (135,44), (136,2), (137,7), (138,85), (139,57), (140,74), (141,29), (142,70), + (143,59), (144,19), (145,39), (146,26), (147,26), (148,47), (149,80), + (150,90), (151,36), (152,58), (153,47), (154,9), (155,72), (156,72), (157,66), + (158,33), (159,93), (160,75), (161,64), (162,81), (163,9), (164,23), (165,37), + (166,13), (167,12), (168,14), (169,62), (170,91), (171,36), (172,91), + (173,33), (174,15), (175,34), (176,36), (177,99), (178,3), (179,95), (180,69), + (181,58), (182,52), (183,30), (184,50), (185,84), (186,10), (187,84), + (188,33), (189,21), (190,39), (191,44), (192,58), (193,30), (194,38), + (195,34), (196,83), (197,27), (198,82), (199,17), (200,7); +---- +stmt 0 ok +stmt 27 ok +stmt 80 err 1 -1 no such table: t2 +==== 4.1 + + SELECT a, sum(b) OVER ( + PARTITION BY (b%10) + ORDER BY b + ) FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 no such table: t2 +==== 4.2 + + SELECT a, sum(b) OVER ( + PARTITION BY (b%10) + ORDER BY b + RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t2 ORDER BY a; +---- +stmt 0 err 1 -1 no such table: t2 +==== 4.3 + + SELECT b, sum(b) OVER ( + ORDER BY b + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t2 ORDER BY b; +---- +stmt 0 err 1 -1 no such table: t2 +==== 4.4 + + SELECT b, sum(b) OVER ( + ORDER BY b + RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY b; +---- +stmt 0 err 1 -1 no such table: t2 +==== 4.5 + + SELECT b, sum(b) OVER ( + ORDER BY b + RANGE BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t2 ORDER BY b; +---- +stmt 0 err 1 -1 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 +==== 4.6.2 + + SELECT b, sum(b) OVER () FROM t2 ORDER BY b; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 4.8.1 + + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN CURRENT ROW AND CURRENT ROW + ) FROM t2 ORDER BY 1, 2; +---- +stmt 0 err 1 -1 no such table: t2 +==== 4.8.2 + + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) FROM t2 ORDER BY 1, 2; +---- +stmt 0 err 1 -1 no such table: t2 +==== 4.8.3 + + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY 1, 2; +---- +stmt 0 err 1 -1 no such table: t2 +==== 4.8.4 + + SELECT b, sum(b) OVER ( + ORDER BY a + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + ) FROM t2 ORDER BY 1, 2; +---- +stmt 0 err 1 -1 no such table: t2 +==== 4.10 + + SELECT count(*) OVER (ORDER BY b) FROM t1 +---- +stmt 0 err 1 -1 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 +==== 5.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x INTEGER, y INTEGER); + INSERT INTO t1 VALUES(10, 1); + INSERT INTO t1 VALUES(20, 2); + INSERT INTO t1 VALUES(3, 3); + INSERT INTO t1 VALUES(2, 4); + INSERT INTO t1 VALUES(1, 5); +---- +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 +==== 6.0 + + DROP TABLE IF EXISTS t0; + CREATE TABLE t0(c0 INTEGER UNIQUE); + INSERT INTO t0 VALUES(0); +---- +stmt 0 ok +stmt 27 ok +stmt 65 err 1 -1 no such table: t0 +==== 6.1 + + SELECT DENSE_RANK() OVER(), LAG(0) OVER() FROM t0; +---- +stmt 0 err 1 -1 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 +==== 7.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER); + INSERT INTO t1 VALUES(1, 1, 1); + INSERT INTO t1 VALUES(1, 2, 2); + INSERT INTO t1 VALUES(3, 3, 3); + INSERT INTO t1 VALUES(3, 4, 4); +---- +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 +==== 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 +==== 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 +==== 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 diff --git a/parser/testdata/window3.metadata.json b/parser/testdata/window3.metadata.json new file mode 100644 index 0000000..0cd3ad8 --- /dev/null +++ b/parser/testdata/window3.metadata.json @@ -0,0 +1,1226 @@ +{ + "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/window3.test b/parser/testdata/window3.test new file mode 100644 index 0000000..2ff3de5 --- /dev/null +++ b/parser/testdata/window3.test @@ -0,0 +1,6581 @@ +==== 1.0 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER); + INSERT INTO t2(a, b) VALUES + (10,89), (11,81), (12,96), (13,59), (14,38), (15,68), (16,39), (17,62), + (18,91), (19,46), (20,6), (21,99), (22,97), (23,27), (24,46), (25,78), + (26,54), (27,97), (28,8), (29,67), (30,29), (31,93), (32,84), (33,77), + (34,23), (35,16), (36,16), (37,93), (38,65), (39,35), (40,47), (41,7), + (42,86), (43,74), (44,61), (45,91), (46,85), (47,24), (48,85), (49,43), + (50,59), (51,12), (52,32), (53,56), (54,3), (55,91), (56,22), (57,90), + (58,55), (59,15), (60,28), (61,89), (62,25), (63,47), (64,1), (65,56), + (66,40), (67,43), (68,56), (69,16), (70,75), (71,36), (72,89), (73,98), + (74,76), (75,81), (76,4), (77,94), (78,42), (79,30), (80,78), (81,33), + (82,29), (83,53), (84,63), (85,2), (86,87), (87,37), (88,80), (89,84), + (90,72), (91,41), (92,9), (93,61), (94,73), (95,95), (96,65), (97,13), + (98,58), (99,96), (100,98), (101,1), (102,21), (103,74), (104,65), (105,35), + (106,5), (107,73), (108,11), (109,51), (110,87), (111,41), (112,12), (113,8), + (114,20), (115,31), (116,31), (117,15), (118,95), (119,22), (120,73), + (121,79), (122,88), (123,34), (124,8), (125,11), (126,49), (127,34), + (128,90), (129,59), (130,96), (131,60), (132,55), (133,75), (134,77), + (135,44), (136,2), (137,7), (138,85), (139,57), (140,74), (141,29), (142,70), + (143,59), (144,19), (145,39), (146,26), (147,26), (148,47), (149,80), + (150,90), (151,36), (152,58), (153,47), (154,9), (155,72), (156,72), (157,66), + (158,33), (159,93), (160,75), (161,64), (162,81), (163,9), (164,23), (165,37), + (166,13), (167,12), (168,14), (169,62), (170,91), (171,36), (172,91), + (173,33), (174,15), (175,34), (176,36), (177,99), (178,3), (179,95), (180,69), + (181,58), (182,52), (183,30), (184,50), (185,84), (186,10), (187,84), + (188,33), (189,21), (190,39), (191,44), (192,58), (193,30), (194,38), + (195,34), (196,83), (197,27), (198,82), (199,17), (200,7); +---- +stmt 0 ok +stmt 27 ok +stmt 80 err 1 -1 no such table: t2 +==== 1.1 + + SELECT max(b) OVER ( + ORDER BY a + ) FROM t2 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.1.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.1.14.7 + + SELECT string_agg(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.1.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM 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 +==== 1.1.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.2.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.2.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.2.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM 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 +==== 1.2.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.3.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.3.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.3.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) + FROM 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 +==== 1.3.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 RANGE BETWEEN CURRENT ROW AND CURRENT ROW) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.4.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.4.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.4.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM 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 +==== 1.4.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.5.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.5.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.5.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) + FROM 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 +==== 1.5.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.6.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.6.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.6.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) + FROM 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 +==== 1.6.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND 2 PRECEDING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.7.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.7.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.7.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + FROM 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 +==== 1.7.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.8.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.8.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.8.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) + FROM 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 +==== 1.8.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.9.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.9.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.9.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) + FROM 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 +==== 1.9.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN CURRENT ROW AND CURRENT ROW) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.10.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.10.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.10.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) + FROM 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 +==== 1.10.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.11.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.11.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.11.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) + FROM 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 +==== 1.11.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND 2 FOLLOWING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.12.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.12.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.12.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) + FROM 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 +==== 1.12.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.13.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.13.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.13.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) + FROM 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 +==== 1.13.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN 2 FOLLOWING AND 4 FOLLOWING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.14.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.14.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.14.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + FROM 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 +==== 1.14.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.15.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.15.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.15.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) + FROM 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 +==== 1.15.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.16.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.16.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.16.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + FROM 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 +==== 1.16.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.17.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.17.14.7 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ORDER BY b%10 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 no such table: t2 +==== 1.17.14.8 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER (win1 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) + FROM 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 +==== 1.17.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN 4 FOLLOWING AND UNBOUNDED FOLLOWING) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.18.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 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) + FROM 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 +==== 1.18.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.19.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 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) + FROM 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 +==== 1.19.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.20.6.1 + + SELECT + row_number() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ), + rank() OVER ( PARTITION BY b%2 ORDER BY b%10 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP ), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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) + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a) + ORDER BY 1 +---- +stmt 0 err 1 -1 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) + FROM 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 +==== 1.20.14.9 + + SELECT group_concat(CAST(b AS TEXT), '.') OVER win2 + FROM t2 + WINDOW win1 AS (PARTITION BY b%2,a ORDER BY b%10), + win2 AS (win1 ROWS BETWEEN 4 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP) + ORDER BY 1 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 diff --git a/parser/testdata/window4.metadata.json b/parser/testdata/window4.metadata.json new file mode 100644 index 0000000..e47ccba --- /dev/null +++ b/parser/testdata/window4.metadata.json @@ -0,0 +1,224 @@ +{ + "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/window4.test b/parser/testdata/window4.test new file mode 100644 index 0000000..dae7d52 --- /dev/null +++ b/parser/testdata/window4.test @@ -0,0 +1,1541 @@ +==== 1.0 + + DROP TABLE IF EXISTS t3; + CREATE TABLE t3(a TEXT PRIMARY KEY); + INSERT INTO t3 VALUES('a'), ('b'), ('c'), ('d'), ('e'); + INSERT INTO t3 VALUES('f'), ('g'), ('h'), ('i'), ('j'); +---- +stmt 0 ok +stmt 27 ok +stmt 66 err 1 -1 no such table: t3 +stmt 124 err 1 -1 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 +==== 1.2 + + SELECT a, ntile(2) OVER (ORDER BY a) FROM t3 +---- +stmt 0 err 1 -1 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 +==== 1.4 + + SELECT a, ntile(4) OVER (ORDER BY a) FROM t3 +---- +stmt 0 err 1 -1 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 +==== 1.6 + + SELECT a, ntile(6) OVER (ORDER BY a) FROM t3 +---- +stmt 0 err 1 -1 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 +==== 1.8 + + SELECT a, ntile(8) OVER (ORDER BY a) FROM t3 +---- +stmt 0 err 1 -1 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 +==== 1.10 + + SELECT a, ntile(10) OVER (ORDER BY a) FROM t3 +---- +stmt 0 err 1 -1 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 +==== 1.12 + + SELECT a, ntile(12) OVER (ORDER BY a) FROM t3 +---- +stmt 0 err 1 -1 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 +==== 1.14 + + SELECT a, ntile(14) OVER (ORDER BY a) FROM t3 +---- +stmt 0 err 1 -1 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 +==== 1.16 + + SELECT a, ntile(16) OVER (ORDER BY a) FROM t3 +---- +stmt 0 err 1 -1 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 +==== 1.18 + + SELECT a, ntile(18) OVER (ORDER BY a) FROM t3 +---- +stmt 0 err 1 -1 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 +==== 2.0 + + DROP TABLE IF EXISTS t4; + CREATE TABLE t4(a INTEGER PRIMARY KEY, b TEXT, c INTEGER); + INSERT INTO t4 VALUES(1, 'A', 9); + INSERT INTO t4 VALUES(2, 'B', 3); + INSERT INTO t4 VALUES(3, 'C', 2); + INSERT INTO t4 VALUES(4, 'D', 10); + INSERT INTO t4 VALUES(5, 'E', 5); + INSERT INTO t4 VALUES(6, 'F', 1); + INSERT INTO t4 VALUES(7, 'G', 1); + INSERT INTO t4 VALUES(8, 'H', 2); + INSERT INTO t4 VALUES(9, 'I', 10); + INSERT INTO t4 VALUES(10, 'J', 4); +---- +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 +==== 2.1 + + SELECT a, nth_value(b, c) OVER (ORDER BY a) FROM t4 +---- +stmt 0 err 1 -1 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 +==== 2.2.2 + + SELECT a, lead(b, 2) OVER (ORDER BY a) FROM t4 +---- +stmt 0 err 1 -1 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 +==== 2.3.1 + + SELECT a, lag(b) OVER (ORDER BY a) FROM t4 +---- +stmt 0 err 1 -1 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 +==== 2.3.3 + + SELECT a, lag(b, 3, 'abc') OVER (ORDER BY a) FROM t4 +---- +stmt 0 err 1 -1 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 +==== 3.0 + + DROP TABLE IF EXISTS t5; + CREATE TABLE t5(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d INTEGER); + INSERT INTO t5 VALUES(1, 'A', 'one', 5); + INSERT INTO t5 VALUES(2, 'B', 'two', 4); + INSERT INTO t5 VALUES(3, 'A', 'three', 3); + INSERT INTO t5 VALUES(4, 'B', 'four', 2); + INSERT INTO t5 VALUES(5, 'A', 'five', 1); +---- +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 +==== 3.1 + + SELECT a, nth_value(c, d) OVER (ORDER BY b) FROM t5 +---- +stmt 0 err 1 -1 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 +==== 3.3 + + SELECT a, count(*) OVER abc, count(*) OVER def FROM t5 + WINDOW abc AS (ORDER BY a), + def AS (ORDER BY a DESC) + ORDER BY a; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 4.0 + + DROP TABLE IF EXISTS ttt; + CREATE TABLE ttt(a INTEGER PRIMARY KEY, b INTEGER, c INTEGER); + INSERT INTO ttt VALUES(1, 1, 1); + INSERT INTO ttt VALUES(2, 2, 2); + INSERT INTO ttt VALUES(3, 3, 3); + + INSERT INTO ttt VALUES(4, 1, 2); + INSERT INTO ttt VALUES(5, 2, 3); + INSERT INTO ttt VALUES(6, 3, 4); + + INSERT INTO ttt VALUES(7, 1, 3); + INSERT INTO ttt VALUES(8, 2, 4); + INSERT INTO ttt VALUES(9, 3, 5); +---- +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 +==== 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 +==== 4.2 + + SELECT max(b) OVER (ORDER BY max(c)) FROM ttt GROUP BY b; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 7.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x INTEGER, y INTEGER); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); + INSERT INTO t1 VALUES(7, 8); + INSERT INTO t1 VALUES(9, 10); +---- +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 +==== 7.1 + + SELECT lead(y) OVER win FROM t1 + WINDOW win AS (ORDER BY x) +---- +stmt 0 err 1 -1 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 +==== 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 +==== 7.4 + + SELECT + lead(y) OVER win, lead(y) OVER win + FROM t1 + WINDOW win AS (ORDER BY x) +---- +stmt 0 err 1 -1 no such table: t1 +==== 7.5 + + SELECT + lead(y) OVER win, + lead(y, 2) OVER win, + lead(y, 3, -1) OVER win + FROM t1 + WINDOW win AS (ORDER BY x) +---- +stmt 0 err 1 -1 no such table: t1 +==== 8.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER, d INTEGER); + 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 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 +==== 8.1 + + SELECT row_number() OVER win, + nth_value(d,2) OVER win, + lead(d) OVER win + FROM t1 + WINDOW win AS (ORDER BY a) +---- +stmt 0 err 1 -1 no such table: t1 +==== 8.2 + + SELECT row_number() OVER win, + rank() OVER win, + dense_rank() OVER win, + ntile(2) OVER win, + first_value(d) OVER win, + last_value(d) OVER win, + nth_value(d,2) OVER win, + lead(d) OVER win, + lag(d) OVER win, + max(d) OVER win, + min(d) OVER win + FROM t1 + WINDOW win AS (ORDER BY a) +---- +stmt 0 err 1 -1 no such table: t1 +==== 9.0 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(x INTEGER); + INSERT INTO t2 VALUES(1), (1), (1), (4), (4), (6), (7); +---- +stmt 0 ok +stmt 27 ok +stmt 57 err 1 -1 no such table: t2 +==== 9.1 + + SELECT rank() OVER () FROM t2 +---- +stmt 0 err 1 -1 no such table: t2 +==== 9.2 + + SELECT dense_rank() OVER (PARTITION BY x) FROM t2 +---- +stmt 0 err 1 -1 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 +==== 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 +==== 10.0 + + DROP TABLE IF EXISTS t7; + CREATE TABLE t7(id INTEGER PRIMARY KEY, a INTEGER, b INTEGER); + INSERT INTO t7(id, a, b) VALUES + (1, 1, 2), (2, 1, NULL), (3, 1, 4), + (4, 3, NULL), (5, 3, 8), (6, 3, 1); +---- +stmt 0 ok +stmt 27 ok +stmt 92 err 1 -1 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 +==== 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 +==== 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 +==== 11.0 + + DROP VIEW IF EXISTS v8; + DROP TABLE IF EXISTS t8; + CREATE TABLE t8(t INT, total INT); + INSERT INTO t8 VALUES(0,2); + INSERT INTO t8 VALUES(5,1); + INSERT INTO t8 VALUES(10,1); +---- +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 +==== 11.1 + + SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8; +---- +stmt 0 err 1 -1 no such table: t8 +==== 11.2 + + CREATE VIEW v8 AS SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8; +---- +stmt 0 ok +==== 11.3 + + SELECT * FROM v8; +---- +stmt 0 err 1 -1 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 +==== 11.5 + + SELECT sum( min(t) ) OVER () FROM t8 GROUP BY total; +---- +stmt 0 err 1 -1 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 +==== 11.7 + + SELECT sum( min(t) ) OVER () FROM t8; +---- +stmt 0 err 1 -1 no such table: t8 +==== 11.8 + + SELECT sum( max(t) ) OVER () FROM t8; +---- +stmt 0 err 1 -1 no such table: t8 +==== 12.0 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER); + INSERT INTO t2 VALUES(1), (2), (3); +---- +stmt 0 ok +stmt 27 ok +stmt 57 err 1 -1 no such table: t2 +==== 12.1 + + SELECT (SELECT min(a) OVER ()) FROM t2 +---- +stmt 0 err 1 -1 no such table: t2 diff --git a/parser/testdata/window5.metadata.json b/parser/testdata/window5.metadata.json new file mode 100644 index 0000000..8147dc1 --- /dev/null +++ b/parser/testdata/window5.metadata.json @@ -0,0 +1,10 @@ +{ + "todo": { + "1.0": true, + "1.1": true, + "2.0": true, + "2.1": true, + "3.0": true, + "3.1": true + } +} diff --git a/parser/testdata/window5.test b/parser/testdata/window5.test new file mode 100644 index 0000000..1af840e --- /dev/null +++ b/parser/testdata/window5.test @@ -0,0 +1,44 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(4, 'a'); + INSERT INTO t1 VALUES(6, 'b'); + INSERT INTO t1 VALUES(1, 'c'); + INSERT INTO t1 VALUES(5, 'd'); + INSERT INTO t1 VALUES(2, 'e'); + 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 +==== 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 +==== 2.0 + + SELECT sumint(a) OVER (ORDER BY rowid) FROM t1 ORDER BY rowid; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 3.1 + + SELECT sum(a) FROM t1; +---- +stmt 0 err 1 -1 no such table: t1 diff --git a/parser/testdata/window6.metadata.json b/parser/testdata/window6.metadata.json new file mode 100644 index 0000000..f3c13ec --- /dev/null +++ b/parser/testdata/window6.metadata.json @@ -0,0 +1,39 @@ +{ + "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/window6.test b/parser/testdata/window6.test new file mode 100644 index 0000000..80e749a --- /dev/null +++ b/parser/testdata/window6.test @@ -0,0 +1,244 @@ +==== 2.0 + + SELECT window('hello world'); +---- +stmt 0 err 1 10 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 +==== 3.1 + + DROP TABLE window; + CREATE TABLE x1(x); + INSERT INTO x1 VALUES('bob'), ('alice'), ('cate'); + 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 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 +==== 4.0 + CREATE TABLE t4(x, y); +---- +stmt 0 ok +==== 4.1 + + SELECT * FROM t4 window, t4; +---- +stmt 0 err 1 -1 no such table: t4 +==== 5.0 + + CREATE TABLE over(x, over); + CREATE TABLE window(x, window); + INSERT INTO over VALUES(1, 2), (3, 4), (5, 6); + INSERT INTO window VALUES(1, 2), (3, 4), (5, 6); + SELECT sum(x) over FROM over +---- +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 +==== 5.1 + + SELECT sum(x) over over FROM over WINDOW over AS () +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 6.0 + + SELECT LIKE('!', '', '!') x WHERE x; +---- +stmt 0 ok +==== 6.1 + + SELECT LIKE("!","","!")""WHeRE""; +---- +stmt 0 ok +==== 6.2 + + SELECT LIKE("!","","!")""window""; +---- +stmt 0 err 1 30 near "window": syntax error +==== 7.0 + + CREATE TABLE t1(x TEXT); + CREATE INDEX i1 ON t1(x COLLATE nocase); + 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 +==== 7.1 + + SELECT count(*) FROM t1 WHERE x LIKE '!' ESCAPE '!'; +---- +stmt 0 err 1 -1 no such table: t1 +==== 8.0 + + CREATE TABLE IF NOT EXISTS "sample" ( + "id" INTEGER NOT NULL PRIMARY KEY, + "counter" INTEGER NOT NULL, + "value" REAL NOT NULL + ); + + INSERT INTO "sample" (counter, value) + VALUES (1, 10.), (1, 20.), (2, 1.), (2, 3.), (3, 100.); +---- +stmt 0 ok +stmt 150 err 1 -1 no such table: sample +==== 8.1 + + SELECT "counter", "value", RANK() OVER w AS "rank" + FROM "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 +==== 8.2 + + SELECT "counter", "value", SUM("value") OVER + (ORDER BY "id" ROWS 2 PRECEDING) + FROM "sample" + ORDER BY "id" +---- +stmt 0 err 1 -1 no such table: sample +==== 8.3 + + SELECT SUM("value") OVER + (ORDER BY "id" ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) + FROM "sample" + ORDER BY "id" +---- +stmt 0 err 1 -1 no such table: sample +==== 9.0 + + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT x, group_concat(x) OVER (ORDER BY x ROWS 2 PRECEDING) + FROM c; +---- +stmt 0 ok +==== 9.3 + + 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 +==== 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 +==== 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 +==== 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 +==== 9.8.1 + + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT count() OVER ( + ORDER BY x ROWS BETWEEN a PRECEDING AND 2 FOLLOWING + ) FROM c; +---- +stmt 0 ok +==== 9.8.2 + + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) + SELECT count() OVER ( + ORDER BY x ROWS BETWEEN 2 PRECEDING AND a FOLLOWING + ) FROM c; +---- +stmt 0 ok +==== 10.0 + + WITH t1(a,b) AS (VALUES(1,2)) + SELECT count() FILTER (where b<>5) OVER w1 + FROM t1 + WINDOW w1 AS (ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING); +---- +stmt 0 ok +==== 11.0 + + CREATE TABLE t1(a INT); + INSERT INTO t1 VALUES(10),(15),(20),(20),(25),(30),(30),(50); + CREATE TABLE t3(x INT, y VARCHAR); + 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 90 ok +stmt 127 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 11.4.1 + + SELECT y, group_concat(y, '.') OVER win FROM t3 + WINDOW win AS ( + ORDER BY y RANGE BETWEEN UNBOUNDED PRECEDING AND 10 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t3 diff --git a/parser/testdata/window7.metadata.json b/parser/testdata/window7.metadata.json new file mode 100644 index 0000000..4e7ff0c --- /dev/null +++ b/parser/testdata/window7.metadata.json @@ -0,0 +1,14 @@ +{ + "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/window7.test b/parser/testdata/window7.test new file mode 100644 index 0000000..4b6b445 --- /dev/null +++ b/parser/testdata/window7.test @@ -0,0 +1,83 @@ +==== 1.0 + + DROP TABLE IF EXISTS t3; + CREATE TABLE t3(a INTEGER, b INTEGER); + INSERT INTO t3 VALUES + (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), + (9, 9), (0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), + (7, 17), (8, 18), (9, 19), (0, 20), (1, 21), (2, 22), (3, 23), (4, 24), + (5, 25), (6, 26), (7, 27), (8, 28), (9, 29), (0, 30), (1, 31), (2, 32), + (3, 33), (4, 34), (5, 35), (6, 36), (7, 37), (8, 38), (9, 39), (0, 40), + (1, 41), (2, 42), (3, 43), (4, 44), (5, 45), (6, 46), (7, 47), (8, 48), + (9, 49), (0, 50), (1, 51), (2, 52), (3, 53), (4, 54), (5, 55), (6, 56), + (7, 57), (8, 58), (9, 59), (0, 60), (1, 61), (2, 62), (3, 63), (4, 64), + (5, 65), (6, 66), (7, 67), (8, 68), (9, 69), (0, 70), (1, 71), (2, 72), + (3, 73), (4, 74), (5, 75), (6, 76), (7, 77), (8, 78), (9, 79), (0, 80), + (1, 81), (2, 82), (3, 83), (4, 84), (5, 85), (6, 86), (7, 87), (8, 88), + (9, 89), (0, 90), (1, 91), (2, 92), (3, 93), (4, 94), (5, 95), (6, 96), + (7, 97), (8, 98), (9, 99), (0, 100); +---- +stmt 0 ok +stmt 27 ok +stmt 68 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 diff --git a/parser/testdata/window8.metadata.json b/parser/testdata/window8.metadata.json new file mode 100644 index 0000000..16b7d2a --- /dev/null +++ b/parser/testdata/window8.metadata.json @@ -0,0 +1,365 @@ +{ + "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/window8.test b/parser/testdata/window8.test new file mode 100644 index 0000000..97ce0ec --- /dev/null +++ b/parser/testdata/window8.test @@ -0,0 +1,2866 @@ +==== 1.0 + + DROP TABLE IF EXISTS t3; + CREATE TABLE t3(a TEXT, b TEXT, c INTEGER); + INSERT INTO t3 VALUES + ('HH', 'bb', 355), ('CC', 'aa', 158), ('BB', 'aa', 399), + ('FF', 'bb', 938), ('HH', 'aa', 480), ('FF', 'bb', 870), + ('JJ', 'aa', 768), ('JJ', 'aa', 899), ('GG', 'bb', 929), + ('II', 'bb', 421), ('GG', 'bb', 844), ('FF', 'bb', 574), + ('CC', 'bb', 822), ('GG', 'bb', 938), ('BB', 'aa', 660), + ('HH', 'aa', 979), ('BB', 'bb', 792), ('DD', 'aa', 845), + ('JJ', 'bb', 354), ('FF', 'bb', 295), ('JJ', 'aa', 234), + ('BB', 'bb', 840), ('AA', 'aa', 934), ('EE', 'aa', 113), + ('AA', 'bb', 309), ('BB', 'aa', 412), ('AA', 'aa', 911), + ('AA', 'bb', 572), ('II', 'aa', 398), ('II', 'bb', 250), + ('II', 'aa', 652), ('BB', 'bb', 633), ('AA', 'aa', 239), + ('FF', 'aa', 670), ('BB', 'bb', 705), ('HH', 'bb', 963), + ('CC', 'bb', 346), ('II', 'bb', 671), ('BB', 'aa', 247), + ('AA', 'aa', 223), ('GG', 'aa', 480), ('HH', 'aa', 790), + ('FF', 'aa', 208), ('BB', 'bb', 711), ('EE', 'aa', 777), + ('DD', 'bb', 716), ('CC', 'aa', 759), ('CC', 'aa', 430), + ('CC', 'aa', 607), ('DD', 'bb', 794), ('GG', 'aa', 148), + ('GG', 'aa', 634), ('JJ', 'bb', 257), ('DD', 'bb', 959), + ('FF', 'bb', 726), ('BB', 'aa', 762), ('JJ', 'bb', 336), + ('GG', 'aa', 335), ('HH', 'bb', 330), ('GG', 'bb', 160), + ('JJ', 'bb', 839), ('FF', 'aa', 618), ('BB', 'aa', 393), + ('EE', 'bb', 629), ('FF', 'aa', 667), ('AA', 'bb', 870), + ('FF', 'bb', 102), ('JJ', 'aa', 113), ('DD', 'aa', 224), + ('AA', 'bb', 627), ('HH', 'bb', 730), ('II', 'bb', 443), + ('HH', 'bb', 133), ('EE', 'bb', 252), ('II', 'bb', 805), + ('BB', 'bb', 786), ('EE', 'bb', 768), ('HH', 'bb', 683), + ('DD', 'bb', 238), ('DD', 'aa', 256); +---- +stmt 0 ok +stmt 27 ok +stmt 73 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.1.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.2.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.3.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.4.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.5.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 PRECEDING AND 2 PRECEDING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 PRECEDING AND 2 PRECEDING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 PRECEDING AND 2 PRECEDING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.6.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.7.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 1 PRECEDING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 1 PRECEDING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.8.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 0 PRECEDING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 0 PRECEDING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 PRECEDING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.9.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND CURRENT ROW ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.10.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 0 FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN 3 PRECEDING AND 0 FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 3 PRECEDING AND 0 FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.11.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.12.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 0 FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 0 FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 0 FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.13.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.14.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 100 FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND 100 FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND 100 FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.15.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.16.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN 0 FOLLOWING AND 0 FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN 0 FOLLOWING AND 0 FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 0 FOLLOWING AND 0 FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.17.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND 0 FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND 0 FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 0 FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.18.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND 5 FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND 5 FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND 5 FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 1.19.8 + + SELECT a, b, + sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW), + sum(c) OVER (ORDER BY a GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ), + sum(c) OVER (ORDER BY a,b GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW), + 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 +==== 2.1.1 + + SELECT row_number() OVER win + FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS + ) +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.1.2 + + SELECT nth_value(c, 14) OVER win + FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS + ) +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.1.3 + + SELECT min(c) OVER win, max(c) OVER win, sum(c) OVER win FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS + ) ORDER BY a, b, c; +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.2.1 + + SELECT row_number() OVER win + FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW + ) +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.2.2 + + SELECT nth_value(c, 14) OVER win + FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW + ) +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.2.3 + + SELECT min(c) OVER win, max(c) OVER win, sum(c) OVER win FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW + ) ORDER BY a, b, c; +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.3.1 + + SELECT row_number() OVER win + FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP + ) +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.3.2 + + SELECT nth_value(c, 14) OVER win + FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP + ) +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.3.3 + + SELECT min(c) OVER win, max(c) OVER win, sum(c) OVER win FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE GROUP + ) ORDER BY a, b, c; +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.4.1 + + SELECT row_number() OVER win + FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES + ) +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.4.2 + + SELECT nth_value(c, 14) OVER win + FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES + ) +---- +stmt 0 err 1 -1 no such table: t3 +==== 2.4.3 + + SELECT min(c) OVER win, max(c) OVER win, sum(c) OVER win FROM t3 + WINDOW win AS ( + ORDER BY c, b, a + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES + ) ORDER BY a, b, c; +---- +stmt 0 err 1 -1 no such table: t3 +==== 3.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a REAL, b INTEGER); + INSERT INTO t1 VALUES + (5, 10), (10, 20), (13, 26), (13, 26), + (15, 30), (20, 40), (22,80), (30, 90); +---- +stmt 0 ok +stmt 27 ok +stmt 65 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 4.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER, b INTEGER); + INSERT INTO t1 VALUES + (NULL, 1), (NULL, 2), (NULL, 3), (10, 4), (10, 5); +---- +stmt 0 ok +stmt 27 ok +stmt 68 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 4.5.2 + + SELECT sum(b) OVER ( + ORDER BY a DESC NULLS FIRST RANGE + BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING + ) FROM t1 ORDER BY 1 NULLS LAST; +---- +stmt 0 err 1 -1 no such table: t1 +==== 5.0 + + INSERT INTO t3 VALUES + (NULL, 'bb', 355), (NULL, 'cc', 158), (NULL, 'aa', 399), + ('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 +==== 5.1.1.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.1.1.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.1.2.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS FIRST + 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 +==== 5.1.2.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS FIRST + 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 +==== 5.1.3.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.1.3.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.1.4.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.1.4.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.1.5.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.1.5.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.1.6.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.1.6.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.1.7.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST + 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 +==== 5.1.7.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST + 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 +==== 5.1.8.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.1.8.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.1.9.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS LAST + 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 +==== 5.1.9.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS LAST + 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 +==== 5.1.10.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.1.10.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.1.11.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.1.11.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.1.12.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.1.12.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.1.13.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.1.13.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.1.14.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST + 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 +==== 5.1.14.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST + 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 +==== 5.2.1.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.2.1.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.2.2.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS FIRST + 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 +==== 5.2.2.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS FIRST + 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 +==== 5.2.3.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.2.3.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.2.4.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.2.4.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.2.5.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.2.5.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.2.6.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.2.6.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.2.7.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST + 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 +==== 5.2.7.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST + 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 +==== 5.2.8.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.2.8.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.2.9.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS LAST + 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 +==== 5.2.9.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS LAST + 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 +==== 5.2.10.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.2.10.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.2.11.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.2.11.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.2.12.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.2.12.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.2.13.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.2.13.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.2.14.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST + 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 +==== 5.2.14.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST + 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 +==== 5.3.1.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.3.1.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.3.2.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS FIRST + 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 +==== 5.3.2.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS FIRST + 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 +==== 5.3.3.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.3.3.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.3.4.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.3.4.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.3.5.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.3.5.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.3.6.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.3.6.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.3.7.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST + 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 +==== 5.3.7.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST + 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 +==== 5.3.8.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.3.8.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.3.9.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS LAST + 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 +==== 5.3.9.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS LAST + 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 +==== 5.3.10.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.3.10.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.3.11.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.3.11.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.3.12.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.3.12.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.3.13.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.3.13.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.3.14.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST + 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 +==== 5.3.14.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST + 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 +==== 5.4.1.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.4.1.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.4.2.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS FIRST + 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 +==== 5.4.2.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS FIRST + 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 +==== 5.4.3.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.4.3.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.4.4.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.4.4.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.4.5.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.4.5.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.4.6.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.4.6.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.4.7.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST + 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 +==== 5.4.7.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST + 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 +==== 5.4.8.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.4.8.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.4.9.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS LAST + 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 +==== 5.4.9.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY a NULLS LAST + 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 +==== 5.4.10.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.4.10.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( PARTITION BY coalesce(a, '') + 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 +==== 5.4.11.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.4.11.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.4.12.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.4.12.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.4.13.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM 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 +==== 5.4.13.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM 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 +==== 5.4.14.1 + + SELECT max(c) OVER win, + min(c) OVER win, + count(a) OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST + 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 +==== 5.4.14.2 + + SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win, + rank() OVER win, + dense_rank() OVER win + FROM t3 + WINDOW win AS ( ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST + 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 +==== 6.0 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a TEXT, b INTEGER); + INSERT INTO t2 VALUES('A', NULL); + INSERT INTO t2 VALUES('B', NULL); + INSERT INTO t2 VALUES('C', 1); +---- +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 +==== 6.1 + + SELECT group_concat(a, '.') OVER ( + ORDER BY b NULLS FIRST RANGE BETWEEN 7 PRECEDING AND 2 PRECEDING + ) + FROM t2 +---- +stmt 0 err 1 -1 no such table: t2 +==== 6.2 + + SELECT group_concat(a, '.') OVER ( + ORDER BY b DESC NULLS LAST RANGE BETWEEN 7 PRECEDING AND 2 PRECEDING + ) + FROM t2 +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.0 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER, b INTEGER); + + INSERT INTO t2 VALUES(1, 65); + INSERT INTO t2 VALUES(2, NULL); + INSERT INTO t2 VALUES(3, NULL); + INSERT INTO t2 VALUES(4, NULL); + INSERT INTO t2 VALUES(5, 66); + INSERT INTO t2 VALUES(6, 67); +---- +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 +==== 7.1.1 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.1.2 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.1.3 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.1.4 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.1.5 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.1.6 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.1.7 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.1.8 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.1.9 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.2.1 + + SELECT min (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.2.2 + + SELECT min (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.2.3 + + SELECT min (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.2.4 + + SELECT min (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.2.5 + + SELECT min (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.2.6 + + SELECT min (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.2.7 + + SELECT min (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.2.8 + + SELECT min (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.2.9 + + SELECT min (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.3.1 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.3.2 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.3.3 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.3.4 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.3.5 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.3.6 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.3.7 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.3.8 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.3.9 + + SELECT sum (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.4.1 + + SELECT max (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.4.2 + + SELECT max (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.4.3 + + SELECT max (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.4.4 + + SELECT max (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.4.5 + + SELECT max (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.4.6 + + SELECT max (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.4.7 + + SELECT max (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.4.8 + + SELECT max (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 7.4.9 + + SELECT max (a) OVER win FROM t2 + WINDOW win AS ( + ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING + ); +---- +stmt 0 err 1 -1 no such table: t2 +==== 8.0 + + DROP TABLE IF EXISTS tx; + CREATE TABLE tx(a INTEGER PRIMARY KEY); + INSERT INTO tx VALUES(1), (2), (3), (4), (5), (6); + + DROP TABLE IF EXISTS map; + CREATE TABLE map(v INTEGER PRIMARY KEY, t TEXT); + INSERT INTO map VALUES + (1, 'odd'), (2, 'even'), (3, 'odd'), + (4, 'even'), (5, 'odd'), (6, 'even'); +---- +stmt 0 ok +stmt 27 ok +stmt 69 err 1 -1 no such table: tx +stmt 122 ok +stmt 151 ok +stmt 202 err 1 -1 no such table: map +==== 8.1 + + SELECT sum(a) OVER ( + PARTITION BY ( + SELECT t FROM map WHERE v=a + ) ORDER BY a + ) FROM tx; +---- +stmt 0 err 1 -1 no such table: tx +==== 8.2 + + SELECT sum(a) OVER win FROM tx + WINDOW win AS ( + PARTITION BY ( + SELECT t FROM map WHERE v=a + ) ORDER BY a + ); +---- +stmt 0 err 1 -1 no such table: tx +==== 8.3 + + WITH map2 AS ( + SELECT * FROM map + ) + SELECT sum(a) OVER ( + PARTITION BY ( + SELECT t FROM map2 WHERE v=a + ) ORDER BY a + ) FROM tx; +---- +stmt 0 err 1 -1 no such table: tx +==== 8.4 + + WITH map2 AS ( + SELECT * FROM map + ) + SELECT sum(a) OVER win FROM tx + WINDOW win AS ( + PARTITION BY ( + SELECT t FROM map2 WHERE v=a + ) ORDER BY a + ); +---- +stmt 0 err 1 -1 no such table: tx +==== 9.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a INTEGER); + CREATE TABLE t2(y INTEGER); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 84 ok +==== 9.2 + + SELECT ( + SELECT max(a) OVER ( ORDER BY (SELECT sum(a) FROM t1) ) + + min(a) OVER() + ) + FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 10.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER, b INTEGER); + INSERT INTO t1 VALUES (10, 1), + (20, -1), + (5, 2), + (15, 0), + (25, 3); +---- +stmt 0 ok +stmt 27 ok +stmt 68 err 1 -1 no such table: t1 +==== 10.1 + + SELECT + a, b, MIN(a) FILTER(WHERE b > 0) OVER win + FROM t1 + WINDOW win AS (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING); +---- +stmt 0 err 1 -1 no such table: t1 +==== 10.2 + + SELECT + a, b, MIN(a) FILTER(WHERE b > 0) OVER win + FROM t1 + WINDOW win AS (); +---- +stmt 0 err 1 -1 no such table: t1 +==== 10.3 + + SELECT + a, b, MIN(a) FILTER(WHERE b > 0) OVER win + FROM t1 + WINDOW win AS (ORDER BY a); +---- +stmt 0 err 1 -1 no such table: t1 +==== 10.4 + + SELECT + a, b, MIN(a) OVER win + FROM t1 + WINDOW win AS (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING); +---- +stmt 0 err 1 -1 no such table: t1 +==== 11.0 + + DROP TABLE IF EXISTS t2; + CREATE TABLE t2(a INTEGER, b INTEGER); + INSERT INTO t2 VALUES(1, 12); + INSERT INTO t2 VALUES(2, 10); + INSERT INTO t2 VALUES(3, 15); + INSERT INTO t2 VALUES(4, 22); + INSERT INTO t2 VALUES(5, 1); + INSERT INTO t2 VALUES(6, 4); + INSERT INTO t2 VALUES(7, 7); + INSERT INTO t2 VALUES(8, 6); + INSERT INTO t2 VALUES(9, 22); + INSERT INTO t2 VALUES(10, 2); +---- +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 +==== 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 diff --git a/parser/testdata/window9.metadata.json b/parser/testdata/window9.metadata.json new file mode 100644 index 0000000..bc8f269 --- /dev/null +++ b/parser/testdata/window9.metadata.json @@ -0,0 +1,44 @@ +{ + "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/window9.test b/parser/testdata/window9.test new file mode 100644 index 0000000..36cc668 --- /dev/null +++ b/parser/testdata/window9.test @@ -0,0 +1,304 @@ +==== 1.0 + + CREATE TABLE fruits( + name TEXT COLLATE NOCASE, + color TEXT COLLATE NOCASE + ); +---- +stmt 0 ok +==== 1.1 + + INSERT INTO fruits (name, color) VALUES ('apple', 'RED'); + INSERT INTO fruits (name, color) VALUES ('APPLE', 'yellow'); + 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 +==== 1.2 + + SELECT name, color, dense_rank() OVER (ORDER BY name) FROM fruits; +---- +stmt 0 err 1 -1 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 +==== 1.4 + + SELECT name, color, + dense_rank() OVER (ORDER BY name), + dense_rank() OVER (PARTITION BY name ORDER BY color) + FROM fruits; +---- +stmt 0 err 1 -1 no such table: fruits +==== 1.5 + + SELECT name, color, + dense_rank() OVER (ORDER BY name), + dense_rank() OVER (PARTITION BY name ORDER BY color) + FROM fruits ORDER BY color; +---- +stmt 0 err 1 -1 no such table: fruits +==== 2.0 + + CREATE TABLE t1(a BLOB, b INTEGER, c COLLATE nocase); + INSERT INTO t1 VALUES(1, 2, 'abc'); + 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 +==== 2.1.1 + + SELECT c=='Abc' FROM t1 +---- +stmt 0 err 1 -1 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 +==== 2.2.1 + + SELECT b=='2' FROM t1 +---- +stmt 0 err 1 -1 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 +==== 3.0 + + CREATE TABLE t1(a); + CREATE TABLE t2(a,b,c); +---- +stmt 0 ok +stmt 22 ok +==== 3.1 + + SELECT EXISTS(SELECT 1 FROM t1 ORDER BY sum(a) OVER ()) FROM t1; +---- +stmt 0 err 1 -1 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 +==== 3.3 + + SELECT a, sum(a) OVER (ORDER BY a DESC) FROM t2 + ORDER BY EXISTS( + 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 +==== 3.4 + + SELECT y, y+1, y+2 FROM ( + SELECT c IN ( + SELECT min(a) OVER (), + (abs(row_number() OVER())+22)/19, + max(a) OVER () FROM t1 + ) AS y FROM t2 + ); +---- +stmt 0 err 1 -1 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 +==== 4.1.1 + + SELECT b, b=count(*), '1,2' FROM t1 GROUP BY b; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 6.0 + + CREATE TABLE t0(c0); + INSERT INTO t0(c0) VALUES (0); +---- +stmt 0 ok +stmt 23 err 1 -1 no such table: t0 +==== 6.1 + + SELECT * FROM t0 WHERE + EXISTS ( + SELECT MIN(c0) OVER (), CUME_DIST() OVER () FROM t0 + ) >=1 AND + EXISTS ( + SELECT MIN(c0) OVER (), CUME_DIST() OVER () FROM t0 + ) <=1; +---- +stmt 0 err 1 -1 no such table: t0 +==== 6.2 + + SELECT * FROM t0 WHERE EXISTS ( + SELECT MIN(c0) OVER (), CUME_DIST() OVER () FROM t0 + ) + BETWEEN 1 AND 1; +---- +stmt 0 err 1 -1 no such table: t0 +==== 7.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x, y); + INSERT INTO t1 VALUES(10, 1); + INSERT INTO t1 VALUES(20, 2); + INSERT INTO t1 VALUES(3, 3); + INSERT INTO t1 VALUES(2, 4); + INSERT INTO t1 VALUES(1, 5); +---- +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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 8.1.1 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2), (3, 4); + 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 +==== 8.1.2 + + SELECT min( sum(a) ) OVER () FROM t1 GROUP BY a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 8.2 + + CREATE VIEW v1 AS + SELECT 0 AS x + UNION + SELECT count() OVER() FROM (SELECT 0) + ORDER BY 1 + ; +---- +stmt 0 ok +==== 8.3 + + SELECT min( max((SELECT x FROM v1)) ) OVER() +---- +stmt 0 err 1 -1 no such table: v1 +==== 8.4 + + SELECT( + SELECT x UNION + SELECT sum( avg((SELECT x FROM v1)) ) OVER() + ) + FROM v1; +---- +stmt 0 err 1 -1 no such table: v1 +==== 9.0 + + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(NULL,'bb',356); + INSERT INTO t1 VALUES('CB','aa',158); + INSERT INTO t1 VALUES('BB','aa',399); + 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 +==== 9.1 + + SELECT sum(c) OVER ( + ORDER BY c RANGE BETWEEN 0 PRECEDING AND '-700' PRECEDING + ) + FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 10.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 'a'); + INSERT INTO t1 VALUES(2, 'b'); + INSERT INTO t1 VALUES(3, 'c'); + INSERT INTO t1 VALUES(4, 'd'); + INSERT INTO t1 VALUES(5, 'e'); + 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 +==== 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 +==== 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 +==== 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 +==== 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 diff --git a/parser/testdata/windowA.metadata.json b/parser/testdata/windowA.metadata.json new file mode 100644 index 0000000..80ae954 --- /dev/null +++ b/parser/testdata/windowA.metadata.json @@ -0,0 +1,22 @@ +{ + "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/windowA.test b/parser/testdata/windowA.test new file mode 100644 index 0000000..0d5ece3 --- /dev/null +++ b/parser/testdata/windowA.test @@ -0,0 +1,167 @@ +==== 1.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b CHAR(1), d FLOAT); + INSERT INTO t1 VALUES + (1, 'A', 5.4), + (2, 'B', 5.55), + (3, 'C', 8.0), + (4, 'D', 10.25), + (5, 'E', 10.26), + (6, 'N', NULL), + (7, 'N', NULL); +---- +stmt 0 ok +stmt 62 err 1 -1 no such table: t1 +==== 1.1 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS LAST + 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 +==== 1.2 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS FIRST + 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 +==== 1.3 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS LAST + RANGE BETWEEN 2.50 PRECEDING AND UNBOUNDED FOLLOWING) + ORDER BY +d DESC NULLS LAST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.4 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS FIRST + RANGE BETWEEN 2.50 PRECEDING AND UNBOUNDED FOLLOWING) + ORDER BY +d DESC NULLS FIRST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.5 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS LAST + RANGE BETWEEN 2.50 PRECEDING AND CURRENT ROW) + ORDER BY +d DESC NULLS LAST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.6 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS FIRST + RANGE BETWEEN 2.50 PRECEDING AND CURRENT ROW) + ORDER BY +d DESC NULLS FIRST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.1 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS LAST + RANGE BETWEEN UNBOUNDED PRECEDING AND 2.25 FOLLOWING) + ORDER BY +d DESC NULLS LAST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.2 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS FIRST + RANGE BETWEEN UNBOUNDED PRECEDING AND 2.25 FOLLOWING) + ORDER BY +d DESC NULLS FIRST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.3 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS LAST + RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + ORDER BY +d DESC NULLS LAST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.4 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS FIRST + RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) + ORDER BY +d DESC NULLS FIRST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.5 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS LAST + RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + ORDER BY +d DESC NULLS LAST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.6 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS FIRST + RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) + ORDER BY +d DESC NULLS FIRST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.1 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS LAST + RANGE BETWEEN CURRENT ROW AND 2.25 FOLLOWING) + ORDER BY +d DESC NULLS LAST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.2 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS FIRST + RANGE BETWEEN CURRENT ROW AND 2.25 FOLLOWING) + ORDER BY +d DESC NULLS FIRST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.3 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS LAST + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + ORDER BY +d DESC NULLS LAST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 3.4 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS FIRST + RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + ORDER BY +d DESC NULLS FIRST, +a; +---- +stmt 0 err 1 -1 no such table: t1 +==== 4.0 + + SELECT a, b, quote(d), group_concat(b,'') OVER w1 FROM t1 + WINDOW w1 AS + (ORDER BY d DESC NULLS FIRST + 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 diff --git a/parser/testdata/windowB.metadata.json b/parser/testdata/windowB.metadata.json new file mode 100644 index 0000000..b8aab70 --- /dev/null +++ b/parser/testdata/windowB.metadata.json @@ -0,0 +1,53 @@ +{ + "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/windowB.test b/parser/testdata/windowB.test new file mode 100644 index 0000000..4b6722e --- /dev/null +++ b/parser/testdata/windowB.test @@ -0,0 +1,445 @@ +==== 1.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(NULL, 1); + INSERT INTO t1 VALUES(NULL, 2); + 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 +==== 1.2 + + SELECT sum(b) OVER win FROM t1 + WINDOW win AS ( + ORDER BY a DESC NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING + ) +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, NULL); + INSERT INTO t1 VALUES(2, 45); + INSERT INTO t1 VALUES(3, 66.2); + INSERT INTO t1 VALUES(4, 'hello world'); + INSERT INTO t1 VALUES(5, 'hello world'); + INSERT INTO t1 VALUES(6, X'1234'); + INSERT INTO t1 VALUES(7, X'1234'); + 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 +==== 3.0 + + CREATE TABLE testjson(id INTEGER PRIMARY KEY, j TEXT, x TEXT); + INSERT INTO testjson VALUES(1, '{"a":1}', 'a'); + INSERT INTO testjson VALUES(2, '{"b":2}', 'b'); + INSERT INTO testjson VALUES(3, '{"c":3}', 'c'); + 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 +==== 3.1 + + SELECT json_group_array(json(j)) FROM testjson; +---- +stmt 0 err 1 -1 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 +==== 3.3 + + SELECT json_group_array(json(j)) OVER ( + ORDER BY id RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + EXCLUDE TIES + ) FROM testjson; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 3.8 + + CREATE TABLE t1(id INT, k TEXT, v INT); + INSERT INTO t1 VALUES + (1, 'a', 1), + (2, 'b', 2), + (3, 'c', 3), + (4, 'd', 4), + (5, 'f', 5), + (6, 'g', 6), + (7, 'h', 7); +---- +stmt 0 ok +stmt 44 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 4.0 + + CREATE TABLE x(a); + INSERT INTO x VALUES(1); + 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 +==== 4.1 + + WITH y AS ( + SELECT Row_Number() OVER (win) FROM x WINDOW win AS (PARTITION BY a) + ) + SELECT * FROM y; +---- +stmt 0 err 1 -1 no such table: x +==== 4.2 + + WITH y AS ( + SELECT Row_Number() OVER (win) FROM x WINDOW win AS (PARTITION + BY fake_column)) + SELECT * FROM y; +---- +stmt 0 err 1 -1 no such table: x +==== 4.3 + + SELECT 1 WINDOW win AS (PARTITION BY fake_column); +---- +stmt 0 ok +==== 5.0 + + CREATE TABLE t1(a, c); + CREATE INDEX i1 ON t1(a); + + INSERT INTO t1 VALUES(0, 421); + INSERT INTO t1 VALUES(1, 844); + 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 +==== 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 +==== 5.2 + + INSERT INTO t1 VALUES(NULL, 123); + INSERT INTO t1 VALUES(NULL, 111); + INSERT INTO t1 VALUES('xyz', 222); + INSERT INTO t1 VALUES('xyz', 333); + + 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 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 +==== 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 +==== 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 +==== 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 +==== 6.0 + + CREATE TABLE t1(a, c); + CREATE INDEX i1 ON t1(a); + + INSERT INTO t1 VALUES(7, 997); + INSERT INTO t1 VALUES(8, 997); + 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 +==== 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 +==== 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 +==== 7.0 + + CREATE TABLE t1(a, c); + CREATE INDEX i1 ON t1(a); + + INSERT INTO t1 VALUES(NULL, 46); + INSERT INTO t1 VALUES(NULL, 45); + INSERT INTO t1 VALUES(7, 997); + INSERT INTO t1 VALUES(7, 1000); + INSERT INTO t1 VALUES(8, 997); + INSERT INTO t1 VALUES(8, 1000); + INSERT INTO t1 VALUES('abc', 1001); + INSERT INTO t1 VALUES('abc', 1004); + 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 +==== 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 +==== 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 +==== 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 +==== 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 +==== 8.0 + + BEGIN TRANSACTION; + CREATE TABLE t1(a, c); + INSERT INTO t1 VALUES('aa', 111); + INSERT INTO t1 VALUES('BB', 660); + INSERT INTO t1 VALUES('CC', 938); + INSERT INTO t1 VALUES('dd', 979); + COMMIT; + + CREATE INDEX i1 ON t1(a COLLATE nocase); +---- +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 200 ok +stmt 210 err 1 -1 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 +==== 9.0 + + CREATE TABLE seps(x); + INSERT INTO seps(x) VALUES ('1'), ('22'), ('333'), ('4444'); + SELECT group_concat('-', x) + OVER ( ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) + FROM seps; +---- +stmt 0 ok +stmt 24 err 1 -1 no such table: seps +stmt 87 err 1 -1 no such table: seps +==== 10.1 + + CREATE TABLE t1(i INTEGER PRIMARY KEY, v); + INSERT INTO t1 VALUES( 1, 'one' ); + 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 +==== 10.2 + + SELECT + json_group_array( v ) OVER w, + json_group_array( v ) OVER w + FROM t1 + window w as ( + range between unbounded preceding and unbounded following + ) +---- +stmt 0 err 1 -1 no such table: t1 +==== 10.3 + + SELECT + group_concat( v ) OVER w, + json_group_array( v ) OVER w, + json_group_array( v ) OVER w, + group_concat( v ) OVER w + FROM t1 + window w as ( + range between unbounded preceding and unbounded following + ) +---- +stmt 0 err 1 -1 no such table: t1 diff --git a/parser/testdata/windowC.metadata.json b/parser/testdata/windowC.metadata.json new file mode 100644 index 0000000..c3e1334 --- /dev/null +++ b/parser/testdata/windowC.metadata.json @@ -0,0 +1,7 @@ +{ + "todo": { + "1.0": true, + "2.0": true, + "2.1": true + } +} diff --git a/parser/testdata/windowC.test b/parser/testdata/windowC.test new file mode 100644 index 0000000..1c7149d --- /dev/null +++ b/parser/testdata/windowC.test @@ -0,0 +1,25 @@ +==== 1.0 + + CREATE TABLE x1(i INTEGER PRIMARY KEY, x); +---- +stmt 0 ok +==== 2.0 + + PRAGMA encoding=UTF16le; + WITH separator(x) AS (VALUES(',a,'),(',bc,')), + value(y) AS (VALUES(1),(x'5585d09013455178cd11ce4a')) + SELECT group_concat(y,x) OVER (ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM separator, value; +---- +stmt 0 ok +stmt 27 ok +==== 2.1 + + PRAGMA encoding=UTF16be; + WITH separator(x) AS (VALUES(',a,'),(',bc,')), + value(y) AS (VALUES(1),(x'5585d09013455178cd11ce4a')) + SELECT group_concat(y,x) OVER (ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM separator, value; +---- +stmt 0 ok +stmt 27 ok diff --git a/parser/testdata/windowD.metadata.json b/parser/testdata/windowD.metadata.json new file mode 100644 index 0000000..4a208de --- /dev/null +++ b/parser/testdata/windowD.metadata.json @@ -0,0 +1,17 @@ +{ + "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/windowD.test b/parser/testdata/windowD.test new file mode 100644 index 0000000..9ed17a4 --- /dev/null +++ b/parser/testdata/windowD.test @@ -0,0 +1,74 @@ +==== 1.0 + + CREATE TABLE t0(c0 TEXT); + CREATE VIEW v0(c0, c1) + AS SELECT CUME_DIST() OVER (PARTITION BY t0.c0), TRUE FROM t0; + INSERT INTO t0 VALUES ('x'); +---- +stmt 0 ok +stmt 28 ok +stmt 121 err 1 -1 no such table: t0 +==== 1.1 + + SELECT ('500') IS (v0.c1) FROM v0; +---- +stmt 0 err 1 -1 no such table: v0 +==== 1.2 + + SELECT (('500') IS (v0.c1)) FROM v0, t0; +---- +stmt 0 err 1 -1 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 +==== 1.3 + + SELECT * FROM v0; +---- +stmt 0 err 1 -1 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 +==== 2.0 + + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('value'); + 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 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 +==== 2.2 + + SELECT * FROM v1 WHERE 500 IS c; +---- +stmt 0 err 1 -1 no such table: v1 +==== 2.3 + + SELECT * FROM v1 WHERE 500 IS d; +---- +stmt 0 err 1 -1 no such table: v1 +==== 2.4 + + CREATE VIEW v2 AS SELECT max(x) OVER () AS a, TRUE AS c FROM t1; +---- +stmt 0 ok +==== 2.5 + + SELECT 500 IS c FROM v2; +---- +stmt 0 err 1 -1 no such table: v2 +==== 2.6 + + SELECT * FROM v2 WHERE 500 IS c; +---- +stmt 0 err 1 -1 no such table: v2 diff --git a/parser/testdata/windowE.metadata.json b/parser/testdata/windowE.metadata.json new file mode 100644 index 0000000..da1b1d9 --- /dev/null +++ b/parser/testdata/windowE.metadata.json @@ -0,0 +1,19 @@ +{ + "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/windowE.test b/parser/testdata/windowE.test new file mode 100644 index 0000000..9226911 --- /dev/null +++ b/parser/testdata/windowE.test @@ -0,0 +1,137 @@ +==== 1.0 + + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT COLLATE custom); + 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'); + 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 +==== 1.1 + + SELECT * FROM t1 +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.2 + + SELECT group_concat(a,',') OVER win FROM t1 + WINDOW win AS ( + ORDER BY b RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING + ) +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.3 + + SELECT group_concat(a,',') OVER win FROM t1 + WINDOW win AS ( + ORDER BY b RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING + ) +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.0 + + CREATE TABLE t1(x); +---- +stmt 0 ok +==== 2.1 + + 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 +==== 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 +==== 3.0 + + BEGIN TRANSACTION; + CREATE TABLE t2(c1 INT, c2 REAL); + INSERT INTO t2 VALUES + (447,0.0), (448,0.0), (449,0.0), (452,0.0), (453,0.0), (454,0.0), (455,0.0), + (456,0.0), (459,0.0), (460,0.0), (462,0.0), (463,0.0), (466,0.0), (467,0.0), + (468,0.0), (469,0.0), (470,0.0), (473,0.0), (474,0.0), (475,0.0), (476,0.0), + (477,0.0), (480,0.0), (481,0.0), (482,0.0), (483,0.0), (484,0.0), (487,0.0), + (488,0.0), (489,0.0), (490,0.0), (491,0.0), (494,0.0), (495,0.0), (496,0.0), + (497,0.0), (498,0.0), (501,0.0), (502,0.0), (503,0.0), (504,0.0), (505,0.0), + (508,0.0), (509,0.0), (510,0.0), (511,0.0), (512,0.0), (515,0.0), (516,0.0), + (517,0.0), (518,0.0), (519,0.0), (522,0.0), (523,0.0), (524,0.0), (525,0.0), + (526,0.0), (529,0.0), (530,0.0), (531,0.0), (532,0.0), (533,0.0), (536,0.0), + (537,1.0), (538,0.0), (539,0.0), (540,0.0), (543,0.0), (544,0.0); + COMMIT; +---- +stmt 0 ok +stmt 21 ok +stmt 59 err 1 -1 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 +==== 4.0 + + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 1); + INSERT INTO t1 VALUES(2, 9223372036854775807); + INSERT INTO t1 VALUES(3, 3); + 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 +==== 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 +==== 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 +==== 5.0 + + CREATE TABLE t(id, x); + INSERT INTO t VALUES(1, -1); + INSERT INTO t VALUES(2, 9223372036854775807); + INSERT INTO t VALUES(3, 1); + 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 +==== 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 +==== 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 diff --git a/parser/testdata/windowerr.metadata.json b/parser/testdata/windowerr.metadata.json new file mode 100644 index 0000000..3494ae4 --- /dev/null +++ b/parser/testdata/windowerr.metadata.json @@ -0,0 +1,5 @@ +{ + "todo": { + "1.0": true + } +} diff --git a/parser/testdata/windowerr.test b/parser/testdata/windowerr.test new file mode 100644 index 0000000..610d0af --- /dev/null +++ b/parser/testdata/windowerr.test @@ -0,0 +1,17 @@ +==== 1.0 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a INTEGER, b INTEGER); + 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); +---- +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 diff --git a/parser/testdata/with1.metadata.json b/parser/testdata/with1.metadata.json new file mode 100644 index 0000000..731ec4e --- /dev/null +++ b/parser/testdata/with1.metadata.json @@ -0,0 +1,101 @@ +{ + "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/with1.test b/parser/testdata/with1.test new file mode 100644 index 0000000..834a4d0 --- /dev/null +++ b/parser/testdata/with1.test @@ -0,0 +1,1092 @@ +==== 1.0 + + CREATE TABLE t1(x INTEGER, y INTEGER); + WITH x(a) AS ( SELECT * FROM t1) SELECT 10 +---- +stmt 0 ok +stmt 41 ok +==== 1.1 + + SELECT * FROM ( WITH x AS ( SELECT * FROM t1) SELECT 10 ); +---- +stmt 0 ok +==== 1.2 + + WITH x(a) AS ( SELECT * FROM t1) INSERT INTO t1 VALUES(1,2); +---- +stmt 0 err 1 -1 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 +==== 1.4 + + WITH x(a) AS ( SELECT * FROM t1) UPDATE t1 SET x = y; +---- +stmt 0 err 1 -1 no such table: t1 +==== 2.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + WITH tmp AS ( SELECT * FROM t1 ) SELECT x FROM tmp; +---- +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 +==== 2.2 + + WITH tmp(a) AS ( SELECT * FROM t1 ) SELECT a FROM tmp; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 3.2 + + CREATE TABLE t2(x INTEGER); + WITH tmp(a) AS (SELECT * FROM t1), + tmp(a) AS (SELECT * FROM t1) + SELECT * FROM tmp; +---- +stmt 0 ok +stmt 30 err 1 -1 duplicate WITH table name: tmp +==== 3.3 + + CREATE TABLE t3(x); + CREATE TABLE t4(x); + + INSERT INTO t3 VALUES('T3'); + INSERT INTO t4 VALUES('T4'); + + WITH t3(a) AS (SELECT * FROM t4) + SELECT * FROM t3; +---- +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 +==== 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 +==== 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 +==== 3.6 + + WITH tmp AS ( SELECT * FROM t3 ), + SELECT * FROM tmp; +---- +stmt 0 err 1 39 near "SELECT": syntax error +==== 4.1 + + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 VALUES(3); + INSERT INTO t1 VALUES(4); + + WITH dset AS ( SELECT 2 UNION ALL SELECT 4 ) + DELETE FROM t1 WHERE x IN dset; + SELECT * FROM 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 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 +==== 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 +==== 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 +==== 5.1 + + WITH i(x) AS ( VALUES(1) UNION ALL SELECT x+1 FROM i) + SELECT x FROM i LIMIT 10; +---- +stmt 0 ok +==== 5.2 + + WITH i(x) AS ( VALUES(1) UNION ALL SELECT x+1 FROM i ORDER BY 1) + SELECT x FROM i LIMIT 10; +---- +stmt 0 ok +==== 5.2.1 + + CREATE TABLE edge(xfrom, xto, seq, PRIMARY KEY(xfrom, xto)) WITHOUT ROWID; + INSERT INTO edge VALUES(0, 1, 10); + INSERT INTO edge VALUES(1, 2, 20); + INSERT INTO edge VALUES(0, 3, 30); + INSERT INTO edge VALUES(2, 4, 40); + INSERT INTO edge VALUES(3, 4, 40); + INSERT INTO edge VALUES(2, 5, 50); + INSERT INTO edge VALUES(3, 6, 60); + INSERT INTO edge VALUES(5, 7, 70); + INSERT INTO edge VALUES(3, 7, 70); + INSERT INTO edge VALUES(4, 8, 80); + INSERT INTO edge VALUES(7, 8, 80); + INSERT INTO edge VALUES(8, 9, 90); + + WITH RECURSIVE + ancest(id, mtime) AS + (VALUES(0, 0) + UNION + SELECT edge.xto, edge.seq FROM edge, ancest + WHERE edge.xfrom=ancest.id + ORDER BY 2 + ) + 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 +==== 5.2.2 + + WITH RECURSIVE + ancest(id, mtime) AS + (VALUES(0, 0) + UNION ALL + SELECT edge.xto, edge.seq FROM edge, ancest + WHERE edge.xfrom=ancest.id + ORDER BY 2 + ) + SELECT * FROM ancest; +---- +stmt 0 err 1 -1 no such table: edge +==== 5.2.3 + + WITH RECURSIVE + ancest(id, mtime) AS + (VALUES(0, 0) + UNION ALL + SELECT edge.xto, edge.seq FROM edge, ancest + WHERE edge.xfrom=ancest.id + ORDER BY 2 LIMIT 4 OFFSET 2 + ) + SELECT * FROM ancest; +---- +stmt 0 err 1 -1 no such table: edge +==== 5.3 + + WITH i(x) AS ( VALUES(1) UNION ALL SELECT x+1 FROM i LIMIT 5) + SELECT x FROM i; +---- +stmt 0 ok +==== 5.4 + + WITH i(x) AS ( VALUES(1) UNION ALL SELECT (x+1)%10 FROM i) + SELECT x FROM i LIMIT 20; +---- +stmt 0 ok +==== 5.5 + + WITH i(x) AS ( VALUES(1) UNION SELECT (x+1)%10 FROM i) + SELECT x FROM i LIMIT 20; +---- +stmt 0 ok +==== 5.6.1 + + WITH i(x, y) AS ( VALUES(1) ) + SELECT * FROM i; +---- +stmt 0 err 1 -1 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 +==== 5.6.3 + + CREATE TABLE t5(a, b); + WITH i(x) AS ( SELECT * FROM t5 ) + SELECT * FROM i; +---- +stmt 0 ok +stmt 25 err 1 -1 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 +==== 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 +==== 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 +==== 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 +==== 6.1 + + CREATE TABLE f( + id INTEGER PRIMARY KEY, parentid REFERENCES f, name TEXT + ); + + INSERT INTO f VALUES(0, NULL, ''); + INSERT INTO f VALUES(1, 0, 'bin'); + INSERT INTO f VALUES(2, 1, 'true'); + INSERT INTO f VALUES(3, 1, 'false'); + INSERT INTO f VALUES(4, 1, 'ls'); + INSERT INTO f VALUES(5, 1, 'grep'); + INSERT INTO f VALUES(6, 0, 'etc'); + INSERT INTO f VALUES(7, 6, 'rc.d'); + INSERT INTO f VALUES(8, 7, 'rc.apache'); + INSERT INTO f VALUES(9, 7, 'rc.samba'); + INSERT INTO f VALUES(10, 0, 'home'); + INSERT INTO f VALUES(11, 10, 'dan'); + INSERT INTO f VALUES(12, 11, 'public_html'); + INSERT INTO f VALUES(13, 12, 'index.html'); + 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 +==== 6.2 + + WITH flat(fid, fpath) AS ( + SELECT id, '' FROM f WHERE parentid IS NULL + UNION ALL + SELECT id, fpath || '/' || name FROM f, flat WHERE parentid=fid + ) + SELECT fpath FROM flat WHERE fpath!='' ORDER BY 1; +---- +stmt 0 err 1 -1 no such table: f +==== 6.3 + + WITH flat(fid, fpath) AS ( + SELECT id, '' FROM f WHERE parentid IS NULL + UNION ALL + SELECT id, fpath || '/' || name FROM f, flat WHERE parentid=fid + ) + SELECT count(*) FROM flat; +---- +stmt 0 err 1 -1 no such table: f +==== 6.4 + + WITH x(i) AS ( + SELECT 1 + UNION ALL + SELECT i+1 FROM x WHERE i<10 + ) + SELECT count(*) FROM x +---- +stmt 0 ok +==== 7.1 + + CREATE TABLE tree(i, p); + INSERT INTO tree VALUES(1, NULL); + INSERT INTO tree VALUES(2, 1); + INSERT INTO tree VALUES(3, 1); + INSERT INTO tree VALUES(4, 2); + 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 +==== 7.2 + + WITH t(id, path) AS ( + SELECT i, '' FROM tree WHERE p IS NULL + UNION ALL + SELECT i, path || '/' || i FROM tree, t WHERE p = id + ) + SELECT path FROM t; +---- +stmt 0 err 1 -1 no such table: tree +==== 7.3 + + WITH t(id) AS ( + VALUES(2) + UNION ALL + SELECT i FROM tree, t WHERE p = id + ) + SELECT id FROM t; +---- +stmt 0 err 1 -1 no such table: tree +==== 7.4 + + WITH t(id) AS ( + VALUES(2) + UNION ALL + SELECT i FROM tree WHERE p IN (SELECT id FROM t) + ) + SELECT id FROM t; +---- +stmt 0 err 1 -1 no such table: tree +==== 7.5 + + WITH t(id) AS ( + VALUES(2) + UNION ALL + SELECT i FROM tree, t WHERE p = id AND p IN (SELECT id FROM t) + ) + SELECT id FROM t; +---- +stmt 0 err 1 -1 no such table: tree +==== 7.6 + + WITH t(id) AS ( + SELECT i FROM tree WHERE 2 IN (SELECT id FROM t) + UNION ALL + SELECT i FROM tree, t WHERE p = id + ) + SELECT id FROM t; +---- +stmt 0 err 1 -1 no such table: tree +==== 8.1-mandelbrot + + WITH RECURSIVE + xaxis(x) AS (VALUES(-2.0) UNION ALL SELECT x+0.05 FROM xaxis WHERE x<1.2), + yaxis(y) AS (VALUES(-1.0) UNION ALL SELECT y+0.1 FROM yaxis WHERE y<1.0), + m(iter, cx, cy, x, y) AS ( + SELECT 0, x, y, 0.0, 0.0 FROM xaxis, yaxis + UNION ALL + SELECT iter+1, cx, cy, x*x-y*y + cx, 2.0*x*y + cy FROM m + WHERE (x*x + y*y) < 4.0 AND iter<28 + ), + m2(iter, cx, cy) AS ( + SELECT max(iter), cx, cy FROM m GROUP BY cx, cy + ), + a(t) AS ( + SELECT group_concat( substr(' .+*#', 1+min(iter/7,4), 1), '') + FROM m2 GROUP BY cy + ) + SELECT group_concat(rtrim(t),x'0a') FROM a; +---- +stmt 0 ok +==== 8.2-soduko + + WITH RECURSIVE + input(sud) AS ( + VALUES('53..7....6..195....98....6.8...6...34..8.3..17...2...6.6....28....419..5....8..79') + ), + + /* A table filled with digits 1..9, inclusive. */ + digits(z, lp) AS ( + VALUES('1', 1) + UNION ALL SELECT + CAST(lp+1 AS TEXT), lp+1 FROM digits WHERE lp<9 + ), + + /* The tricky bit. */ + x(s, ind) AS ( + SELECT sud, instr(sud, '.') FROM input + UNION ALL + SELECT + substr(s, 1, ind-1) || z || substr(s, ind+1), + instr( substr(s, 1, ind-1) || z || substr(s, ind+1), '.' ) + FROM x, digits AS z + WHERE ind>0 + AND NOT EXISTS ( + SELECT 1 + FROM digits AS lp + WHERE z.z = substr(s, ((ind-1)/9)*9 + lp, 1) + OR z.z = substr(s, ((ind-1)%9) + (lp-1)*9 + 1, 1) + OR z.z = substr(s, (((ind-1)/3) % 3) * 3 + + ((ind-1)/27) * 27 + lp + + ((lp-1) / 3) * 6, 1) + ) + ) + SELECT s FROM x WHERE ind=0; +---- +stmt 0 ok +==== 10.1 + + DROP TABLE IF EXISTS tree; + CREATE TABLE tree(id INTEGER PRIMARY KEY, parentid, payload); +---- +stmt 0 ok +stmt 29 ok +==== 10.2 + + WITH flat(fid, p) AS ( + SELECT id, '/' || payload FROM tree WHERE parentid IS NULL + UNION ALL + SELECT id, p || '/' || payload FROM flat, tree WHERE parentid=fid + ) + SELECT p FROM flat ORDER BY p; +---- +stmt 0 err 1 -1 no such table: tree +==== 10.7.1 + + WITH t(a) AS ( + SELECT 1 AS b UNION ALL SELECT a+1 AS c FROM t WHERE a<5 ORDER BY a + ) + SELECT * FROM t +---- +stmt 0 err 1 -1 1st ORDER BY term does not match any column in the result set +==== 10.7.2 + + WITH t(a) AS ( + SELECT 1 AS b UNION ALL SELECT a+1 AS c FROM t WHERE a<5 ORDER BY b + ) + SELECT * FROM t +---- +stmt 0 ok +==== 10.7.3 + + WITH t(a) AS ( + SELECT 1 AS b UNION ALL SELECT a+1 AS c FROM t WHERE a<5 ORDER BY c + ) + SELECT * FROM t +---- +stmt 0 ok +==== 10.8.1 + + WITH flat(fid, depth, p) AS ( + SELECT id, 1, '/' || payload FROM tree WHERE parentid IS NULL + UNION ALL + SELECT id, depth+1, p||'/'||payload FROM flat, tree WHERE parentid=fid + ORDER BY 2, 3 COLLATE nocase + ) + SELECT p FROM flat; +---- +stmt 0 err 1 -1 no such table: tree +==== 10.8.2 + + WITH flat(fid, depth, p) AS ( + SELECT id, 1, ('/' || payload) COLLATE nocase + FROM tree WHERE parentid IS NULL + UNION ALL + SELECT id, depth+1, (p||'/'||payload) + FROM flat, tree WHERE parentid=fid + ORDER BY 2, 3 + ) + SELECT p FROM flat; +---- +stmt 0 err 1 -1 no such table: tree +==== 10.8.3 + + WITH flat(fid, depth, p) AS ( + SELECT id, 1, ('/' || payload) + FROM tree WHERE parentid IS NULL + UNION ALL + SELECT id, depth+1, (p||'/'||payload) COLLATE nocase + FROM flat, tree WHERE parentid=fid + ORDER BY 2, 3 + ) + SELECT p FROM flat; +---- +stmt 0 err 1 -1 no such table: tree +==== 10.8.4.1 + + CREATE TABLE tst(a,b); + INSERT INTO tst VALUES('a', 'A'); + INSERT INTO tst VALUES('b', 'B'); + INSERT INTO tst VALUES('c', 'C'); + 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 +==== 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 +==== 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 +==== 11.1 + + CREATE TABLE org( + name TEXT PRIMARY KEY, + boss TEXT REFERENCES org + ) WITHOUT ROWID; + INSERT INTO org VALUES('Alice',NULL); + INSERT INTO org VALUES('Bob','Alice'); + INSERT INTO org VALUES('Cindy','Alice'); + INSERT INTO org VALUES('Dave','Bob'); + INSERT INTO org VALUES('Emma','Bob'); + INSERT INTO org VALUES('Fred','Cindy'); + INSERT INTO org VALUES('Gail','Cindy'); + INSERT INTO org VALUES('Harry','Dave'); + INSERT INTO org VALUES('Ingrid','Dave'); + INSERT INTO org VALUES('Jim','Emma'); + INSERT INTO org VALUES('Kate','Emma'); + INSERT INTO org VALUES('Lanny','Fred'); + INSERT INTO org VALUES('Mary','Fred'); + INSERT INTO org VALUES('Noland','Gail'); + INSERT INTO org VALUES('Olivia','Gail'); + -- The above are all under Alice. Add a few more records for people + -- not in Alice's group, just to prove that they won't be selected. + INSERT INTO org VALUES('Xaviar',NULL); + INSERT INTO org VALUES('Xia','Xaviar'); + INSERT INTO org VALUES('Xerxes','Xaviar'); + INSERT INTO org VALUES('Xena','Xia'); + -- Find all members of Alice's group, breath-first order + WITH RECURSIVE + under_alice(name,level) AS ( + VALUES('Alice','0') + UNION ALL + SELECT org.name, under_alice.level+1 + FROM org, under_alice + WHERE org.boss=under_alice.name + ORDER BY 2 + ) + SELECT group_concat(substr('...............',1,level*3) || name,x'0a') + 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 +==== 11.2 + + WITH RECURSIVE + under_alice(name,level) AS ( + VALUES('Alice','0') + UNION ALL + SELECT org.name, under_alice.level+1 + FROM org, under_alice + WHERE org.boss=under_alice.name + ORDER BY 2 DESC + ) + SELECT group_concat(substr('...............',1,level*3) || name,x'0a') + FROM under_alice; +---- +stmt 0 err 1 -1 no such table: org +==== 11.3 + + WITH RECURSIVE + under_alice(name,level) AS ( + VALUES('Alice','0') + UNION ALL + SELECT org.name, under_alice.level+1 + FROM org, under_alice + WHERE org.boss=under_alice.name + ) + SELECT group_concat(substr('...............',1,level*3) || name,x'0a') + FROM under_alice; +---- +stmt 0 err 1 -1 no such table: org +==== 12.1 + +WITH RECURSIVE + t1(x) AS (VALUES(2) UNION ALL SELECT x+2 FROM t1 WHERE x<20), + t2(y) AS (VALUES(3) UNION ALL SELECT y+3 FROM t2 WHERE y<20) +SELECT x FROM t1 EXCEPT SELECT y FROM t2 ORDER BY 1; +---- +stmt 0 ok +==== 13.1 + + 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 +==== 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 +==== 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 +==== 14.1 + + WITH x AS (SELECT * FROM t) SELECT 0 EXCEPT SELECT 0 ORDER BY 1 COLLATE binary; +---- +stmt 0 ok +==== 15.1 + + WITH RECURSIVE + 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 +==== 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 +==== 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 +==== 16.3 + + WITH RECURSIVE + t(id, parent) AS (VALUES(1,2)), + q(id, parent, rn) AS ( + VALUES(1,2,3) + UNION ALL + SELECT t.*, ROW_NUMBER() OVER (ORDER BY t.id) AS rn + FROM q JOIN t ON t.parent = q.id + ) + SELECT * FROM q; +---- +stmt 0 err 1 -1 cannot use window functions in recursive queries +==== 17.1 + + WITH x(a) AS ( + WITH y(b) AS (SELECT 10) + SELECT 9 UNION ALL SELECT * FROM y + ) + SELECT * FROM x +---- +stmt 0 ok +==== 17.2 + + WITH x AS ( + WITH y(b) AS (SELECT 10) + SELECT * FROM y UNION ALL SELECT * FROM y + ) + SELECT * FROM x +---- +stmt 0 ok +==== 17.3 + + WITH i AS ( + WITH j AS (SELECT 5) + SELECT 5 FROM i UNION SELECT 8 FROM i + ) + SELECT * FROM i; +---- +stmt 0 err 1 -1 circular reference: i +==== 17.4 + + WITH i AS ( + WITH j AS (SELECT 5) + SELECT 5 FROM t1 UNION SELECT 8 FROM t11 + ) + SELECT * FROM i; +---- +stmt 0 err 1 -1 no such table: t11 +==== 17.5 + + WITH + x1 AS (SELECT 10), + x2 AS (SELECT * FROM x1), + x3 AS ( + WITH x1 AS (SELECT 11) + SELECT * FROM x2 UNION ALL SELECT * FROM x2 + ) + SELECT * FROM x3; +---- +stmt 0 ok +==== 17.6 + + WITH + x1 AS (SELECT 10), + x2 AS (SELECT * FROM x1), + x3 AS ( + WITH x1 AS (SELECT 11) + SELECT * FROM x2 UNION ALL SELECT * FROM x1 + ) + SELECT * FROM x3; +---- +stmt 0 ok +==== 17.7 + + WITH + x1 AS (SELECT 10), + x2 AS (SELECT * FROM x1), + x3 AS ( + WITH + x1 AS ( SELECT 11 ), + x4 AS ( SELECT * FROM x2 ) + SELECT * FROM x4 UNION ALL SELECT * FROM x1 + ) + SELECT * FROM x3; +---- +stmt 0 ok +==== 17.8 + + WITH + x1 AS (SELECT 10), + x2 AS (SELECT * FROM x1), + x3 AS ( + WITH + x1 AS ( SELECT 11 ), + x4 AS ( SELECT * FROM x2 ) + SELECT * FROM x4 UNION ALL SELECT * FROM x1 + ) + SELECT * FROM x3; +---- +stmt 0 ok +==== 17.9 + + WITH + x1 AS (SELECT 10), + x2 AS (SELECT 11), + x3 AS ( + SELECT * FROM x1 UNION ALL SELECT * FROM x2 + ), + x4 AS ( + WITH + x1 AS (SELECT 12), + x2 AS (SELECT 13) + SELECT * FROM x3 + ) + SELECT * FROM x4; +---- +stmt 0 ok +==== 18.1 + + WITH xyz(x) AS (VALUES(NULL) UNION SELECT round(1i fROM c; +---- +stmt 0 ok +==== 20.2 + + WITH c(i)AS(VALUES(5)UNIoN SELECT 0)SELECT min(1)-i fROM c; +---- +stmt 0 ok +==== 21.1 + + WITH RECURSIVE t21(a,b) AS ( + WITH t21(x) AS (VALUES(1)) + SELECT x, x FROM t21 ORDER BY 1 + ) + SELECT * FROM t21 AS tA, t21 AS tB +---- +stmt 0 ok +==== 21.1b + + /* This variant from chromium bug 922312 on 2019-01-16 */ + WITH RECURSIVE t21(a,b) AS ( + WITH t21(x) AS (VALUES(1)) + SELECT x, x FROM t21 ORDER BY 1 LIMIT 5 + ) + SELECT * FROM t21 AS tA, t21 AS tB +---- +stmt 0 ok +==== 21.2 + + SELECT printf('', + EXISTS (WITH RECURSIVE Table0 AS (WITH Table0 AS (SELECT DISTINCT 1) + SELECT *, * FROM Table0 ORDER BY 1 DESC) + SELECT * FROM Table0 NATURAL JOIN Table0)); +---- +stmt 0 ok +==== 22.1 + + WITH RECURSIVE c AS NOT MATERIALIZED ( + WITH RECURSIVE c AS NOT MATERIALIZED ( + WITH RECURSIVE c AS NOT MATERIALIZED ( + WITH RECURSIVE c AS NOT MATERIALIZED ( + WITH c AS (VALUES(0)) + SELECT 1 FROM c LEFT JOIN c ON ltrim(1) + ) + SELECT 1 FROM c,c,c,c,c,c,c,c,c + ) + SELECT 2 FROM c,c,c,c,c,c,c,c,c + ) + SELECT 3 FROM c,c,c,c,c,c,c,c,c + ) + SELECT 4 FROM c,c,c,c,c,c,c,c,c; +---- +stmt 0 err 1 -1 too many FROM clause terms, max: 200 +==== 23.1 + + CREATE TABLE t1(id INTEGER NULL PRIMARY KEY, name Text); + INSERT INTO t1 VALUES (1, 'john'); + INSERT INTO t1 VALUES (2, 'james'); + INSERT INTO t1 VALUES (3, 'jingle'); + INSERT INTO t1 VALUES (4, 'himer'); + INSERT INTO t1 VALUES (5, 'smith'); + CREATE VIEW v2 AS + WITH t4(Name) AS (VALUES ('A'), ('B')) + SELECT Name Name FROM t4; + CREATE VIEW v3 AS + WITH t4(Att, Val, Act) AS (VALUES + ('C', 'D', 'E'), + ('F', 'G', 'H') + ) + SELECT D.Id Id, P.Name Protocol, T.Att Att, T.Val Val, T.Act Act + FROM t1 D + CROSS JOIN v2 P + CROSS JOIN t4 T; + 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 249 ok +stmt 342 ok +stmt 575 err 1 -1 no such table: v3 +==== 24.1 + + CREATE TABLE t1(a, b, c); + CREATE VIEW v1 AS SELECT max(a), min(b) FROM t1 GROUP BY c; +---- +stmt 0 ok +stmt 28 ok +==== 24.2 + + ATTACH "" AS aux; + CREATE VIEW aux.v3 AS VALUES(1); + CREATE VIEW main.v3 AS VALUES(3); + + CREATE VIEW aux.v2 AS SELECT * FROM v3; + CREATE VIEW main.v2 AS SELECT * FROM v3; + + 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 55 ok +stmt 91 err 1 107 unknown database aux +stmt 134 ok +stmt 177 err 1 -1 no such table: main.v2 +==== with1-generated + + WITH cte1 AS ( + SELECT TRUE, ( + WITH cte2 AS (SELECT avg(DISTINCT TRUE) FROM dual) + SELECT 2571 FROM cte2 + ) AS subquery1 + FROM dual + GROUP BY 1 + ) + SELECT (SELECT 1324 FROM cte1) FROM cte1; +---- +stmt 0 err 1 -1 no such table: dual +==== 26.0 + + WITH i(x) AS ( + VALUES(1) UNION ALL SELECT x+1 FRO, a.b,O. * ,I¬i O, a.b,O. * ORDER BY 1 + ) + SELECT x,O. * O FROM i ¬I,I? 10; +---- +stmt 0 err 1 117 near "O": syntax error +==== 26.1 + + CREATE TABLE t (label VARCHAR(10), step INTEGER); + INSERT INTO T VALUES('a', 1); + INSERT INTO T VALUES('a', 1); + INSERT INTO T VALUES('b', 1); + WITH RECURSIVE cte(label, step) AS ( + SELECT DISTINCT * FROM t + UNION ALL + SELECT label, step + 1 FROM cte WHERE step < 3 + ) + 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 +==== 26.2 + + WITH RECURSIVE cte(label, step) AS ( + SELECT * FROM t + UNION + SELECT label, step + 1 FROM cte WHERE step < 3 + ) + SELECT * FROM cte ORDER BY +label, +step; +---- +stmt 0 err 1 -1 no such table: t +==== 26.3 + + CREATE TABLE tworow(x); + INSERT INTO tworow(x) VALUES(1),(2); + DELETE FROM t WHERE rowid=2; + WITH RECURSIVE cte(label, step) AS ( + SELECT * FROM t + UNION ALL + SELECT DISTINCT label, step + 1 FROM cte, tworow WHERE step < 3 + ) + 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 +==== 27.1 + + CREATE TABLE t1(k); + CREATE TABLE log(k, cte_map, main_map); + CREATE TABLE map(k, v); + INSERT INTO map VALUES(1, 'main1'), (2, 'main2'); + + CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN + INSERT INTO log + WITH map(k,v) AS (VALUES(1,'cte1'),(2,'cte2')) + SELECT + new.k, + (SELECT v FROM map WHERE k=new.k), + (SELECT v FROM main.map WHERE k=new.k); + END; + + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + SELECT k, cte_map, main_map, '|' FROM log ORDER BY k; +---- +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 +==== 28.1 + + DROP TABLE t1; + CREATE TABLE t1(x INTEGER PRIMARY KEY); + INSERT INTO t1 VALUES(1),(4),(999); + SELECT ( + WITH RECURSIVE t2(y) AS ( + SELECT 4 + UNION + SELECT NULL + UNION + SELECT y+1 FROM t2 WHERE y=4 ORDER BY 1 + ) + SELECT 1 FROM t2 WHERE y=x + ) FROM t1; +---- +stmt 0 err 1 -1 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 diff --git a/parser/testdata/with2.metadata.json b/parser/testdata/with2.metadata.json new file mode 100644 index 0000000..2de2d1d --- /dev/null +++ b/parser/testdata/with2.metadata.json @@ -0,0 +1,58 @@ +{ + "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/with2.test b/parser/testdata/with2.test new file mode 100644 index 0000000..44176d2 --- /dev/null +++ b/parser/testdata/with2.test @@ -0,0 +1,596 @@ +==== 1.0 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1); + 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 +==== 1.1 + + WITH x1 AS (SELECT * FROM t1) + SELECT sum(a) FROM x1; +---- +stmt 0 err 1 -1 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 +==== 1.3 + + WITH x1 AS (SELECT * FROM t1) + SELECT (SELECT sum(a) FROM x1); +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.4 + + CREATE TABLE t2(i); + INSERT INTO t2 VALUES(2); + INSERT INTO t2 VALUES(3); + INSERT INTO t2 VALUES(5); + + WITH x1 AS (SELECT i FROM t2), + i(a) AS ( + SELECT min(i)-1 FROM x1 UNION SELECT a+1 FROM i WHERE a<10 + ) + 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 +==== 1.5 + + WITH x1 AS (SELECT a FROM t1), + x2 AS (SELECT i FROM 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 +==== 1.6 + + CREATE TABLE t3 AS SELECT 3 AS x; + CREATE TABLE t4 AS SELECT 4 AS x; + + WITH x1 AS (SELECT * FROM t3), + x2 AS ( + WITH t3 AS (SELECT * FROM t4) + SELECT * FROM x1 + ) + SELECT * FROM x2; +---- +stmt 0 ok +stmt 36 ok +stmt 72 err 1 -1 no such table: t3 +==== 1.7 + + WITH x2 AS ( + WITH t3 AS (SELECT * FROM t4) + SELECT * FROM t3 + ) + SELECT * FROM x2; +---- +stmt 0 err 1 -1 no such table: t4 +==== 1.8 + + WITH x2 AS ( + WITH t3 AS (SELECT * FROM t4) + SELECT * FROM main.t3 + ) + SELECT * FROM x2; +---- +stmt 0 err 1 -1 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 +==== 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 +==== 1.11 + + WITH + i(x) AS ( + WITH + j(x) AS ( SELECT * FROM i ), + i(x) AS ( SELECT * FROM t1 ) + SELECT * FROM j + ) + SELECT * FROM i; +---- +stmt 0 err 1 -1 no such table: t1 +==== 1.12 + + WITH r(i) AS ( + VALUES('.') + UNION ALL + SELECT i || '.' FROM r, ( + SELECT x FROM x INTERSECT SELECT y FROM y + ) WHERE length(i) < 10 + ), + x(x) AS ( VALUES(1) UNION ALL VALUES(2) UNION ALL VALUES(3) ), + y(y) AS ( VALUES(2) UNION ALL VALUES(4) UNION ALL VALUES(6) ) + + SELECT * FROM r; +---- +stmt 0 ok +==== 1.13 + + WITH r(i) AS ( + VALUES('.') + UNION ALL + SELECT i || '.' FROM r, ( SELECT x FROM x WHERE x=2 ) WHERE length(i) < 10 + ), + x(x) AS ( VALUES(1) UNION ALL VALUES(2) UNION ALL VALUES(3) ) + + SELECT * FROM r ORDER BY length(i) DESC; +---- +stmt 0 ok +==== 1.14 + + WITH + t4(x) AS ( + VALUES(4) + UNION ALL + SELECT x+1 FROM t4 WHERE x<10 + ) + SELECT * FROM t4; +---- +stmt 0 ok +==== 1.15 + + WITH + t4(x) AS ( + VALUES(4) + UNION ALL + SELECT x+1 FROM main.t4 WHERE x<10 + ) + SELECT * FROM t4; +---- +stmt 0 err 1 -1 no such table: main.t4 +==== 1.15.2 + + WITH + t4(x) AS ( + VALUES(4) + UNION ALL + SELECT x+1 FROM (SELECT * FROM main.t4) WHERE x<10 + ) + SELECT * FROM t4; +---- +stmt 0 err 1 -1 no such table: main.t4 +==== 1.16 + + WITH + t4(x) AS ( + VALUES(4) + UNION ALL + SELECT x+1 FROM t4, main.t4, t4 WHERE x<10 + ) + SELECT * FROM t4; +---- +stmt 0 err 1 -1 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 +==== 3.2 + + WITH + i(x) AS ( SELECT * FROM j ), + j(x) AS ( SELECT * FROM k ), + k(x) AS ( SELECT * FROM i ) + SELECT * FROM i; +---- +stmt 0 err 1 -1 circular reference: i +==== 3.3 + + WITH + i(x) AS ( SELECT * FROM (SELECT * FROM j) ), + j(x) AS ( SELECT * FROM (SELECT * FROM i) ) + SELECT * FROM i; +---- +stmt 0 err 1 -1 circular reference: i +==== 3.4 + + WITH + i(x) AS ( SELECT * FROM (SELECT * FROM j) ), + j(x) AS ( SELECT * FROM (SELECT * FROM i) ) + SELECT * FROM j; +---- +stmt 0 err 1 -1 circular reference: j +==== 3.5 + + WITH + i(x) AS ( + WITH j(x) AS ( SELECT * FROM i ) + SELECT * FROM j + ) + SELECT * FROM i; +---- +stmt 0 err 1 -1 circular reference: i +==== 4.1 + + WITH x() AS ( SELECT 1,2,3 ) + SELECT * FROM x; +---- +stmt 0 err 1 10 near ")": syntax error +==== 5.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 79 ok +==== 6.1 + + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a, b); + CREATE TABLE t2(a, b); +---- +stmt 0 ok +stmt 27 ok +stmt 54 ok +stmt 79 ok +==== 6.2 + + WITH x AS (SELECT * FROM t1) + INSERT INTO t2 VALUES(1, 2,); +---- +stmt 0 err 1 61 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 +==== 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 +==== 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 +==== 6.5 + + WITH x AS (SELECT * FROM t1) + DELETE FROM t2 WHERE; +---- +stmt 0 err 1 54 near ";": syntax error +==== 6.6 + + WITH x AS (SELECT * FROM t1) DELETE FROM t2 WHERE +---- +stmt 0 err 1 -1 incomplete input +==== 6.7 + + WITH x AS (SELECT * FROM t1) DELETE FROM t2 WHRE 1; +---- +stmt 0 err 1 48 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 +==== 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 +==== 6.10 + + WITH x(a,b) AS ( + SELECT 1, 1 + UNION ALL + SELECT a*b,a+b FROM x WHERE c=2 + ) + SELECT * FROM x +---- +stmt 0 err 1 82 no such column: c +==== 7.1 + + CREATE TABLE t5(x INTEGER); + CREATE TABLE t6(y INTEGER); + + WITH s(x) AS ( VALUES(7) UNION ALL SELECT x+7 FROM s WHERE x<49 ) + INSERT INTO t5 + SELECT * FROM s; + + INSERT INTO t6 + WITH s(x) AS ( VALUES(2) UNION ALL SELECT x+2 FROM s WHERE x<49 ) + SELECT * FROM s; +---- +stmt 0 ok +stmt 30 ok +stmt 60 err 1 -1 no such table: t5 +stmt 166 err 1 -1 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 +==== 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 +==== 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 +==== 7.5 + + SELECT * FROM t6 WHERE y IN ( + WITH ss(x) AS ( VALUES(7) UNION ALL SELECT x+7 FROM ss WHERE x<49 ) + SELECT x FROM ss + ) +---- +stmt 0 err 1 -1 no such table: t6 +==== 8.1 + + CREATE TABLE t7(y); + INSERT INTO t7 VALUES(NULL); + CREATE VIEW v AS SELECT * FROM t7 ORDER BY y; +---- +stmt 0 ok +stmt 22 err 1 -1 no such table: t7 +stmt 53 ok +==== 8.2 + + WITH q(a) AS ( + SELECT 1 + UNION + SELECT a+1 FROM q, v WHERE a<5 + ) + SELECT * FROM q; +---- +stmt 0 err 1 -1 no such table: v +==== 8.3 + + WITH q(a) AS ( + SELECT 1 + UNION ALL + SELECT a+1 FROM q, v WHERE a<5 + ) + SELECT * FROM q; +---- +stmt 0 err 1 -1 no such table: v +==== 9.1 + + WITH xyz(a) AS ( + WITH abc AS ( SELECT 1234 ) SELECT * FROM abc + ) + SELECT * FROM xyz AS one, xyz AS two, ( + SELECT * FROM xyz UNION ALL SELECT * FROM xyz + ); +---- +stmt 0 ok +==== 9.2 + + WITH + cst(rsx, rsy) AS ( + SELECT 100, 100 + ), + cst2(minx, maxx, stepx, miny, maxy, stepy, qualitativex, qualitativey) AS ( + SELECT NULL, NULL, NULL, NULL, NULL, NULL, 0, 0 + ), + ds0(m, n, x, y, x2, y2, title, size, mark, label, markmode) AS ( + SELECT 1, 2, 3, 4, 5, 6, 7 , 8, 9, 10, 11 + ), + ds(m, n, x, y, x2, y2, title, size, mark, label, markmode) AS ( + SELECT m, n, x, + y, x2, + y2, + title, size, mark, label, markmode + FROM ds0 + WINDOW w AS (PARTITION BY m, x ORDER BY n) + ), + d(m, n, x, y, x2, y2, labelx,labely,title,size,mark,label,markmode) AS ( + SELECT m, n, x, y, x2, y2, x, y, title, size, mark, label, markmode + FROM ds, cst2 + ), + ylabels(y, label) AS ( + SELECT y, MIN(labely) FROM d GROUP BY y + ), + yaxis(maxy, miny, stepy , minstepy) AS ( + WITH + xt0(minx, maxx) AS ( + SELECT coalesce(miny, min(min(y2), + min(y))), coalesce(maxy, max(max(y2), + max(y))) + qualitativey + FROM d, cst2 + ), + xt1(mx, mn) AS (SELECT maxx, minx FROM xt0), + xt2(mx, mn, step) AS (SELECT mx, mn, (mx-mn) FROM xt1), + + xt3(mx, mn, ms) AS ( + SELECT mx, mn, first_value(rs) OVER (order by x desc) AS ms + FROM (SELECT mx, mn, step, f,(mx-mn) as rng, + 1.0*step/f as rs, 1.0*(mx-mn)/(step/f) AS x + FROM xt2, (SELECT 1 AS f UNION ALL SELECT 2 + UNION ALL SELECT 4 + UNION ALL SELECT 5)) AS src + WHERE x < 10 limit 1), + xt4(minstepy) AS ( + SELECT MIN(abs(y2-y)) FROM d WHERE y2 != y + ) + SELECT (mx/ms)*ms, (mn/ms)*ms, coalesce(stepy, ms), + coalesce(minstepy, ms, stepy) FROM xt3, cst2,xt4 + ), + distinct_mark_n_m(mark, ze, zem, title) AS ( + SELECT DISTINCT mark, n AS ze, m AS zem, title FROM ds0 + ), + facet0(m, mi, title, radial) AS ( + SELECT md, row_number() OVER () - 1, title, 'radial' + IN (SELECT mark FROM distinct_mark_n_m WHERE zem = md) + FROM (SELECT DISTINCT zem AS md, title AS title + FROM distinct_mark_n_m ORDER BY 2, 1) + ), + facet(m, mi, xorigin, yorigin, title, radial) AS ( + SELECT m, mi, + rsx * 1.2 * IFNULL(CASE WHEN ( + 0 + ) > 0 THEN mi / ( + 0 + ) ELSE mi % ( + 2 + ) END, mi), + rsy * 1.2 * IFNULL(CASE WHEN ( + 2 + ) > 0 THEN mi / ( + 2 + ) ELSE mi / ( + 0 + ) END, 0), + title, radial FROM facet0, cst + ), + radygrid(m, mi, tty, wty, ttx, ttx2, xorigin, yorigin) AS ( + SELECT m, mi, rsy / 2 / ((maxy-miny)/stepy) * (value-1) AS tty, + coalesce(NULL, miny + stepy * (value-1)) AS wty, + xorigin, xorigin+rsx, xorigin + rsx / 2, + yorigin + rsy / 2 + FROM generate_series(1), yaxis, cst, + facet LEFT JOIN ylabels ON ylabels.y = (miny + (value-1) * stepy) + WHERE radial AND stop = 1+1.0*(maxy-miny)/stepy + ), + ypos(m, mi, pcx, pcy, radial) AS ( + SELECT m, mi, xorigin, yorigin + CASE + WHEN 0 BETWEEN miny AND maxy THEN + rsy - (0 - miny) * rsy / (maxy-miny) + WHEN 0 >= maxy THEN 0 + ELSE rsy + END, radial FROM yaxis, cst, facet WHERE NOT radial + UNION ALL + SELECT m, mi, xorigin + rsx / 2, yorigin + (CASE + WHEN 0 BETWEEN miny AND maxy THEN + rsy - (0 - miny) * rsy / 2 / (maxy-miny) + WHEN 0 >= maxy THEN 0 + ELSE rsy + END ) / 2, radial FROM yaxis, cst, facet WHERE radial + ) + SELECT * FROM radygrid , ypos; +---- +stmt 0 err 1 -1 no such table: generate_series +==== 10.1 + + SELECT 1 AS c WHERE ( + SELECT ( + WITH t1(a) AS (VALUES( c )) + SELECT ( SELECT t1a.a FROM t1 AS t1a, t1 AS t1x ) + FROM t1 AS xyz GROUP BY 1 + ) + ) +---- +stmt 0 ok +==== 11.1 + + CREATE TABLE t1(a); + CREATE VIEW v2(c) AS + WITH x AS ( + WITH y AS ( + WITH z AS(SELECT * FROM t1) + SELECT * FROM v2 + ) SELECT a + ) SELECT * from t1; + ALTER TABLE t1 RENAME COLUMN a TO b; + SELECT sql FROM sqlite_schema WHERE name='t1'; +---- +stmt 0 ok +stmt 24 ok +stmt 211 err 1 -1 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 +==== 11.3 + + DROP VIEW v2; + CREATE VIEW v2(c) AS + WITH x AS ( + WITH y AS ( + WITH z AS(SELECT * FROM t1) + SELECT * FROM v2 + ) SELECT a + ) SELECT * from t1, x; + SELECT * FROM v2; +---- +stmt 0 err 1 -1 no such view: v2 +stmt 18 ok +stmt 208 err 1 -1 no such table: v2 +==== 11.4 + + DROP VIEW v2; + CREATE VIEW v2(c) AS + WITH x AS ( + WITH y AS ( + WITH z AS(SELECT * FROM t1) + SELECT * FROM v2 + ) SELECT * + ) SELECT * from t1, x; + SELECT * FROM v2; +---- +stmt 0 err 1 -1 no such view: v2 +stmt 18 ok +stmt 208 err 1 -1 no such table: v2 +==== 11.5 + + WITH x AS ( + WITH y AS ( + WITH z AS(SELECT * FROM t1) + SELECT * FROM no_such_table + ) SELECT a + ) SELECT * from t1; +---- +stmt 0 err 1 -1 no such table: t1 +==== 12.1 + + CREATE TABLE t1(a); + INSERT INTO t1 VALUES(1),('hello'),(4.25),(NULL),(x'3c626c6f623e'); + CREATE VIEW v2(c) AS WITH x AS (WITH y AS (WITH z AS(SELECT * FROM t1) SELECT * FROM v2) SELECT a) SELECT * from t1; + CREATE VIEW v3(c) AS WITH x AS (WITH y AS (WITH z AS(SELECT * FROM v2) SELECT * FROM v3) SELECT a) SELECT * from t1; + ALTER TABLE t1 RENAME TO t1x; + SELECT quote(c) FROM v3; +---- +stmt 0 ok +stmt 24 err 1 -1 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 +==== 13.1 + + WITH + t1(x) AS (SELECT 111), + t2(y) AS (SELECT 222), + t3(z) AS (SELECT * FROM t2 WHERE false UNION ALL SELECT * FROM t2) + SELECT * FROM t1, t3; +---- +stmt 0 ok diff --git a/parser/testdata/with3.metadata.json b/parser/testdata/with3.metadata.json new file mode 100644 index 0000000..ea2b038 --- /dev/null +++ b/parser/testdata/with3.metadata.json @@ -0,0 +1,16 @@ +{ + "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/with3.test b/parser/testdata/with3.test new file mode 100644 index 0000000..0bcd71e --- /dev/null +++ b/parser/testdata/with3.test @@ -0,0 +1,147 @@ +==== 1.0 + + WITH i(x) AS ( + WITH j AS (SELECT 10) + SELECT 5 FROM t0 UNION SELECT 8 FROM m + ) + SELECT * FROM i; +---- +stmt 0 err 1 -1 no such table: m +==== 1.1 + + CREATE VIEW v1(x,y) AS + WITH t1(a,b) AS (VALUES(1,2)) + SELECT * FROM nosuchtable JOIN t1; + SELECT * FROM v1; +---- +stmt 0 ok +stmt 98 err 1 -1 no such table: v1 +==== 2.0 + + WITH + x1 AS (SELECT 10), + x2 AS (SELECT 11), + x3 AS ( + SELECT * FROM x1 UNION ALL SELECT * FROM x2 + ), + x4 AS ( + WITH + x1 AS (SELECT 12), + x2 AS (SELECT 13) + SELECT * FROM x3 + ) + SELECT * FROM x4; +---- +stmt 0 ok +==== 2.1 + + CREATE TABLE t1(x); + 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 ok +stmt 22 err 1 -1 no such table: t1 +stmt 153 err 1 -1 no such table: t1 +==== 3.1.1 + + CREATE TABLE y1(a, b); + CREATE INDEX y1a ON y1(a); + + WITH cnt(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM cnt LIMIT 1000) + INSERT INTO y1 SELECT i%10, i FROM cnt; + ANALYZE; +---- +stmt 0 ok +stmt 27 err 1 -1 no such table: main.y1 +stmt 58 err 1 -1 no such table: y1 +stmt 177 ok +==== 3.2.1 + + CREATE TABLE w1(pk INTEGER PRIMARY KEY, x INTEGER); + CREATE TABLE w2(pk INTEGER PRIMARY KEY); +---- +stmt 0 ok +stmt 54 ok +==== 4.0 + + WITH t5(t5col1) AS ( + SELECT ( + WITH t3(t3col1) AS ( + WITH t2 AS ( + WITH t1 AS (SELECT 1 AS c1 GROUP BY 1) + SELECT a.c1 FROM t1 AS a, t1 AS b + WHERE anoncol1 = 1 + ) + SELECT (SELECT 1 FROM t2) FROM t2 + ) + SELECT t3col1 FROM t3 WHERE t3col1 + ) FROM (SELECT 1 AS anoncol1) + ) + SELECT t5col1, t5col1 FROM t5 +---- +stmt 0 ok +==== 4.1 + + SELECT EXISTS ( + WITH RECURSIVE Table0 AS ( + WITH RECURSIVE Table0(Col0) AS (SELECT ALL 1 ) + SELECT ALL ( + WITH RECURSIVE Table0 AS ( + WITH RECURSIVE Table0 AS ( + WITH RECURSIVE Table0 AS (SELECT DISTINCT 1 GROUP BY 1 ) + SELECT DISTINCT * FROM Table0 NATURAL INNER JOIN Table0 + WHERE Col0 = 1 + ) + SELECT ALL (SELECT DISTINCT * FROM Table0) FROM Table0 WHERE Col0 = 1 + ) + SELECT ALL * FROM Table0 NATURAL INNER JOIN Table0 + ) FROM Table0 ) + SELECT DISTINCT * FROM Table0 NATURAL INNER JOIN Table0 + ); +---- +stmt 0 ok +==== 4.2 + + SELECT ( + WITH t1(a) AS (VALUES(1)) + SELECT ( + WITH t2(b) AS ( + WITH t3(c) AS ( + WITH t4(d) AS (VALUES('elvis')) + SELECT t4a.d FROM t4 AS t4a JOIN t4 AS t4b LEFT JOIN t4 AS t4c + ) + SELECT c FROM t3 WHERE a = 1 + ) + SELECT t2a.b FROM t2 AS t2a JOIN t2 AS t2x + ) + FROM t1 GROUP BY 1 + ) + GROUP BY 1; +---- +stmt 0 ok +==== 5.2 + + 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 +==== 6.0 + + with + cte1(x, y) AS ( select 1, 2, 3 ), + cte2(z) as ( select 1 from cte1 ) + select * from cte2, cte1; +---- +stmt 0 err 1 -1 table cte1 has 3 values for 2 columns +==== 6.1 + + with + cte1(x, y) AS ( select 1, 2, 3 ), + 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 diff --git a/parser/testdata/withM.metadata.json b/parser/testdata/withM.metadata.json new file mode 100644 index 0000000..3494ae4 --- /dev/null +++ b/parser/testdata/withM.metadata.json @@ -0,0 +1,5 @@ +{ + "todo": { + "1.0": true + } +} diff --git a/parser/testdata/withM.test b/parser/testdata/withM.test new file mode 100644 index 0000000..0757af1 --- /dev/null +++ b/parser/testdata/withM.test @@ -0,0 +1,7 @@ +==== 1.0 + + CREATE TABLE t1(x INTEGER, y INTEGER); + INSERT INTO t1 VALUES(123, 456); +---- +stmt 0 ok +stmt 41 err 1 -1 no such table: t1