---
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
*.db filter=lfs diff=lfs merge=lfs -text
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
.DS_Store
|
||||||
|
.vscode
|
||||||
|
**__pycache__**
|
||||||
|
part1/.env
|
||||||
|
part1/bugs
|
||||||
|
part1/shuffle.py
|
||||||
|
part1/metrics.py
|
||||||
|
|
||||||
|
part2/.env
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# SQLite Fuzzer & Reducer
|
||||||
|
[263-2815-00L] Automated Software Testing @ ETHZ
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,41 @@
|
|||||||
|
FROM theosotr/sqlite3-test AS base
|
||||||
|
|
||||||
|
|
||||||
|
FROM python:3.14.4-slim-trixie AS build
|
||||||
|
|
||||||
|
USER root
|
||||||
|
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install build-essential tcl -y
|
||||||
|
RUN rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN mkdir /home/test
|
||||||
|
|
||||||
|
COPY --from=base /home/test/seeds /home/test/seeds
|
||||||
|
COPY --from=base /usr/bin/sqlite3 /usr/bin/
|
||||||
|
COPY --from=base /home/test/sqlite3-src /home/test/sqlite3-src
|
||||||
|
|
||||||
|
COPY rot13.c /home/test/sqlite3-src/build/
|
||||||
|
|
||||||
|
# Instrument SQLite with gcov
|
||||||
|
RUN cd /home/test/sqlite3-src/build && ../configure CFLAGS="--coverage -g -O0" && make clean && make -j$(nproc)
|
||||||
|
|
||||||
|
RUN cd /home/test/sqlite3-src/build && ../configure CFLAGS="--coverage -g -O0" && gcc -g -fPIC -shared rot13.c -o rot13.so
|
||||||
|
|
||||||
|
COPY requirements.txt ./
|
||||||
|
|
||||||
|
RUN pip install -r requirements.txt
|
||||||
|
RUN ln -s /usr/bin/python3 /usr/bin/python 2>/dev/null || true
|
||||||
|
|
||||||
|
FROM build
|
||||||
|
|
||||||
|
WORKDIR /fuzzer
|
||||||
|
|
||||||
|
COPY fuzzer.py mutator_extra_statements.py mutator_corpus_splicing.py mutator_equivalent_rewrites.py mutator_operators.py mutator_values.py mutator.py oracle.py runner.py sqlite_static_helper.py stats.py entrypoint.sh additional.sql *.db ./
|
||||||
|
RUN echo "SELECT 1;" > commands.sql
|
||||||
|
|
||||||
|
# Project Spec: "The executable file of your tool must be called /usr/bin/test-db inside the Docker image."
|
||||||
|
COPY entrypoint.sh /usr/bin/test-db
|
||||||
|
|
||||||
|
RUN chmod +x /usr/bin/test-db
|
||||||
|
ENTRYPOINT ["/usr/bin/test-db"]
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
## Instructions
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker build -t fuzzer .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fuzz
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -it -v "$(pwd)/bugs:/fuzzer/bugs" fuzzer
|
||||||
|
```
|
||||||
|
|
||||||
|
### Additional Options
|
||||||
|
|
||||||
|
#### Get a shell
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -it -v "$(pwd)/bugs:/fuzzer/bugs" --entrypoint bash fuzzer
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Flags
|
||||||
|
|
||||||
|
| Flag | Default | Description |
|
||||||
|
| -------------------- | -------------------------------------- | ------------------------------------------------------------------------- |
|
||||||
|
| `--seeds` | `/home/test/seeds` | Directory containing seed `.sql` files for mutation |
|
||||||
|
| `--buggy` | `/home/test/sqlite3-src/build/sqlite3` | Path to the buggy SQLite binary being tested |
|
||||||
|
| `--reference` | `/usr/bin/sqlite3` | Path to the reference SQLite binary for comparison |
|
||||||
|
| `--count` | `10000` | Number of queries to generate and execute |
|
||||||
|
| `--mutate-timeout` | `0.5` | Per-mutation timeout in seconds (prevents hanging mutations) |
|
||||||
|
| `--max-query-length` | `100000` | Hard character limit for generated queries (longer queries reset to seed) |
|
||||||
|
| `--workers` | `multiprocessing.cpu_count()` | Number of parallel `check()` worker threads |
|
||||||
|
| `--validate-seeds` | `False` | Run upfront validation pass on all seeds before fuzzing |
|
||||||
|
| `--run-baseline` | `False` | Run seeds without mutation (baseline coverage measurement) |
|
||||||
|
|
||||||
|
#### Customize the fuzzer, e.g.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
test-db --validate-seeds --count 5000 --mutate-timeout 0.1 --max-query-length 100000
|
||||||
|
```
|
||||||
Binary file not shown.
@@ -0,0 +1,501 @@
|
|||||||
|
creATE VIRTUAL TABLE t0 USING fts3("x", "y", "z");
|
||||||
|
DROP TABLE t0;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
DROP TABLE t0;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TEMPORARY TABLE t0(x, y, z);
|
||||||
|
SELECT -99999999999999999999999999999999999999999999999999;
|
||||||
|
SELECT * FROM sqlite_temp_master WHERE sql GLOB '000[]***';
|
||||||
|
DROP TABLE t0;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
SELECT 0x0ACB29BM205381;
|
||||||
|
SELECT sqlite_compileoption_used('我的天你是怎么了');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE c > 0;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',3.14), (1,'b',-7.75), (2,'c',-9e999);
|
||||||
|
SELECT b,a,c,
|
||||||
|
RANK() OVER (PARTITION BY a ORDER BY c DESC) AS d FROM T;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c INTEGER
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',NULL), (2,'b',1), (3,'c',2);
|
||||||
|
WITH RECURSIVE d(a,b,c,e) AS (
|
||||||
|
SELECT *,1 FROM T WHERE c IS NULL
|
||||||
|
UNION ALL
|
||||||
|
SELECT T.a,T.b,T.c,d.e+1
|
||||||
|
FROM T JOIN d ON T.c=d.a
|
||||||
|
)
|
||||||
|
SELECT * FROM d;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b',1.5), ('a','c',-2.25), ('b','b',4.75);
|
||||||
|
SELECT a,
|
||||||
|
SUM(CASE WHEN b='b' THEN c ELSE 0 END) AS d,
|
||||||
|
SUM(CASE WHEN b='c' THEN c ELSE 0 END) AS e
|
||||||
|
FROM T
|
||||||
|
GROUP BY a;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a',100.0), ('b',-200.5), ('c',9e999);
|
||||||
|
SELECT a,b,
|
||||||
|
LEAD(b,1) OVER (ORDER BY b DESC) AS c,
|
||||||
|
NTILE(2) OVER (ORDER BY b DESC) AS d FROM T;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,2.0,10.5), (1,-3.5,20.25), (2,9e999,-1.0);
|
||||||
|
WITH d AS (SELECT a,SUM(b*c) AS e FROM T GROUP BY a) SELECT * FROM d;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b',5.0), ('a','c',5.0), ('b','d',-8.25);
|
||||||
|
SELECT a,b,c,
|
||||||
|
RANK() OVER (PARTITION BY a ORDER BY c DESC) AS d FROM T;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES (1,'a'),(2,'b');
|
||||||
|
INSERT INTO T2 VALUES (1,'c'),(1,'d');
|
||||||
|
SELECT T1.b,
|
||||||
|
(
|
||||||
|
SELECT GROUP_CONCAT(b,',')
|
||||||
|
FROM T2
|
||||||
|
WHERE T2.a=T1.a
|
||||||
|
) AS c
|
||||||
|
FROM T1;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b',1.0), ('a','c',-1.0), ('b','d',0.0);
|
||||||
|
SELECT
|
||||||
|
COALESCE(a,'e') AS d,
|
||||||
|
COALESCE(b,'f') AS e,
|
||||||
|
SUM(c) AS f
|
||||||
|
FROM T
|
||||||
|
GROUP BY a,b;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,1.5), (2,-2.5), (3,0.0);
|
||||||
|
CREATE INDEX c
|
||||||
|
ON T(b);
|
||||||
|
SELECT * FROM T WHERE b >= -2.5 AND b < 2.0;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','2020-01-01'), ('b','2026-01-01');
|
||||||
|
SELECT a,
|
||||||
|
CAST(
|
||||||
|
(julianday('now')-julianday(b))/365.25
|
||||||
|
AS INTEGER
|
||||||
|
) AS c
|
||||||
|
FROM T;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',0.0);
|
||||||
|
SELECT * FROM T WHERE c < 2.0 ORDER BY c;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b INTEGER,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a',1,2.0), ('a',2,-3.0), ('b',1,4.5);
|
||||||
|
SELECT a,b,c,
|
||||||
|
SUM(c) OVER (
|
||||||
|
PARTITION BY a
|
||||||
|
ORDER BY b
|
||||||
|
) AS d
|
||||||
|
FROM T;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES (1,1.0);
|
||||||
|
INSERT INTO T2 VALUES (1,-1.0),(2,9e999);
|
||||||
|
INSERT OR REPLACE INTO T1
|
||||||
|
SELECT * FROM T2;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE VIRTUAL TABLE T
|
||||||
|
USING fts5(a,b);
|
||||||
|
INSERT INTO T VALUES ('a','b c'), ('d','e f');
|
||||||
|
SELECT a,b FROM T WHERE T MATCH 'b';
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b'), ('c','d');
|
||||||
|
SELECT * FROM T WHERE a = REPLACE('a;',';','') AND b = 'b';
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,1.5,10.0), (2,-2.5,20.0), (3,-9e999,30.0);
|
||||||
|
SELECT * FROM T WHERE b < 2.0 ORDER BY b;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,1.5), (2,-7.25), (3,0.0);
|
||||||
|
SELECT a,b FROM T WHERE a >= 2 ORDER BY b;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
SELECT b FROM T WHERE ABS(c) > 5 AND ABS(d) > 5;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(20),
|
||||||
|
B VARCHAR(30),
|
||||||
|
C VARCHAR(30),
|
||||||
|
PRIMARY KEY (A, B),
|
||||||
|
UNIQUE (A, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', 'x');
|
||||||
|
INSERT INTO T VALUES ('a', 'q', 'y');
|
||||||
|
INSERT INTO T VALUES ('b', 'p', 'z');
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 'w');
|
||||||
|
INSERT INTO T VALUES ('d', 's', 'v');
|
||||||
|
SELECT A, COUNT(DISTINCT B) AS D FROM T GROUP BY A HAVING COUNT(DISTINCT B) >= 1;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15),
|
||||||
|
C BIGINT,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 4000);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 1700);
|
||||||
|
INSERT INTO T VALUES ('d', 'r', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('e', 's', 0);
|
||||||
|
SELECT A, C FROM T WHERE C > 1200 AND C < 9999999999 ORDER BY C;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(20),
|
||||||
|
B VARCHAR(10),
|
||||||
|
C INTEGER,
|
||||||
|
PRIMARY KEY (A, B)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 100);
|
||||||
|
INSERT INTO T VALUES ('b', 'r', 200);
|
||||||
|
INSERT INTO T VALUES ('c', 's', 300);
|
||||||
|
INSERT INTO T VALUES ('d', 't', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('b', 't', 50);
|
||||||
|
SELECT A, COUNT(*) AS D, SUM(C) AS E FROM T GROUP BY A HAVING COUNT(*) > 1;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(20),
|
||||||
|
B VARCHAR(10),
|
||||||
|
PRIMARY KEY (A, B)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p');
|
||||||
|
INSERT INTO T VALUES ('a', 'q');
|
||||||
|
INSERT INTO T VALUES ('b', 'q');
|
||||||
|
INSERT INTO T VALUES ('c', 'r');
|
||||||
|
INSERT INTO T VALUES ('b', 'r');
|
||||||
|
INSERT INTO T VALUES ('b', 't');
|
||||||
|
SELECT B, COUNT(DISTINCT A) AS D FROM T GROUP BY B ORDER BY D DESC, B ASC;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL UNIQUE
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
X VARCHAR(15) NOT NULL,
|
||||||
|
C BIGINT,
|
||||||
|
FOREIGN KEY (X) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('p', 'x');
|
||||||
|
INSERT INTO T1 VALUES ('q', 'y');
|
||||||
|
INSERT INTO T2 VALUES ('a', 'p', 9223372036854775807);
|
||||||
|
INSERT INTO T2 VALUES ('b', 'q', -9223372036854775808);
|
||||||
|
SELECT X, SUM(C) AS D, COUNT(*) AS E FROM T2 GROUP BY X;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) UNIQUE,
|
||||||
|
C INTEGER
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
X VARCHAR(20) PRIMARY KEY,
|
||||||
|
A VARCHAR(10) NOT NULL UNIQUE,
|
||||||
|
FOREIGN KEY (A) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T1 VALUES ('b', 'q', 2147483647);
|
||||||
|
INSERT INTO T2 VALUES ('m', 'a');
|
||||||
|
INSERT INTO T2 VALUES ('n', 'b');
|
||||||
|
SELECT T2.X, T1.B, T1.C FROM T2, T1 WHERE T2.A = T1.A AND T1.C >= 0;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) UNIQUE,
|
||||||
|
C BIGINT
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
X VARCHAR(20) PRIMARY KEY,
|
||||||
|
A VARCHAR(10),
|
||||||
|
FOREIGN KEY (A) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'p', 9999999999999);
|
||||||
|
INSERT INTO T1 VALUES ('b', 'q', -9999999999999);
|
||||||
|
INSERT INTO T2 VALUES ('m', 'a');
|
||||||
|
INSERT INTO T2 VALUES ('n', 'b');
|
||||||
|
SELECT T2.X, T1.C FROM T2 INNER JOIN T1 ON T2.A = T1.A WHERE T1.C > -1000000000000;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15),
|
||||||
|
C BIGINT NOT NULL,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', 3000);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 1700);
|
||||||
|
INSERT INTO T VALUES ('e', 'q', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('f', 'r', 0);
|
||||||
|
SELECT B, COUNT(*) AS D, SUM(C) AS E, AVG(C) AS F FROM T GROUP BY B HAVING SUM(C) > 0;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
X VARCHAR(10),
|
||||||
|
PRIMARY KEY (A, X),
|
||||||
|
UNIQUE (X)
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
Y VARCHAR(10) UNIQUE,
|
||||||
|
PRIMARY KEY (A, Y)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
SELECT A FROM T1 UNION ALL SELECT A FROM T2 ORDER BY A;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(20) PRIMARY KEY,
|
||||||
|
X VARCHAR(10) UNIQUE
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20) PRIMARY KEY,
|
||||||
|
Y VARCHAR(10) UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T1 VALUES ('c', 'o');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
INSERT INTO T2 VALUES ('c', 'l');
|
||||||
|
SELECT A FROM T1 INTERSECT SELECT A FROM T2;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
X VARCHAR(10),
|
||||||
|
PRIMARY KEY (A, X)
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
Y VARCHAR(10),
|
||||||
|
PRIMARY KEY (A, Y)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T1 VALUES ('c', 'o');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
SELECT A FROM T1 EXCEPT SELECT A FROM T2;
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
We reran the query multiple time, but the output does not change. It is a logic bug because the output is different
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (substring(-pi(), random() % if(1, NULL, 100)),'' || ('a'),1.25), (2,'b',-3.5), (3,'c',0.0);
|
||||||
|
SELECT * FROM T WHERE NOT c < 2.0 ORDER BY c;
|
||||||
|
ALTER TABLE T RENAME COLUMN c TO c_r522;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
6
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (substring(-pi(), random() % if(1, NULL, 100)),'' || ('a'),1.25), (2,'b',-3.5), (3,'c',0.0);
|
||||||
|
SELECT * FROM T WHERE NOT c < 2.0 ORDER BY c;
|
||||||
|
ALTER TABLE T RENAME COLUMN c TO c_r522;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
CREATE TABLE t(a, b, c);
|
||||||
|
INSERT INTO t VALUES (1,'a',1.25),(2,'b',-3.5),(3,'c',0.0);
|
||||||
|
|
||||||
|
ALTER TABLE t RENAME COLUMN c TO c_new;
|
||||||
|
INSERT INTO t SELECT * FROM t;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t;
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
We think that the patched version just ignores the third select statement, and therefore does not print out the second table.
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (if(ifnull(x'be83e7457352932f', round(2)), 1, 0, 1, 0, 1),2.0,10.5), (1,-3.5,20.25), (2,9e999,-1.0);
|
||||||
|
WITH d AS (SELECT a,SUM(b*c) AS e FROM T GROUP BY a) SELECT * FROM d;
|
||||||
|
BEGIN IMMEDIATE;
|
||||||
|
PRAGMA parser_trace = OFF;
|
||||||
|
PRAGMA empty_result_callbacks = TRUE;
|
||||||
|
CREATE TABLE t1(a INT, b INT);
|
||||||
|
CREATE TABLE t2(c INT, d INT);
|
||||||
|
CREATE TABLE t3(e TEXT, f TEXT);
|
||||||
|
INSERT INTO t1 VALUES('𝕊𝕢𝕝', 1);
|
||||||
|
INSERT INTO t2 VALUES(1, 2);
|
||||||
|
INSERT INTO t3 VALUES('abc', 'def');
|
||||||
|
SELECT * FROM t1, t2 LEFT JOIN t3 ON (t2.d=1) WHERE t2.c = +t1.a;
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2 ON (t2.c=+t1.a) LEFT JOIN t3 ON (t2.d IS NULL);
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT MIN(b) OVER (PARTITION BY b ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS) FROM t1;
|
||||||
|
COMMIT;
|
||||||
|
ALTER TABLE t2 RENAME TO /* PRAGMA count_changes = TRUE; */ t2_r1545;
|
||||||
|
INSERT OR FAIL INTO t3 VALUES ('x', 0);
|
||||||
|
ANALYZE;
|
||||||
|
DELETE FROM t1 WHERE rowid = 15 RETURNING *;
|
||||||
|
SELECT * FROM T AS a LEFT OUTER JOIN t1 AS b ON a.rowid = b.rowid;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
???|1|||abc|def
|
||||||
|
1|2
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|21.0
|
||||||
|
1|-70.875
|
||||||
|
2|-Inf
|
||||||
|
𝕊𝕢𝕝|1|||abc|def
|
||||||
|
1|2
|
||||||
|
1
|
||||||
|
|2.0|10.5|𝕊𝕢𝕝|1
|
||||||
|
1|-3.5|20.25||
|
||||||
|
2|Inf|-1.0||
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (if(ifnull(x'be83e7457352932f', round(2)), 1, 0, 1, 0, 1),2.0,10.5), (1,-3.5,20.25), (2,9e999,-1.0);
|
||||||
|
WITH d AS (SELECT a,SUM(b*c) AS e FROM T GROUP BY a) SELECT * FROM d;
|
||||||
|
BEGIN IMMEDIATE;
|
||||||
|
PRAGMA parser_trace = OFF;
|
||||||
|
PRAGMA empty_result_callbacks = TRUE;
|
||||||
|
CREATE TABLE t1(a INT, b INT);
|
||||||
|
CREATE TABLE t2(c INT, d INT);
|
||||||
|
CREATE TABLE t3(e TEXT, f TEXT);
|
||||||
|
INSERT INTO t1 VALUES('𝕊𝕢𝕝', 1);
|
||||||
|
INSERT INTO t2 VALUES(1, 2);
|
||||||
|
INSERT INTO t3 VALUES('abc', 'def');
|
||||||
|
SELECT * FROM t1, t2 LEFT JOIN t3 ON (t2.d=1) WHERE t2.c = +t1.a;
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2 ON (t2.c=+t1.a) LEFT JOIN t3 ON (t2.d IS NULL);
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT MIN(b) OVER (PARTITION BY b ORDER BY b RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS) FROM t1;
|
||||||
|
COMMIT;
|
||||||
|
ALTER TABLE t2 RENAME TO /* PRAGMA count_changes = TRUE; */ t2_r1545;
|
||||||
|
INSERT OR FAIL INTO t3 VALUES ('x', 0);
|
||||||
|
ANALYZE;
|
||||||
|
DELETE FROM t1 WHERE rowid = 15 RETURNING *;
|
||||||
|
SELECT * FROM T AS a LEFT OUTER JOIN t1 AS b ON a.rowid = b.rowid;
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
CREATE TABLE t1(a INT, b INT);
|
||||||
|
CREATE TABLE t2(c INT, d INT);
|
||||||
|
CREATE TABLE t3(e TEXT, f TEXT);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES('x',1);
|
||||||
|
INSERT INTO t2 VALUES(1,2);
|
||||||
|
|
||||||
|
SELECT *
|
||||||
|
FROM t1, t2
|
||||||
|
LEFT JOIN t3 ON (t2.d=1)
|
||||||
|
WHERE t2.c = +t1.a;
|
||||||
|
|
||||||
|
SELECT *
|
||||||
|
FROM t1
|
||||||
|
LEFT JOIN t2 ON (t2.c=+t1.a)
|
||||||
|
LEFT JOIN t3 ON (t2.d IS NULL);
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
We think this is a bug, where it is visible which features were disabled on the patched version, in this case especially with the ASCII flag
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
PRAGMA case_sensitive_like = ON;
|
||||||
|
-- typeof(NULL)
|
||||||
|
|
||||||
|
PRAGMA full_column_names = NO;
|
||||||
|
PRAGMA count_changes = 1;
|
||||||
|
.mode
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1 (c0, c1 REAL PRIMARY KEY);
|
||||||
|
INSERT INTO t1(c0, c1) VALUES (0, 1), (0, 0);
|
||||||
|
UPDATE t1 SET c0 = NULL;
|
||||||
|
UPDATE OR REPLACE t1 SET c1 = 1;
|
||||||
|
SELECT DISTINCT * FROM t1 WHERE NOT NOT ((t1.c0 IS NULL)) ;
|
||||||
|
PRAGMA integrity_check;
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_t1_1624 ON t1((c0 + 1)) WHERE +c0 > 0;
|
||||||
|
SELECT COUNT(c0) FROM t1;
|
||||||
|
SELECT SUM(c1) FROM t1;
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_t1_2854 ON t1(lower(c1));
|
||||||
|
ANALYZE t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
|
||||||
|
SELECT * FROM t1 WHERE c1 IN (SELECT c1 FROM t1 LIMIT 1);
|
||||||
|
VACUUM main;
|
||||||
|
DELETE FROM t1 WHERE c0 > (SELECT AVG(c0) FROM t1) RETURNING *;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
current output mode: list
|
||||||
|
2
|
||||||
|
2
|
||||||
|
2
|
||||||
|
|1.0
|
||||||
|
ok
|
||||||
|
0
|
||||||
|
1.0
|
||||||
|
1
|
||||||
|
|1.0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
current output mode: list --escape ascii
|
||||||
|
2
|
||||||
|
2
|
||||||
|
2
|
||||||
|
|1.0
|
||||||
|
ok
|
||||||
|
0
|
||||||
|
1.0
|
||||||
|
1
|
||||||
|
|1.0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-noheader
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
PRAGMA case_sensitive_like = ON;
|
||||||
|
-- typeof(NULL)
|
||||||
|
|
||||||
|
PRAGMA full_column_names = NO;
|
||||||
|
PRAGMA count_changes = 1;
|
||||||
|
.mode
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1 (c0, c1 REAL PRIMARY KEY);
|
||||||
|
INSERT INTO t1(c0, c1) VALUES (0, 1), (0, 0);
|
||||||
|
UPDATE t1 SET c0 = NULL;
|
||||||
|
UPDATE OR REPLACE t1 SET c1 = 1;
|
||||||
|
SELECT DISTINCT * FROM t1 WHERE NOT NOT ((t1.c0 IS NULL)) ;
|
||||||
|
PRAGMA integrity_check;
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_t1_1624 ON t1((c0 + 1)) WHERE +c0 > 0;
|
||||||
|
SELECT COUNT(c0) FROM t1;
|
||||||
|
SELECT SUM(c1) FROM t1;
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_t1_2854 ON t1(lower(c1));
|
||||||
|
ANALYZE t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
|
||||||
|
SELECT * FROM t1 WHERE c1 IN (SELECT c1 FROM t1 LIMIT 1);
|
||||||
|
VACUUM main;
|
||||||
|
DELETE FROM t1 WHERE c0 > (SELECT AVG(c0) FROM t1) RETURNING *;
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
CREATE TABLE t1(c0, c1 REAL PRIMARY KEY);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (0,1), (0,0);
|
||||||
|
|
||||||
|
UPDATE t1 SET c0=NULL;
|
||||||
|
UPDATE OR REPLACE t1 SET c1=1;
|
||||||
|
|
||||||
|
SELECT DISTINCT *
|
||||||
|
FROM t1
|
||||||
|
WHERE c0 IS NULL;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
We believe the query is already reduced. The issue for this bug is most likely the "BETWEEN" keyword
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE t0(c0);
|
||||||
|
INSERT INTO t0(c0) VALUES (NULL);
|
||||||
|
CREATE INDEX i0 ON t0(1) WHERE c0 NOT NULL;
|
||||||
|
SELECT 1 FROM t0 WHERE (t0.c0 IS FALSE) IS FALSE;
|
||||||
|
SELECT 1 FROM t0 WHERE (t0.c0 IS FALSE) BETWEEN FALSE AND TRUE;
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
CREATE TABLE t0(c0);
|
||||||
|
INSERT INTO t0(c0) VALUES (NULL);
|
||||||
|
CREATE INDEX i0 ON t0(1) WHERE c0 NOT NULL;
|
||||||
|
SELECT 1 FROM t0 WHERE (t0.c0 IS FALSE) IS FALSE;
|
||||||
|
SELECT 1 FROM t0 WHERE (t0.c0 IS FALSE) BETWEEN FALSE AND TRUE;
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
CREATE TABLE t0(c0);
|
||||||
|
INSERT INTO t0(c0) VALUES (NULL);
|
||||||
|
CREATE INDEX i0 ON t0(1) WHERE c0 NOT NULL;
|
||||||
|
SELECT 1 FROM t0 WHERE (t0.c0 IS FALSE) IS FALSE;
|
||||||
|
SELECT 1 FROM t0 WHERE (t0.c0 IS FALSE) BETWEEN FALSE AND TRUE;
|
||||||
@@ -0,0 +1,213 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
The queries added new columns with 123. Probably "INTERSECT" is wrong. It is a logic bug because the output is different
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ATTACH DATABASE ':memory:' AS aux12;
|
||||||
|
PRAGMA fullfsync;
|
||||||
|
PRAGMA automatic_index = ON;
|
||||||
|
PRAGMA wal_checkpoint;
|
||||||
|
.tables
|
||||||
|
CREATE TABLE t1(c1);
|
||||||
|
INSERT INTO t1 VALUES(if(2147483647, 12, 0, 12, 0, 12, 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;
|
||||||
|
SELECT * FROM t1, t2 WHERE c1=(SELECT 123 INTERSECT SELECT c2 FROM t4) AND c1=123;
|
||||||
|
SELECT * FROM t1, t2 WHERE c1=(SELECT 123 INTERSECT SELECT c2 FROM t5) AND c1=123;
|
||||||
|
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
ANALYZE;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES ('');
|
||||||
|
SELECT * FROM t1 WHERE c1 = (SELECT SUM(c1) FROM t1);
|
||||||
|
INSERT INTO t2 DEFAULT VALUES;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
ANALYZE;
|
||||||
|
WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<63) SELECT * FROM cnt;
|
||||||
|
ANALYZE;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t3;
|
||||||
|
ANALYZE t2;
|
||||||
|
ANALYZE;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_9829 AS SELECT c1 FROM t1;
|
||||||
|
WITH cte AS (SELECT c3, LEAD(c3) OVER (ORDER BY c3) AS nxt FROM t3) SELECT * FROM cte;
|
||||||
|
SELECT * FROM t1 NATURAL JOIN t1;
|
||||||
|
REINDEX;
|
||||||
|
PRAGMA foreign_keys = YES;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_6595 BEFORE UPDATE OF c1 ON t1 FOR EACH ROW BEGIN SELECT RAISE(IGNORE); END;
|
||||||
|
DETACH DATABASE aux12;
|
||||||
|
INSERT INTO t1 DEFAULT VALUES;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
0
|
||||||
|
0|-1|-1
|
||||||
|
0
|
||||||
|
1
|
||||||
|
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
|
||||||
|
3
|
||||||
|
66|77
|
||||||
|
77|123
|
||||||
|
123|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
0
|
||||||
|
0|-1|-1
|
||||||
|
123|123
|
||||||
|
123|123
|
||||||
|
5
|
||||||
|
6
|
||||||
|
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
|
||||||
|
3
|
||||||
|
66|77
|
||||||
|
77|123
|
||||||
|
123|
|
||||||
|
12
|
||||||
|
123
|
||||||
|
1234
|
||||||
|
abc
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
ATTACH DATABASE ':memory:' AS aux12;
|
||||||
|
PRAGMA fullfsync;
|
||||||
|
PRAGMA automatic_index = ON;
|
||||||
|
PRAGMA wal_checkpoint;
|
||||||
|
.tables
|
||||||
|
CREATE TABLE t1(c1);
|
||||||
|
INSERT INTO t1 VALUES(if(2147483647, 12, 0, 12, 0, 12, 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;
|
||||||
|
SELECT * FROM t1, t2 WHERE c1=(SELECT 123 INTERSECT SELECT c2 FROM t4) AND c1=123;
|
||||||
|
SELECT * FROM t1, t2 WHERE c1=(SELECT 123 INTERSECT SELECT c2 FROM t5) AND c1=123;
|
||||||
|
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
ANALYZE;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES ('');
|
||||||
|
SELECT * FROM t1 WHERE c1 = (SELECT SUM(c1) FROM t1);
|
||||||
|
INSERT INTO t2 DEFAULT VALUES;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
ANALYZE;
|
||||||
|
WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<63) SELECT * FROM cnt;
|
||||||
|
ANALYZE;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t3;
|
||||||
|
ANALYZE t2;
|
||||||
|
ANALYZE;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_9829 AS SELECT c1 FROM t1;
|
||||||
|
WITH cte AS (SELECT c3, LEAD(c3) OVER (ORDER BY c3) AS nxt FROM t3) SELECT * FROM cte;
|
||||||
|
SELECT * FROM t1 NATURAL JOIN t1;
|
||||||
|
REINDEX;
|
||||||
|
PRAGMA foreign_keys = YES;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_6595 BEFORE UPDATE OF c1 ON t1 FOR EACH ROW BEGIN SELECT RAISE(IGNORE); END;
|
||||||
|
DETACH DATABASE aux12;
|
||||||
|
INSERT INTO t1 DEFAULT VALUES;
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
CREATE TABLE t1(c1);
|
||||||
|
INSERT INTO t1 VALUES(123);
|
||||||
|
|
||||||
|
CREATE TABLE t2(c2);
|
||||||
|
INSERT INTO t2 VALUES(123);
|
||||||
|
|
||||||
|
CREATE TABLE t3(c3,c4);
|
||||||
|
INSERT INTO t3 VALUES(123,2);
|
||||||
|
|
||||||
|
CREATE VIEW v1 AS SELECT c3 FROM t3;
|
||||||
|
CREATE VIEW v2 AS SELECT c3 FROM t3 ORDER BY c4;
|
||||||
|
|
||||||
|
SELECT * FROM t1, t2
|
||||||
|
WHERE c1=(SELECT 123 INTERSECT SELECT c2 FROM v1);
|
||||||
|
|
||||||
|
SELECT * FROM t1, t2
|
||||||
|
WHERE c1=(SELECT 123 INTERSECT SELECT c2 FROM v2);
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
It is a logic bug because the output is different. We think the bug comes from the "SELECT" statement.
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SAVEPOINT sp2283;
|
||||||
|
SAVEPOINT sp8775;
|
||||||
|
CREATE TABLE t1(c, b, a, PRIMARY KEY(b, a)) WITHOUT ROWID;
|
||||||
|
INSERT INTO t1 VALUES(atan(-CAST(jsonb_array() AS BOOLEAN)), 2, 3), (4, 5, 6);
|
||||||
|
ALTER TABLE t1 DROP c;
|
||||||
|
CREATE TABLE main.x1234(a, b, c PRIMARY KEY) WITHOUT ROWID;
|
||||||
|
CREATE INDEX i1 ON x1234(b) WHERE ((a+5) % 10)==0;
|
||||||
|
|
||||||
|
ALTER TABLE x1234 ADD COLUMN extra_949 FLOAT DEFAULT NULL;
|
||||||
|
UPDATE t1 SET b = '' RETURNING *;
|
||||||
|
DELETE FROM t1 WHERE 1;
|
||||||
|
ALTER TABLE x1234 RENAME TO x1234_r6899;
|
||||||
|
WITH cte AS (SELECT * FROM t1 WHERE a = (SELECT MAX(a) FROM t1)) SELECT * FROM cte;
|
||||||
|
PRAGMA fullfsync;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r3;
|
||||||
|
RELEASE sp8775;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp2283;
|
||||||
|
RELEASE SAVEPOINT sp2283;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|3
|
||||||
|
|6
|
||||||
|
0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
SAVEPOINT sp2283;
|
||||||
|
SAVEPOINT sp8775;
|
||||||
|
CREATE TABLE t1(c, b, a, PRIMARY KEY(b, a)) WITHOUT ROWID;
|
||||||
|
INSERT INTO t1 VALUES(atan(-CAST(jsonb_array() AS BOOLEAN)), 2, 3), (4, 5, 6);
|
||||||
|
ALTER TABLE t1 DROP c;
|
||||||
|
CREATE TABLE main.x1234(a, b, c PRIMARY KEY) WITHOUT ROWID;
|
||||||
|
CREATE INDEX i1 ON x1234(b) WHERE ((a+5) % 10)==0;
|
||||||
|
|
||||||
|
ALTER TABLE x1234 ADD COLUMN extra_949 FLOAT DEFAULT NULL;
|
||||||
|
UPDATE t1 SET b = '' RETURNING *;
|
||||||
|
DELETE FROM t1 WHERE 1;
|
||||||
|
ALTER TABLE x1234 RENAME TO x1234_r6899;
|
||||||
|
WITH cte AS (SELECT * FROM t1 WHERE a = (SELECT MAX(a) FROM t1)) SELECT * FROM cte;
|
||||||
|
PRAGMA fullfsync;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r3;
|
||||||
|
RELEASE sp8775;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp2283;
|
||||||
|
RELEASE SAVEPOINT sp2283;
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
CREATE TABLE t1(c, b, a, PRIMARY KEY(b, a)) WITHOUT ROWID;
|
||||||
|
INSERT INTO t1 VALUES(atan(-CAST(jsonb_array() AS BOOLEAN)), 2, 3), (4, 5, 6);
|
||||||
|
ALTER TABLE t1 DROP c;
|
||||||
|
CREATE TABLE main.x1234(a, b, c PRIMARY KEY) WITHOUT ROWID;
|
||||||
|
CREATE INDEX i1 ON x1234(b) WHERE ((a+5) % 10)==0;
|
||||||
|
|
||||||
|
ALTER TABLE x1234 ADD COLUMN extra_949 FLOAT DEFAULT NULL;
|
||||||
|
UPDATE t1 SET b = '' RETURNING *;
|
||||||
|
DELETE FROM t1 WHERE 1;
|
||||||
|
ALTER TABLE x1234 RENAME TO x1234_r6899;
|
||||||
|
WITH cte AS (SELECT * FROM t1 WHERE a = (SELECT MAX(a) FROM t1)) SELECT * FROM cte;
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
It seems that the patched version does not support json. It is a logic bug because the output is different
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
X VARCHAR(10),
|
||||||
|
PRIMARY KEY (A, X),
|
||||||
|
UNIQUE (X)
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
Y VARCHAR(10) UNIQUE,
|
||||||
|
PRIMARY KEY (A, Y)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
SELECT A FROM T1 UNION ALL SELECT A FROM T2 ORDER BY A;
|
||||||
|
PRAGMA trusted_schema = TRUE;
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (concat(json_type(1, '$'), 2, 3),1.5), (2,-2.5), (3,0.0);
|
||||||
|
CREATE INDEX c
|
||||||
|
ON T(b);
|
||||||
|
SELECT * FROM T WHERE b >= -2.5 OR b < 2.0;
|
||||||
|
DROP TABLE t0;
|
||||||
|
INSERT INTO T DEFAULT VALUES;
|
||||||
|
PRAGMA full_column_names = TRUE;
|
||||||
|
WITH cte AS (SELECT * FROM T WHERE b = (SELECT MAX(b) FROM T)) SELECT * FROM cte;
|
||||||
|
PRAGMA recursive_triggers = ON;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
a
|
||||||
|
b
|
||||||
|
b
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
a
|
||||||
|
b
|
||||||
|
b
|
||||||
|
2|-2.5
|
||||||
|
3|0.0
|
||||||
|
integer23|1.5
|
||||||
|
integer23|1.5
|
||||||
|
4
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
X VARCHAR(10),
|
||||||
|
PRIMARY KEY (A, X),
|
||||||
|
UNIQUE (X)
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
Y VARCHAR(10) UNIQUE,
|
||||||
|
PRIMARY KEY (A, Y)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
SELECT A FROM T1 UNION ALL SELECT A FROM T2 ORDER BY A;
|
||||||
|
PRAGMA trusted_schema = TRUE;
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (concat(json_type(1, '$'), 2, 3),1.5), (2,-2.5), (3,0.0);
|
||||||
|
CREATE INDEX c
|
||||||
|
ON T(b);
|
||||||
|
SELECT * FROM T WHERE b >= -2.5 OR b < 2.0;
|
||||||
|
DROP TABLE t0;
|
||||||
|
INSERT INTO T DEFAULT VALUES;
|
||||||
|
PRAGMA full_column_names = TRUE;
|
||||||
|
WITH cte AS (SELECT * FROM T WHERE b = (SELECT MAX(b) FROM T)) SELECT * FROM cte;
|
||||||
|
PRAGMA recursive_triggers = ON;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
CREATE TABLE t(a INTEGER, b REAL);
|
||||||
|
INSERT INTO t VALUES (1,1.5),(2,-2.5),(3,0.0);
|
||||||
|
|
||||||
|
CREATE INDEX idx ON t(b);
|
||||||
|
|
||||||
|
SELECT * FROM t
|
||||||
|
WHERE b >= -2.5 OR b < 2.0;
|
||||||
|
|
||||||
|
INSERT INTO t DEFAULT VALUES;
|
||||||
|
|
||||||
|
WITH cte AS (
|
||||||
|
SELECT * FROM t WHERE b=(SELECT MAX(b) FROM t)
|
||||||
|
)
|
||||||
|
SELECT * FROM cte;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t;
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
We think the "INTERSECT SELECT" statement is the issue. It is a logic bug because the output is different
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
.once log.txt
|
||||||
|
PRAGMA parser_trace = OFF;
|
||||||
|
PRAGMA wal_checkpoint('RESTART');
|
||||||
|
PRAGMA trusted_schema;
|
||||||
|
.imposter off
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(20) PRIMARY KEY,
|
||||||
|
X VARCHAR(10) UNIQUE
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20) PRIMARY KEY,
|
||||||
|
Y VARCHAR(10) UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T1 VALUES ('c', 'o');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
INSERT INTO T2 VALUES ('c', 'l');
|
||||||
|
SELECT A FROM T1 INTERSECT SELECT A FROM T2;
|
||||||
|
ALTER TABLE T2 ADD COLUMN extra_8207 CHAR(10);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
0|-1|-1
|
||||||
|
1
|
||||||
|
b
|
||||||
|
c
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
0|-1|-1
|
||||||
|
0
|
||||||
|
b
|
||||||
|
c
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
.once log.txt
|
||||||
|
PRAGMA parser_trace = OFF;
|
||||||
|
PRAGMA wal_checkpoint('RESTART');
|
||||||
|
PRAGMA trusted_schema;
|
||||||
|
.imposter off
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(20) PRIMARY KEY,
|
||||||
|
X VARCHAR(10) UNIQUE
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20) PRIMARY KEY,
|
||||||
|
Y VARCHAR(10) UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T1 VALUES ('c', 'o');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
INSERT INTO T2 VALUES ('c', 'l');
|
||||||
|
SELECT A FROM T1 INTERSECT SELECT A FROM T2;
|
||||||
|
ALTER TABLE T2 ADD COLUMN extra_8207 CHAR(10);
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
CREATE TABLE t1(a PRIMARY KEY, x UNIQUE);
|
||||||
|
CREATE TABLE t2(a PRIMARY KEY, y UNIQUE);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES ('a','m'),('b','n'),('c','o');
|
||||||
|
INSERT INTO t2 VALUES ('b','k'),('c','l');
|
||||||
|
|
||||||
|
SELECT a FROM t1
|
||||||
|
INTERSECT
|
||||||
|
SELECT a FROM t2;
|
||||||
|
|
||||||
|
ALTER TABLE t2 ADD COLUMN extra_col;
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
It seems that the markdown flag is supported, but the "COALESCE" is buggy. It is a logic bug because the output is different
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b',concat_ws('|', 'a', NULL, 'b')), ('a','c',-1.0), ('b','d',0.0);
|
||||||
|
SELECT
|
||||||
|
COALESCE(a,'e') AS d,
|
||||||
|
COALESCE(b,'f') AS e,
|
||||||
|
SUM(c) AS f
|
||||||
|
FROM T
|
||||||
|
GROUP BY a,b;
|
||||||
|
WITH cte(a, b, c) AS (SELECT b, b, b FROM T) SELECT a, b, c FROM cte;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
SELECT RANK() OVER (ORDER BY c RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM T;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_9129 AS SELECT b FROM T;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
| COUNT(*) |
|
||||||
|
|----------|
|
||||||
|
| 0 |
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
| d | e | f |
|
||||||
|
|---|---|------|
|
||||||
|
| a | b | 0.0 |
|
||||||
|
| a | c | -1.0 |
|
||||||
|
| b | d | 0.0 |
|
||||||
|
| a | b | c |
|
||||||
|
|---|---|---|
|
||||||
|
| b | b | b |
|
||||||
|
| c | c | c |
|
||||||
|
| d | d | d |
|
||||||
|
| COUNT(*) |
|
||||||
|
|----------|
|
||||||
|
| 3 |
|
||||||
|
| RANK() OVER (ORDER BY c RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) |
|
||||||
|
|--------------------------------------------------------------------|
|
||||||
|
| 1 |
|
||||||
|
| 2 |
|
||||||
|
| 3 |
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-markdown
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b',concat_ws('|', 'a', NULL, 'b')), ('a','c',-1.0), ('b','d',0.0);
|
||||||
|
SELECT
|
||||||
|
COALESCE(a,'e') AS d,
|
||||||
|
COALESCE(b,'f') AS e,
|
||||||
|
SUM(c) AS f
|
||||||
|
FROM T
|
||||||
|
GROUP BY a,b;
|
||||||
|
WITH cte(a, b, c) AS (SELECT b, b, b FROM T) SELECT a, b, c FROM cte;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
SELECT RANK() OVER (ORDER BY c RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM T;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_9129 AS SELECT b FROM T;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
We think the "COLLATE" keyword is causing bugs, it is a logic bug because the output is different
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
CREATE TABLE t0(c0 REAL, c1 REAL GENERATED ALWAYS AS (c0));
|
||||||
|
INSERT INTO t0(c0) VALUES (-(-(unhex(1))));
|
||||||
|
SELECT * FROM t0 GROUP BY c0;
|
||||||
|
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;
|
||||||
|
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,1.5), (2,-7.25), (3,0.0);
|
||||||
|
SELECT a,b FROM T WHERE a >= 2 ORDER BY b;
|
||||||
|
ALTER TABLE t1 ADD COLUMN extra_7155 MEDIUMINT COLLATE RTRIM;
|
||||||
|
PRAGMA cache_spill = FALSE;
|
||||||
|
INSERT INTO t0 DEFAULT VALUES;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1
|
||||||
|
|
|
||||||
|
2|-7.25
|
||||||
|
3|0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1
|
||||||
|
|
|
||||||
|
|
|
||||||
|
2|-7.25
|
||||||
|
3|0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
CREATE TABLE t0(c0 REAL, c1 REAL GENERATED ALWAYS AS (c0));
|
||||||
|
INSERT INTO t0(c0) VALUES (-(-(unhex(1))));
|
||||||
|
SELECT * FROM t0 GROUP BY c0;
|
||||||
|
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;
|
||||||
|
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,1.5), (2,-7.25), (3,0.0);
|
||||||
|
SELECT a,b FROM T WHERE a >= 2 ORDER BY b;
|
||||||
|
ALTER TABLE t1 ADD COLUMN extra_7155 MEDIUMINT COLLATE RTRIM;
|
||||||
|
PRAGMA cache_spill = FALSE;
|
||||||
|
INSERT INTO t0 DEFAULT VALUES;
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
CREATE TABLE t0(
|
||||||
|
c0 REAL,
|
||||||
|
c1 REAL GENERATED ALWAYS AS (c0)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO t0(c0) VALUES (1);
|
||||||
|
|
||||||
|
SELECT * FROM t0 GROUP BY c0;
|
||||||
|
|
||||||
|
INSERT INTO t0 DEFAULT VALUES;
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
We believe that some features of the patched version have been disabled.
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA foreign_keys = FALSE;
|
||||||
|
-- sign(1)
|
||||||
|
|
||||||
|
PRAGMA cell_size_check = 3370811959573763011;
|
||||||
|
PRAGMA page_size;
|
||||||
|
.recover
|
||||||
|
CREATE TABLE map_integer /**/ (id INT, name);
|
||||||
|
INSERT INTO map_integer VALUES(1,'a');
|
||||||
|
CREATE TABLE [map_text] (id TEXT, name);
|
||||||
|
INSERT INTO map_text VALUES('4','e');
|
||||||
|
CREATE TABLE data (id TEXT, name);
|
||||||
|
INSERT INTO data VALUES(1,'abc');
|
||||||
|
INSERT INTO data VALUES('4','xyz');
|
||||||
|
CREATE VIEW idmap as SELECT * FROM map_integer UNION SELECT * FROM map_text;
|
||||||
|
CREATE TABLE mzed AS SELECT * FROM idmap;
|
||||||
|
PRAGMA automatic_index=ON;
|
||||||
|
SELECT * FROM data JOIN idmap USING(id);
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_map_integer_924 AS SELECT id FROM map_integer;
|
||||||
|
SELECT NTILE(4) OVER (ORDER BY name GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM map_integer;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_map_integer_8760 AS SELECT name FROM map_integer;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b'), ('c','d');
|
||||||
|
SELECT * FROM T WHERE a = REPLACE('a;',';','') AND b = 'b';
|
||||||
|
WITH cte(x) AS (SELECT id FROM map_integer) SELECT x FROM cte;
|
||||||
|
REINDEX;
|
||||||
|
ALTER TABLE map_text RENAME COLUMN name TO name_r1633;
|
||||||
|
WITH cte AS (SELECT name, ROW_NUMBER() OVER (ORDER BY name) AS rn FROM data) SELECT * FROM cte WHERE rn <= 5;
|
||||||
|
ALTER TABLE data RENAME TO data_r811;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1
|
||||||
|
4096
|
||||||
|
PRAGMA foreign_keys=OFF;
|
||||||
|
BEGIN;
|
||||||
|
PRAGMA writable_schema = on;
|
||||||
|
PRAGMA writable_schema = off;
|
||||||
|
COMMIT;
|
||||||
|
1|abc|a
|
||||||
|
1
|
||||||
|
a|b
|
||||||
|
1
|
||||||
|
abc|1
|
||||||
|
xyz|2
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1
|
||||||
|
4096
|
||||||
|
.dbconfig defensive off
|
||||||
|
BEGIN;
|
||||||
|
PRAGMA writable_schema = on;
|
||||||
|
PRAGMA foreign_keys = off;
|
||||||
|
PRAGMA encoding = 'UTF-8';
|
||||||
|
PRAGMA page_size = '4096';
|
||||||
|
PRAGMA auto_vacuum = '0';
|
||||||
|
PRAGMA user_version = '0';
|
||||||
|
PRAGMA application_id = '0';
|
||||||
|
PRAGMA writable_schema = off;
|
||||||
|
COMMIT;
|
||||||
|
4|xyz|e
|
||||||
|
1
|
||||||
|
a|b
|
||||||
|
1
|
||||||
|
abc|1
|
||||||
|
xyz|2
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA foreign_keys = FALSE;
|
||||||
|
-- sign(1)
|
||||||
|
|
||||||
|
PRAGMA cell_size_check = 3370811959573763011;
|
||||||
|
PRAGMA page_size;
|
||||||
|
.recover
|
||||||
|
CREATE TABLE map_integer /**/ (id INT, name);
|
||||||
|
INSERT INTO map_integer VALUES(1,'a');
|
||||||
|
CREATE TABLE [map_text] (id TEXT, name);
|
||||||
|
INSERT INTO map_text VALUES('4','e');
|
||||||
|
CREATE TABLE data (id TEXT, name);
|
||||||
|
INSERT INTO data VALUES(1,'abc');
|
||||||
|
INSERT INTO data VALUES('4','xyz');
|
||||||
|
CREATE VIEW idmap as SELECT * FROM map_integer UNION SELECT * FROM map_text;
|
||||||
|
CREATE TABLE mzed AS SELECT * FROM idmap;
|
||||||
|
PRAGMA automatic_index=ON;
|
||||||
|
SELECT * FROM data JOIN idmap USING(id);
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_map_integer_924 AS SELECT id FROM map_integer;
|
||||||
|
SELECT NTILE(4) OVER (ORDER BY name GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM map_integer;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_map_integer_8760 AS SELECT name FROM map_integer;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b'), ('c','d');
|
||||||
|
SELECT * FROM T WHERE a = REPLACE('a;',';','') AND b = 'b';
|
||||||
|
WITH cte(x) AS (SELECT id FROM map_integer) SELECT x FROM cte;
|
||||||
|
REINDEX;
|
||||||
|
ALTER TABLE map_text RENAME COLUMN name TO name_r1633;
|
||||||
|
WITH cte AS (SELECT name, ROW_NUMBER() OVER (ORDER BY name) AS rn FROM data) SELECT * FROM cte WHERE rn <= 5;
|
||||||
|
ALTER TABLE data RENAME TO data_r811;
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
CREATE TABLE map_integer(id INT, name);
|
||||||
|
INSERT INTO map_integer VALUES(1,'a');
|
||||||
|
|
||||||
|
CREATE TABLE map_text(id TEXT, name);
|
||||||
|
INSERT INTO map_text VALUES('4','e');
|
||||||
|
|
||||||
|
CREATE TABLE data(id TEXT, name);
|
||||||
|
INSERT INTO data VALUES(1,'abc');
|
||||||
|
INSERT INTO data VALUES('4','xyz');
|
||||||
|
|
||||||
|
CREATE VIEW idmap AS
|
||||||
|
SELECT * FROM map_integer
|
||||||
|
UNION
|
||||||
|
SELECT * FROM map_text;
|
||||||
|
|
||||||
|
SELECT * FROM data
|
||||||
|
JOIN idmap USING(id);
|
||||||
|
|
||||||
|
ALTER TABLE map_text
|
||||||
|
RENAME COLUMN name TO name2;
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->
|
||||||
|
We beliebe "timediff" causes the bug. It is a logic bug because the output is different
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE t1(a, b);
|
||||||
|
CREATE /* CHAR(10) */ INDEX i1 ON t1(a);
|
||||||
|
INSERT INTO t1 VALUES('aaa', tanh(timediff(sign(0), 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');
|
||||||
|
SELECT a FROM t1 WHERE rowid IN (1, 3);
|
||||||
|
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_t1_9614 ON t1(a COLLATE NOCASE) WHERE a IS NOT NULL;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3
|
||||||
|
ddd
|
||||||
|
eee
|
||||||
|
ddd
|
||||||
|
ccc
|
||||||
|
eee
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3
|
||||||
|
aaa
|
||||||
|
ccc
|
||||||
|
aaa
|
||||||
|
ddd
|
||||||
|
ccc
|
||||||
|
eee
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
CREATE TABLE t1(a, b);
|
||||||
|
CREATE /* CHAR(10) */ INDEX i1 ON t1(a);
|
||||||
|
INSERT INTO t1 VALUES('aaa', tanh(timediff(sign(0), 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');
|
||||||
|
SELECT a FROM t1 WHERE rowid IN (1, 3);
|
||||||
|
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_t1_9614 ON t1(a COLLATE NOCASE) WHERE a IS NOT NULL;
|
||||||
|
SELECT * FROM t1;
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
CREATE TABLE t1(a, b);
|
||||||
|
|
||||||
|
CREATE INDEX i1 ON t1(a);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES('aaa',1);
|
||||||
|
INSERT INTO t1 VALUES('ccc',3);
|
||||||
|
|
||||||
|
SELECT b FROM t1
|
||||||
|
WHERE a IN ('aaa','ccc');
|
||||||
|
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
|
||||||
|
CREATE INDEX idx2
|
||||||
|
ON t1(a COLLATE NOCASE)
|
||||||
|
WHERE a IS NOT NULL;
|
||||||
|
|
||||||
|
SELECT * FROM t1;
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
cd /fuzzer
|
||||||
|
exec python3 /fuzzer/fuzzer.py "$@"
|
||||||
+317
@@ -0,0 +1,317 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
from concurrent.futures import FIRST_COMPLETED, Future, ThreadPoolExecutor, wait
|
||||||
|
import datetime
|
||||||
|
import multiprocessing
|
||||||
|
import os
|
||||||
|
import random
|
||||||
|
import signal
|
||||||
|
import time
|
||||||
|
|
||||||
|
from mutator import mutate
|
||||||
|
from mutator_extra_statements import (
|
||||||
|
mut_prepend_random_meta_command,
|
||||||
|
mut_prepend_random_pragma,
|
||||||
|
)
|
||||||
|
from oracle import check
|
||||||
|
from runner import reset_coverage
|
||||||
|
from stats import create_stats_report
|
||||||
|
|
||||||
|
|
||||||
|
class _MutateTimeout(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def _timeout_handler(signum, frame):
|
||||||
|
raise _MutateTimeout()
|
||||||
|
|
||||||
|
|
||||||
|
_HAS_SIGALRM = hasattr(signal, 'SIGALRM') and hasattr(signal, 'setitimer')
|
||||||
|
|
||||||
|
if _HAS_SIGALRM:
|
||||||
|
signal.signal(signal.SIGALRM, _timeout_handler)
|
||||||
|
|
||||||
|
|
||||||
|
def mutate_safe(query: str, timeout: float = 0.5) -> str:
|
||||||
|
"""
|
||||||
|
Runs mutate(query) with a real, in-process timeout (no threads).
|
||||||
|
Returns the mutated query if successful, or the original on timeout/error.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not _HAS_SIGALRM:
|
||||||
|
try:
|
||||||
|
return mutate(query)
|
||||||
|
except Exception:
|
||||||
|
return query
|
||||||
|
|
||||||
|
signal.setitimer(signal.ITIMER_REAL, timeout)
|
||||||
|
try:
|
||||||
|
result = mutate(query)
|
||||||
|
except _MutateTimeout:
|
||||||
|
return query
|
||||||
|
except Exception:
|
||||||
|
return query
|
||||||
|
finally:
|
||||||
|
signal.setitimer(signal.ITIMER_REAL, 0)
|
||||||
|
|
||||||
|
return result if isinstance(result, str) else query
|
||||||
|
|
||||||
|
|
||||||
|
def _load_seeds(seeds_dir: str) -> list[str]:
|
||||||
|
"""Load and deduplicate seeds from disk + additional.sql"""
|
||||||
|
seeds: list[str] = []
|
||||||
|
seen: set[str] = set()
|
||||||
|
|
||||||
|
if os.path.isdir(seeds_dir):
|
||||||
|
for fname in os.listdir(seeds_dir):
|
||||||
|
try:
|
||||||
|
with open(os.path.join(seeds_dir, fname), 'r', encoding='latin-1') as f:
|
||||||
|
content = f.read()
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
if content and content not in seen:
|
||||||
|
seen.add(content)
|
||||||
|
seeds.append(content)
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open("additional.sql", "r", encoding='latin-1') as fh:
|
||||||
|
raw = fh.read()
|
||||||
|
for q in raw.split('---'):
|
||||||
|
q = q.strip()
|
||||||
|
if q and q not in seen:
|
||||||
|
seen.add(q)
|
||||||
|
seeds.append(q)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return seeds
|
||||||
|
|
||||||
|
|
||||||
|
def _load_seeds_disk_only(seeds_dir: str) -> list[str]:
|
||||||
|
"""Load seeds from disk"""
|
||||||
|
seeds: list[str] = []
|
||||||
|
|
||||||
|
if os.path.isdir(seeds_dir):
|
||||||
|
for fname in os.listdir(seeds_dir):
|
||||||
|
try:
|
||||||
|
with open(os.path.join(seeds_dir, fname), 'r', encoding='latin-1') as f:
|
||||||
|
content = f.read()
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
seeds.append(content)
|
||||||
|
|
||||||
|
return seeds
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
|
||||||
|
parser.add_argument('--seeds',
|
||||||
|
default='/home/test/seeds',
|
||||||
|
help='Directory with seed .sql files')
|
||||||
|
|
||||||
|
parser.add_argument('--buggy',
|
||||||
|
default='/home/test/sqlite3-src/build/sqlite3',
|
||||||
|
help='Buggy SQLite binary')
|
||||||
|
|
||||||
|
parser.add_argument('--reference',
|
||||||
|
default='/usr/bin/sqlite3',
|
||||||
|
help='Reference SQLite binary')
|
||||||
|
|
||||||
|
parser.add_argument('--count',
|
||||||
|
type=int,
|
||||||
|
default=10000,
|
||||||
|
help='Number of queries to generate')
|
||||||
|
|
||||||
|
parser.add_argument('--mutate-timeout',
|
||||||
|
type=float,
|
||||||
|
default=0.5,
|
||||||
|
help='Per-mutation timeout in seconds (default 0.5)')
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--max-query-length',
|
||||||
|
type=int,
|
||||||
|
default=100000,
|
||||||
|
help='Hard cap on a single query in characters (default 100000). Queries '
|
||||||
|
'that grow past this after mutation are reset back to the original '
|
||||||
|
'seed for that iteration.')
|
||||||
|
|
||||||
|
parser.add_argument('--workers',
|
||||||
|
type=int,
|
||||||
|
default=multiprocessing.cpu_count(),
|
||||||
|
help="""Number of parallel check() workers.""")
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--validate-seeds',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help=
|
||||||
|
'Run the upfront seed-validation pass (~2N subprocess calls before the main loop). Off by default.'
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--run-baseline',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help=
|
||||||
|
'Run the seeds inside /home/test/seeds only, without applying any mutation.'
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# # #################################################################################################################
|
||||||
|
|
||||||
|
if args.run_baseline:
|
||||||
|
|
||||||
|
reset_coverage()
|
||||||
|
|
||||||
|
seeds = _load_seeds_disk_only(args.seeds)
|
||||||
|
|
||||||
|
queries: list[str] = list(seeds) # pyright: ignore[reportRedeclaration]
|
||||||
|
|
||||||
|
print(f'{datetime.datetime.now()}: [INFO] Loaded {len(queries)} seeds.')
|
||||||
|
print(
|
||||||
|
f'{datetime.datetime.now()}: [INFO] Running {len(queries)} iterations...')
|
||||||
|
|
||||||
|
invalid_queries = 0
|
||||||
|
|
||||||
|
loop_start = time.perf_counter()
|
||||||
|
|
||||||
|
for query in queries:
|
||||||
|
is_ok = check(args.buggy, args.reference, query, False)
|
||||||
|
if is_ok == -1:
|
||||||
|
invalid_queries += 1
|
||||||
|
|
||||||
|
loop_end = time.perf_counter()
|
||||||
|
|
||||||
|
loop_elapsed = loop_end - loop_start
|
||||||
|
|
||||||
|
valid_queries = len(queries) - invalid_queries
|
||||||
|
|
||||||
|
print()
|
||||||
|
create_stats_report(valid_queries,
|
||||||
|
invalid_queries,
|
||||||
|
queries,
|
||||||
|
qpm_gen=-1,
|
||||||
|
qpm_full=-1,
|
||||||
|
wall_seconds=loop_elapsed)
|
||||||
|
else:
|
||||||
|
|
||||||
|
seeds = _load_seeds(args.seeds)
|
||||||
|
|
||||||
|
queries: list[str] = list(seeds)
|
||||||
|
|
||||||
|
if args.validate_seeds:
|
||||||
|
print(f'{datetime.datetime.now()}: [INFO] Validating seeds...')
|
||||||
|
queries = []
|
||||||
|
for seed in seeds:
|
||||||
|
if check(args.buggy, args.reference, seed, save_bugs=False) != -1:
|
||||||
|
queries.append(seed)
|
||||||
|
|
||||||
|
variants: list[str] = []
|
||||||
|
for seed in seeds:
|
||||||
|
modified = mut_prepend_random_pragma(
|
||||||
|
mut_prepend_random_pragma(
|
||||||
|
mut_prepend_random_pragma(mut_prepend_random_meta_command(seed))))
|
||||||
|
variants.append(modified)
|
||||||
|
queries.extend(variants)
|
||||||
|
|
||||||
|
print(f'{datetime.datetime.now()}: [INFO] Loaded {len(queries)} seeds.')
|
||||||
|
print(
|
||||||
|
f'{datetime.datetime.now()}: [INFO] Running {args.count} iterations with {args.workers} workers...'
|
||||||
|
)
|
||||||
|
|
||||||
|
reset_coverage()
|
||||||
|
invalid_queries = 0
|
||||||
|
actually_executed_queries: list[str] = []
|
||||||
|
|
||||||
|
count = int(args.count)
|
||||||
|
phase1_end = min(300, count)
|
||||||
|
phase2_end = max(phase1_end, count - 1000)
|
||||||
|
|
||||||
|
gen_time_total = 0.0
|
||||||
|
|
||||||
|
loop_start = time.perf_counter()
|
||||||
|
|
||||||
|
pending: dict[Future[int], tuple[int, str, str, bool]] = {}
|
||||||
|
pool = ThreadPoolExecutor(max_workers=args.workers)
|
||||||
|
|
||||||
|
submitted = 0
|
||||||
|
|
||||||
|
def _submit_next():
|
||||||
|
"""Mutate one query and submit a check() to the worker pool"""
|
||||||
|
nonlocal gen_time_total, submitted
|
||||||
|
idx = random.randint(0, len(queries) - 1)
|
||||||
|
original = queries[idx]
|
||||||
|
with_flag = (submitted < phase1_end) or (submitted >= phase2_end)
|
||||||
|
|
||||||
|
start = time.perf_counter()
|
||||||
|
query = mutate_safe(original, timeout=args.mutate_timeout)
|
||||||
|
if len(query) > args.max_query_length:
|
||||||
|
query = original
|
||||||
|
end = time.perf_counter()
|
||||||
|
gen_time_total += end - start
|
||||||
|
|
||||||
|
fut = pool.submit(check, args.buggy, args.reference, query, with_flag)
|
||||||
|
pending[fut] = (idx, query, original, with_flag)
|
||||||
|
submitted += 1
|
||||||
|
|
||||||
|
def _drain_one(fut: Future):
|
||||||
|
"""Collect one completed future and update state"""
|
||||||
|
nonlocal invalid_queries
|
||||||
|
idx, query, original, _with_flag = pending.pop(fut)
|
||||||
|
try:
|
||||||
|
is_ok = fut.result()
|
||||||
|
except Exception:
|
||||||
|
is_ok = -1
|
||||||
|
actually_executed_queries.append(query)
|
||||||
|
if is_ok == -1:
|
||||||
|
invalid_queries += 1
|
||||||
|
elif query != original and idx < len(
|
||||||
|
queries) and queries[idx] == original:
|
||||||
|
queries[idx] = query
|
||||||
|
|
||||||
|
n = len(actually_executed_queries)
|
||||||
|
if n % 100 == 0:
|
||||||
|
print(f'{datetime.datetime.now()}: [INFO] Executed {n} queries...')
|
||||||
|
|
||||||
|
for _ in range(min(int(args.workers), count)):
|
||||||
|
_submit_next()
|
||||||
|
|
||||||
|
while len(actually_executed_queries) < count:
|
||||||
|
done, _ = wait(pending.keys(), return_when=FIRST_COMPLETED)
|
||||||
|
for fut in done:
|
||||||
|
_drain_one(fut)
|
||||||
|
if submitted < count:
|
||||||
|
_submit_next()
|
||||||
|
if len(actually_executed_queries) >= count:
|
||||||
|
break
|
||||||
|
|
||||||
|
pool.shutdown(wait=True)
|
||||||
|
|
||||||
|
loop_end = time.perf_counter()
|
||||||
|
loop_elapsed = loop_end - loop_start
|
||||||
|
|
||||||
|
valid_queries = len(actually_executed_queries) - invalid_queries
|
||||||
|
|
||||||
|
qpm_gen = (count / gen_time_total * 60.0) if gen_time_total > 0 else 0.0
|
||||||
|
qpm_full = (count / loop_elapsed * 60.0) if loop_elapsed > 0 else 0.0
|
||||||
|
|
||||||
|
print()
|
||||||
|
print(f'Wall clock: {loop_elapsed:.2f}s for {count} iterations')
|
||||||
|
print(f'Generation-only time: {gen_time_total:.2f}s '
|
||||||
|
f'(≈ {gen_time_total / count * 1000:.2f} ms/query)')
|
||||||
|
print(f'Throughput (generated): {qpm_gen:.1f} queries/min')
|
||||||
|
print(f'Throughput (generated + executed): {qpm_full:.1f} queries/min')
|
||||||
|
|
||||||
|
create_stats_report(valid_queries,
|
||||||
|
invalid_queries,
|
||||||
|
actually_executed_queries,
|
||||||
|
qpm_gen=qpm_gen,
|
||||||
|
qpm_full=qpm_full,
|
||||||
|
wall_seconds=loop_elapsed)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
BIN
Binary file not shown.
@@ -0,0 +1,120 @@
|
|||||||
|
import random
|
||||||
|
from typing import Callable
|
||||||
|
|
||||||
|
import mutator_corpus_splicing
|
||||||
|
import mutator_equivalent_rewrites
|
||||||
|
import mutator_extra_statements
|
||||||
|
import mutator_operators
|
||||||
|
import mutator_values
|
||||||
|
|
||||||
|
_MUTATORS_WEIGHTED: list[tuple[Callable[[str], str], float]] = [
|
||||||
|
# # ##############################################################################################
|
||||||
|
(mutator_values.mut_replace_num_with_edge_int, 3),
|
||||||
|
(mutator_values.mut_replace_num_with_random_int, 2),
|
||||||
|
(mutator_values.mut_replace_num_with_edge_float, 2),
|
||||||
|
(mutator_values.mut_replace_num_with_edge_string, 2),
|
||||||
|
(mutator_values.mut_replace_num_with_random_hex, 2),
|
||||||
|
(mutator_values.mut_replace_num_with_null, 2),
|
||||||
|
(mutator_values.mut_wrap_num_in_cast, 3),
|
||||||
|
(mutator_values.mut_wrap_num_in_datetime_func, 2),
|
||||||
|
(mutator_values.mut_wrap_num_in_core_func, 10),
|
||||||
|
(mutator_values.mut_wrap_num_in_math_func, 5),
|
||||||
|
(mutator_values.mut_wrap_num_in_json_func, 5),
|
||||||
|
# # ##############################################################################################
|
||||||
|
(mutator_operators.mut_swap_comparison, 2),
|
||||||
|
(mutator_operators.mut_swap_boolean, 2),
|
||||||
|
(mutator_operators.mut_negate_where, 2),
|
||||||
|
(mutator_operators.mut_change_type, 2),
|
||||||
|
(mutator_operators.mut_swap_join_type, 2),
|
||||||
|
# # ##############################################################################################
|
||||||
|
(mutator_extra_statements.mut_append_select_star, 6),
|
||||||
|
(mutator_extra_statements.mut_append_count, 6),
|
||||||
|
(mutator_extra_statements.mut_append_join, 7),
|
||||||
|
(mutator_extra_statements.mut_append_subquery, 9),
|
||||||
|
(mutator_extra_statements.mut_append_cte, 9),
|
||||||
|
(mutator_extra_statements.mut_append_window, 7),
|
||||||
|
(mutator_extra_statements.mut_append_filter, 6),
|
||||||
|
(mutator_extra_statements.mut_append_aggregate, 7),
|
||||||
|
(mutator_extra_statements.mut_append_update, 6),
|
||||||
|
(mutator_extra_statements.mut_append_delete, 6),
|
||||||
|
(mutator_extra_statements.mut_append_index, 6),
|
||||||
|
(mutator_extra_statements.mut_append_view, 6),
|
||||||
|
(mutator_extra_statements.mut_append_trigger, 6),
|
||||||
|
(mutator_extra_statements.mut_wrap_savepoint, 6),
|
||||||
|
(mutator_extra_statements.mut_wrap_transaction, 6),
|
||||||
|
(mutator_extra_statements.mut_wrap_attach_detach, 5),
|
||||||
|
(mutator_extra_statements.mut_append_vacuum, 5),
|
||||||
|
(mutator_extra_statements.mut_append_analyze, 6),
|
||||||
|
(mutator_extra_statements.mut_append_reindex, 5),
|
||||||
|
(mutator_extra_statements.mut_append_null_insert, 6),
|
||||||
|
(mutator_extra_statements.mut_append_insert_default, 6),
|
||||||
|
(mutator_extra_statements.mut_append_insert_select, 6),
|
||||||
|
(mutator_extra_statements.mut_append_insert_or_x, 6),
|
||||||
|
(mutator_extra_statements.mut_append_upsert, 6),
|
||||||
|
(mutator_extra_statements.mut_append_alter_rename_table, 5),
|
||||||
|
(mutator_extra_statements.mut_append_alter_rename_column, 5),
|
||||||
|
(mutator_extra_statements.mut_append_alter_add_column, 6),
|
||||||
|
(mutator_extra_statements.mut_append_alter_drop_column, 5),
|
||||||
|
(mutator_extra_statements.mut_append_alter_drop_table_index_view_trigger, 5),
|
||||||
|
(mutator_extra_statements.mut_repeat, 6),
|
||||||
|
(mutator_extra_statements.mut_prepend_random_pragma, 9),
|
||||||
|
(mutator_extra_statements.mut_append_random_pragma, 6),
|
||||||
|
(mutator_extra_statements.mut_prepend_random_meta_command, 9),
|
||||||
|
# # ##############################################################################################
|
||||||
|
(mutator_corpus_splicing.mut_splice_append, 4),
|
||||||
|
(mutator_corpus_splicing.mut_splice_prepend, 4),
|
||||||
|
(mutator_corpus_splicing.mut_splice_intersperse, 4),
|
||||||
|
(mutator_corpus_splicing.mut_splice_replace, 1),
|
||||||
|
# # ##############################################################################################
|
||||||
|
(mutator_equivalent_rewrites.mut_between_to_and, 3),
|
||||||
|
(mutator_equivalent_rewrites.mut_and_to_between, 3),
|
||||||
|
(mutator_equivalent_rewrites.mut_in_to_or, 3),
|
||||||
|
(mutator_equivalent_rewrites.mut_arithmetic_identity, 3),
|
||||||
|
(mutator_equivalent_rewrites.mut_double_negate, 3),
|
||||||
|
(mutator_equivalent_rewrites.mut_string_concat_identity, 3),
|
||||||
|
(mutator_equivalent_rewrites.mut_double_not, 3),
|
||||||
|
(mutator_equivalent_rewrites.mut_de_morgan, 3),
|
||||||
|
(mutator_equivalent_rewrites.mut_tautology_and, 3),
|
||||||
|
(mutator_equivalent_rewrites.mut_tautology_or, 3),
|
||||||
|
(mutator_equivalent_rewrites.mut_is_null_to_isnull, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_eq_to_is, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_inject_null_check, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_subquery_in_from, 3),
|
||||||
|
(mutator_equivalent_rewrites.mut_add_indexed_by, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_qualify_with_main, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_predicate_pushdown_blocker, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_force_materialization, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_comma_join_to_explicit, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_swap_on_to_using, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_inject_empty_block_comment, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_inject_non_empty_block_comment, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_inject_line_comment, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_redundant_parens, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_quote_identifier, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_memeify, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_swap_whitespace, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_to_case_expr, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_iif_to_case, 2),
|
||||||
|
(mutator_equivalent_rewrites.mut_case_to_iif, 2),
|
||||||
|
]
|
||||||
|
|
||||||
|
MUTATIONS: list[Callable[[str], str]] = [m for m, _ in _MUTATORS_WEIGHTED]
|
||||||
|
_MUT_FUNCS = MUTATIONS
|
||||||
|
_MUT_WEIGHTS = [w for _, w in _MUTATORS_WEIGHTED]
|
||||||
|
|
||||||
|
|
||||||
|
def mutate(sql: str) -> str:
|
||||||
|
n = random.choices([1, 2, 3, 10, 20], weights=[3, 7, 13, 27, 50], k=1)[0]
|
||||||
|
out = sql
|
||||||
|
_MUT_SOFT_CAP = 100000
|
||||||
|
for _ in range(n):
|
||||||
|
if len(out) > _MUT_SOFT_CAP:
|
||||||
|
break
|
||||||
|
m = random.choices(_MUT_FUNCS, weights=_MUT_WEIGHTS, k=1)[0]
|
||||||
|
try:
|
||||||
|
new = m(out)
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
|
if isinstance(new, str):
|
||||||
|
out = new
|
||||||
|
return out
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
import random
|
||||||
|
import re
|
||||||
|
|
||||||
|
_CORPUS: list[str] = []
|
||||||
|
|
||||||
|
|
||||||
|
def _load_corpus() -> None:
|
||||||
|
candidate_paths = [
|
||||||
|
'/fuzzer/additional.sql',
|
||||||
|
]
|
||||||
|
for p in candidate_paths:
|
||||||
|
if not p:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
with open(p, 'r', encoding='latin-1') as f:
|
||||||
|
content = f.read()
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
chunks = [c.strip() for c in content.split('---') if c.strip()]
|
||||||
|
chunks = [
|
||||||
|
c for c in chunks if any(not ln.strip().startswith('--') and ln.strip()
|
||||||
|
for ln in c.split('\n'))
|
||||||
|
]
|
||||||
|
if chunks:
|
||||||
|
_CORPUS.extend(chunks)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
_load_corpus()
|
||||||
|
|
||||||
|
|
||||||
|
def mut_splice_append(s: str) -> str:
|
||||||
|
"""Append a random chunk from the corpus"""
|
||||||
|
|
||||||
|
if not _CORPUS:
|
||||||
|
return s
|
||||||
|
|
||||||
|
return s + '\n' + random.choice(_CORPUS)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_splice_prepend(s: str) -> str:
|
||||||
|
"""Prepend a random chunk from the corpus"""
|
||||||
|
|
||||||
|
if not _CORPUS:
|
||||||
|
return s
|
||||||
|
|
||||||
|
return random.choice(_CORPUS) + '\n' + s
|
||||||
|
|
||||||
|
|
||||||
|
def mut_splice_replace(s: str) -> str:
|
||||||
|
"""Replace s etirely with a random corpus chunk"""
|
||||||
|
|
||||||
|
if not _CORPUS:
|
||||||
|
return s
|
||||||
|
|
||||||
|
return random.choice(_CORPUS)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_splice_intersperse(s: str) -> str:
|
||||||
|
"""Insert a random corpus chunk between two random statements of s"""
|
||||||
|
|
||||||
|
if not _CORPUS:
|
||||||
|
return s
|
||||||
|
parts = re.split(r'(?<=;)\s*\n', s)
|
||||||
|
if len(parts) < 2:
|
||||||
|
return s + '\n' + random.choice(_CORPUS)
|
||||||
|
i = random.randint(1, len(parts) - 1)
|
||||||
|
|
||||||
|
return '\n'.join(parts[:i] + [random.choice(_CORPUS)] + parts[i:])
|
||||||
@@ -0,0 +1,444 @@
|
|||||||
|
import random
|
||||||
|
import re
|
||||||
|
|
||||||
|
import mutator_extra_statements
|
||||||
|
from sqlite_static_helper import *
|
||||||
|
|
||||||
|
_TOKEN_RE = re.compile(
|
||||||
|
r"""
|
||||||
|
(?P<line_comment>--[^\n]*) |
|
||||||
|
(?P<block_comment>/\*.*?\*/) |
|
||||||
|
(?P<string>'(?:[^']|'')*') |
|
||||||
|
(?P<dquoted>"(?:[^"]|"")*") |
|
||||||
|
(?P<bracket>\[[^\]]*\]) |
|
||||||
|
(?P<backtick>`(?:[^`]|``)*`) |
|
||||||
|
(?P<blob>[xX]'[0-9a-fA-F]*') |
|
||||||
|
(?P<number>\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b) |
|
||||||
|
(?P<ident>[A-Za-z_][A-Za-z0-9_]*) |
|
||||||
|
(?P<op>[<>!=]=|<>|\|\||::|->>?|[+\-*/%<>=&|^~,.;()@]) |
|
||||||
|
(?P<ws>\s+) |
|
||||||
|
(?P<other>.)
|
||||||
|
""",
|
||||||
|
re.VERBOSE | re.DOTALL,
|
||||||
|
)
|
||||||
|
|
||||||
|
_UNSAFE_KINDS = {
|
||||||
|
"line_comment", "block_comment", "string", "dquoted", "bracket", "backtick",
|
||||||
|
"blob"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _tokenize(s: str):
|
||||||
|
return [(m.lastgroup, m.group()) for m in _TOKEN_RE.finditer(s)]
|
||||||
|
|
||||||
|
|
||||||
|
def _sub_in_safe(s: str, pattern: re.Pattern, repl, max_subs: int = 1) -> str:
|
||||||
|
if max_subs <= 0:
|
||||||
|
return s
|
||||||
|
parts: list[str] = []
|
||||||
|
done = 0
|
||||||
|
for kind, text in _tokenize(s):
|
||||||
|
if done >= max_subs or kind in _UNSAFE_KINDS:
|
||||||
|
parts.append(text)
|
||||||
|
continue
|
||||||
|
new_text, n = pattern.subn(repl, text, count=max_subs - done)
|
||||||
|
parts.append(new_text)
|
||||||
|
done += n
|
||||||
|
return ''.join(parts)
|
||||||
|
|
||||||
|
|
||||||
|
_BETWEEN_RE = re.compile(
|
||||||
|
r'\b([A-Za-z_]\w*)\s+BETWEEN\s+(-?\d+(?:\.\d+)?)\s+AND\s+(-?\d+(?:\.\d+)?)',
|
||||||
|
re.I,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_between_to_and(s: str) -> str:
|
||||||
|
"""`x BETWEEN a AND b` -> `(x >= a AND x <= b)`."""
|
||||||
|
|
||||||
|
def repl(m: re.Match) -> str:
|
||||||
|
col, lo, hi = m.group(1), m.group(2), m.group(3)
|
||||||
|
return f'({col} >= {lo} AND {col} <= {hi})'
|
||||||
|
|
||||||
|
return _sub_in_safe(s, _BETWEEN_RE, repl, 1)
|
||||||
|
|
||||||
|
|
||||||
|
_RANGE_AND_RE = re.compile(
|
||||||
|
r'\(\s*([A-Za-z_]\w*)\s*>=\s*(-?\d+(?:\.\d+)?)\s+AND\s+'
|
||||||
|
r'\1\s*<=\s*(-?\d+(?:\.\d+)?)\s*\)',
|
||||||
|
re.I,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_and_to_between(s: str) -> str:
|
||||||
|
"""`(x >= a AND x <= b)` -> `x BETWEEN a AND b`."""
|
||||||
|
|
||||||
|
def repl(m: re.Match) -> str:
|
||||||
|
return f'{m.group(1)} BETWEEN {m.group(2)} AND {m.group(3)}'
|
||||||
|
|
||||||
|
return _sub_in_safe(s, _RANGE_AND_RE, repl, 1)
|
||||||
|
|
||||||
|
|
||||||
|
_IN_LIST_RE = re.compile(
|
||||||
|
r'\b([A-Za-z_]\w*)\s+IN\s*\(\s*([^()]*?)\s*\)',
|
||||||
|
re.I,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_in_to_or(s: str) -> str:
|
||||||
|
"""`x IN (a, b, c)` -> `(x = a OR x = b OR x = c)`"""
|
||||||
|
|
||||||
|
def repl(m: re.Match) -> str:
|
||||||
|
col, body = m.group(1), m.group(2)
|
||||||
|
if re.search(r'\bSELECT\b', body, re.I):
|
||||||
|
return m.group(0)
|
||||||
|
items = [p.strip() for p in body.split(',') if p.strip()]
|
||||||
|
if not items or len(items) > 16:
|
||||||
|
return m.group(0)
|
||||||
|
return '(' + ' OR '.join(f'{col} = {v}' for v in items) + ')'
|
||||||
|
|
||||||
|
return _sub_in_safe(s, _IN_LIST_RE, repl, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_arithmetic_identity(s: str) -> str:
|
||||||
|
"""`<n>` -> `(<n> + 0)` / `(<n> * 1)` / `(<n> - 0)`."""
|
||||||
|
pat = re.compile(r'\b(-?\d+(?:\.\d+)?)\b')
|
||||||
|
forms = ['({v} + 0)', '({v} * 1)', '({v} - 0)', '({v} + 0.0)', '(0 + {v})']
|
||||||
|
|
||||||
|
def repl(m: re.Match) -> str:
|
||||||
|
return random.choice(forms).format(v=m.group(1))
|
||||||
|
|
||||||
|
return _sub_in_safe(s, pat, repl, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_double_negate(s: str) -> str:
|
||||||
|
"""`<n>` -> `-(-<n>)`"""
|
||||||
|
pat = re.compile(r'\b(-?\d+(?:\.\d+)?)\b')
|
||||||
|
return _sub_in_safe(s, pat, lambda m: f'-(-({m.group(1)}))', 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_string_concat_identity(s: str) -> str:
|
||||||
|
"""`'abc'` -> `('abc' || '')`."""
|
||||||
|
out: list[str] = []
|
||||||
|
done = False
|
||||||
|
for kind, text in _tokenize(s):
|
||||||
|
if not done and kind == 'string' and len(text) >= 2:
|
||||||
|
out.append(random.choice([f"({text} || '')", f"'' || ({text})"]))
|
||||||
|
done = True
|
||||||
|
else:
|
||||||
|
out.append(text)
|
||||||
|
return ''.join(out)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_double_not(s: str) -> str:
|
||||||
|
"""`WHERE p` -> `WHERE NOT NOT p`"""
|
||||||
|
m = re.search(
|
||||||
|
r'\bWHERE\b\s+([^;]+?)(?=\bGROUP\b|\bORDER\b|\bLIMIT\b|\bHAVING\b|\bRETURNING\b|;|$)',
|
||||||
|
s, re.I)
|
||||||
|
if not m:
|
||||||
|
return s
|
||||||
|
pred = m.group(1).strip()
|
||||||
|
if not pred:
|
||||||
|
return s
|
||||||
|
new = f'WHERE NOT NOT ({pred}) '
|
||||||
|
return s[:m.start()] + new + s[m.end():]
|
||||||
|
|
||||||
|
|
||||||
|
def mut_de_morgan(s: str) -> str:
|
||||||
|
"""`NOT (a AND b)` -> `(NOT a OR NOT b)`"""
|
||||||
|
pat = re.compile(r'NOT\s*\(\s*([^()]+?)\s+AND\s+([^()]+?)\s*\)', re.I)
|
||||||
|
|
||||||
|
def repl(m: re.Match) -> str:
|
||||||
|
return f'(NOT ({m.group(1)}) OR NOT ({m.group(2)}))'
|
||||||
|
|
||||||
|
return _sub_in_safe(s, pat, repl, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_tautology_and(s: str) -> str:
|
||||||
|
"""`WHERE p` -> `WHERE p AND 1=1`"""
|
||||||
|
if not re.search(r'\bWHERE\b', s, re.I):
|
||||||
|
return s
|
||||||
|
pat = re.compile(
|
||||||
|
r'(\bWHERE\b\s+[^;]+?)(?=\bGROUP\b|\bORDER\b|\bLIMIT\b|\bHAVING\b|\bRETURNING\b|;|$)',
|
||||||
|
re.I)
|
||||||
|
tauto = random.choice(['1=1', "'a'='a'", 'NULL IS NULL', 'TRUE'])
|
||||||
|
return _sub_in_safe(s, pat, lambda m: f'{m.group(1).rstrip()} AND {tauto} ',
|
||||||
|
1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_tautology_or(s: str) -> str:
|
||||||
|
"""`WHERE p` -> `WHERE p OR 1=0`"""
|
||||||
|
if not re.search(r'\bWHERE\b', s, re.I):
|
||||||
|
return s
|
||||||
|
pat = re.compile(
|
||||||
|
r'(\bWHERE\b\s+[^;]+?)(?=\bGROUP\b|\bORDER\b|\bLIMIT\b|\bHAVING\b|\bRETURNING\b|;|$)',
|
||||||
|
re.I)
|
||||||
|
contradiction = random.choice(['1=0', "'a'='b'", 'NULL IS NOT NULL', 'FALSE'])
|
||||||
|
return _sub_in_safe(s, pat,
|
||||||
|
lambda m: f'({m.group(1).rstrip()}) OR {contradiction} ',
|
||||||
|
1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_is_null_to_isnull(s: str) -> str:
|
||||||
|
"""`x IS NULL` -> `x ISNULL` or `x IS NOT NULL` -> `x NOTNULL`"""
|
||||||
|
if random.random() < 0.5:
|
||||||
|
return _sub_in_safe(s, re.compile(r'\bIS\s+NULL\b', re.I), 'ISNULL', 1)
|
||||||
|
return _sub_in_safe(s, re.compile(r'\bIS\s+NOT\s+NULL\b', re.I), 'NOTNULL', 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_eq_to_is(s: str) -> str:
|
||||||
|
"""`x = NULL` -> `x IS NULL`"""
|
||||||
|
return _sub_in_safe(s, re.compile(r'=\s*NULL\b', re.I), 'IS NULL', 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_inject_null_check(s: str) -> str:
|
||||||
|
"""Append `AND <col> IS NOT NULL` to a `WHERE`"""
|
||||||
|
if not re.search(r'\bWHERE\b', s, re.I):
|
||||||
|
return s
|
||||||
|
_, col = mutator_extra_statements._pick_table_col(s)
|
||||||
|
pat = re.compile(
|
||||||
|
r'(\bWHERE\b\s+[^;]+?)(?=\bGROUP\b|\bORDER\b|\bLIMIT\b|\bHAVING\b|\bRETURNING\b|;|$)',
|
||||||
|
re.I)
|
||||||
|
return _sub_in_safe(s, pat,
|
||||||
|
lambda m: f'{m.group(1).rstrip()} AND {col} IS NOT NULL ',
|
||||||
|
1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_add_indexed_by(s: str) -> str:
|
||||||
|
"""Tag a table reference with `NOT INDEXED` or `INDEXED BY`"""
|
||||||
|
|
||||||
|
schema = mutator_extra_statements.get_schema(s)
|
||||||
|
if not schema:
|
||||||
|
return s
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
hint = random.choice([
|
||||||
|
'NOT INDEXED',
|
||||||
|
f'INDEXED BY sqlite_autoindex_{table}_1',
|
||||||
|
])
|
||||||
|
pat = re.compile(rf'\bFROM\s+{re.escape(table)}\b(?!\s+(?:AS|NOT|INDEXED))',
|
||||||
|
re.I)
|
||||||
|
|
||||||
|
return _sub_in_safe(s, pat, lambda m: f'{m.group(0)} {hint}', 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_qualify_with_main(s: str) -> str:
|
||||||
|
"""Qualify a bare table name with `main.` schema prefix."""
|
||||||
|
|
||||||
|
schema = mutator_extra_statements.get_schema(s)
|
||||||
|
if not schema:
|
||||||
|
return s
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
pat = re.compile(rf'(?<![.\w])\b{re.escape(table)}\b', re.I)
|
||||||
|
|
||||||
|
return _sub_in_safe(s, pat, lambda m: f'main.{m.group(0)}', 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_predicate_pushdown_blocker(s: str) -> str:
|
||||||
|
"""Prefix a column reference in `WHERE` with `+`"""
|
||||||
|
|
||||||
|
span = re.search(r'\bWHERE\b\s+([A-Za-z_]\w*)\s*(=|<|>|<=|>=|<>|!=)', s, re.I)
|
||||||
|
if not span:
|
||||||
|
return s
|
||||||
|
col = span.group(1)
|
||||||
|
|
||||||
|
return s[:span.start(1)] + f'+{col}' + s[span.end(1):]
|
||||||
|
|
||||||
|
|
||||||
|
def mut_subquery_in_from(s: str) -> str:
|
||||||
|
"""`FROM <table>` -> `FROM (SELECT * FROM <table>)`"""
|
||||||
|
|
||||||
|
schema = mutator_extra_statements.get_schema(s)
|
||||||
|
if not schema:
|
||||||
|
return s
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
pat = re.compile(rf'\bFROM\s+{re.escape(table)}\b(?!\s*\.)', re.I)
|
||||||
|
alias = f't_{random.randint(0, 999)}'
|
||||||
|
|
||||||
|
return _sub_in_safe(
|
||||||
|
s,
|
||||||
|
pat,
|
||||||
|
lambda m: f'FROM (SELECT * FROM {table}) AS {alias}',
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_force_materialization(s: str) -> str:
|
||||||
|
"""`SELECT * FROM users WHERE age > 18 ORDER BY name;` -> `WITH _m AS MATERIALIZED (SELECT * FROM users) SELECT * FROM _m WHERE age > 18 ORDER BY name;`"""
|
||||||
|
|
||||||
|
schema = mutator_extra_statements.get_schema(s)
|
||||||
|
if not schema:
|
||||||
|
return s
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
pat = re.compile(rf'(\bSELECT\b[^;]*?\bFROM\s+){re.escape(table)}\b', re.I)
|
||||||
|
cte = (f'WITH _m AS MATERIALIZED (SELECT * FROM {table}) ')
|
||||||
|
m = pat.search(s)
|
||||||
|
if not m:
|
||||||
|
return s
|
||||||
|
sel_start = s.rfind('SELECT', 0, m.start() + 1)
|
||||||
|
if sel_start == -1:
|
||||||
|
sel_start = m.start()
|
||||||
|
head = s[:sel_start]
|
||||||
|
tail = s[sel_start:].replace(table, '_m', 1)
|
||||||
|
|
||||||
|
return head + cte + tail
|
||||||
|
|
||||||
|
|
||||||
|
def mut_comma_join_to_explicit(s: str) -> str:
|
||||||
|
"""`FROM a, b WHERE a.x = b.x` -> `FROM a JOIN b ON a.x = b.x`"""
|
||||||
|
|
||||||
|
pat = re.compile(r'\bFROM\s+([A-Za-z_]\w*)\s*,\s*([A-Za-z_]\w*)', re.I)
|
||||||
|
|
||||||
|
return _sub_in_safe(
|
||||||
|
s,
|
||||||
|
pat,
|
||||||
|
lambda m: f'FROM {m.group(1)} CROSS JOIN {m.group(2)}',
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_swap_on_to_using(s: str) -> str:
|
||||||
|
"""`JOIN t ON a.col = b.col` -> `JOIN t USING (col)` when columns match."""
|
||||||
|
pat = re.compile(
|
||||||
|
r'JOIN\s+([A-Za-z_]\w*)\s+(?:AS\s+\w+\s+)?ON\s+'
|
||||||
|
r'(\w+)\.([A-Za-z_]\w*)\s*=\s*(\w+)\.\3\b',
|
||||||
|
re.I,
|
||||||
|
)
|
||||||
|
return _sub_in_safe(s, pat,
|
||||||
|
lambda m: f'JOIN {m.group(1)} USING ({m.group(3)})', 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_inject_empty_block_comment(s: str) -> str:
|
||||||
|
"""Insert an empty `/**/` between two top-level tokens."""
|
||||||
|
|
||||||
|
tokens = _tokenize(s)
|
||||||
|
if len(tokens) < 4:
|
||||||
|
return s
|
||||||
|
candidates = [i for i, (k, _) in enumerate(tokens) if k == 'ws']
|
||||||
|
if not candidates:
|
||||||
|
return s
|
||||||
|
i = random.choice(candidates)
|
||||||
|
tokens[i] = ('ws', ' /**/ ')
|
||||||
|
|
||||||
|
return ''.join(t for _, t in tokens)
|
||||||
|
|
||||||
|
def mut_inject_non_empty_block_comment(s: str) -> str:
|
||||||
|
"""Insert a `/* <value> */` between two top-level tokens."""
|
||||||
|
|
||||||
|
tokens = _tokenize(s)
|
||||||
|
if len(tokens) < 4:
|
||||||
|
return s
|
||||||
|
candidates = [i for i, (k, _) in enumerate(tokens) if k == 'ws']
|
||||||
|
if not candidates:
|
||||||
|
return s
|
||||||
|
i = random.choice(candidates)
|
||||||
|
tokens[i] = ('ws', f' /* {str(random.choice(VALUES))} */ ')
|
||||||
|
|
||||||
|
return ''.join(t for _, t in tokens)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_inject_line_comment(s: str) -> str:
|
||||||
|
"""Insert `-- <comment>;\\n` between two statements."""
|
||||||
|
|
||||||
|
if ';' not in s:
|
||||||
|
return s
|
||||||
|
|
||||||
|
pat = re.compile(r';(\s*)')
|
||||||
|
msg = str(random.choice(VALUES))
|
||||||
|
|
||||||
|
return _sub_in_safe(s, pat, lambda m: f';\n-- {msg}\n', 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_redundant_parens(s: str) -> str:
|
||||||
|
"""Wrap a numeric or column reference in extra parens."""
|
||||||
|
|
||||||
|
pat = re.compile(r'\b([A-Za-z_]\w*|\d+)\b')
|
||||||
|
|
||||||
|
return _sub_in_safe(s, pat, lambda m: f'(({m.group(1)}))', 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_quote_identifier(s: str) -> str:
|
||||||
|
"""Surround a table name with quotes"""
|
||||||
|
|
||||||
|
schema = mutator_extra_statements.get_schema(s)
|
||||||
|
if not schema:
|
||||||
|
return s
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
quote = random.choice(['"', '`', '['])
|
||||||
|
close = {'"': '"', '`': '`', '[': ']'}[quote]
|
||||||
|
pat = re.compile(rf'(?<![.\w]){re.escape(table)}\b')
|
||||||
|
|
||||||
|
return _sub_in_safe(s, pat, lambda m: f'{quote}{table}{close}', 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_memeify(s: str) -> str:
|
||||||
|
"""Randomly mixed-case a keyword: `SELECT` -> `SeLeCt`"""
|
||||||
|
keywords = [
|
||||||
|
'SELECT', 'FROM', 'WHERE', 'ORDER', 'GROUP', 'JOIN', 'UNION', 'INSERT',
|
||||||
|
'UPDATE', 'DELETE', 'AND', 'OR', 'NOT', 'LIMIT', 'OFFSET', 'HAVING', 'CASE',
|
||||||
|
'WHEN', 'THEN', 'END'
|
||||||
|
]
|
||||||
|
kw = random.choice(keywords)
|
||||||
|
pat = re.compile(rf'\b{kw}\b', re.I)
|
||||||
|
|
||||||
|
def jitter(m: re.Match) -> str:
|
||||||
|
return ''.join(
|
||||||
|
c.upper() if random.random() < 0.5 else c.lower() for c in m.group(0))
|
||||||
|
|
||||||
|
return _sub_in_safe(s, pat, jitter, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_swap_whitespace(s: str) -> str:
|
||||||
|
"""Swap one whitespace character with another"""
|
||||||
|
|
||||||
|
tokens = _tokenize(s)
|
||||||
|
candidates = [i for i, (k, t) in enumerate(tokens) if k == 'ws' and ' ' in t]
|
||||||
|
if not candidates:
|
||||||
|
return s
|
||||||
|
i = random.choice(candidates)
|
||||||
|
repl = random.choice(
|
||||||
|
['\t', '\n', ' ', '\u00a0' if random.random() < 0.25 else ' '])
|
||||||
|
tokens[i] = ('ws', tokens[i][1].replace(' ', repl, 1))
|
||||||
|
|
||||||
|
return ''.join(t for _, t in tokens)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_to_case_expr(s: str) -> str:
|
||||||
|
"""`x = a` (in a `SELECT` list) -> `CASE WHEN x = a THEN 1 ELSE 0 END`"""
|
||||||
|
|
||||||
|
pat = re.compile(r'\b([A-Za-z_]\w*)\s*=\s*(-?\d+)\b')
|
||||||
|
return _sub_in_safe(
|
||||||
|
s,
|
||||||
|
pat,
|
||||||
|
lambda m: f'CASE WHEN {m.group(1)} = {m.group(2)} THEN 1 ELSE 0 END',
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_iif_to_case(s: str) -> str:
|
||||||
|
"""`IIF(a, b, c)` -> `CASE WHEN a THEN b ELSE c END`."""
|
||||||
|
|
||||||
|
pat = re.compile(r'\bIIF\s*\(\s*([^,()]+),\s*([^,()]+),\s*([^,()]+)\s*\)',
|
||||||
|
re.I)
|
||||||
|
|
||||||
|
return _sub_in_safe(
|
||||||
|
s,
|
||||||
|
pat,
|
||||||
|
lambda m: f'CASE WHEN {m.group(1)} THEN {m.group(2)} ELSE {m.group(3)} END',
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_case_to_iif(s: str) -> str:
|
||||||
|
"""`CASE WHEN a THEN b ELSE c END` -> `IIF(a, b, c)`."""
|
||||||
|
|
||||||
|
pat = re.compile(
|
||||||
|
r'\bCASE\s+WHEN\s+([^()]+?)\s+THEN\s+([^()]+?)\s+ELSE\s+([^()]+?)\s+END\b',
|
||||||
|
re.I,
|
||||||
|
)
|
||||||
|
|
||||||
|
return _sub_in_safe(
|
||||||
|
s,
|
||||||
|
pat,
|
||||||
|
lambda m: f'IIF({m.group(1)}, {m.group(2)}, {m.group(3)})',
|
||||||
|
1,
|
||||||
|
)
|
||||||
@@ -0,0 +1,666 @@
|
|||||||
|
import random
|
||||||
|
import re
|
||||||
|
|
||||||
|
from sqlite_static_helper import *
|
||||||
|
|
||||||
|
_TABLE_HEADER_RE = re.compile(
|
||||||
|
r'CREATE\s+(?:TEMP(?:ORARY)?\s+)?TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?'
|
||||||
|
r'(?:[\w."`]+\.)?([\w"`]+)\s*\(',
|
||||||
|
re.I,
|
||||||
|
)
|
||||||
|
|
||||||
|
_CONSTRAINT_HEADS = {'PRIMARY', 'UNIQUE', 'CHECK', 'FOREIGN', 'CONSTRAINT'}
|
||||||
|
|
||||||
|
|
||||||
|
def _split_top_level_commas(body: str) -> list[str]:
|
||||||
|
depth = 0
|
||||||
|
cur: list[str] = []
|
||||||
|
out: list[str] = []
|
||||||
|
in_str = False
|
||||||
|
quote = ''
|
||||||
|
for ch in body:
|
||||||
|
if in_str:
|
||||||
|
cur.append(ch)
|
||||||
|
if ch == quote:
|
||||||
|
in_str = False
|
||||||
|
continue
|
||||||
|
if ch in ("'", '"', '`'):
|
||||||
|
in_str = True
|
||||||
|
quote = ch
|
||||||
|
cur.append(ch)
|
||||||
|
continue
|
||||||
|
if ch == '(':
|
||||||
|
depth += 1
|
||||||
|
cur.append(ch)
|
||||||
|
elif ch == ')':
|
||||||
|
depth -= 1
|
||||||
|
cur.append(ch)
|
||||||
|
elif ch == ',' and depth == 0:
|
||||||
|
out.append(''.join(cur))
|
||||||
|
cur = []
|
||||||
|
else:
|
||||||
|
cur.append(ch)
|
||||||
|
if cur:
|
||||||
|
out.append(''.join(cur))
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
def get_schema(sql: str) -> dict[str, list[str]]:
|
||||||
|
schema: dict[str, list[str]] = {}
|
||||||
|
cursor = 0
|
||||||
|
while True:
|
||||||
|
m = _TABLE_HEADER_RE.search(sql, cursor)
|
||||||
|
if not m:
|
||||||
|
break
|
||||||
|
name = m.group(1).strip('"`')
|
||||||
|
start = m.end()
|
||||||
|
depth = 1
|
||||||
|
j = start
|
||||||
|
while j < len(sql) and depth > 0:
|
||||||
|
c = sql[j]
|
||||||
|
if c == '(':
|
||||||
|
depth += 1
|
||||||
|
elif c == ')':
|
||||||
|
depth -= 1
|
||||||
|
j += 1
|
||||||
|
body = sql[start:j - 1] if depth == 0 else sql[start:]
|
||||||
|
cols: list[str] = []
|
||||||
|
for piece in _split_top_level_commas(body):
|
||||||
|
piece = piece.strip()
|
||||||
|
if not piece:
|
||||||
|
continue
|
||||||
|
head = piece.split()[0].strip(' ,"`[]')
|
||||||
|
if head.upper() in _CONSTRAINT_HEADS:
|
||||||
|
continue
|
||||||
|
if re.fullmatch(r'[A-Za-z_]\w*', head):
|
||||||
|
cols.append(head)
|
||||||
|
if cols:
|
||||||
|
schema[name] = cols
|
||||||
|
cursor = j
|
||||||
|
return schema or {}
|
||||||
|
|
||||||
|
|
||||||
|
def _pick_table(sql: str) -> str:
|
||||||
|
return random.choice(list(get_schema(sql).keys()))
|
||||||
|
|
||||||
|
|
||||||
|
def _pick_table_col(sql: str) -> tuple[str, str]:
|
||||||
|
schema = get_schema(sql)
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
cols = schema[table] or ['rowid']
|
||||||
|
return table, random.choice(cols)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_select_star(s: str) -> str:
|
||||||
|
"""Append a SELECT * statement for any existing table in the query"""
|
||||||
|
return s + '\n' + f'SELECT * FROM {_pick_table(s)};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_count(s: str) -> str:
|
||||||
|
"""Append a SELECT COUNT(*) statement for any existing table in the query"""
|
||||||
|
return s + '\n' + f'\nSELECT COUNT(*) FROM {_pick_table(s)};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_join(s: str) -> str:
|
||||||
|
"""Append a JOIN statement between two existing tables in the query"""
|
||||||
|
|
||||||
|
schema = get_schema(s)
|
||||||
|
if not schema:
|
||||||
|
return s
|
||||||
|
tables = list(schema.keys())
|
||||||
|
t1 = random.choice(tables)
|
||||||
|
t2 = random.choice(tables)
|
||||||
|
join_type = random.choice(JOINS)
|
||||||
|
if 'NATURAL' in join_type or 'CROSS' in join_type:
|
||||||
|
return s + '\n' + f'SELECT * FROM {t1} {join_type} {t2};'
|
||||||
|
return s + '\n' + f'SELECT * FROM {t1} AS a {join_type} {t2} AS b ON a.rowid = b.rowid;'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_subquery(s: str) -> str:
|
||||||
|
"""Append a SELECT statement that queries a subquery"""
|
||||||
|
|
||||||
|
table, col = _pick_table_col(s)
|
||||||
|
style = random.choice([
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} t2 WHERE t2.{col} = {table}.{col});',
|
||||||
|
f'SELECT * FROM {table} WHERE EXISTS (SELECT 1 FROM {table} t2 WHERE t2.{col} = {table}.{col});',
|
||||||
|
f'SELECT * FROM {table} WHERE NOT EXISTS (SELECT 1 FROM {table} t2 WHERE t2.{col} = {table}.{col});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} = (SELECT {col} FROM {table} t2 WHERE t2.{col} = {table}.{col} LIMIT 1);',
|
||||||
|
f'SELECT {col}, (SELECT COUNT(*) FROM {table}) AS cnt FROM {table};',
|
||||||
|
f'SELECT {col}, (SELECT MAX({col}) FROM {table}) AS max_val FROM {table};',
|
||||||
|
f'SELECT {col}, (SELECT MIN({col}) FROM {table}) AS min_val FROM {table};',
|
||||||
|
f'SELECT {col}, (SELECT AVG({col}) FROM {table}) AS avg_val FROM {table};',
|
||||||
|
f'SELECT {col}, (SELECT SUM({col}) FROM {table}) AS sum_val FROM {table};',
|
||||||
|
f'SELECT {col}, (SELECT {col} FROM {table} LIMIT 1) AS first_val FROM {table};',
|
||||||
|
f'SELECT * FROM (SELECT * FROM {table}) AS sub;',
|
||||||
|
f'SELECT * FROM (SELECT {col} FROM {table} WHERE {col} IS NOT NULL) AS sub;',
|
||||||
|
f'SELECT * FROM (SELECT {col}, COUNT(*) FROM {table} GROUP BY {col}) AS sub;',
|
||||||
|
f'SELECT * FROM (SELECT * FROM {table} ORDER BY {col}) AS sub LIMIT 10;',
|
||||||
|
f'SELECT * FROM (SELECT * FROM {table}) AS t1 JOIN (SELECT * FROM {table}) AS t2 ON t1.{col} = t2.{col};',
|
||||||
|
f'SELECT * FROM {table} WHERE EXISTS (SELECT 1 FROM {table} WHERE {col} > 0);',
|
||||||
|
f'SELECT * FROM {table} WHERE EXISTS (SELECT 1 FROM {table} WHERE {col} < 0);',
|
||||||
|
f'SELECT * FROM {table} WHERE EXISTS (SELECT 1 FROM {table} WHERE {col} = NULL);',
|
||||||
|
f'SELECT * FROM {table} WHERE EXISTS (SELECT 1 FROM {table} WHERE 1 = 0);',
|
||||||
|
f'SELECT * FROM {table} WHERE EXISTS (SELECT 1 FROM {table} WHERE 1 = 1);',
|
||||||
|
f'SELECT * FROM {table} WHERE NOT EXISTS (SELECT 1 FROM {table} WHERE 1 = 0);',
|
||||||
|
f'SELECT * FROM {table} WHERE NOT EXISTS (SELECT 1 FROM {table} WHERE 1 = 1);',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} WHERE {col} IS NOT NULL);',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} WHERE {col} IS NULL);',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} LIMIT 1);',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} LIMIT 0);',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} NOT IN (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} NOT IN (SELECT {col} FROM {table} WHERE {col} IS NOT NULL);',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} NOT IN (SELECT {col} FROM {table} WHERE {col} IS NULL);',
|
||||||
|
f'SELECT * FROM {table} WHERE ({col}) IN (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE ({col}, {col}) IN (SELECT {col}, {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} > ANY (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} < ANY (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} = ANY (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} >= ANY (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} <= ANY (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} <> ANY (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} > ALL (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} < ALL (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} = ALL (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} >= ALL (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} <= ALL (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} <> ALL (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} > (SELECT AVG({col}) FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} < (SELECT AVG({col}) FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} > (SELECT MAX({col}) FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} < (SELECT MIN({col}) FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} = (SELECT COUNT(*) FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} > (SELECT COUNT(*) FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} = (SELECT SUM({col}) FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} = (SELECT GROUP_CONCAT({col}) FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} WHERE {col} IN (SELECT {col} FROM {table}));',
|
||||||
|
f'SELECT * FROM {table} WHERE EXISTS (SELECT 1 FROM {table} WHERE EXISTS (SELECT 1 FROM {table}));',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} = (SELECT MAX({col}) FROM {table} WHERE {col} = (SELECT MAX({col}) FROM {table}));',
|
||||||
|
f'SELECT * FROM (SELECT * FROM (SELECT * FROM {table}) AS inner1) AS inner2;',
|
||||||
|
f'SELECT {col}, COUNT(*) FROM {table} GROUP BY {col} HAVING COUNT(*) > (SELECT COUNT(*) FROM {table} LIMIT 1);',
|
||||||
|
f'SELECT {col}, COUNT(*) FROM {table} GROUP BY {col} HAVING COUNT(*) = (SELECT COUNT(*) FROM {table});',
|
||||||
|
f'SELECT {col}, COUNT(*) FROM {table} GROUP BY {col} HAVING {col} IN (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} t1 JOIN {table} t2 ON t1.{col} = (SELECT {col} FROM {table} LIMIT 1);',
|
||||||
|
f'SELECT * FROM {table} t1 LEFT JOIN {table} t2 ON t1.{col} = (SELECT {col} FROM {table} WHERE {col} = t1.{col});',
|
||||||
|
f'SELECT * FROM {table} t1 RIGHT JOIN {table} t2 ON t1.{col} = (SELECT {col} FROM {table} WHERE {col} = t1.{col});',
|
||||||
|
f'SELECT * FROM {table} t1 JOIN (SELECT * FROM {table}) AS sub ON t1.{col} = sub.{col};',
|
||||||
|
f'SELECT {col} FROM {table} UNION SELECT {col} FROM (SELECT * FROM {table}) AS sub;',
|
||||||
|
f'SELECT {col} FROM {table} INTERSECT SELECT {col} FROM (SELECT * FROM {table}) AS sub;',
|
||||||
|
f'SELECT {col} FROM {table} EXCEPT SELECT {col} FROM (SELECT * FROM {table}) AS sub;',
|
||||||
|
f'SELECT {col} FROM {table} UNION ALL SELECT {col} FROM (SELECT * FROM {table}) AS sub;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT {col} FROM {table}) SELECT * FROM cte WHERE {col} IS NOT NULL;',
|
||||||
|
f'WITH cte AS (SELECT {col}, COUNT(*) FROM {table} GROUP BY {col}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table}), cte2 AS (SELECT * FROM cte) SELECT * FROM cte2;',
|
||||||
|
f'WITH RECURSIVE cte AS (SELECT {col} FROM {table} UNION ALL SELECT {col} FROM cte LIMIT 1) SELECT * FROM cte;',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} WHERE 1/0 = 0);'
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} LIMIT -1);',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} LIMIT 0);',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} ORDER BY {col} LIMIT 1 OFFSET 1000);',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT DISTINCT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT ALL {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} WHERE {col} LIKE \"%%\");',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} WHERE {col} GLOB \"*\");',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} WHERE ROW_NUMBER() OVER (ORDER BY {col}) = 1);',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} = (SELECT {col} FROM {table} ORDER BY {col} LIMIT 1 OFFSET (SELECT COUNT(*) FROM {table} / 2));',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE EXISTS (SELECT 1 FROM {table});',
|
||||||
|
f'SELECT * FROM (SELECT * FROM {table}) AS sub;',
|
||||||
|
f'SELECT {col} FROM {table} WHERE {col} = (SELECT MAX({col}) FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE {col} NOT IN (SELECT {col} FROM {table});',
|
||||||
|
f'SELECT * FROM {table} WHERE ({col}) IN (SELECT {col} FROM {table});',
|
||||||
|
])
|
||||||
|
return s + '\n' + style
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_cte(s: str) -> str:
|
||||||
|
"""Append a SELECT statement that queries a CTE"""
|
||||||
|
|
||||||
|
table, col = _pick_table_col(s)
|
||||||
|
n = random.randint(2, 100)
|
||||||
|
style = random.choice([
|
||||||
|
f'WITH cte AS (SELECT {col} FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table} WHERE {col} IS NOT NULL) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT DISTINCT {col} FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT {col}, COUNT(*) AS cnt FROM {table} GROUP BY {col}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table} ORDER BY {col} LIMIT 5) SELECT * FROM cte;',
|
||||||
|
f'WITH cte(x) AS (SELECT {col} FROM {table}) SELECT x FROM cte;',
|
||||||
|
f'WITH cte(a, b) AS (SELECT {col}, {col} FROM {table}) SELECT a, b FROM cte;',
|
||||||
|
f'WITH cte(a, b, c) AS (SELECT {col}, {col}, {col} FROM {table}) SELECT a, b, c FROM cte;',
|
||||||
|
f'WITH cte(x) AS (VALUES(1),(2),(3)) SELECT * FROM cte;',
|
||||||
|
f'WITH cte(x, y) AS (VALUES(1,2),(3,4),(5,6)) SELECT * FROM cte;',
|
||||||
|
f'WITH a AS (SELECT * FROM {table}), b AS (SELECT * FROM a) SELECT * FROM b;',
|
||||||
|
f'WITH a AS (SELECT {col} FROM {table}), b AS (SELECT {col} FROM a), c AS (SELECT {col} FROM b) SELECT * FROM c;',
|
||||||
|
f'WITH a AS (SELECT {col} FROM {table}), b AS (SELECT {col} FROM {table}) SELECT * FROM a JOIN b ON a.{col} = b.{col};',
|
||||||
|
f'WITH a AS (SELECT {col} FROM {table}), b AS (SELECT COUNT(*) AS cnt FROM a) SELECT * FROM b;',
|
||||||
|
f'WITH a AS (SELECT * FROM {table} WHERE {col} IS NOT NULL), b AS (SELECT * FROM a WHERE {col} > 0), c AS (SELECT * FROM b LIMIT 10) SELECT * FROM c;',
|
||||||
|
f'WITH a AS (SELECT * FROM {table}), b AS (SELECT * FROM {table}) SELECT * FROM a UNION ALL SELECT * FROM b;',
|
||||||
|
f'WITH m AS MATERIALIZED (SELECT {col} FROM {table}) SELECT * FROM m;',
|
||||||
|
f'WITH n AS NOT MATERIALIZED (SELECT {col} FROM {table}) SELECT * FROM n;',
|
||||||
|
f'WITH m AS MATERIALIZED (SELECT * FROM {table}) SELECT m.{col} FROM m JOIN m AS m2 ON m.{col} = m2.{col};',
|
||||||
|
f'WITH n AS NOT MATERIALIZED (SELECT * FROM {table}) SELECT * FROM n WHERE {col} > 0;',
|
||||||
|
f'WITH a AS MATERIALIZED (SELECT * FROM {table}), b AS NOT MATERIALIZED (SELECT * FROM a) SELECT * FROM b;',
|
||||||
|
f'WITH a AS NOT MATERIALIZED (SELECT * FROM {table}), b AS MATERIALIZED (SELECT * FROM a) SELECT * FROM b;',
|
||||||
|
f'WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<{n}) SELECT * FROM cnt;',
|
||||||
|
f'WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<{n}) SELECT SUM(x) FROM cnt;',
|
||||||
|
f'WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<{n}) SELECT MAX(x) FROM cnt;',
|
||||||
|
f'WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<{n}) SELECT COUNT(*) FROM cnt;',
|
||||||
|
f'WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<{n}) SELECT x FROM cnt WHERE x > {n//2};',
|
||||||
|
f'WITH RECURSIVE pair(a,b) AS (VALUES(0,1) UNION ALL SELECT b, a+b FROM pair WHERE b<100) SELECT * FROM pair;',
|
||||||
|
f'WITH RECURSIVE fib(a,b) AS (VALUES(1,1) UNION ALL SELECT b, a+b FROM fib WHERE b<1000) SELECT a FROM fib;',
|
||||||
|
f'WITH RECURSIVE fib(a,b,n) AS (VALUES(1,1,1) UNION ALL SELECT b, a+b, n+1 FROM fib WHERE n<{n}) SELECT a, n FROM fib;',
|
||||||
|
f'WITH RECURSIVE tree(id, parent, depth) AS (VALUES(1, NULL, 0) UNION ALL SELECT id+1, id, depth+1 FROM tree WHERE depth<{n}) SELECT * FROM tree;',
|
||||||
|
f'WITH RECURSIVE tree(id, path) AS (VALUES(1, "/1") UNION ALL SELECT id+1, path || "/" || (id+1) FROM tree WHERE id<{n}) SELECT * FROM tree;',
|
||||||
|
f'WITH RECURSIVE cnt(x) AS (VALUES(1) UNION SELECT x+1 FROM cnt WHERE x<{n}) SELECT * FROM cnt;',
|
||||||
|
f'WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<{n}) SELECT * FROM cnt;',
|
||||||
|
f'WITH RECURSIVE vals(x) AS (SELECT {col} FROM {table} WHERE {col} IS NOT NULL UNION ALL SELECT {col} FROM {table} WHERE {col} IS NOT NULL LIMIT 10) SELECT * FROM vals;',
|
||||||
|
f'WITH RECURSIVE r AS (SELECT {col} FROM {table} UNION ALL SELECT {col} FROM {table} LIMIT 5) SELECT * FROM r;',
|
||||||
|
f'WITH RECURSIVE r AS (SELECT {col} FROM {table} WHERE {col} IS NOT NULL UNION ALL SELECT {col} FROM r WHERE {col} > 0 LIMIT 10) SELECT * FROM r;',
|
||||||
|
f'WITH RECURSIVE r AS (SELECT * FROM {table} LIMIT 1 UNION ALL SELECT t.* FROM {table} t JOIN r ON t.{col} = r.{col} LIMIT 10) SELECT * FROM r;',
|
||||||
|
f'WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<1) SELECT * FROM cnt;',
|
||||||
|
f'WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<0) SELECT * FROM cnt;',
|
||||||
|
f'WITH RECURSIVE empty(x) AS (SELECT 1 WHERE 1=0 UNION ALL SELECT x+1 FROM empty WHERE x<10) SELECT * FROM empty;',
|
||||||
|
f'WITH RECURSIVE inf(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM inf) SELECT * FROM inf LIMIT 10;',
|
||||||
|
f'WITH RECURSIVE self(x) AS (SELECT 1 UNION ALL SELECT x FROM self) SELECT * FROM self LIMIT 5;',
|
||||||
|
f'WITH RECURSIVE cnt(x) AS (VALUES(0) UNION ALL SELECT x-1 FROM cnt WHERE x>-{n}) SELECT * FROM cnt;',
|
||||||
|
f'WITH RECURSIVE multi(a, b, c) AS (VALUES(1, 2, 3) UNION ALL SELECT a+1, b+1, c+1 FROM multi WHERE a<{n}) SELECT * FROM multi;',
|
||||||
|
f'WITH RECURSIVE multi(a, b) AS (VALUES(1, "x") UNION ALL SELECT a+1, "x" FROM multi WHERE a<{n}) SELECT * FROM multi;',
|
||||||
|
f'WITH RECURSIVE multi(a, b) AS (VALUES(1, 1.0) UNION ALL SELECT a+1, b*0.5 FROM multi WHERE a<{n}) SELECT * FROM multi;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table}) SELECT * FROM cte JOIN {table} ON cte.{col} = {table}.{col};',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table}) SELECT * FROM cte LEFT JOIN {table} ON cte.{col} = {table}.{col};',
|
||||||
|
f'WITH cte1 AS (SELECT * FROM {table}), cte2 AS (SELECT * FROM {table}) SELECT * FROM cte1 LEFT JOIN cte2 ON cte1.{col} = cte2.{col};',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table}) SELECT * FROM cte c1 JOIN cte c2 ON c1.{col} = c2.{col};',
|
||||||
|
f'WITH cte AS (SELECT {col}, COUNT(*) AS cnt FROM {table} GROUP BY {col}) SELECT * FROM cte WHERE cnt > 1;',
|
||||||
|
f'WITH cte AS (SELECT {col}, SUM({col}) AS total FROM {table} GROUP BY {col}) SELECT * FROM cte ORDER BY total DESC;',
|
||||||
|
f'WITH cte AS (SELECT {col}, AVG({col}) AS avg_val FROM {table} GROUP BY {col} HAVING AVG({col}) > 0) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT COUNT(*) AS cnt FROM {table}) SELECT * FROM cte WHERE cnt > 0;',
|
||||||
|
f'WITH cte AS (SELECT {col}, ROW_NUMBER() OVER (ORDER BY {col}) AS rn FROM {table}) SELECT * FROM cte WHERE rn <= 5;',
|
||||||
|
f'WITH cte AS (SELECT {col}, RANK() OVER (ORDER BY {col}) AS rnk FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT {col}, SUM({col}) OVER (ORDER BY {col}) AS running FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT {col}, LAG({col}) OVER (ORDER BY {col}) AS prev FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT {col}, LEAD({col}) OVER (ORDER BY {col}) AS nxt FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table} WHERE {col} IN (SELECT {col} FROM {table} LIMIT 5)) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table} WHERE {col} = (SELECT MAX({col}) FROM {table})) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table} WHERE EXISTS (SELECT 1 FROM {table} WHERE {col} > 0)) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT {col} FROM {table} UNION SELECT {col} FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT {col} FROM {table} INTERSECT SELECT {col} FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT {col} FROM {table} EXCEPT SELECT {col} FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT {col} FROM {table} UNION ALL SELECT {col} FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table}) UPDATE {table} SET {col} = (SELECT {col} FROM cte LIMIT 1) WHERE 1=0;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table} LIMIT 1) DELETE FROM {table} WHERE {col} IN (SELECT {col} FROM cte) AND 1=0;',
|
||||||
|
f'WITH cte AS (SELECT 1 AS x) INSERT INTO {table}({col}) SELECT x FROM cte WHERE 1=0;',
|
||||||
|
f'WITH a AS (SELECT * FROM {table}), RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<{n}) SELECT * FROM a CROSS JOIN cnt;',
|
||||||
|
f'WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<{n}), filtered AS (SELECT * FROM cnt WHERE x > {n//2}) SELECT * FROM filtered;',
|
||||||
|
f'WITH a AS (SELECT * FROM {table}), b AS (SELECT * FROM a), c AS (SELECT * FROM b), d AS (SELECT * FROM c) SELECT * FROM d;',
|
||||||
|
f'WITH a AS (SELECT {col} FROM {table}), b AS (SELECT {col} FROM a WHERE {col} IS NOT NULL), c AS (SELECT COUNT(*) AS cnt FROM b) SELECT cnt FROM c;',
|
||||||
|
f'WITH cte(x) AS (VALUES(1),(2),(3)) SELECT * FROM cte WHERE x > 1;',
|
||||||
|
f'WITH cte(a, b) AS (VALUES(1, "a"),(2, "b"),(3, "c")) SELECT * FROM cte;',
|
||||||
|
f'WITH cte(x) AS (VALUES(1),(2),(3)) SELECT * FROM {table} WHERE {col} IN (SELECT x FROM cte);',
|
||||||
|
f'WITH cte AS (SELECT NULL AS x) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT NULL AS x, NULL AS y) SELECT x, y, x IS NULL FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT {col} FROM {table} WHERE {col} IS NULL) SELECT * FROM cte;',
|
||||||
|
f'WITH cte(x) AS (VALUES(NULL),(1),(NULL)) SELECT * FROM cte WHERE x IS NOT NULL;',
|
||||||
|
f'WITH cte AS (SELECT 1 AS x) SELECT x + 0.5 FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT 1.5 AS x) SELECT CAST(x AS TEXT) FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT NULL AS x) SELECT COALESCE(x, 0) FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT CASE WHEN {col} > 0 THEN "pos" ELSE "neg" END AS sign FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT CASE WHEN {col} IS NULL THEN 0 ELSE {col} END AS val FROM {table}) SELECT * FROM cte;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table}) SELECT * FROM cte a, cte b WHERE a.{col} = b.{col};',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table}) SELECT * FROM cte WHERE {col} > 0 UNION ALL SELECT * FROM cte WHERE {col} <= 0;',
|
||||||
|
f'WITH cte AS (SELECT * FROM {table}) SELECT (SELECT COUNT(*) FROM cte) AS total, * FROM cte LIMIT 1;',
|
||||||
|
])
|
||||||
|
|
||||||
|
return s + '\n' + style
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_window(s: str) -> str:
|
||||||
|
"""Append a SELECT statement that applies a window function to an existing table in the query"""
|
||||||
|
|
||||||
|
table, col = _pick_table_col(s)
|
||||||
|
fn = random.choice(WINDOW_FUNCS).format(c=col)
|
||||||
|
partition = f'PARTITION BY {col} ' if random.random() < 0.5 else ''
|
||||||
|
order = f'ORDER BY {col}'
|
||||||
|
frame = random.choice([
|
||||||
|
'',
|
||||||
|
' ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW',
|
||||||
|
' RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING',
|
||||||
|
' GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING',
|
||||||
|
' ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW',
|
||||||
|
' ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP',
|
||||||
|
' ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES',
|
||||||
|
' RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS',
|
||||||
|
])
|
||||||
|
|
||||||
|
return s + '\n' + f'SELECT {fn} OVER ({partition}{order}{frame}) FROM {table};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_filter(s: str) -> str:
|
||||||
|
"""Append a SELECT statement that uses FILTER"""
|
||||||
|
|
||||||
|
table, col = _pick_table_col(s)
|
||||||
|
|
||||||
|
return s + '\n' + (f'SELECT '
|
||||||
|
f'COUNT(*) FILTER (WHERE {col} IS NOT NULL), '
|
||||||
|
f'SUM(rowid) FILTER (WHERE {col} > 0), '
|
||||||
|
f'COUNT(*) FILTER (WHERE 1=0), '
|
||||||
|
f'COUNT(*) FILTER (WHERE 1=1), '
|
||||||
|
f'COUNT(*) FILTER (WHERE NULL), '
|
||||||
|
f'AVG({col}) FILTER (WHERE {col} > 0 AND {col} < 100), '
|
||||||
|
f'COUNT(*) FILTER (WHERE typeof({col}) = "text") '
|
||||||
|
f'FROM {table};')
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_aggregate(s: str) -> str:
|
||||||
|
"""Append a SELECT statement that uses an aggregate function"""
|
||||||
|
|
||||||
|
table, col = _pick_table_col(s)
|
||||||
|
fn = random.choice(AGG_FUNCS)
|
||||||
|
if fn == 'COUNT' and random.random() < 0.5:
|
||||||
|
agg = 'COUNT(*)'
|
||||||
|
elif fn == 'GROUP_CONCAT' and random.random() < 0.5:
|
||||||
|
agg = f"GROUP_CONCAT({col}, '|')"
|
||||||
|
elif fn == 'STRING_AGG' and random.random() < 0.5:
|
||||||
|
agg = f"STRING_AGG({col}, '|')"
|
||||||
|
else:
|
||||||
|
agg = f"{fn}({col})"
|
||||||
|
|
||||||
|
return s + '\n' + f'SELECT {agg} FROM {table};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_update(s: str) -> str:
|
||||||
|
"""Append an UPDATE statement"""
|
||||||
|
|
||||||
|
table, col = _pick_table_col(s)
|
||||||
|
val = random.choice([
|
||||||
|
str(random.randint(-100, 100)),
|
||||||
|
'NULL',
|
||||||
|
"'x'",
|
||||||
|
"''",
|
||||||
|
f'{col} + 1',
|
||||||
|
'CURRENT_TIMESTAMP',
|
||||||
|
f"json_object('k', {col})",
|
||||||
|
])
|
||||||
|
where = random.choice([
|
||||||
|
'',
|
||||||
|
f' WHERE {col} IS NOT NULL',
|
||||||
|
' WHERE rowid = 1',
|
||||||
|
' WHERE 1',
|
||||||
|
f' WHERE {col} BETWEEN 0 AND 100',
|
||||||
|
])
|
||||||
|
returning = ' RETURNING *' if random.random() < 0.4 else ''
|
||||||
|
|
||||||
|
return s + '\n' + f'UPDATE {table} SET {col} = {val}{where}{returning};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_delete(s: str) -> str:
|
||||||
|
"""Append a DELETE statement"""
|
||||||
|
|
||||||
|
table, col = _pick_table_col(s)
|
||||||
|
where = random.choice([
|
||||||
|
f'WHERE rowid = {random.randint(1, 100)}',
|
||||||
|
f'WHERE {col} IS NULL',
|
||||||
|
'WHERE 0',
|
||||||
|
'WHERE 1',
|
||||||
|
f'WHERE {col} > (SELECT AVG({col}) FROM {table})',
|
||||||
|
])
|
||||||
|
returning = ' RETURNING *' if random.random() < 0.4 else ''
|
||||||
|
|
||||||
|
return s + '\n' + f'DELETE FROM {table} {where}{returning};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_index(s: str) -> str:
|
||||||
|
"""Append a CREATE INDEX statement"""
|
||||||
|
|
||||||
|
table, col = _pick_table_col(s)
|
||||||
|
unique = random.choice(['', 'UNIQUE '])
|
||||||
|
where = random.choice(['', f' WHERE {col} IS NOT NULL', f' WHERE {col} > 0'])
|
||||||
|
expr = random.choice(
|
||||||
|
[col, f'lower({col})', f'({col} + 1)', f'{col} COLLATE NOCASE'])
|
||||||
|
suffix = random.randint(0, 9999)
|
||||||
|
|
||||||
|
return s + '\n' + f'CREATE {unique} INDEX IF NOT EXISTS idx_{table}_{suffix} ON {table}({expr}){where};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_view(s: str) -> str:
|
||||||
|
"""Append a CREATE VIEW statement"""
|
||||||
|
|
||||||
|
table, col = _pick_table_col(s)
|
||||||
|
suffix = random.randint(0, 9999)
|
||||||
|
temp = random.choice(['', 'TEMP ', 'TEMPORARY '])
|
||||||
|
|
||||||
|
return s + '\n' + f'CREATE {temp} VIEW IF NOT EXISTS v_{table}_{suffix} AS SELECT {col} FROM {table};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_trigger(s: str) -> str:
|
||||||
|
"""Append a CREATE TRIGGER statement"""
|
||||||
|
|
||||||
|
table, col = _pick_table_col(s)
|
||||||
|
when = random.choice(['BEFORE', 'AFTER'])
|
||||||
|
event = random.choice(['INSERT', 'UPDATE', 'DELETE', f'UPDATE OF {col}'])
|
||||||
|
suffix = random.randint(0, 9999)
|
||||||
|
body = random.choice([
|
||||||
|
"SELECT RAISE(IGNORE)",
|
||||||
|
"SELECT RAISE(FAIL, 'no')",
|
||||||
|
"SELECT RAISE(ABORT, 'abort')",
|
||||||
|
"SELECT RAISE(ROLLBACK, 'rb')",
|
||||||
|
f"INSERT INTO {table}({col}) VALUES (NULL)",
|
||||||
|
])
|
||||||
|
fer = ' FOR EACH ROW' if random.random() < 0.5 else ''
|
||||||
|
|
||||||
|
return s + '\n' + f'CREATE TRIGGER IF NOT EXISTS trg_{table}_{suffix} {when} {event} ON {table}{fer} BEGIN {body}; END;'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_wrap_savepoint(s: str) -> str:
|
||||||
|
"""Wrap the query inside SAVEPOINT-RELEASE/ROLLBACK"""
|
||||||
|
|
||||||
|
name = f'sp{random.randint(0, 9999)}'
|
||||||
|
end = random.choice([
|
||||||
|
f'RELEASE {name};',
|
||||||
|
f'ROLLBACK TO {name};\nRELEASE {name};',
|
||||||
|
f'ROLLBACK TRANSACTION TO SAVEPOINT {name};\nRELEASE SAVEPOINT {name};',
|
||||||
|
])
|
||||||
|
|
||||||
|
return f'SAVEPOINT {name};\n{s}\n{end}'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_wrap_transaction(s: str) -> str:
|
||||||
|
"""Wrap the query inside a transaction"""
|
||||||
|
|
||||||
|
begin = random.choice([
|
||||||
|
"BEGIN", "BEGIN DEFERRED", "BEGIN IMMEDIATE", "BEGIN EXCLUSIVE",
|
||||||
|
"BEGIN TRANSACTION", "BEGIN DEFERRED TRANSACTION",
|
||||||
|
"BEGIN IMMEDIATE TRANSACTION", "BEGIN EXCLUSIVE TRANSACTION"
|
||||||
|
])
|
||||||
|
end = random.choice(
|
||||||
|
['COMMIT;', 'ROLLBACK;', 'END;', 'END TRANSACTION;', 'COMMIT TRANSACTION;'])
|
||||||
|
|
||||||
|
return f'{begin};\n{s}\n{end}'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_wrap_attach_detach(s: str) -> str:
|
||||||
|
"""Wrap the query inside ATTACH and DETACH statements"""
|
||||||
|
|
||||||
|
alias = f'aux{random.randint(0, 99)}'
|
||||||
|
|
||||||
|
return (f"ATTACH DATABASE ':memory:' AS {alias};\n"
|
||||||
|
f"{s}\n"
|
||||||
|
f"DETACH DATABASE {alias};")
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_vacuum(s: str) -> str:
|
||||||
|
"""Append a VACUUM statement"""
|
||||||
|
|
||||||
|
return s + '\n' + random.choice([
|
||||||
|
'VACUUM;',
|
||||||
|
'VACUUM main;',
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_analyze(s: str) -> str:
|
||||||
|
"""Append an ANALYZE statement"""
|
||||||
|
|
||||||
|
table = _pick_table(s)
|
||||||
|
|
||||||
|
return s + '\n' + random.choice([
|
||||||
|
'ANALYZE;',
|
||||||
|
f'ANALYZE {table};',
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_reindex(s: str) -> str:
|
||||||
|
"""Append a REINDEX statement"""
|
||||||
|
|
||||||
|
table = _pick_table(s)
|
||||||
|
|
||||||
|
return s + '\n' + random.choice([
|
||||||
|
f'REINDEX {table};',
|
||||||
|
'REINDEX;',
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_null_insert(s: str) -> str:
|
||||||
|
"""Append an INSERT statement with NULL"""
|
||||||
|
|
||||||
|
schema = get_schema(s)
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
cols = schema[table]
|
||||||
|
|
||||||
|
if not cols:
|
||||||
|
return s + '\n' + f'INSERT INTO {table} DEFAULT VALUES;'
|
||||||
|
|
||||||
|
vals = ', '.join('NULL' for _ in cols)
|
||||||
|
|
||||||
|
return s + '\n' + f'INSERT INTO {table} VALUES ({vals});'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_insert_default(s: str) -> str:
|
||||||
|
"""Append an INSERT statement with DEFAULT VALUES"""
|
||||||
|
return s + '\n' + f'INSERT INTO {_pick_table(s)} DEFAULT VALUES;'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_insert_select(s: str) -> str:
|
||||||
|
"""Append an INSERT statement that duplicates all rows in the table"""
|
||||||
|
|
||||||
|
table = _pick_table(s)
|
||||||
|
|
||||||
|
return s + '\n' + f'INSERT INTO {table} SELECT * FROM {table};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_insert_or_x(s: str) -> str:
|
||||||
|
"""Append an INSERT OR ROLLBACK/ABORT/FAIL/IGNORE/REPLACE statement"""
|
||||||
|
|
||||||
|
schema = get_schema(s)
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
cols = schema[table] or ['rowid']
|
||||||
|
vals = ', '.join(
|
||||||
|
random.choice(['NULL', '0', "''", "'x'",
|
||||||
|
str(random.randint(-10, 10))]) for _ in cols)
|
||||||
|
kind = random.choice(
|
||||||
|
['OR IGNORE', 'OR REPLACE', 'OR FAIL', 'OR ABORT', 'OR ROLLBACK'])
|
||||||
|
|
||||||
|
return s + '\n' + f'INSERT {kind} INTO {table} VALUES ({vals});'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_upsert(s: str) -> str:
|
||||||
|
"""Append an INSERT statement that updates the existing set if there is a conflict"""
|
||||||
|
|
||||||
|
schema = get_schema(s)
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
cols = schema[table]
|
||||||
|
if not cols:
|
||||||
|
return s
|
||||||
|
target = cols[0]
|
||||||
|
upd = ', '.join(f'{c} = excluded.{c}' for c in cols[:3])
|
||||||
|
vals = ', '.join(random.choice(['NULL', '1', "'x'"]) for _ in cols)
|
||||||
|
|
||||||
|
return s + '\n' + f'INSERT INTO {table} VALUES ({vals}) ON CONFLICT({target}) DO UPDATE SET {upd};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_alter_rename_table(s: str) -> str:
|
||||||
|
"""Append an ALTER statement that renames an existing table"""
|
||||||
|
|
||||||
|
table = _pick_table(s)
|
||||||
|
suffix = random.randint(0, 9999)
|
||||||
|
|
||||||
|
return s + '\n' + f'ALTER TABLE {table} RENAME TO {table}_r{suffix};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_alter_rename_column(s: str) -> str:
|
||||||
|
"""Append an ALTER statement that renames a column of an existing table"""
|
||||||
|
schema = get_schema(s)
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
cols = schema[table]
|
||||||
|
if not cols:
|
||||||
|
return s
|
||||||
|
col = random.choice(cols)
|
||||||
|
suffix = random.randint(0, 9999)
|
||||||
|
return s + '\n' + f'ALTER TABLE {table} RENAME COLUMN {col} TO {col}_r{suffix};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_alter_add_column(s: str) -> str:
|
||||||
|
"""Append an ALTER statement that adds a column to an existing table"""
|
||||||
|
|
||||||
|
table = _pick_table(s)
|
||||||
|
suffix = random.randint(0, 9999)
|
||||||
|
type = random.choice(TYPES)
|
||||||
|
extras = random.choice([
|
||||||
|
'',
|
||||||
|
' DEFAULT NULL',
|
||||||
|
" DEFAULT ''",
|
||||||
|
' DEFAULT 0',
|
||||||
|
' DEFAULT CURRENT_TIMESTAMP',
|
||||||
|
' COLLATE NOCASE',
|
||||||
|
' NOT NULL DEFAULT 0',
|
||||||
|
' UNIQUE',
|
||||||
|
' DEFAULT (random())',
|
||||||
|
' DEFAULT (abs(random()) % 1000)',
|
||||||
|
' COLLATE RTRIM',
|
||||||
|
])
|
||||||
|
|
||||||
|
return s + '\n' + f'ALTER TABLE {table} ADD COLUMN extra_{suffix} {type}{extras};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_alter_drop_column(s: str) -> str:
|
||||||
|
"""Append an ALTER statement that drops a column from an existing table"""
|
||||||
|
|
||||||
|
schema = get_schema(s)
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
cols = schema[table]
|
||||||
|
if not cols:
|
||||||
|
return s
|
||||||
|
col = random.choice(cols)
|
||||||
|
|
||||||
|
return s + '\n' + f'ALTER TABLE {table} DROP COLUMN {col};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_alter_drop_table_index_view_trigger(s: str) -> str:
|
||||||
|
"""Append an ALTER statement that drops a table, index, view, or trigger"""
|
||||||
|
|
||||||
|
schema = get_schema(s)
|
||||||
|
if not schema:
|
||||||
|
return s
|
||||||
|
table = random.choice(list(schema.keys()))
|
||||||
|
obj = random.choice(['TABLE', 'INDEX', 'VIEW', 'TRIGGER'])
|
||||||
|
|
||||||
|
return s + '\n' + f'DROP {obj} IF EXISTS {table};'
|
||||||
|
|
||||||
|
|
||||||
|
def mut_repeat(s: str) -> str:
|
||||||
|
"""Repeat the query 1-10 times"""
|
||||||
|
return f'{s}\n' * random.randint(1, 10)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_prepend_random_pragma(s: str) -> str:
|
||||||
|
"""Prepend a PRAGMA statement"""
|
||||||
|
return random.choice(PRAGMAS) + '\n' + s
|
||||||
|
|
||||||
|
|
||||||
|
def mut_append_random_pragma(s: str) -> str:
|
||||||
|
"""Append a PRAGMA statement"""
|
||||||
|
return s + '\n' + random.choice(PRAGMAS)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_prepend_random_meta_command(s: str) -> str:
|
||||||
|
"""Prepend a meta-command"""
|
||||||
|
return random.choice(META_COMMANDS) + '\n' + s
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
import random
|
||||||
|
import re
|
||||||
|
|
||||||
|
from sqlite_static_helper import *
|
||||||
|
|
||||||
|
_TOKEN_RE = re.compile(
|
||||||
|
r"""
|
||||||
|
(?P<line_comment>--[^\n]*) |
|
||||||
|
(?P<block_comment>/\*.*?\*/) |
|
||||||
|
(?P<string>'(?:[^']|'')*') |
|
||||||
|
(?P<dquoted>"(?:[^"]|"")*") |
|
||||||
|
(?P<bracket>\[[^\]]*\]) |
|
||||||
|
(?P<backtick>`(?:[^`]|``)*`) |
|
||||||
|
(?P<blob>[xX]'[0-9a-fA-F]*') |
|
||||||
|
(?P<number>\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b) |
|
||||||
|
(?P<ident>[A-Za-z_][A-Za-z0-9_]*) |
|
||||||
|
(?P<op>[<>!=]=|<>|\|\||::|->>?|[+\-*/%<>=&|^~,.;()@]) |
|
||||||
|
(?P<ws>\s+) |
|
||||||
|
(?P<other>.)
|
||||||
|
""",
|
||||||
|
re.VERBOSE | re.DOTALL,
|
||||||
|
)
|
||||||
|
|
||||||
|
_UNSAFE_KINDS = {
|
||||||
|
"line_comment", "block_comment", "string", "dquoted", "bracket", "backtick",
|
||||||
|
"blob"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _tokenize(s: str):
|
||||||
|
return [(m.lastgroup, m.group()) for m in _TOKEN_RE.finditer(s)]
|
||||||
|
|
||||||
|
|
||||||
|
def _sub_in_safe(s: str, pattern: re.Pattern, repl, max_subs: int = 1) -> str:
|
||||||
|
"""Run `pattern.sub(repl, …)` only outside strings/comments/blob literals."""
|
||||||
|
if max_subs <= 0:
|
||||||
|
return s
|
||||||
|
parts: list[str] = []
|
||||||
|
done = 0
|
||||||
|
for kind, text in _tokenize(s):
|
||||||
|
if done >= max_subs or kind in _UNSAFE_KINDS:
|
||||||
|
parts.append(text)
|
||||||
|
continue
|
||||||
|
new_text, n = pattern.subn(repl, text, count=max_subs - done)
|
||||||
|
parts.append(new_text)
|
||||||
|
done += n
|
||||||
|
return ''.join(parts)
|
||||||
|
|
||||||
|
|
||||||
|
_CMP_RE = re.compile(r'(?<![<>!=])(<=|>=|<>|!=|==|=|<|>)(?!=)')
|
||||||
|
|
||||||
|
|
||||||
|
def mut_swap_comparison(s: str) -> str:
|
||||||
|
"""Swap the left-most comparison operator with a different one"""
|
||||||
|
|
||||||
|
def repl(m: re.Match) -> str:
|
||||||
|
op = m.group(1)
|
||||||
|
return random.choice([o for o in CMP_OPS if o != op])
|
||||||
|
|
||||||
|
return _sub_in_safe(s, _CMP_RE, repl, 1)
|
||||||
|
|
||||||
|
|
||||||
|
_BOOL_RE = re.compile(r'\b(AND|OR)\b', re.I)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_swap_boolean(s: str) -> str:
|
||||||
|
"""Swap the left-most boolean operator with a different one"""
|
||||||
|
|
||||||
|
def repl(m: re.Match) -> str:
|
||||||
|
return 'OR' if m.group(1).upper() == 'AND' else 'AND'
|
||||||
|
|
||||||
|
return _sub_in_safe(s, _BOOL_RE, repl, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_negate_where(s: str) -> str:
|
||||||
|
"""Swap the left-most WHERE with WHERE NOT"""
|
||||||
|
if not re.search(r'\bWHERE\b', s, re.I):
|
||||||
|
return s
|
||||||
|
return _sub_in_safe(s, re.compile(r'\bWHERE\b', re.I), 'WHERE NOT', 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_change_type(s: str) -> str:
|
||||||
|
"""Swap the left-most data type with a different one"""
|
||||||
|
pat = re.compile(
|
||||||
|
r'\b(' + '|'.join(
|
||||||
|
re.escape(t)
|
||||||
|
for t in sorted(TYPES, key=len, reverse=True)) +
|
||||||
|
r')\b',
|
||||||
|
re.I,
|
||||||
|
)
|
||||||
|
|
||||||
|
def repl(m: re.Match) -> str:
|
||||||
|
cur = m.group(1).upper()
|
||||||
|
return random.choice(
|
||||||
|
[t for t in TYPES if t.upper() != cur])
|
||||||
|
|
||||||
|
return _sub_in_safe(s, pat, repl, 1)
|
||||||
|
|
||||||
|
def mut_swap_join_type(s: str) -> str:
|
||||||
|
"""Swap one join type to a different join type"""
|
||||||
|
|
||||||
|
join_pattern = '|'.join(
|
||||||
|
re.escape(j) for j in sorted(JOINS, key=len, reverse=True))
|
||||||
|
pat = re.compile(rf'\b({join_pattern})\b', re.I)
|
||||||
|
|
||||||
|
m = pat.search(s)
|
||||||
|
if not m:
|
||||||
|
return s
|
||||||
|
|
||||||
|
matched = m.group(1).upper()
|
||||||
|
alternatives = [j for j in JOINS if j.upper() != matched]
|
||||||
|
if not alternatives:
|
||||||
|
return s
|
||||||
|
|
||||||
|
replacement = random.choice(alternatives)
|
||||||
|
if m.group(1).isupper():
|
||||||
|
replacement = replacement.upper()
|
||||||
|
elif m.group(1).islower():
|
||||||
|
replacement = replacement.lower()
|
||||||
|
elif m.group(1)[0].isupper() and m.group(1)[1:].islower():
|
||||||
|
replacement = replacement.title()
|
||||||
|
|
||||||
|
return s[:m.start()] + replacement + s[m.end():]
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
import random
|
||||||
|
import re
|
||||||
|
|
||||||
|
import sqlite_static_helper
|
||||||
|
|
||||||
|
|
||||||
|
def _quote_str(text: str) -> str:
|
||||||
|
"""O'Reilly -> 'O''Reilly'"""
|
||||||
|
return "'" + text.replace("'", "''") + "'"
|
||||||
|
|
||||||
|
|
||||||
|
_TOKEN_RE = re.compile(
|
||||||
|
r"""
|
||||||
|
(?P<line_comment>--[^\n]*) |
|
||||||
|
(?P<block_comment>/\*.*?\*/) |
|
||||||
|
(?P<string>'(?:[^']|'')*') |
|
||||||
|
(?P<dquoted>"(?:[^"]|"")*") |
|
||||||
|
(?P<bracket>\[[^\]]*\]) |
|
||||||
|
(?P<backtick>`(?:[^`]|``)*`) |
|
||||||
|
(?P<blob>[xX]'[0-9a-fA-F]*') |
|
||||||
|
(?P<number>\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b) |
|
||||||
|
(?P<ident>[A-Za-z_][A-Za-z0-9_]*) |
|
||||||
|
(?P<op>[<>!=]=|<>|\|\||::|->>?|[+\-*/%<>=&|^~,.;()@]) |
|
||||||
|
(?P<ws>\s+) |
|
||||||
|
(?P<other>.)
|
||||||
|
""",
|
||||||
|
re.VERBOSE | re.DOTALL,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _tokenize(s: str) -> list[tuple[str | None, str]]:
|
||||||
|
"""[("line_comment", "-- This is a comment!"), ("number", 0), ...]"""
|
||||||
|
return [(m.lastgroup, m.group()) for m in _TOKEN_RE.finditer(s)]
|
||||||
|
|
||||||
|
|
||||||
|
_UNSAFE_KINDS = {
|
||||||
|
"line_comment", "block_comment", "string", "dquoted", "bracket", "backtick",
|
||||||
|
"blob"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _sub_in_safe(s: str, pattern: re.Pattern, repl, max_subs: int = 1) -> str:
|
||||||
|
"""Run `pattern.sub(repl, …)` only outside strings/comments/blob literals."""
|
||||||
|
if max_subs <= 0:
|
||||||
|
return s
|
||||||
|
parts: list[str] = []
|
||||||
|
done = 0
|
||||||
|
for kind, text in _tokenize(s):
|
||||||
|
if done >= max_subs or kind in _UNSAFE_KINDS:
|
||||||
|
parts.append(text)
|
||||||
|
continue
|
||||||
|
new_text, n = pattern.subn(repl, text, count=max_subs - done)
|
||||||
|
parts.append(new_text)
|
||||||
|
done += n
|
||||||
|
return ''.join(parts)
|
||||||
|
|
||||||
|
|
||||||
|
_NUM_RE = re.compile(r'\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b')
|
||||||
|
|
||||||
|
|
||||||
|
def mut_replace_num_with_edge_int(s: str) -> str:
|
||||||
|
"""Replace the left-most number with a random edge-case integer"""
|
||||||
|
return _sub_in_safe(
|
||||||
|
s, _NUM_RE, lambda m: str(random.choice(sqlite_static_helper.EDGE_INTS)), 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_replace_num_with_random_int(s: str) -> str:
|
||||||
|
"""Replace the left-most number with a random integer"""
|
||||||
|
return _sub_in_safe(s, _NUM_RE,
|
||||||
|
lambda m: str(random.randint(-(2**63), 2**63 - 1)), 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_replace_num_with_edge_float(s: str) -> str:
|
||||||
|
"""Replace the left-most number with a random edge-case floating-point number"""
|
||||||
|
return _sub_in_safe(
|
||||||
|
s, _NUM_RE, lambda m: repr(random.choice(sqlite_static_helper.EDGE_FLOATS)),
|
||||||
|
1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_replace_num_with_edge_string(s: str) -> str:
|
||||||
|
"""Replace the left-most number with a random edge-case string"""
|
||||||
|
return _sub_in_safe(
|
||||||
|
s, _NUM_RE,
|
||||||
|
lambda m: _quote_str(random.choice(sqlite_static_helper.EDGE_STRINGS)), 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_replace_num_with_random_hex(s: str) -> str:
|
||||||
|
"""Replace the left-most number with a random hex blob"""
|
||||||
|
n = random.randint(0, 16)
|
||||||
|
val = "x'" + ''.join(random.choices('0123456789abcdef', k=n * 2)) + "'"
|
||||||
|
return _sub_in_safe(s, _NUM_RE, lambda m: val, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_replace_num_with_null(s: str) -> str:
|
||||||
|
"""Replace the left-most number with NULL"""
|
||||||
|
return _sub_in_safe(s, _NUM_RE, lambda m: 'NULL', 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_wrap_num_in_cast(s: str) -> str:
|
||||||
|
"""Cast the left-most number to a different data type"""
|
||||||
|
target = random.choice(sqlite_static_helper.TYPES)
|
||||||
|
return _sub_in_safe(s, _NUM_RE, lambda m: f'CAST({m.group(0)} AS {target})',
|
||||||
|
1)
|
||||||
|
|
||||||
|
|
||||||
|
def _wrap_value(s: str, templates: list[str]) -> str:
|
||||||
|
tpl = random.choice(templates)
|
||||||
|
return _sub_in_safe(s, _NUM_RE, lambda m: tpl.replace('{v}', m.group(0)), 1)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_wrap_num_in_datetime_func(s: str) -> str:
|
||||||
|
"""Wrap the left-most number in a date/time function"""
|
||||||
|
return _wrap_value(s, sqlite_static_helper.DATETIME_FUNCS)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_wrap_num_in_core_func(s: str) -> str:
|
||||||
|
"""Wrap the left-most number in core function"""
|
||||||
|
return _wrap_value(s, sqlite_static_helper.CORE_FUNCS)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_wrap_num_in_math_func(s: str) -> str:
|
||||||
|
"""Wrap the left-most number in a math function"""
|
||||||
|
return _wrap_value(s, sqlite_static_helper.MATH_FUNCS)
|
||||||
|
|
||||||
|
|
||||||
|
def mut_wrap_num_in_json_func(s: str) -> str:
|
||||||
|
"""Wrap the left-most number in a JSON function"""
|
||||||
|
return _wrap_value(s, sqlite_static_helper.JSON_VALUE_FUNCS)
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import random
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from runner import run_sql_parallel
|
||||||
|
from sqlite_static_helper import *
|
||||||
|
from stats import save_bug
|
||||||
|
|
||||||
|
|
||||||
|
def is_crash(rc: int, _stderr: str) -> bool:
|
||||||
|
|
||||||
|
# https://tldp.org/LDP/abs/html/exitcodes.html
|
||||||
|
if rc > 128 and rc != 130:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def is_unexpected_error(b_rc, _b_err, r_rc, _r_err, _sql):
|
||||||
|
if b_rc != 0 and r_rc == 0:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def is_valid_sql(r_rc: int, _r_err: str):
|
||||||
|
if r_rc != 0:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def check(buggy_bin: str,
|
||||||
|
ref_bin: str,
|
||||||
|
sql: str,
|
||||||
|
with_flag: bool = False,
|
||||||
|
save_bugs: bool = True) -> int:
|
||||||
|
"""
|
||||||
|
Returns:
|
||||||
|
- `-1`: The query was not successfully executed on the reference binary, probably due to syntax issues
|
||||||
|
- `0`: The query caused a logic bug, crash, or some other unexpected error.
|
||||||
|
- `1`: The query was successfully executed on both binaries.
|
||||||
|
"""
|
||||||
|
|
||||||
|
flag = '' if not with_flag else random.choice(FLAGS)
|
||||||
|
|
||||||
|
try:
|
||||||
|
b_out, b_err, b_rc, r_out, r_err, r_rc = run_sql_parallel(
|
||||||
|
buggy_bin, ref_bin, sql, flag)
|
||||||
|
except subprocess.TimeoutExpired:
|
||||||
|
return 0
|
||||||
|
except Exception:
|
||||||
|
return -1
|
||||||
|
|
||||||
|
if not is_valid_sql(r_rc, r_err):
|
||||||
|
return -1
|
||||||
|
|
||||||
|
# # Crash Detection
|
||||||
|
if is_crash(b_rc, b_err) and not is_crash(r_rc, r_err):
|
||||||
|
if save_bugs:
|
||||||
|
save_bug(sql, 'crash', b_out, b_err, flag=flag)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
# # Unexpected Error Detection
|
||||||
|
elif is_unexpected_error(b_rc, b_err, r_rc, r_err, sql):
|
||||||
|
if save_bugs:
|
||||||
|
save_bug(sql, 'unexpected_error', b_out, b_err, flag=flag)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
# # Logic Bug Detection
|
||||||
|
elif b_rc == 0 and r_rc == 0 and b_out != r_out:
|
||||||
|
if save_bugs:
|
||||||
|
save_bug(sql, 'logic', b_out, b_err, r_out, flag=flag)
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
BIN
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
gcovr
|
||||||
@@ -0,0 +1,158 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
.progress 2
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b'), ('c','d');
|
||||||
|
SeLEct * FROM T WHERE a = REPLACE('a;',';','') AND b = 'b';
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL);
|
||||||
|
SELECT * FROM T NATURAL JOIN T;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_4597 AS SELECT a FROM T;
|
||||||
|
ALTER TABLE T RENAME TO T_r6678;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b'), ('c','d');
|
||||||
|
SELECT * FROM T WHERE a = REPLACE('a;',';','') AND b = 'b';
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL);
|
||||||
|
SELECT * FROM T NATURAL JOIN T;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_4597 AS SELECT a FROM T;
|
||||||
|
ALTER TABLE T RENAME TO T_r6678;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b'), ('c','d');
|
||||||
|
SELECT * FROM T WHERE a = REPLACE('a;',';','') AND b = 'b';
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL);
|
||||||
|
SELECT * FROM T NATURAL JOIN T;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_4597 AS SELECT a FROM T;
|
||||||
|
ALTER TABLE T RENAME TO T_r6678;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b'), ('c','d');
|
||||||
|
SELECT * FROM T WHERE a = REPLACE('a;',';','') AND b = 'b';
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL);
|
||||||
|
SELECT * FROM T NATURAL JOIN T;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_4597 AS SELECT a FROM T;
|
||||||
|
ALTER TABLE T RENAME TO T_r6678;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b'), ('c','d');
|
||||||
|
SELECT * FROM T WHERE a = REPLACE('a;',';','') AND b = 'b';
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL);
|
||||||
|
SELECT * FROM T NATURAL JOIN T;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_4597 AS SELECT a FROM T;
|
||||||
|
ALTER TABLE T RENAME TO T_r6678;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
|
||||||
|
ALTER TABLE T RENAME COLUMN A TO A_r8221;
|
||||||
|
PRAGMA wal_checkpoint('TRUNCATE');
|
||||||
|
INSERT INTO T VALUES (NULL, 1, NULL) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
ALTER TABLE T RENAME TO T_r7965;
|
||||||
|
DROP INDEX IF EXISTS T;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3.39.0 2022-05-10 23:28:12 764b71267e0b31ff7eaf2a0def7526a1a02dce4d5b456dea060d97ed342ealt1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3.51.1 2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88 (64-bit)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-version
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,983 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA vdbe_trace = FALSE;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
SELECT GROUP_CONCAT(b, b) OVER (ORDER BY b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM T;
|
||||||
|
UPDATE T SET a = json_object('k', a) WHERE 1 RETURNING *;
|
||||||
|
PRAGMA vdbe_trace = FALSE;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
SELECT GROUP_CONCAT(b, b) OVER (ORDER BY b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM T;
|
||||||
|
UPDATE T SET a = json_object('k', a) WHERE 1 RETURNING *;
|
||||||
|
PRAGMA vdbe_trace = FALSE;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
ATTACH DATABASE (':memory:' || '') AS aux15;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
PRAGMA foreign_keys;
|
||||||
|
PRAGMA automatic_index;
|
||||||
|
PRAGMA case_sensitive_like = TRUE;
|
||||||
|
PRAGMA auto_vacuum = FULL;
|
||||||
|
.dbconfig fk off
|
||||||
|
PRAGMA foreign_keys=ON;
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES(log(100));
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
CREATE TABLE main.t2(y INTEGER REFERENCES t1 (x));
|
||||||
|
INSERT INTO t2 VALUES(100);
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',9e999);
|
||||||
|
WITH d AS (SELECT * FROM T) SELECT * FROM d WHERE +c > 0;
|
||||||
|
INSERT INTO t2 VALUES(101);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT 1, x FROM _m;
|
||||||
|
SELECT 2, y FROM t2;
|
||||||
|
DELETE FROM t2 WHERE 0;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r345;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t2_4434 BEFORE INSERT ON t2 FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'abort'); END;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
SELECT GROUP_CONCAT(b, b) OVER (ORDER BY b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM T;
|
||||||
|
UPDATE T SET a = json_object('k', a) WHERE 1 RETURNING *;
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_t1_3395 ON t1(lower(x)) WHERE x IS NOT NULL;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
Usage: /home/test/sqlite3-src/build/sqlite3 [OPTIONS] FILENAME [SQL]
|
||||||
|
FILENAME is the name of an SQLite database. A new database is created
|
||||||
|
if the file does not previously exist.
|
||||||
|
OPTIONS include:
|
||||||
|
-append append the database to the end of the file
|
||||||
|
-ascii set output mode to 'ascii'
|
||||||
|
-bail stop after hitting an error
|
||||||
|
-batch force batch I/O
|
||||||
|
-box set output mode to 'box'
|
||||||
|
-column set output mode to 'column'
|
||||||
|
-cmd COMMAND run "COMMAND" before reading stdin
|
||||||
|
-csv set output mode to 'csv'
|
||||||
|
-deserialize open the database using sqlite3_deserialize()
|
||||||
|
-echo print commands before execution
|
||||||
|
-init FILENAME read/process named file
|
||||||
|
-[no]header turn headers on or off
|
||||||
|
-help show this message
|
||||||
|
-html set output mode to HTML
|
||||||
|
-interactive force interactive I/O
|
||||||
|
-json set output mode to 'json'
|
||||||
|
-line set output mode to 'line'
|
||||||
|
-list set output mode to 'list'
|
||||||
|
-lookaside SIZE N use N entries of SZ bytes for lookaside memory
|
||||||
|
-markdown set output mode to 'markdown'
|
||||||
|
-maxsize N maximum size for a --deserialize database
|
||||||
|
-memtrace trace all memory allocations and deallocations
|
||||||
|
-mmap N default mmap size set to N
|
||||||
|
-newline SEP set output row separator. Default: '\n'
|
||||||
|
-nofollow refuse to open symbolic links to database files
|
||||||
|
-nonce STRING set the safe-mode escape nonce
|
||||||
|
-nullvalue TEXT set text string for NULL values. Default ''
|
||||||
|
-pagecache SIZE N use N slots of SZ bytes each for page cache memory
|
||||||
|
-quote set output mode to 'quote'
|
||||||
|
-readonly open the database read-only
|
||||||
|
-safe enable safe-mode
|
||||||
|
-separator SEP set output column separator. Default: '|'
|
||||||
|
-stats print memory stats before each finalize
|
||||||
|
-table set output mode to 'table'
|
||||||
|
-tabs set output mode to 'tabs'
|
||||||
|
-version show SQLite version
|
||||||
|
-vfs NAME use NAME as the default VFS
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-help
|
||||||
|
```
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,35 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA encoding = 'UTF-16le';
|
||||||
|
CREATE TABLE [t0](c0);
|
||||||
|
INSERT INTO t0(c0) VALUES (NULL);
|
||||||
|
CREATE INDEX i0 ON t0(json_remove(unixepoch(unistr_quote('Hello')), '$')) WHERE NOT c0 NOT NULL;
|
||||||
|
SELECT 1 FROM /* {"a":1,"b":[1,2,3]} */ t0 WHERE (t0.c0 IS FALSE) IS FALSE;
|
||||||
|
SELECT 1 FROM t0 WHERE (t0.c0 IS FALSE) BETWEEN FALSE AND TRUE;
|
||||||
|
|
||||||
|
ALTER TABLE t0 RENAME TO t0_r5716;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SAVEPOINT sp1623;
|
||||||
|
.timeout
|
||||||
|
((PRAGMA)) synchronous = '2';
|
||||||
|
PRAGMA count_changes;
|
||||||
|
PRAGMA vdbe_listing = CAST(0 AS NATIVE CHARACTER(70)NVARCHAR(100));
|
||||||
|
.open
|
||||||
|
CREATE TABLE t1(x INTEGER PRIMARY KEY, y, z);
|
||||||
|
CREATE TABLE t2(a, b);
|
||||||
|
CREATE VIEW agg2 AS SELECT a, sum(b) AS m FROM t2 GROUP BY a;
|
||||||
|
SELECT t1.z, agg2.m FROM t1 JOIN agg2 ON t1.y=agg2.m WHERE t1.x IN (1,2,3);
|
||||||
|
CREATE TABLE t920(x);
|
||||||
|
INSERT INTO t920 VALUES(3),(4),(5);
|
||||||
|
SELECT * FROM t920,(SELECT 0 FROM t920),(VALUES(9)) WHERE 5 IN (x);
|
||||||
|
|
||||||
|
SELECT PERCENT_RANK() OVER (ORDER BY a ROWS BETWEEN 2 PRECEDING OR 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t2;
|
||||||
|
INSERT INTO t920 VALUES (1) ON CONFLICT(x) DO UPDATE SET x = excluded.x;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r6222;
|
||||||
|
SELECT * FROM t1 CROSS JOIN t1;
|
||||||
|
DELETE FROM t1 WHERE x IS NULL RETURNING *;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp1623;
|
||||||
|
RELEASE SAVEPOINT sp1623;
|
||||||
|
SELECT AVG(y) FILTER (WHERE y != 0) OVER (ORDER BY y ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES) FROM t1;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
Usage: /home/test/sqlite3-src/build/sqlite3 [OPTIONS] FILENAME [SQL]
|
||||||
|
FILENAME is the name of an SQLite database. A new database is created
|
||||||
|
if the file does not previously exist.
|
||||||
|
OPTIONS include:
|
||||||
|
-append append the database to the end of the file
|
||||||
|
-ascii set output mode to 'ascii'
|
||||||
|
-bail stop after hitting an error
|
||||||
|
-batch force batch I/O
|
||||||
|
-box set output mode to 'box'
|
||||||
|
-column set output mode to 'column'
|
||||||
|
-cmd COMMAND run "COMMAND" before reading stdin
|
||||||
|
-csv set output mode to 'csv'
|
||||||
|
-deserialize open the database using sqlite3_deserialize()
|
||||||
|
-echo print commands before execution
|
||||||
|
-init FILENAME read/process named file
|
||||||
|
-[no]header turn headers on or off
|
||||||
|
-help show this message
|
||||||
|
-html set output mode to HTML
|
||||||
|
-interactive force interactive I/O
|
||||||
|
-json set output mode to 'json'
|
||||||
|
-line set output mode to 'line'
|
||||||
|
-list set output mode to 'list'
|
||||||
|
-lookaside SIZE N use N entries of SZ bytes for lookaside memory
|
||||||
|
-markdown set output mode to 'markdown'
|
||||||
|
-maxsize N maximum size for a --deserialize database
|
||||||
|
-memtrace trace all memory allocations and deallocations
|
||||||
|
-mmap N default mmap size set to N
|
||||||
|
-newline SEP set output row separator. Default: '\n'
|
||||||
|
-nofollow refuse to open symbolic links to database files
|
||||||
|
-nonce STRING set the safe-mode escape nonce
|
||||||
|
-nullvalue TEXT set text string for NULL values. Default ''
|
||||||
|
-pagecache SIZE N use N slots of SZ bytes each for page cache memory
|
||||||
|
-quote set output mode to 'quote'
|
||||||
|
-readonly open the database read-only
|
||||||
|
-safe enable safe-mode
|
||||||
|
-separator SEP set output column separator. Default: '|'
|
||||||
|
-stats print memory stats before each finalize
|
||||||
|
-table set output mode to 'table'
|
||||||
|
-tabs set output mode to 'tabs'
|
||||||
|
-version show SQLite version
|
||||||
|
-vfs NAME use NAME as the default VFS
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-help
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,689 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA trusted_schema = NO;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux77;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a',ln(datetime(NULL))), ('b',-CAST(tan(instr(NULL, (concat_ws(',', 1, 2, 3) + 0))) AS REAL)), ('c',9e999);
|
||||||
|
SELECT a,b,
|
||||||
|
LEAD(b,1) OVER (ORDER BY b DESC) AS c,
|
||||||
|
NTILE(2) OVER (ORDER BY b DESC) AS d FROM T;
|
||||||
|
PRAGMA case_sensitive_like == OFF;
|
||||||
|
BEGIN TRANSACTION;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = -concat(log10(CAST(substring(printf('%05d', 1), 1) AS DOUBLE)), 2, 3);
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO main.T VALUES ('' || ('a'), 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = 0;
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
|
||||||
|
UPDATE T SET C = 79 RETURNING *;
|
||||||
|
SELECT * FROM T AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT C, COUNT(*) FROM T GROUP BY C HAVING C IN (SELECT C FROM T);
|
||||||
|
REINDEX;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T_9021 ON T(lower(A));
|
||||||
|
WITH cte AS (SELECT 1 AS x) INSERT INTO T(C) SELECT x FROM cte WHERE 1=0;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r4119;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_9843 AFTER DELETE ON T BEGIN SELECT RAISE(FAIL, 'no'); ENd;
|
||||||
|
PRAGMA vdbe_debug = 1;
|
||||||
|
VACUUM main;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = -concat(log10(CAST(1 AS DOUBLE)), 2, 3);
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO main.T VALUES ('' || ('a'), 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = 0;
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES /**/ ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
|
||||||
|
UPDATE T SET C = 79 RETURNING *;
|
||||||
|
SELECT * FROM T AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT C, COUNT(*) FROM T GROUP BY C HAVING C IN (SELECT C FROM T);
|
||||||
|
REINDEX;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T_9021 ON T(lower(A));
|
||||||
|
WITH cte AS (SELECT 1 AS x) INSERT INTO T(C) SELECT x FROM cte WHERE 1=0;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r4119;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_9843 AFTER DELETE ON T BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
PRAGMA vdbe_debug = 1;
|
||||||
|
VACUUM main;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = -concat(log10(CAST(1 AS DOUBLE)), 2, 3);
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO main.T VALUES ('' || ('a'), 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = 0;
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
|
||||||
|
UPDATE T SET C = 79 RETURNING *;
|
||||||
|
SELECT * FROM T AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT C, COUNT(*) FROM T GROUP BY C HAVING C IN (SELECT C FROM T);
|
||||||
|
REINDEX;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T_9021 ON T(lower(A));
|
||||||
|
WITH cte AS (SELECT 1 AS x) INSERT INTO T(C) SELECT x FROM cte WHERE 1=0;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r4119;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_9843 AFTER DELETE ON T BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
PRAGMA vdbe_debug = 1;
|
||||||
|
VACUUM main;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = -concat(log10(CAST(1 AS DOUBLE)), 2, 3);
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO main.T VALUES ('' || ('a'), 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = 0;
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
|
||||||
|
UPDATE T SET C = 79 RETURNING *;
|
||||||
|
SELECT * FROM T AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT C, COUNT(*) FROM T GROUP BY C HAVING C IN (SELECT C FROM T);
|
||||||
|
REINDEX;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T_9021 ON T(lower(A));
|
||||||
|
WITH cte AS (SELECT 1 AS x) INSERT INTO T(C) SELECT x FROM cte WHERE 1=0;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r4119;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_9843 AFTER DELETE ON T BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
PRAGMA vdbe_debug = 1;
|
||||||
|
VACUUM main;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = -concat(log10(CAST(1 AS DOUBLE)), 2, 3);
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO main.T VALUES ('' || ('a'), 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = 0;
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
|
||||||
|
UPDATE T SET C = 79 RETURNING *;
|
||||||
|
SELECT * FROM T AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT C, COUNT(*) FROM T GROUP BY C HAVING C IN (SELECT C FROM T);
|
||||||
|
REINDEX;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T_9021 ON T(lower(A));
|
||||||
|
WITH cte AS (SELECT 1 AS x) INSERT INTO T(C) SELECT x FROM cte WHERE 1=0;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r4119;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_9843 AFTER DELETE ON T BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
PRAGMA vdbe_debug = 1;
|
||||||
|
VACUUM main;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = -concat(log10(CAST(1 AS DOUBLE)), 2, 3);
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO main.T VALUES ('' || ('a'), 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = 0;
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
|
||||||
|
UPDATE T SET C = 79 RETURNING *;
|
||||||
|
SELECT * FROM T AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT C, COUNT(*) FROM T GROUP BY C HAVING C IN (SELECT C FROM T);
|
||||||
|
REINDEX;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T_9021 ON T(lower(A));
|
||||||
|
WITH cte AS (SELECT 1 AS x) INSERT INTO T(C) SELECT x FROM cte WHERE 1=0;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r4119;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_9843 AFTER DELETE ON T BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
PRAGMA vdbe_debug = 1;
|
||||||
|
VACUUM main;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = -concat(log10(CAST(1 AS DOUBLE)), 2, 3);
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO main.T VALUES ('' || ('a'), 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = 0;
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
|
||||||
|
UPDATE T SET C = 79 RETURNING *;
|
||||||
|
SELECT * FROM T AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT C, COUNT(*) FROM T GROUP BY C HAVING C IN (SELECT C FROM T);
|
||||||
|
REINDEX;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T_9021 ON T(lower(A));
|
||||||
|
WITH cte AS (SELECT 1 AS x) INSERT INTO T(C) SELECT x FROM cte WHERE 1=0;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r4119;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_9843 AFTER DELETE ON T BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
PRAGMA vdbe_debug = 1;
|
||||||
|
VACUUM main;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = -concat(log10(CAST(1 AS DOUBLE)), 2, 3);
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO main.T VALUES ('' || ('a'), 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = 0;
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
|
||||||
|
UPDATE T SET C = 79 RETURNING *;
|
||||||
|
SELECT * FROM T AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT C, COUNT(*) FROM T GROUP BY C HAVING C IN (SELECT C FROM T);
|
||||||
|
REINDEX;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T_9021 ON T(lower(A));
|
||||||
|
WITH cte AS (SELECT 1 AS x) INSERT INTO T(C) SELECT x FROM cte WHERE 1=0;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r4119;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_9843 AFTER DELETE ON T BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
PRAGMA vdbe_debug = 1;
|
||||||
|
VACUUM main;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = -concat(log10(CAST(1 AS DOUBLE)), 2, 3);
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO main.T VALUES ('' || ('a'), 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = 0;
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
|
||||||
|
UPDATE T SET C = 79 RETURNING *;
|
||||||
|
SELECT * FROM T AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT C, COUNT(*) FROM T GROUP BY C HAVING C IN (SELECT C FROM T);
|
||||||
|
REINDEX;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T_9021 ON T(lower(A));
|
||||||
|
WITH cte AS (SELECT 1 AS x) INSERT INTO T(C) SELECT x FROM cte WHERE 1=0;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r4119;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_9843 AFTER DELETE ON T BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
PRAGMA vdbe_debug = 1;
|
||||||
|
VACUUM main;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = -concat(log10(CAST(1 AS DOUBLE)), 2, 3);
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO main.T VALUES ('' || ('a'), 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
.quit
|
||||||
|
((PRAGMA)) vdbe_debug = 0;
|
||||||
|
PRAGMA secure_delete = ON;
|
||||||
|
PRAGMA wal_autocheckpoint = 1000;
|
||||||
|
.once log.txt
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
ALTER TABLE T DROP COLUMN B;
|
||||||
|
ALTER TABLE T RENAME TO T_r2338;
|
||||||
|
ALTER TABLE T RENAME TO T_r2523;
|
||||||
|
INSERT INTO T VALUES (1, 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
PRAGMA trusted_schema = OFF;
|
||||||
|
|
||||||
|
UPDATE T SET C = 79 RETURNING *;
|
||||||
|
SELECT * FROM T AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT C, COUNT(*) FROM T GROUP BY C HAVING C IN (SELECT C FROM T);
|
||||||
|
REINDEX;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T_9021 ON T(lower(A));
|
||||||
|
WITH cte AS (SELECT 1 AS x) INSERT INTO T(C) SELECT x FROM cte WHERE 1=0;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r4119;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_9843 AFTER DELETE ON T BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
PRAGMA vdbe_debug = 1;
|
||||||
|
VACUUM main;
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_T_8791 ON T(lower(B)) WHERE B IS NOT NULL;
|
||||||
|
SELECT * FROM T WHERE B <= ANY (SELECT B FROM T);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM T2) SELECT * FROM T;
|
||||||
|
UPDATE T SET A = '';
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL UNIQUE
|
||||||
|
);
|
||||||
|
CREATE TABLE `_m` (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
X VARCHAR(15) NOT NULL,
|
||||||
|
C BIGINT,
|
||||||
|
FOREIGN KEY (X) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('p', 'x');
|
||||||
|
INSERT INTO T1 VALUES ('q', 'y');
|
||||||
|
INSERT INTO T2 VALUES ('a', 'p', 9223372036854775807);
|
||||||
|
INSERT INTO T2 VALUES ('b', 'q', -9223372036854775808);
|
||||||
|
SELECT X, SUM(C) AS D, COUNT(*) AS E FROM T2 GROUP BY X;
|
||||||
|
ANALYZE;
|
||||||
|
REINDEX;
|
||||||
|
DROP INDEX IF EXISTS T2;
|
||||||
|
REINDEX T1;
|
||||||
|
REINDEX T2;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) UNIQUE,
|
||||||
|
C INTEGER
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
X VARCHAR(20) PRIMARY KEY,
|
||||||
|
A VARCHAR(10) NOT NULL UNIQUE,
|
||||||
|
FOREIGN KEY (A) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T1 VALUES ('b', 'q', 2147483647);
|
||||||
|
INSERT INTO T2 VALUES ('m', 'a');
|
||||||
|
INSERT INTO T2 VALUES ('n', 'b');
|
||||||
|
SELECT T2.X, T1.B, T1.C FROM T2, T1 WHERE T2.A = T1.A AND T1.C >= 0;
|
||||||
|
SELECT * FROM T WHERE (C) IN (SELECT C FROM T);
|
||||||
|
DETACH DATABASE aux77;
|
||||||
|
SELECT MIN(A) OVER (ORDER BY A RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM T;
|
||||||
|
REINDEX T2;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
SELECT SUM(X) FROM T2;
|
||||||
|
ALTER TABLE T2 DROP COLUMN A;
|
||||||
|
UPDATE T2 SET A = NULL RETURNING *;
|
||||||
|
UPDATE T2 SET X = json_object('k', X) WHERE X BETWEEN 0 AND 100;
|
||||||
|
WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<52) SELECT COUNT(*) FROM cnt;
|
||||||
|
SELECT SUM(C) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS T2;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_7805 AS SELECT B FROM T;
|
||||||
|
ALTER TABLE T2 DROP COLUMN A;
|
||||||
|
WITH RECURSIVE pair(a,b) AS (VALUES(0,1) UNION ALL SELECT b, a+b FROM pair WHERE b<100) SELECT * FROM pair;
|
||||||
|
SELECT * FROM T AS a JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT AVG(A) OVER (PARTITION BY A ORDER BY A) FROM T1;
|
||||||
|
SELECT LEAD(X, X) OVER (ORDER BY X) FROM T2;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
SELECT LAG(A, 2, 'default') OVER (ORDER BY A ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES) FROM T;
|
||||||
|
SELECT * FROM T2 WHERE X IN (SELECT X FROM T2 LIMIT 1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
SELECT * FROM T AS a RIGHT OUTER JOIN T1 AS b ON a.rowid = b.rowid;
|
||||||
|
PRAGMA module_list;
|
||||||
|
ALTER TABLE T2 ADD COLUMN extra_4727 CHARINT COLLATE NOCASE;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T2_8325 BEFORE UPDATE OF X ON T2 FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
ALTER TABLE _m DROP COLUMN C;
|
||||||
|
ALTER TABLE _m RENAME COLUMN A TO A_r8882;
|
||||||
|
ANALYZE T1;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg__m_3011 AFTER INSERT ON _m BEGIN INSERT INTO _m(C) VALUES (NULL); END;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
Parse error near line 7: no such function: concat_ws
|
||||||
|
,ln(datetime(NULL))), ('b',-CAST(tan(instr(NULL, (concat_ws(',', 1, 2, 3) + 0)
|
||||||
|
error here ---^
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,671 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ATTACH DATABASE ':memory:' AS aux85;
|
||||||
|
-- typeof(randomblob(1))
|
||||||
|
|
||||||
|
.auth OFF
|
||||||
|
PRAGMA count_changes = OFF;
|
||||||
|
PRAGMA legacy_alter_table = ON;
|
||||||
|
CREATE TABLE t1(a CHARINT PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (-(-(NULL)), 'Wernher', json_quote(tanh(-(-(NULL)))), -concat_ws('|', 'a', NULL, 'b'));
|
||||||
|
INSERT INTO t1 VALUES (exp(unicode(123)), 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
CREATE TABLE map_integer (id INT, name);
|
||||||
|
INSERT INTO map_integer VALUES(lower('你好'),'a');
|
||||||
|
CREATE TABLE map_text (id TEXT, name);
|
||||||
|
INSERT INTO map_text VALUES('4','e');
|
||||||
|
CREATE TABLE `data` (id TEXT, name);
|
||||||
|
INSERT INTO data VALUES(3547739615393531126,'abc');
|
||||||
|
INSERT INTO data VALUES('4','xyz');
|
||||||
|
CREATE VIEW idmap as WITH _m AS MATERIALIZED (WITH _m AS MATERIALIZED (SELECT * FROM map_integer) SELECT * FROM map_text) SELECT * FROM _m UNION SELECT * FROM _m;
|
||||||
|
CREATE TABLE mzed AS SELECT * FROM idmap;
|
||||||
|
PRAGMA automatic_index=ON;
|
||||||
|
SELECT * FROM data JOIN idmap USING(id);
|
||||||
|
SELECT * FROM data AS a LEFT JOIN map_integer AS b ON a.rowid = b.rowid;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_map_integer_6193 AS SELECT name FROM map_integer;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9060 AS SELECT name FROM data;
|
||||||
|
INSERT INTO data SELECT * FROM data;
|
||||||
|
PRAGMA ignore_check_constraints = 0;
|
||||||
|
ALTER TABLE data ADD COLUMN extra_9221 TINYINT DEFAULT '';
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_map_text_5459 AS SELECT name FROM map_text;
|
||||||
|
COMMIT;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES (1,1.0);
|
||||||
|
INSERT INTO T2 VALUES (1,-1.0),(2,9e999);
|
||||||
|
INSERT OR REPLACE INTO T1
|
||||||
|
SELECT * FROM T2;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_map_text_8647 AFTER DELETE ON map_text FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
SELECT NTH_VALUE(id, 0) OVER (PARTITION BY id ORDER BY id ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM map_integer;
|
||||||
|
REINDEX map_integer;
|
||||||
|
DELETE FROM map_integer WHERE NOT NOT (0) ;
|
||||||
|
UPDATE map_text SET id = 'x' WHERE rowid = 1;
|
||||||
|
DELETE FROM map_integer WHERE rowid = 41;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9250 AS SELECT name FROM data;
|
||||||
|
ALTER TABLE data DROP COLUMN id;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
INSERT INTO map_text VALUES (1, 1) ON CONFLICT(id) DO UPDATE SET id = excluded.id, name = excluded.name;
|
||||||
|
PRAGMA foreign_key_list(users);
|
||||||
|
SELECT COUNT(*) FROM data;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T_7942 AS SELECT C FROM T;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_map_text_1196 ON map_text(id) WHERE id > 0;
|
||||||
|
SELECT COUNT(C) FROM T;
|
||||||
|
DELETE FROM T WHERE rowid = 20 RETURNING *;
|
||||||
|
INSERT OR REPLACE INTO data VALUES (-8, 'x');
|
||||||
|
SELECT * FROM map_text;
|
||||||
|
WITH a AS (SELECT a FROM T1), b AS (SELECT a FROM a), c AS (SELECT a FROM b) SELECT * FROM c;
|
||||||
|
REINDEX map_text;
|
||||||
|
SELECT SUM(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM map_text;
|
||||||
|
PRAGMA legacy_alter_table = ON;
|
||||||
|
CREATE TABLE t1(a DOUB PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (-(-(NULL)), 'Wernher', json_quote(123), 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
CREATE TABLE map_integer (id INT, name);
|
||||||
|
INSERT INTO map_integer VALUES(lower('你好'),'a');
|
||||||
|
CREATE TABLE map_text (id TEXT, name);
|
||||||
|
INSERT INTO map_text VALUES('4','e');
|
||||||
|
CREATE TABLE `data` (id TEXT, name);
|
||||||
|
INSERT INTO data VALUES(3547739615393531126,'abc');
|
||||||
|
INSERT INTO data VALUES('4','xyz');
|
||||||
|
CREATE VIEW idmap as WITH _m AS MATERIALIZED (WITH _m AS MATERIALIZED (SELECT * FROM map_integer) SELECT * FROM map_text) SELECT * FROM _m UNION SELECT * FROM _m;
|
||||||
|
CREATE TABLE mzed AS SELECT * FROM idmap;
|
||||||
|
PRAGMA automatic_index=ON;
|
||||||
|
SELECT * FROM data JOIN idmap USING(id);
|
||||||
|
SELECT * FROM data AS a LEFT JOIN map_integer AS b ON a.rowid = b.rowid;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_map_integer_6193 AS SELECT name FROM map_integer;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9060 AS SELECT name FROM data;
|
||||||
|
INSERT INTO data SELECT * FROM data;
|
||||||
|
PRAGMA ignore_check_constraints = 0;
|
||||||
|
ALTER TABLE data ADD COLUMN extra_9221 TINYINT DEFAULT '';
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_map_text_5459 AS SELECT name FROM map_text;
|
||||||
|
COMMIT;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES (1,1.0);
|
||||||
|
INSERT INTO T2 VALUES (1,-1.0),(2,9e999);
|
||||||
|
INSERT OR REPLACE INTO T1
|
||||||
|
SELECT * FROM T2;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_map_text_8647 AFTER DELETE ON map_text FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
SELECT NTH_VALUE(id, 0) OVER (PARTITION BY id ORDER BY id ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM map_integer;
|
||||||
|
REINDEX map_integer;
|
||||||
|
DELETE FROM map_integer WHERE NOT NOT (0) ;
|
||||||
|
UPDATE map_text SET id = 'x' WHERE rowid = 1;
|
||||||
|
DELETE FROM map_integer WHERE rowid = 41;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9250 AS SELECT name FROM data;
|
||||||
|
ALTER TABLE data DROP COLUMN id;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
INSERT INTO map_text VALUES (1, 1) ON CONFLICT(id) DO UPDATE SET id = excluded.id, name = excluded.name;
|
||||||
|
PRAGMA foreign_key_list(users);
|
||||||
|
SELECT COUNT(*) FROM data;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T_7942 AS SELECT C FROM T;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_map_text_1196 ON map_text(id) WHERE id > 0;
|
||||||
|
SELECT COUNT(C) FROM T;
|
||||||
|
DELETE FROM T WHERE rowid = 20 RETURNING *;
|
||||||
|
INSERT OR REPLACE INTO data VALUES (-8, 'x');
|
||||||
|
SELECT * FROM map_text;
|
||||||
|
WITH a AS (SELECT a FROM T1), b AS (SELECT a FROM a), c AS (SELECT a FROM b) SELECT * FROM c;
|
||||||
|
REINDEX map_text;
|
||||||
|
SELECT SUM(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM map_text;
|
||||||
|
PRAGMA legacy_alter_table = ON;
|
||||||
|
CREATE TABLE t1(a DOUB PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (-(-(NULL)), 'Wernher', json_quote(123), 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
CREATE TABLE map_integer (id INT, name);
|
||||||
|
INSERT INTO map_integer VALUES(lower('你好'),'a');
|
||||||
|
CREATE TABLE map_text (id TEXT, name);
|
||||||
|
INSERT INTO map_text VALUES('4','e');
|
||||||
|
CREATE TABLE `data` (id TEXT, name);
|
||||||
|
INSERT INTO data VALUES(3547739615393531126,'abc');
|
||||||
|
INSERT INTO data VALUES('4','xyz');
|
||||||
|
CREATE VIEW idmap as WITH _m AS MATERIALIZED (WITH _m AS MATERIALIZED (SELECT * FROM map_integer) SELECT * FROM map_text) SELECT * FROM _m UNION SELECT * FROM _m;
|
||||||
|
CREATE TABLE mzed AS SELECT * FROM idmap;
|
||||||
|
PRAGMA automatic_index=ON;
|
||||||
|
SELECT * FROM data JOIN idmap USING(id);
|
||||||
|
SELECT * FROM data AS a LEFT JOIN map_integer AS b ON a.rowid = b.rowid;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_map_integer_6193 AS SELECT name FROM map_integer;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9060 AS SELECT name FROM data;
|
||||||
|
INSERT INTO data SELECT * FROM data;
|
||||||
|
PRAGMA ignore_check_constraints = 0;
|
||||||
|
ALTER TABLE data ADD COLUMN extra_9221 TINYINT DEFAULT '';
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_map_text_5459 AS SELECT name FROM map_text;
|
||||||
|
COMMIT;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES (1,1.0);
|
||||||
|
INSERT INTO T2 VALUES (1,-1.0),(2,9e999);
|
||||||
|
INSERT OR REPLACE INTO T1
|
||||||
|
SELECT * FROM T2;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_map_text_8647 AFTER DELETE ON map_text FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
SELECT NTH_VALUE(id, 0) OVER (PARTITION BY id ORDER BY id ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM map_integer;
|
||||||
|
REINDEX map_integer;
|
||||||
|
DELETE FROM map_integer WHERE NOT NOT (0) ;
|
||||||
|
UPDATE map_text SET id = 'x' WHERE rowid = 1;
|
||||||
|
DELETE FROM map_integer WHERE rowid = 41;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9250 AS SELECT name FROM data;
|
||||||
|
ALTER TABLE data DROP COLUMN id;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
INSERT INTO map_text VALUES (1, 1) ON CONFLICT(id) DO UPDATE SET id = excluded.id, name = excluded.name;
|
||||||
|
PRAGMA foreign_key_list(users);
|
||||||
|
SELECT COUNT(*) FROM data;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T_7942 AS SELECT C FROM T;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_map_text_1196 ON map_text(id) WHERE id > 0;
|
||||||
|
SELECT COUNT(C) FROM T;
|
||||||
|
DELETE FROM T WHERE rowid = 20 RETURNING *;
|
||||||
|
INSERT OR REPLACE INTO data VALUES (-8, 'x');
|
||||||
|
SELECT * FROM map_text;
|
||||||
|
WITH a AS (SELECT a FROM T1), b AS (SELECT a FROM a), c AS (SELECT a FROM b) SELECT * FROM c;
|
||||||
|
REINDEX map_text;
|
||||||
|
SELECT SUM(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM map_text;
|
||||||
|
PRAGMA legacy_alter_table = ON;
|
||||||
|
CREATE TABLE t1(a DOUB PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (-(-(NULL)), 'Wernher', json_quote(123), 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
CREATE TABLE map_integer (id INT, name);
|
||||||
|
INSERT INTO map_integer VALUES(lower('你好'),'a');
|
||||||
|
CREATE TABLE map_text (id TEXT, name);
|
||||||
|
INSERT INTO map_text VALUES('4','e');
|
||||||
|
CREATE TABLE `data` (id TEXT, name);
|
||||||
|
INSERT INTO data VALUES(3547739615393531126,'abc');
|
||||||
|
INSERT INTO data VALUES('4','xyz');
|
||||||
|
CREATE VIEW idmap as WITH _m AS MATERIALIZED (WITH _m AS MATERIALIZED (SELECT * FROM map_integer) SELECT * FROM map_text) SELECT * FROM _m UNION SELECT * FROM _m;
|
||||||
|
CREATE TABLE mzed AS SELECT * FROM idmap;
|
||||||
|
PRAGMA automatic_index=ON;
|
||||||
|
SELECT * FROM data JOIN idmap USING(id);
|
||||||
|
SELECT * FROM data AS a LEFT JOIN map_integer AS b ON a.rowid = b.rowid;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_map_integer_6193 AS SELECT name FROM map_integer;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9060 AS SELECT name FROM data;
|
||||||
|
INSERT INTO data SELECT * FROM data;
|
||||||
|
PRAGMA ignore_check_constraints = 0;
|
||||||
|
ALTER TABLE data ADD COLUMN extra_9221 TINYINT DEFAULT '';
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_map_text_5459 AS SELECT name FROM map_text;
|
||||||
|
COMMIT;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES (1,1.0);
|
||||||
|
INSERT INTO T2 VALUES (1,-1.0),(2,9e999);
|
||||||
|
INSERT OR REPLACE INTO T1
|
||||||
|
SELECT * FROM T2;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_map_text_8647 AFTER DELETE ON map_text FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
SELECT NTH_VALUE(id, 0) OVER (PARTITION BY id ORDER BY id ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM map_integer;
|
||||||
|
REINDEX map_integer;
|
||||||
|
DELETE FROM map_integer WHERE NOT NOT (0) ;
|
||||||
|
UPDATE map_text SET id = 'x' WHERE rowid = 1;
|
||||||
|
DELETE FROM map_integer WHERE rowid = 41;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9250 AS SELECT name FROM data;
|
||||||
|
ALTER TABLE data DROP COLUMN id;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
INSERT INTO map_text VALUES (1, 1) ON CONFLICT(id) DO UPDATE SET id = excluded.id, name = excluded.name;
|
||||||
|
PRAGMA foreign_key_list(users);
|
||||||
|
SELECT COUNT(*) FROM data;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T_7942 AS SELECT C FROM T;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_map_text_1196 ON map_text(id) WHERE id > 0;
|
||||||
|
SELECT COUNT(C) FROM T;
|
||||||
|
DELETE FROM T WHERE rowid = 20 RETURNING *;
|
||||||
|
INSERT OR REPLACE INTO data VALUES (-8, 'x');
|
||||||
|
SELECT * FROM map_text;
|
||||||
|
WITH a AS (SELECT a FROM T1), b AS (SELECT a FROM a), c AS (SELECT a FROM b) SELECT * FROM c;
|
||||||
|
REINDEX map_text;
|
||||||
|
SELECT SUM(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM map_text;
|
||||||
|
PRAGMA legacy_alter_table = ON;
|
||||||
|
CREATE TABLE t1(a DOUB PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (-(-(NULL)), 'Wernher', json_quote(123), 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
CREATE TABLE map_integer (id INT, name);
|
||||||
|
INSERT INTO map_integer VALUES(lower('你好'),'a');
|
||||||
|
CREATE TABLE map_text (id TEXT, name);
|
||||||
|
INSERT INTO map_text VALUES('4','e');
|
||||||
|
CREATE TABLE `data` (id TEXT, name);
|
||||||
|
INSERT INTO data VALUES(3547739615393531126,'abc');
|
||||||
|
INSERT INTO data VALUES('4','xyz');
|
||||||
|
CREATE VIEW idmap as WITH _m AS MATERIALIZED (WITH _m AS MATERIALIZED (SELECT * FROM map_integer) SELECT * FROM map_text) SELECT * FROM _m UNION SELECT * FROM _m;
|
||||||
|
CREATE TABLE mzed AS SELECT * FROM idmap;
|
||||||
|
PRAGMA automatic_index=ON;
|
||||||
|
SELECT * FROM data JOIN idmap USING(id);
|
||||||
|
SELECT * FROM data AS a LEFT JOIN map_integer AS b ON a.rowid = b.rowid;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_map_integer_6193 AS SELECT name FROM map_integer;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9060 AS SELECT name FROM data;
|
||||||
|
INSERT INTO data SELECT * FROM data;
|
||||||
|
PRAGMA ignore_check_constraints = 0;
|
||||||
|
ALTER TABLE data ADD COLUMN extra_9221 TINYINT DEFAULT '';
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_map_text_5459 AS SELECT name FROM map_text;
|
||||||
|
COMMIT;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES (1,1.0);
|
||||||
|
INSERT INTO T2 VALUES (1,-1.0),(2,9e999);
|
||||||
|
INSERT OR REPLACE INTO T1
|
||||||
|
SELECT * FROM T2;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_map_text_8647 AFTER DELETE ON map_text FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
SELECT NTH_VALUE(id, 0) OVER (PARTITION BY id ORDER BY id ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM map_integer;
|
||||||
|
REINDEX map_integer;
|
||||||
|
DELETE FROM map_integer WHERE NOT NOT (0) ;
|
||||||
|
UPDATE map_text SET id = 'x' WHERE rowid = 1;
|
||||||
|
DELETE FROM map_integer WHERE rowid = 41;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9250 AS SELECT name FROM data;
|
||||||
|
ALTER TABLE data DROP COLUMN id;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
INSERT INTO map_text VALUES (1, 1) ON CONFLICT(id) DO UPDATE SET id = excluded.id, name = excluded.name;
|
||||||
|
PRAGMA foreign_key_list(users);
|
||||||
|
SELECT COUNT(*) FROM data;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T_7942 AS SELECT C FROM T;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_map_text_1196 ON map_text(id) WHERE id > 0;
|
||||||
|
SELECT COUNT(C) FROM T;
|
||||||
|
DELETE FROM T WHERE rowid = 20 RETURNING *;
|
||||||
|
INSERT OR REPLACE INTO data VALUES (-8, 'x');
|
||||||
|
SELECT * FROM map_text;
|
||||||
|
WITH a AS (SELECT a FROM T1), b AS (SELECT a FROM a), c AS (SELECT a FROM b) SELECT * FROM c;
|
||||||
|
REINDEX map_text;
|
||||||
|
SELECT SUM(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM map_text;
|
||||||
|
PRAGMA legacy_alter_table = ON;
|
||||||
|
CREATE TABLE t1(a DOUB PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (-(-(NULL)), 'Wernher', json_quote(123), 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
CREATE TABLE map_integer (id INT, name);
|
||||||
|
INSERT INTO map_integer VALUES(lower('你好'),'a');
|
||||||
|
CREATE TABLE map_text (id TEXT, name);
|
||||||
|
INSERT INTO map_text VALUES('4','e');
|
||||||
|
CREATE TABLE `data` (id TEXT, name);
|
||||||
|
INSERT INTO data VALUES(3547739615393531126,'abc');
|
||||||
|
INSERT INTO data VALUES('4','xyz');
|
||||||
|
CREATE VIEW idmap as WITH _m AS MATERIALIZED (WITH _m AS MATERIALIZED (SELECT * FROM map_integer) SELECT * FROM map_text) SELECT * FROM _m UNION SELECT * FROM _m;
|
||||||
|
CREATE TABLE mzed AS SELECT * FROM idmap;
|
||||||
|
PRAGMA automatic_index=ON;
|
||||||
|
SELECT * FROM data JOIN idmap USING(id);
|
||||||
|
SELECT * FROM data AS a LEFT JOIN map_integer AS b ON a.rowid = b.rowid;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_map_integer_6193 AS SELECT name FROM map_integer;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9060 AS SELECT name FROM data;
|
||||||
|
INSERT INTO data SELECT * FROM data;
|
||||||
|
PRAGMA ignore_check_constraints = 0;
|
||||||
|
ALTER TABLE data ADD COLUMN extra_9221 TINYINT DEFAULT '';
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_map_text_5459 AS SELECT name FROM map_text;
|
||||||
|
COMMIT;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES (1,1.0);
|
||||||
|
INSERT INTO T2 VALUES (1,-1.0),(2,9e999);
|
||||||
|
INSERT OR REPLACE INTO T1
|
||||||
|
SELECT * FROM T2;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_map_text_8647 AFTER DELETE ON map_text FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
SELECT NTH_VALUE(id, 0) OVER (PARTITION BY id ORDER BY id ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM map_integer;
|
||||||
|
REINDEX map_integer;
|
||||||
|
DELETE FROM map_integer WHERE NOT NOT (0) ;
|
||||||
|
UPDATE map_text SET id = 'x' WHERE rowid = 1;
|
||||||
|
DELETE FROM map_integer WHERE rowid = 41;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9250 AS SELECT name FROM data;
|
||||||
|
ALTER TABLE data DROP COLUMN id;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
INSERT INTO map_text VALUES (1, 1) ON CONFLICT(id) DO UPDATE SET id = excluded.id, name = excluded.name;
|
||||||
|
PRAGMA foreign_key_list(users);
|
||||||
|
SELECT COUNT(*) FROM data;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T_7942 AS SELECT C FROM T;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_map_text_1196 ON map_text(id) WHERE id > 0;
|
||||||
|
SELECT COUNT(C) FROM T;
|
||||||
|
DELETE FROM T WHERE rowid = 20 RETURNING *;
|
||||||
|
INSERT OR REPLACE INTO data VALUES (-8, 'x');
|
||||||
|
SELECT * FROM map_text;
|
||||||
|
WITH a AS (SELECT a FROM T1), b AS (SELECT a FROM a), c AS (SELECT a FROM b) SELECT * FROM c;
|
||||||
|
REINDEX map_text;
|
||||||
|
SELECT SUM(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM map_text;
|
||||||
|
PRAGMA legacy_alter_table = ON;
|
||||||
|
CREATE TABLE t1(a DOUB PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (-(-(NULL)), 'Wernher', json_quote(123), 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
CREATE TABLE map_integer (id INT, name);
|
||||||
|
INSERT INTO map_integer VALUES(lower('你好'),'a');
|
||||||
|
CREATE TABLE map_text (id TEXT, name);
|
||||||
|
INSERT INTO map_text VALUES('4','e');
|
||||||
|
CREATE TABLE `data` (id TEXT, name);
|
||||||
|
INSERT INTO data VALUES(3547739615393531126,'abc');
|
||||||
|
INSERT INTO data VALUES('4','xyz');
|
||||||
|
CREATE VIEW idmap as WITH _m AS MATERIALIZED (WITH _m AS MATERIALIZED (SELECT * FROM map_integer) SELECT * FROM map_text) SELECT * FROM _m UNION SELECT * FROM _m;
|
||||||
|
CREATE TABLE mzed AS SELECT * FROM idmap;
|
||||||
|
PRAGMA automatic_index=ON;
|
||||||
|
SELECT * FROM data JOIN idmap USING(id);
|
||||||
|
SELECT * FROM data AS a LEFT JOIN map_integer AS b ON a.rowid = b.rowid;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_map_integer_6193 AS SELECT name FROM map_integer;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9060 AS SELECT name FROM data;
|
||||||
|
INSERT INTO data SELECT * FROM data;
|
||||||
|
PRAGMA ignore_check_constraints = 0;
|
||||||
|
ALTER TABLE data ADD COLUMN extra_9221 TINYINT DEFAULT '';
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_map_text_5459 AS SELECT name FROM map_text;
|
||||||
|
COMMIT;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES (1,1.0);
|
||||||
|
INSERT INTO T2 VALUES (1,-1.0),(2,9e999);
|
||||||
|
INSERT OR REPLACE INTO T1
|
||||||
|
SELECT * FROM T2;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_map_text_8647 AFTER DELETE ON map_text FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
SELECT NTH_VALUE(id, 0) OVER (PARTITION BY id ORDER BY id ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM map_integer;
|
||||||
|
REINDEX map_integer;
|
||||||
|
DELETE FROM map_integer WHERE NOT NOT (0) ;
|
||||||
|
UPDATE map_text SET id = 'x' WHERE rowid = 1;
|
||||||
|
DELETE FROM map_integer WHERE rowid = 41;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9250 AS SELECT name FROM data;
|
||||||
|
ALTER TABLE data DROP COLUMN id;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
INSERT INTO map_text VALUES (1, 1) ON CONFLICT(id) DO UPDATE SET id = excluded.id, name = excluded.name;
|
||||||
|
PRAGMA foreign_key_list(users);
|
||||||
|
SELECT COUNT(*) FROM data;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T_7942 AS SELECT C FROM T;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_map_text_1196 ON map_text(id) WHERE id > 0;
|
||||||
|
SELECT COUNT(C) FROM T;
|
||||||
|
DELETE FROM T WHERE rowid = 20 RETURNING *;
|
||||||
|
INSERT OR REPLACE INTO data VALUES (-8, 'x');
|
||||||
|
SELECT * FROM map_text;
|
||||||
|
WITH a AS (SELECT a FROM T1), b AS (SELECT a FROM a), c AS (SELECT a FROM b) SELECT * FROM c;
|
||||||
|
REINDEX map_text;
|
||||||
|
SELECT SUM(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM map_text;
|
||||||
|
PRAGMA legacy_alter_table = ON;
|
||||||
|
CREATE TABLE t1(a DOUB PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (-(-(NULL)), 'Wernher', json_quote(123), 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
CREATE TABLE map_integer (id INT, name);
|
||||||
|
INSERT INTO map_integer VALUES(lower('你好'),'a');
|
||||||
|
CREATE TABLE map_text (id TEXT, name);
|
||||||
|
INSERT INTO map_text VALUES('4','e');
|
||||||
|
CREATE TABLE `data` (id TEXT, name);
|
||||||
|
INSERT INTO data VALUES(3547739615393531126,'abc');
|
||||||
|
INSERT INTO data VALUES('4','xyz');
|
||||||
|
CREATE VIEW idmap as WITH _m AS MATERIALIZED (WITH _m AS MATERIALIZED (SELECT * FROM map_integer) SELECT * FROM map_text) SELECT * FROM _m UNION SELECT * FROM _m;
|
||||||
|
CREATE TABLE mzed AS SELECT * FROM idmap;
|
||||||
|
PRAGMA automatic_index=ON;
|
||||||
|
SELECT * FROM data JOIN idmap USING(id);
|
||||||
|
SELECT * FROM data AS a LEFT JOIN map_integer AS b ON a.rowid = b.rowid;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_map_integer_6193 AS SELECT name FROM map_integer;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9060 AS SELECT name FROM data;
|
||||||
|
INSERT INTO data SELECT * FROM data;
|
||||||
|
PRAGMA ignore_check_constraints = 0;
|
||||||
|
ALTER TABLE data ADD COLUMN extra_9221 TINYINT DEFAULT '';
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_map_text_5459 AS SELECT name FROM map_text;
|
||||||
|
COMMIT;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES (1,1.0);
|
||||||
|
INSERT INTO T2 VALUES (1,-1.0),(2,9e999);
|
||||||
|
INSERT OR REPLACE INTO T1
|
||||||
|
SELECT * FROM T2;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_map_text_8647 AFTER DELETE ON map_text FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
SELECT NTH_VALUE(id, 0) OVER (PARTITION BY id ORDER BY id ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM map_integer;
|
||||||
|
REINDEX map_integer;
|
||||||
|
DELETE FROM map_integer WHERE NOT NOT (0) ;
|
||||||
|
UPDATE map_text SET id = 'x' WHERE rowid = 1;
|
||||||
|
DELETE FROM map_integer WHERE rowid = 41;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_data_9250 AS SELECT name FROM data;
|
||||||
|
ALTER TABLE data DROP COLUMN id;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
INSERT INTO map_text VALUES (1, 1) ON CONFLICT(id) DO UPDATE SET id = excluded.id, name = excluded.name;
|
||||||
|
PRAGMA foreign_key_list(users);
|
||||||
|
SELECT COUNT(*) FROM data;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T_7942 AS SELECT C FROM T;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_map_text_1196 ON map_text(id) WHERE id > 0;
|
||||||
|
SELECT COUNT(C) FROM T;
|
||||||
|
DELETE FROM T WHERE rowid = 20 RETURNING *;
|
||||||
|
INSERT OR REPLACE INTO data VALUES (-8, 'x');
|
||||||
|
SELECT * FROM map_text;
|
||||||
|
WITH a AS (SELECT a FROM T1), b AS (SELECT a FROM a), c AS (SELECT a FROM b) SELECT * FROM c;
|
||||||
|
REINDEX map_text;
|
||||||
|
SELECT SUM(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM map_text;
|
||||||
|
|
||||||
|
PRAGMA foreign_keys = NO;
|
||||||
|
VACUUM main;
|
||||||
|
ALTER TABLE data RENAME TO data_r5580;
|
||||||
|
DETACH DATABASE aux85;
|
||||||
|
INSERT INTO T2 DEFAULT VALUES;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN d TO d_r9282;
|
||||||
|
WITH RECURSIVE pair(a,b) AS (VALUES(0,1) UNION ALL SELECT b, a+b FROM pair WHERE b<100) SELECT * FROM pair;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T2_5688 AS SELECT a FROM T2;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE name IS NOT NULL), SUM(rowid) FILTER (WHERE name > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(name) FILTER (WHERE name > 0 AND name < 100), COUNT(*) FILTER (WHERE typeof(name) = "text") FROM map_integer;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_map_integer_262 AS SELECT id FROM map_integer;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
WARNING: writing to an imposter table will corrupt the "t1bc" index!
|
||||||
|
Braun|30|2
|
||||||
|
von|20|1
|
||||||
|
Braun|30
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ATTACH DATABASE ':memory:' AS aux41;
|
||||||
|
SAVEPOINT sp3133;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a',100.0), ('b',-200.5), ('c',9e999);
|
||||||
|
SELECT a,b,
|
||||||
|
LEAD(b,1) OVER (ORDER BY b DESC) AS c,
|
||||||
|
NTILE(2) OVER (ORDER BY b DESC) AS d FROM T;
|
||||||
|
INSERT INTO T DEFAULT VALUES;
|
||||||
|
ROLLBACK TO sp3133;
|
||||||
|
RELEASE sp3133;
|
||||||
|
REINDEX;
|
||||||
|
INSERT INTO T VALUES (1, NULL) ON CONFLICT(a) DO UPDATE SET a = excluded.a, b = excluded.b;
|
||||||
|
DETACH DATABASE aux41;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3.39.0 2022-05-10 23:28:12 764b71267e0b31ff7eaf2a0def7526a1a02dce4d5b456dea060d97ed342ealt1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3.51.1 2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88 (64-bit)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-version
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA cell_size_check = TRUE;
|
||||||
|
.headers off
|
||||||
|
.output
|
||||||
|
PRAGMA temp_store == 'FILE';
|
||||||
|
PRAGMA automatic_index = ON;
|
||||||
|
CREATE TABLE main.t1(a,b,x);
|
||||||
|
CREATE TABLE main.main.t2(c,d,y);
|
||||||
|
CREATE INDEX t1b ON t1(b);
|
||||||
|
CREATE INDEX t2d ON t2(d);
|
||||||
|
ANALYZE sqlite_master;
|
||||||
|
INSERT INTO sqlite_stat1 VALUES('t1','t1b','10000 500');
|
||||||
|
INSERT INTO sqlite_stat1 VALUES('t2','t2d','10000 500');
|
||||||
|
ANALYZE sqlite_master;
|
||||||
|
SELECT * FROM t1, t2 WHERE NOT NOT (+d=b) ;
|
||||||
|
SELECT * FROM t1, t2 WHERE d>b AND x=y;
|
||||||
|
|
||||||
|
CREATE VIEW IF NOT EXISTS v_t2_5713 AS SELECT y FROM t2;
|
||||||
|
SELECT * FROM t2 WHERE NOT EXISTS (SELECT -ceil((-asin(-(-(9223372036854775806))) + 2147483646)) FROM t2 t2 WHERE t2.d = t2.d);
|
||||||
|
SELECT * FROM t2 WHERE c = (SELECT SUM(c) FROM t2);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_t1_3397 AS SELECT x FROM t1;
|
||||||
|
WITH RECURSIVE tree(id, parent, depth) AS (VALUES(1, NULL, 0) UNION ALL SELECT id+1, id, depth+1 FROM tree WHERE depth<44) SELECT * FROM tree;
|
||||||
|
WITH RECURSIVE cnt(x) AS (VALUES(1) UNION SELECT x+1 FROM cnt WHERE x<39) SELECT * FROM cnt;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT LEAD(x, 2, 'default') OVER (ORDER BY x) FROM t1;
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_T_6271 ON T(lower(A)) WHERE A > 0;
|
||||||
|
UPDATE t2 SET d = -54 WHERE rowid = 1 RETURNING *;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',1.25), (2,'b',-3.5), (3,'c',0.0);
|
||||||
|
SELECT * FROM T WHERE c < 2.0 ORDER BY c;
|
||||||
|
INSERT OR IGNORE INTO t2 VALUES (-8, 0, '');
|
||||||
|
UPDATE t2 SET c = 95 WHERE 1;
|
||||||
|
PRAGMA checkpoint_fullsync = YES;
|
||||||
|
SELECT * FROM t2 WHERE d IN (SELECT d FROM t2 WHERE d GLOB "*");
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T_5603 AS SELECT a FROM T;
|
||||||
|
SELECT LAG(x, 0, 'default') OVER (PARTITION BY x ORDER BY x RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS) FROM t1;
|
||||||
|
SELECT * FROM t1 WHERE x = (SELECT COUNT(*) FROM t1);
|
||||||
|
ALTER TABLE t1 ADD COLUMN extra_7009 TINYINT DEFAULT CURRENT_TIMESTAMP;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
Usage: /home/test/sqlite3-src/build/sqlite3 [OPTIONS] FILENAME [SQL]
|
||||||
|
FILENAME is the name of an SQLite database. A new database is created
|
||||||
|
if the file does not previously exist.
|
||||||
|
OPTIONS include:
|
||||||
|
-append append the database to the end of the file
|
||||||
|
-ascii set output mode to 'ascii'
|
||||||
|
-bail stop after hitting an error
|
||||||
|
-batch force batch I/O
|
||||||
|
-box set output mode to 'box'
|
||||||
|
-column set output mode to 'column'
|
||||||
|
-cmd COMMAND run "COMMAND" before reading stdin
|
||||||
|
-csv set output mode to 'csv'
|
||||||
|
-deserialize open the database using sqlite3_deserialize()
|
||||||
|
-echo print commands before execution
|
||||||
|
-init FILENAME read/process named file
|
||||||
|
-[no]header turn headers on or off
|
||||||
|
-help show this message
|
||||||
|
-html set output mode to HTML
|
||||||
|
-interactive force interactive I/O
|
||||||
|
-json set output mode to 'json'
|
||||||
|
-line set output mode to 'line'
|
||||||
|
-list set output mode to 'list'
|
||||||
|
-lookaside SIZE N use N entries of SZ bytes for lookaside memory
|
||||||
|
-markdown set output mode to 'markdown'
|
||||||
|
-maxsize N maximum size for a --deserialize database
|
||||||
|
-memtrace trace all memory allocations and deallocations
|
||||||
|
-mmap N default mmap size set to N
|
||||||
|
-newline SEP set output row separator. Default: '\n'
|
||||||
|
-nofollow refuse to open symbolic links to database files
|
||||||
|
-nonce STRING set the safe-mode escape nonce
|
||||||
|
-nullvalue TEXT set text string for NULL values. Default ''
|
||||||
|
-pagecache SIZE N use N slots of SZ bytes each for page cache memory
|
||||||
|
-quote set output mode to 'quote'
|
||||||
|
-readonly open the database read-only
|
||||||
|
-safe enable safe-mode
|
||||||
|
-separator SEP set output column separator. Default: '|'
|
||||||
|
-stats print memory stats before each finalize
|
||||||
|
-table set output mode to 'table'
|
||||||
|
-tabs set output mode to 'tabs'
|
||||||
|
-version show SQLite version
|
||||||
|
-vfs NAME use NAME as the default VFS
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-help
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
.log ON
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
SELECT max(NULL, like('%0%', exp(0), '%'))x0ACB29BM205381;
|
||||||
|
-- .connection
|
||||||
|
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
DROP TABLE t0;
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
.log ON
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
SELECT max(NULL, like('%0%', exp(0), '%'))x0ACB29BM205381;
|
||||||
|
-- .connection
|
||||||
|
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
DROP TABLE t0;
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
.log ON
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
SELECT max(NULL, like('%0%', exp(0), '%'))x0ACB29BM205381;
|
||||||
|
-- .connection
|
||||||
|
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
DROP TABLE t0;
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
.log ON
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
SELECT max(NULL, like('%0%', exp(0), '%'))x0ACB29BM205381;
|
||||||
|
-- .connection
|
||||||
|
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
DROP TABLE t0;
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
.log ON
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
SELECT max(NULL, like('%0%', exp(0), '%'))x0ACB29BM205381;
|
||||||
|
-- .connection
|
||||||
|
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
DROP TABLE t0;
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
.log ON
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
SELECT max(NULL, like('%0%', exp(0), '%'))x0ACB29BM205381;
|
||||||
|
-- .connection
|
||||||
|
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
DROP TABLE t0;
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
.log ON
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
SELECT max(NULL, like('%0%', exp(0), '%'))x0ACB29BM205381;
|
||||||
|
-- .connection
|
||||||
|
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
DROP TABLE t0;
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
.log ON
|
||||||
|
BEGIN EXCLUSIVE;
|
||||||
|
SELECT max(NULL, like('%0%', exp(0), '%'))x0ACB29BM205381;
|
||||||
|
-- .connection
|
||||||
|
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
DROP TABLE t0;
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.39.0
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.39.0
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.39.0
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.39.0
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.39.0
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.39.0
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.39.0
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.39.0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.51.1
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.51.1
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.51.1
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.51.1
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.51.1
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.51.1
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.51.1
|
||||||
|
|
||||||
|
0
|
||||||
|
0
|
||||||
|
ATOMIC_INTRINSICS=1
|
||||||
|
3.51.1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,63 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ATTACH DATABASE ':memory:' AS aux55;
|
||||||
|
BEGIN EXCLUSIVE TRANSACTION;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
X VARCHAR(10),
|
||||||
|
PRIMARY KEY (A, X),
|
||||||
|
UNIQUE (X)
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
Y VARCHAR(10) UNIQUE,
|
||||||
|
PRIMARY KEY (A, Y)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM T2) SELECT A FROM T1 UNION ALL SELECT A FROM _m ORDER BY A;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_T2_1413 AS SELECT A FROM T2;
|
||||||
|
INSERT INTO T2 DEFAULT VALUES;
|
||||||
|
WITH cte AS (SELECT A, ROW_NUMBER() OVER (ORDER BY A) AS rn FROM T1) SELECT * FROM cte WHERE NOT NOT (rn <= 5) ;
|
||||||
|
END TRANSACTION;
|
||||||
|
SELECT * FROM T2;
|
||||||
|
INSERT INTO T2 DEFAULT VALUES;
|
||||||
|
VACUUM main;
|
||||||
|
DELETE FROM T2 WHERE 1;
|
||||||
|
DELETE FROM T2 WHERE 0;
|
||||||
|
ALTER TABLE T2 RENAME COLUMN A TO A_r2332;
|
||||||
|
SELECT COUNT(A) FILTER (WHERE A IS NOT NULL) OVER (PARTITION BY A ORDER BY A ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES) FROM T1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T2;
|
||||||
|
INSERT OR FAIL INTO T1 VALUES (1, NULL);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
DETACH DATABASE aux55;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3.39.0 2022-05-10 23:28:12 764b71267e0b31ff7eaf2a0def7526a1a02dce4d5b456dea060d97ed342ealt1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3.51.1 2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88 (64-bit)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-version
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
.dbconfig fk off
|
||||||
|
CREATE TABLE main.[t1](a, b, c);
|
||||||
|
-- sqrt({v})
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES(if(json_patch(CAST(0.0 AS CHARINT), 0.0), 1, 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 NOT NOT (y IN ('aaabbb','xxx')) ;
|
||||||
|
SELECT DISTINCT a AS x, b||c AS y FROM t1 WHERE +y='aaabbb';
|
||||||
|
CREATE VIRTUAL TABLE t0 USING fts4("x", "y", "z");
|
||||||
|
CREATE TABLE T (
|
||||||
|
a FLOAT,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b',5.0), ('a','c',5.0), ('b','d',-8.25);
|
||||||
|
SELECT a,b,c,
|
||||||
|
RANK() OVER (PARTITION BY a ORDER BY c DESC) AS d FROM T;
|
||||||
|
DROP TABLE t0;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_t1_6630 AS SELECT c FROM t1;
|
||||||
|
ANALYZE;
|
||||||
|
UPDATE t1 SET a = '' WHERE 1 RETURNING *;
|
||||||
|
ANALYZE;
|
||||||
|
SELECT TOTAL(c) FROM T;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r682;
|
||||||
|
VACUUM;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_9629 AS SELECT c FROM T;
|
||||||
|
ALTER TABLE T RENAME TO T_r2076;
|
||||||
|
ALTER TABLE T DROP COLUMN c;
|
||||||
|
UPDATE T SET b = b + 1 WHERE rowid = 1 RETURNING *;
|
||||||
|
SELECT LAST_VALUE(b) OVER (PARTITION BY b ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES) FROM T;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3.39.0 2022-05-10 23:28:12 764b71267e0b31ff7eaf2a0def7526a1a02dce4d5b456dea060d97ed342ealt1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3.51.1 2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88 (64-bit)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-version
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,132 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
.dbconfig
|
||||||
|
ATTACH DATABASE ':memory:' AS aux3;
|
||||||
|
CREATE TABLE main.T (
|
||||||
|
a MEDIUMINT,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT
|
||||||
|
INTO T VALUES (datetime((0 + 1)),'a',1.25), (2,'b',-3.5), (3,'c',0.0);
|
||||||
|
SELECT * FROM T WHERE +c < 2.0 ORDER BY c;
|
||||||
|
ALTER TABLE T RENAME COLUMN a TO a_r5474;
|
||||||
|
SELECT * FROM T AS a RIGHT OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL);
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL UNIQUE
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
X VARCHAR(15) NOT NULL,
|
||||||
|
C BIGINT,
|
||||||
|
FOREIGN KEY (X) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('p', 'x');
|
||||||
|
INSERT INTO T1 VALUES ('q', 'y');
|
||||||
|
INSERT INTO T2 VALUES ('a', 'p', 9223372036854775807);
|
||||||
|
INSERT INTO T2 VALUES ('b', 'q', -9223372036854775808);
|
||||||
|
SELECT X, SUM(C) AS D, COUNT(*) AS E FROM T2 GROUP BY X;
|
||||||
|
DETACH DATABASE aux3;
|
||||||
|
SELECT c FROM T WHERE c = (SELECT MAX(c) FROM T);
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
ANALYZE;
|
||||||
|
INSERT INTO T2 VALUES (NULL, 1, 'x') ON CONFLICT(A) DO UPDATE SET A = excluded.A, X = excluded.X, C = excluded.C;
|
||||||
|
SELECT AVG(B) FROM T1;
|
||||||
|
ALTER TABLE T DROP COLUMN b;
|
||||||
|
SELECT * FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T2;
|
||||||
|
DELETE FROM T2 WHERE 0;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
defensive off
|
||||||
|
dqs_ddl on
|
||||||
|
dqs_dml on
|
||||||
|
enable_fkey off
|
||||||
|
enable_qpsg off
|
||||||
|
enable_trigger on
|
||||||
|
enable_view on
|
||||||
|
fts3_tokenizer off
|
||||||
|
legacy_alter_table off
|
||||||
|
legacy_file_format off
|
||||||
|
load_extension on
|
||||||
|
no_ckpt_on_close off
|
||||||
|
reset_database off
|
||||||
|
trigger_eqp off
|
||||||
|
trusted_schema on
|
||||||
|
writable_schema off
|
||||||
|
2|b|-3.5
|
||||||
|
3|c|0.0
|
||||||
|
-4713-11-25 12:00:00|a|1.25
|
||||||
|
-4713-11-25 12:00:00|a|1.25|-4713-11-25 12:00:00|a|1.25
|
||||||
|
2|b|-3.5|2|b|-3.5
|
||||||
|
3|c|0.0|3|c|0.0
|
||||||
|
p|9223372036854775807|1
|
||||||
|
q|-9223372036854775808|1
|
||||||
|
1.25
|
||||||
|
4
|
||||||
|
0.0
|
||||||
|
-4713-11-25 12:00:00|1.25
|
||||||
|
2|-3.5
|
||||||
|
3|0.0
|
||||||
|
|
|
||||||
|
3
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
attach_create on
|
||||||
|
attach_write on
|
||||||
|
comments on
|
||||||
|
defensive on
|
||||||
|
dqs_ddl off
|
||||||
|
dqs_dml off
|
||||||
|
enable_fkey off
|
||||||
|
enable_qpsg off
|
||||||
|
enable_trigger on
|
||||||
|
enable_view on
|
||||||
|
fts3_tokenizer off
|
||||||
|
legacy_alter_table off
|
||||||
|
legacy_file_format off
|
||||||
|
load_extension on
|
||||||
|
no_ckpt_on_close off
|
||||||
|
reset_database off
|
||||||
|
reverse_scanorder off
|
||||||
|
stmt_scanstatus off
|
||||||
|
trigger_eqp off
|
||||||
|
trusted_schema off
|
||||||
|
writable_schema off
|
||||||
|
2|b|-3.5
|
||||||
|
3|c|0.0
|
||||||
|
-4713-11-25 12:00:00|a|1.25
|
||||||
|
-4713-11-25 12:00:00|a|1.25|-4713-11-25 12:00:00|a|1.25
|
||||||
|
2|b|-3.5|2|b|-3.5
|
||||||
|
3|c|0.0|3|c|0.0
|
||||||
|
p|9223372036854775807|1
|
||||||
|
q|-9223372036854775808|1
|
||||||
|
1.25
|
||||||
|
4
|
||||||
|
0.0
|
||||||
|
-4713-11-25 12:00:00|1.25
|
||||||
|
2|-3.5
|
||||||
|
3|0.0
|
||||||
|
|
|
||||||
|
3
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,813 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15),
|
||||||
|
C BIGINT,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 4000);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 1700);
|
||||||
|
INSERT INTO T VALUES ('d', 'r', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('e', 's', 0);
|
||||||
|
SELECT A, C FROM T WHERE C > 1200 AND C < 9999999999 ORDER BY C;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (likelihood(1, 0.0625), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
SAVEPOINT sp2410;
|
||||||
|
-- replace({v}, '', 'x')
|
||||||
|
|
||||||
|
.log ON
|
||||||
|
ATTACH DATABASE ':memory:' AS aux57;
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = '{';
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a MEDIUMINT PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat((1 * 1), 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT NOT (NOT NOT (ABS(c) > 5 OR ABS(d) > 5)) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE /**/ d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper; /**/ SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
|
||||||
|
SELECT * FROM T t1 JOIN (SELECT * FROM T) AS sub ON t1.B = sub.B;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
PRAGMA vdbe_trace = OFF;
|
||||||
|
DETACH DATABASE aux57;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r974;
|
||||||
|
SELECT * FROM T t1 JOIN (SELECT * FROM T) AS sub ON t1.A = sub.A;
|
||||||
|
SELECT c, (SELECT c FROM abc LIMIT 1) AS first_val FROM abc;
|
||||||
|
INSERT INTO t1 VALUES (1, 1, 'x', 1) ON CONFLICT(a) DO UPDATE SET a = excluded.a, b = excluded.b, c = excluded.c;
|
||||||
|
WITH cte AS (SELECT c, COUNT(*) AS cnt FROM t1 GROUP BY c) SELECT * FROM cte;
|
||||||
|
UPDATE T SET C = NULL RETURNING *;
|
||||||
|
SELECT RANK() OVER (ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
|
||||||
|
VACUUM;
|
||||||
|
WITH cte AS (SELECT * FROM abc), cte2 AS (SELECT * FROM cte) SELECT * FROM cte2;
|
||||||
|
SELECT * FROM t1 AS a LEFT OUTER JOIN abc AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT MIN(C) FROM T;
|
||||||
|
INSERT INTO T VALUES ('x', 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
INSERT INTO t1 VALUES ('x', 'x', NULL, 'x') ON CONFLICT(a) DO UPDATE SET a = excluded.a, b = excluded.b, c = excluded.c;
|
||||||
|
VACUUM;
|
||||||
|
SELECT * FROM abc WHERE b < ANY (SELECT b FROM abc);
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp2410;
|
||||||
|
RELEASE SAVEPOINT sp2410;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_abc_7604 AS SELECT b FROM abc;
|
||||||
|
PRAGMA vdbe_trace = ON;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_913 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SELECT RAISE(IGNORE); END;
|
||||||
|
ALTER TABLE abc RENAME COLUMN a TO a_r6922;
|
||||||
|
DELETE FROM t1 WHERE 1;
|
||||||
|
DELETE FROM abc WHERE c IS NULL RETURNING *;
|
||||||
|
ALTER TABLE t1 DROP COLUMN c;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
UPDATE abc SET c = NULL WHERE 1 RETURNING *;
|
||||||
|
REINDEX T;
|
||||||
|
DROP TRIGGER IF EXISTS T;
|
||||||
|
ALTER TABLE T ADD COLUMN extra_2614 MEDIUMINT COLLATE NOCASE;
|
||||||
|
REINDEX T;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_t1_2917 ON t1(lower(d)) WHERE d IS NOT NULL;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
c|1700
|
||||||
|
b|4000
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
WARNING: writing to an imposter table will corrupt the "t1bc" index!
|
||||||
|
Braun|30|3
|
||||||
|
Wernher|10|1
|
||||||
|
von|20|2
|
||||||
|
Braun|30
|
||||||
|
Wernher|10
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
c|1700
|
||||||
|
b|4000
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
Braun|30|3
|
||||||
|
Wernher|10|1
|
||||||
|
von|20|2
|
||||||
|
Braun|30
|
||||||
|
Wernher|10
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE T (
|
||||||
|
a REAL,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b',jsonb_patch(sqrt(1.0), 1.0)), ('a','c',-1.0), ('b','d',0.0);
|
||||||
|
SELECT
|
||||||
|
COALESCE(a,'e') AS d,
|
||||||
|
COALESCE(b,'f') AS e,
|
||||||
|
SUM(c) AS f
|
||||||
|
FROM T
|
||||||
|
GROUP BY a,b;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
ATTACH DATABASE ':memory:' AS aux7;
|
||||||
|
PRAGMA schema_version;
|
||||||
|
.progress NULL
|
||||||
|
.timer format('%s')
|
||||||
|
PRAGMA /* NTH_VALUE({c}, 1) */ automatic_index = FALSE;
|
||||||
|
SAVEPOINT sp9691;
|
||||||
|
PRAGMA cell_size_check = YES;
|
||||||
|
SELECT json_pretty(atan2((ln(json_remove(0)) * 1), 0), '' || (' '))x0ACB29BM205381;
|
||||||
|
-- PRAGMA analysis_limit = 50;
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT
|
||||||
|
1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp9691;
|
||||||
|
RELEASE SAVEPOINT sp9691;
|
||||||
|
VACUUM;
|
||||||
|
DETACH DATABASE aux7;
|
||||||
|
DELETE FROM T WHERE 0 RETURNING *;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_2467 AFTER UPDATE ON T FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r5091;
|
||||||
|
DROP TRIGGER IF EXISTS T;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
WARNING: writing to an imposter table will corrupt the "t1bc" index!
|
||||||
|
Braun|30|3
|
||||||
|
Wernher|10|1
|
||||||
|
von|20|2
|
||||||
|
Braun|30
|
||||||
|
Wernher|10
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ATTACH DATABASE ':memory:' AS aux1;
|
||||||
|
SAVEPOINT sp9324;
|
||||||
|
.timer on
|
||||||
|
PRAGMA parser_trace = FALSE;
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux81;
|
||||||
|
PRAGMA reverse_unordered_selects = ON;
|
||||||
|
PRAGMA max_page_count;
|
||||||
|
PRAGMA case_sensitive_like = OFF;
|
||||||
|
PRAGMA writable_schema = NO;
|
||||||
|
.quit
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1(a int, b int);
|
||||||
|
INSERT INTO t1 VALUES(glob(NULL, NULL),NULL),(CAST(CAST(CAST(log10(if('"', cosh((0 + 5035996954804773676)), 1, 5035996954804773676, 5035996954804773676)) AS CLOB) AS UNSIGNED BIG INT) AS SMALLINT),18),(2,19);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT x, y FROM (SELECT 98 AS x, 99 AS y UNION SELECT a AS x, sum(b) AS y FROM _m GROUP BY /* PRAGMA secure_delete = TRUE; */ a) AS w WHERE NOT y>=20 ORDER BY +x;
|
||||||
|
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;
|
||||||
|
DROP VIEW IF EXISTS t1;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL);
|
||||||
|
CREATE TABLE `T1` (
|
||||||
|
A VARCHAR(20),
|
||||||
|
X VARCHAR(10),
|
||||||
|
PRIMARY KEY (A, X),
|
||||||
|
UNIQUE (X)
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
Y VARCHAR(10) UNIQUE,
|
||||||
|
PRIMARY KEY (A, Y)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
SELECT A FROM T1 UNION ALL SELECT A FROM T2 ORDER BY A;
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(20),
|
||||||
|
B VARCHAR(30),
|
||||||
|
C VARCHAR(30),
|
||||||
|
PRIMARY KEY (A, B),
|
||||||
|
UNIQUE (A, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', 'x');
|
||||||
|
INSERT INTO T VALUES ('a', 'q', 'y');
|
||||||
|
INSERT INTO T VALUES ('b', 'p', 'z');
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 'w');
|
||||||
|
INSERT INTO T VALUES ('d', 's', 'v');
|
||||||
|
SELECT A, COUNT(DISTINCT B) AS D FROM T GROUP BY A HAVING COUNT(DISTINCT B) >= 1;
|
||||||
|
INSERT INTO T2 VALUES (NULL, NULL);
|
||||||
|
ALTER TABLE T2 ADD COLUMN extra_2116 NUMERIC DEFAULT 0;
|
||||||
|
REINDEX;
|
||||||
|
UPDATE T2 SET A = 'x' WHERE A IS NOT NULL RETURNING *;
|
||||||
|
SELECT * FROM (SELECT Y, COUNT(*) FROM T2 GROUP BY Y) AS sub;
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
SELECT LAG(X, 0) OVER (PARTITION BY X ORDER BY X ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM T1;
|
||||||
|
SELECT 0x0ACB29BM205381;
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
SELECT LEAD(X, 1, NULL) OVER (PARTITION BY X ORDER BY X ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES) FROM T1;
|
||||||
|
PRAGMA vdbe_listing = YES;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T1_7197 AS SELECT A FROM T1;
|
||||||
|
ALTER TABLE T1 DROP COLUMN A;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T1_4345 ON T1((X + 1)) WHERE X IS NOT NULL;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
DETACH DATABASE aux81;
|
||||||
|
SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t1 WHERE b > 0);
|
||||||
|
VACUUM main;
|
||||||
|
SELECT * FROM T2 WHERE A IN (SELECT A FROM T2 WHERE A IS NOT NULL);
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r6007;
|
||||||
|
ALTER TABLE T1 RENAME TO T1_r5111;
|
||||||
|
SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t1 WHERE a = NULL);
|
||||||
|
SELECT COUNT(X) OVER (ORDER BY X RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM T1;
|
||||||
|
SELECT NTH_VALUE(b, -1) OVER (ORDER BY b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t1;
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
INSERT INTO T1 VALUES (NULL, 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, X = excluded.X;
|
||||||
|
SELECT * FROM t1 WHERE b IN (SELECT b FROM t1 WHERE b GLOB "*");
|
||||||
|
INSERT OR FAIL INTO t1 VALUES (0, 0);
|
||||||
|
REINDEX;
|
||||||
|
INSERT INTO T1 VALUES ('x', NULL) ON CONFLICT(A) DO UPDATE SET A = excluded.A, X = excluded.X;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
ANALYZE T2;
|
||||||
|
WITH m AS MATERIALIZED (SELECT * FROM T2) SELECT m.A FROM m JOIN m AS m2 ON m.A = m2.A;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r3665;
|
||||||
|
DELETE FROM T1 WHERE rowid = 99 RETURNING *;
|
||||||
|
WITH RECURSIVE cnt(x) AS (VALUES(0) UNION ALL SELECT x-1 FROM cnt WHERE x>-10) SELECT * FROM cnt;
|
||||||
|
INSERT INTO T1 VALUES (NULL, NULL);
|
||||||
|
REINDEX;
|
||||||
|
ALTER TABLE T2 RENAME TO T2_r3541;
|
||||||
|
WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<23) SELECT COUNT(*) FROM cnt;
|
||||||
|
SELECT * FROM T WHERE A NOT IN (SELECT A FROM T);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
INSERT INTO T1 VALUES (NULL, 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, X = excluded.X;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_t1_2111 AS SELECT a FROM t1;
|
||||||
|
INSERT INTO T1 SELECT * FROM T1;
|
||||||
|
SELECT NTH_VALUE(a, 2) OVER (ORDER BY a) FROM t1;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r4405;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp9324;
|
||||||
|
RELEASE SAVEPOINT sp9324;
|
||||||
|
INSERT INTO T2 DEFAULT VALUES;
|
||||||
|
DETACH DATABASE aux1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
REINDEX t1;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000024
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000032
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000004
|
||||||
|
1073741823
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000008
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000005
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000004
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
Run Time: real 0.000003 user 0.000011 sys 0.000000
|
||||||
|
Run Time: real 0.000013 user 0.000013 sys 0.000000
|
||||||
|
Run Time: real 0.000002 user 0.000002 sys 0.000000
|
||||||
|
4294967294
|
||||||
|
Run Time: real 0.000004 user 0.000004 sys 0.000000
|
||||||
|
Run Time: real 0.000003 user 0.000003 sys 0.000000
|
||||||
|
Run Time: real 0.000001 user 0.000001 sys 0.000000
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,484 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ATTACH DATABASE ':memory:' AS aux98;
|
||||||
|
PRAGMA writable_schema = YES;
|
||||||
|
PRAGMA short_column_names = OFF;
|
||||||
|
PRAGMA vdbe_trace = YES;
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux22;
|
||||||
|
BEGIN DEFERRED;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
InsErt INTO t1 VALUES (json_valid(ln(-json_set(sinh(x'01'), '$.key', (log(-(-(9223372036854775809))) * 1))), 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
CREATE TABLE t1(x);
|
||||||
|
INSERT INTO t1 VALUES(-2147483649);
|
||||||
|
CREATE TABLE t2(y,z);
|
||||||
|
INSERT INTO t2 VALUES(2,3);
|
||||||
|
CREATE INDEX t2y ON t2(y);
|
||||||
|
SELECT * FROM t1,(SELECT * FROM t2 WHERE NOT NOT (NOT NOT (y=2)) ORDER BY y,z);
|
||||||
|
|
||||||
|
SELECT GROUP_CONCAT(x, '.') OVER (PARTITION BY x ORDER BY x ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t1;
|
||||||
|
INSERT OR ABORT INTO t2 VALUES (0, 'x');
|
||||||
|
END;
|
||||||
|
ANALYZE;
|
||||||
|
REINDEX;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_t2_6543 ON t2(y COLLATE NOCASE) WHERE y > 0;
|
||||||
|
SELECT * FROM t2 AS a INNER JOIN t1 AS b ON a.rowid = b.rowid;
|
||||||
|
DROP INDEX IF EXISTS t2;
|
||||||
|
DETACH DATABASE aux22;
|
||||||
|
INSERT INTO t2 VALUES (NULL, NULL);
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_9456 AFTER UPDATE ON t1 FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
DROP TRIGGER IF EXISTS t2;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) UNIQUE,
|
||||||
|
C BIGINT
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
X VARCHAR(20) PRIMARY KEY,
|
||||||
|
A VARCHAR(10),
|
||||||
|
FOREIGN KEY (A) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'p', 9999999999999);
|
||||||
|
INSERT INTO T1 VALUES ('b', 'q', -9999999999999);
|
||||||
|
INSERT INTO T2 VALUES ('m', 'a');
|
||||||
|
INSERT INTO T2 VALUES ('n', 'b');
|
||||||
|
SELECT T2.X, T1.C FROM T2 INNER JOIN T1 ON T2.A = T1.A WHERE T1.C > -1000000000000;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T2;
|
||||||
|
ALTER TABLE t1 ADD COLUMN extra_7517 FLOA DEFAULT (abs(random()) % 1000);
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
VACUUM;
|
||||||
|
ALTER TABLE T1 RENAME TO T1_r4172;
|
||||||
|
INSERT INTO T1 VALUES (NULL, NULL, NULL) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
SELECT GROUP_CONCAT(y, '|') FROM t2;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE X IS NOT NULL), SUM(rowid) FILTER (WHERE X > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(X) FILTER (WHERE X > 0 AND X < 100), COUNT(*) FILTER (WHERE typeof(X) = "text") FROM T2;
|
||||||
|
ALTER TABLE T1 ADD COLUMN extra_7361 BOOLEAN DEFAULT (random());
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r8174;
|
||||||
|
DROP TABLE IF EXISTS T2;
|
||||||
|
PRAGMA reverse_unordered_selects;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE x IS NOT NULL), SUM(rowid) FILTER (WHERE x > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(x) FILTER (WHERE x > 0 AND x < 100), COUNT(*) FILTER (WHERE typeof(x) = "text") FROM t1;
|
||||||
|
SELECT LAG(A, 1, NULL) OVER (PARTITION BY A ORDER BY A) FROM T2;
|
||||||
|
WITH RECURSIVE pair(a,b) AS (VALUES(0,1) UNION ALL SELECT b, a+b FROM pair WHERE b<100) SELECT * FROM pair;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T2_9819 AFTER DELETE ON T2 BEGIN INSERT INTO T2(A) VALUES (NULL); END;
|
||||||
|
SELECT * FROM T1 AS a LEFT OUTER JOIN T1 AS b ON a.rowid = b.rowid;
|
||||||
|
DELETE FROM t1 WHERE x > (SELECT AVG(x) FROM t1);
|
||||||
|
INSERT INTO T2 VALUES (NULL, 'x') ON CONFLICT(X) DO UPDATE SET X = excluded.X, A = excluded.A;
|
||||||
|
PRAGMA checkpoint_fullsync = NO;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,2.0,10.5), (1,-3.5,20.25), (2,9e999,-1.0);
|
||||||
|
WITH d AS (SELECT a,SUM(b*c) AS e FROM T GROUP BY a) SELECT * FROM d;
|
||||||
|
DETACH DATABASE aux98;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux98;
|
||||||
|
PRAGMA writable_schema = YES;
|
||||||
|
PRAGMA short_column_names = OFF;
|
||||||
|
PRAGMA vdbe_trace = YES;
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux22;
|
||||||
|
BEGIN DEFERRED;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
InsErt INTO t1 VALUES (json_valid(ln(-json_set(sinh(x'01'), '$.key', (log(-(-(9223372036854775809))) * 1))), 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
CREATE TABLE t1(x);
|
||||||
|
INSERT INTO t1 VALUES(-2147483649);
|
||||||
|
CREATE TABLE t2(y,z);
|
||||||
|
INSERT INTO t2 VALUES(2,3);
|
||||||
|
CREATE INDEX t2y ON t2(y);
|
||||||
|
SELECT * FROM t1,(SELECT * FROM t2 WHERE NOT NOT (NOT NOT (y=2)) ORDER BY y,z);
|
||||||
|
|
||||||
|
SELECT GROUP_CONCAT(x, '.') OVER (PARTITION BY x ORDER BY x ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t1;
|
||||||
|
INSERT OR ABORT INTO t2 VALUES (0, 'x');
|
||||||
|
END;
|
||||||
|
ANALYZE;
|
||||||
|
REINDEX;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_t2_6543 ON t2(y COLLATE NOCASE) WHERE y > 0;
|
||||||
|
SELECT * FROM t2 AS a INNER JOIN t1 AS b ON a.rowid = b.rowid;
|
||||||
|
DROP INDEX IF EXISTS t2;
|
||||||
|
DETACH DATABASE aux22;
|
||||||
|
INSERT INTO t2 VALUES (NULL, NULL);
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_9456 AFTER UPDATE ON t1 FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
DROP TRIGGER IF EXISTS t2;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) UNIQUE,
|
||||||
|
C BIGINT
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
X VARCHAR(20) PRIMARY KEY,
|
||||||
|
A VARCHAR(10),
|
||||||
|
FOREIGN KEY (A) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'p', 9999999999999);
|
||||||
|
INSERT INTO T1 VALUES ('b', 'q', -9999999999999);
|
||||||
|
INSERT INTO T2 VALUES ('m', 'a');
|
||||||
|
INSERT INTO T2 VALUES ('n', 'b');
|
||||||
|
SELECT T2.X, T1.C FROM T2 INNER JOIN T1 ON T2.A = T1.A WHERE T1.C > -1000000000000;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T2;
|
||||||
|
ALTER TABLE t1 ADD COLUMN extra_7517 FLOA DEFAULT (abs(random()) % 1000);
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
VACUUM;
|
||||||
|
ALTER TABLE T1 RENAME TO T1_r4172;
|
||||||
|
INSERT INTO T1 VALUES (NULL, NULL, NULL) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
SELECT GROUP_CONCAT(y, '|') FROM t2;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE X IS NOT NULL), SUM(rowid) FILTER (WHERE X > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(X) FILTER (WHERE X > 0 AND X < 100), COUNT(*) FILTER (WHERE typeof(X) = "text") FROM T2;
|
||||||
|
ALTER TABLE T1 ADD COLUMN extra_7361 BOOLEAN DEFAULT (random());
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r8174;
|
||||||
|
DROP TABLE IF EXISTS T2;
|
||||||
|
PRAGMA reverse_unordered_selects;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE x IS NOT NULL), SUM(rowid) FILTER (WHERE x > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(x) FILTER (WHERE x > 0 AND x < 100), COUNT(*) FILTER (WHERE typeof(x) = "text") FROM t1;
|
||||||
|
SELECT LAG(A, 1, NULL) OVER (PARTITION BY A ORDER BY A) FROM T2;
|
||||||
|
WITH RECURSIVE pair(a,b) AS (VALUES(0,1) UNION ALL SELECT b, a+b FROM pair WHERE b<100) SELECT * FROM pair;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T2_9819 AFTER DELETE ON T2 BEGIN INSERT INTO T2(A) VALUES (NULL); END;
|
||||||
|
SELECT * FROM T1 AS a LEFT OUTER JOIN T1 AS b ON a.rowid = b.rowid;
|
||||||
|
DELETE FROM t1 WHERE x > (SELECT AVG(x) FROM t1);
|
||||||
|
INSERT INTO T2 VALUES (NULL, 'x') ON CONFLICT(X) DO UPDATE SET X = excluded.X, A = excluded.A;
|
||||||
|
PRAGMA checkpoint_fullsync = NO;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,2.0,10.5), (1,-3.5,20.25), (2,9e999,-1.0);
|
||||||
|
WITH d AS (SELECT a,SUM(b*c) AS e FROM T GROUP BY a) SELECT * FROM d;
|
||||||
|
DETACH DATABASE aux98;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux98;
|
||||||
|
PRAGMA writable_schema = YES;
|
||||||
|
PRAGMA short_column_names = OFF;
|
||||||
|
PRAGMA vdbe_trace = YES;
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux22;
|
||||||
|
BEGIN DEFERRED;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
InsErt INTO t1 VALUES (json_valid(ln(-json_set(sinh(x'01'), '$.key', (log(-(-(9223372036854775809))) * 1))), 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
CREATE TABLE t1(x);
|
||||||
|
INSERT INTO t1 VALUES(-2147483649);
|
||||||
|
CREATE TABLE t2(y,z);
|
||||||
|
INSERT INTO t2 VALUES(2,3);
|
||||||
|
CREATE INDEX t2y ON t2(y);
|
||||||
|
SELECT * FROM t1,(SELECT * FROM t2 WHERE NOT NOT (NOT NOT (y=2)) ORDER BY y,z);
|
||||||
|
|
||||||
|
SELECT GROUP_CONCAT(x, '.') OVER (PARTITION BY x ORDER BY x ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t1;
|
||||||
|
INSERT OR ABORT INTO t2 VALUES (0, 'x');
|
||||||
|
END;
|
||||||
|
ANALYZE;
|
||||||
|
REINDEX;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_t2_6543 ON t2(y COLLATE NOCASE) WHERE y > 0;
|
||||||
|
SELECT * FROM t2 AS a INNER JOIN t1 AS b ON a.rowid = b.rowid;
|
||||||
|
DROP INDEX IF EXISTS t2;
|
||||||
|
DETACH DATABASE aux22;
|
||||||
|
INSERT INTO t2 VALUES (NULL, NULL);
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_9456 AFTER UPDATE ON t1 FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
DROP TRIGGER IF EXISTS t2;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) UNIQUE,
|
||||||
|
C BIGINT
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
X VARCHAR(20) PRIMARY KEY,
|
||||||
|
A VARCHAR(10),
|
||||||
|
FOREIGN KEY (A) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'p', 9999999999999);
|
||||||
|
INSERT INTO T1 VALUES ('b', 'q', -9999999999999);
|
||||||
|
INSERT INTO T2 VALUES ('m', 'a');
|
||||||
|
INSERT INTO T2 VALUES ('n', 'b');
|
||||||
|
SELECT T2.X, T1.C FROM T2 INNER JOIN T1 ON T2.A = T1.A WHERE T1.C > -1000000000000;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T2;
|
||||||
|
ALTER TABLE t1 ADD COLUMN extra_7517 FLOA DEFAULT (abs(random()) % 1000);
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
VACUUM;
|
||||||
|
ALTER TABLE T1 RENAME TO T1_r4172;
|
||||||
|
INSERT INTO T1 VALUES (NULL, NULL, NULL) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
SELECT GROUP_CONCAT(y, '|') FROM t2;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE X IS NOT NULL), SUM(rowid) FILTER (WHERE X > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(X) FILTER (WHERE X > 0 AND X < 100), COUNT(*) FILTER (WHERE typeof(X) = "text") FROM T2;
|
||||||
|
ALTER TABLE T1 ADD COLUMN extra_7361 BOOLEAN DEFAULT (random());
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r8174;
|
||||||
|
DROP TABLE IF EXISTS T2;
|
||||||
|
PRAGMA reverse_unordered_selects;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE x IS NOT NULL), SUM(rowid) FILTER (WHERE x > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(x) FILTER (WHERE x > 0 AND x < 100), COUNT(*) FILTER (WHERE typeof(x) = "text") FROM t1;
|
||||||
|
SELECT LAG(A, 1, NULL) OVER (PARTITION BY A ORDER BY A) FROM T2;
|
||||||
|
WITH RECURSIVE pair(a,b) AS (VALUES(0,1) UNION ALL SELECT b, a+b FROM pair WHERE b<100) SELECT * FROM pair;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T2_9819 AFTER DELETE ON T2 BEGIN INSERT INTO T2(A) VALUES (NULL); END;
|
||||||
|
SELECT * FROM T1 AS a LEFT OUTER JOIN T1 AS b ON a.rowid = b.rowid;
|
||||||
|
DELETE FROM t1 WHERE x > (SELECT AVG(x) FROM t1);
|
||||||
|
INSERT INTO T2 VALUES (NULL, 'x') ON CONFLICT(X) DO UPDATE SET X = excluded.X, A = excluded.A;
|
||||||
|
PRAGMA checkpoint_fullsync = NO;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,2.0,10.5), (1,-3.5,20.25), (2,9e999,-1.0);
|
||||||
|
WITH d AS (SELECT a,SUM(b*c) AS e FROM T GROUP BY a) SELECT * FROM d;
|
||||||
|
DETACH DATABASE aux98;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux98;
|
||||||
|
PRAGMA writable_schema = YES;
|
||||||
|
PRAGMA short_column_names = OFF;
|
||||||
|
PRAGMA vdbe_trace = YES;
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux22;
|
||||||
|
BEGIN DEFERRED;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
InsErt INTO t1 VALUES (json_valid(ln(-json_set(sinh(x'01'), '$.key', (log(-(-(9223372036854775809))) * 1))), 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
CREATE TABLE t1(x);
|
||||||
|
INSERT INTO t1 VALUES(-2147483649);
|
||||||
|
CREATE TABLE t2(y,z);
|
||||||
|
INSERT INTO t2 VALUES(2,3);
|
||||||
|
CREATE INDEX t2y ON t2(y);
|
||||||
|
SELECT * FROM t1,(SELECT * FROM t2 WHERE NOT NOT (NOT NOT (y=2)) ORDER BY y,z);
|
||||||
|
|
||||||
|
SELECT GROUP_CONCAT(x, '.') OVER (PARTITION BY x ORDER BY x ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t1;
|
||||||
|
INSERT OR ABORT INTO t2 VALUES (0, 'x');
|
||||||
|
END;
|
||||||
|
ANALYZE;
|
||||||
|
REINDEX;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_t2_6543 ON t2(y COLLATE NOCASE) WHERE y > 0;
|
||||||
|
SELECT * FROM t2 AS a INNER JOIN t1 AS b ON a.rowid = b.rowid;
|
||||||
|
DROP INDEX IF EXISTS t2;
|
||||||
|
DETACH DATABASE aux22;
|
||||||
|
INSERT INTO t2 VALUES (NULL, NULL);
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_9456 AFTER UPDATE ON t1 FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
DROP TRIGGER IF EXISTS t2;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) UNIQUE,
|
||||||
|
C BIGINT
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
X VARCHAR(20) PRIMARY KEY,
|
||||||
|
A VARCHAR(10),
|
||||||
|
FOREIGN KEY (A) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'p', 9999999999999);
|
||||||
|
INSERT INTO T1 VALUES ('b', 'q', -9999999999999);
|
||||||
|
INSERT INTO T2 VALUES ('m', 'a');
|
||||||
|
INSERT INTO T2 VALUES ('n', 'b');
|
||||||
|
SELECT T2.X, T1.C FROM T2 INNER JOIN T1 ON T2.A = T1.A WHERE T1.C > -1000000000000;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T2;
|
||||||
|
ALTER TABLE t1 ADD COLUMN extra_7517 FLOA DEFAULT (abs(random()) % 1000);
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
VACUUM;
|
||||||
|
ALTER TABLE T1 RENAME TO T1_r4172;
|
||||||
|
INSERT INTO T1 VALUES (NULL, NULL, NULL) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
SELECT GROUP_CONCAT(y, '|') FROM t2;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE X IS NOT NULL), SUM(rowid) FILTER (WHERE X > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(X) FILTER (WHERE X > 0 AND X < 100), COUNT(*) FILTER (WHERE typeof(X) = "text") FROM T2;
|
||||||
|
ALTER TABLE T1 ADD COLUMN extra_7361 BOOLEAN DEFAULT (random());
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r8174;
|
||||||
|
DROP TABLE IF EXISTS T2;
|
||||||
|
PRAGMA reverse_unordered_selects;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE x IS NOT NULL), SUM(rowid) FILTER (WHERE x > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(x) FILTER (WHERE x > 0 AND x < 100), COUNT(*) FILTER (WHERE typeof(x) = "text") FROM t1;
|
||||||
|
SELECT LAG(A, 1, NULL) OVER (PARTITION BY A ORDER BY A) FROM T2;
|
||||||
|
WITH RECURSIVE pair(a,b) AS (VALUES(0,1) UNION ALL SELECT b, a+b FROM pair WHERE b<100) SELECT * FROM pair;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T2_9819 AFTER DELETE ON T2 BEGIN INSERT INTO T2(A) VALUES (NULL); END;
|
||||||
|
SELECT * FROM T1 AS a LEFT OUTER JOIN T1 AS b ON a.rowid = b.rowid;
|
||||||
|
DELETE FROM t1 WHERE x > (SELECT AVG(x) FROM t1);
|
||||||
|
INSERT INTO T2 VALUES (NULL, 'x') ON CONFLICT(X) DO UPDATE SET X = excluded.X, A = excluded.A;
|
||||||
|
PRAGMA checkpoint_fullsync = NO;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,2.0,10.5), (1,-3.5,20.25), (2,9e999,-1.0);
|
||||||
|
WITH d AS (SELECT a,SUM(b*c) AS e FROM T GROUP BY a) SELECT * FROM d;
|
||||||
|
DETACH DATABASE aux98;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux98;
|
||||||
|
PRAGMA writable_schema = YES;
|
||||||
|
PRAGMA short_column_names = OFF;
|
||||||
|
PRAGMA vdbe_trace = YES;
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux22;
|
||||||
|
BEGIN DEFERRED;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
InsErt INTO t1 VALUES (json_valid(ln(-json_set(sinh(x'01'), '$.key', (log(-(-(9223372036854775809))) * 1))), 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
CREATE TABLE t1(x);
|
||||||
|
INSERT INTO t1 VALUES(-2147483649);
|
||||||
|
CREATE TABLE t2(y,z);
|
||||||
|
INSERT INTO t2 VALUES(2,3);
|
||||||
|
CREATE INDEX t2y ON t2(y);
|
||||||
|
SELECT * FROM t1,(SELECT * FROM t2 WHERE NOT NOT (NOT NOT (y=2)) ORDER BY y,z);
|
||||||
|
|
||||||
|
SELECT GROUP_CONCAT(x, '.') OVER (PARTITION BY x ORDER BY x ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t1;
|
||||||
|
INSERT OR ABORT INTO t2 VALUES (0, 'x');
|
||||||
|
END;
|
||||||
|
ANALYZE;
|
||||||
|
REINDEX;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_t2_6543 ON t2(y COLLATE NOCASE) WHERE y > 0;
|
||||||
|
SELECT * FROM t2 AS a INNER JOIN t1 AS b ON a.rowid = b.rowid;
|
||||||
|
DROP INDEX IF EXISTS t2;
|
||||||
|
DETACH DATABASE aux22;
|
||||||
|
INSERT INTO t2 VALUES (NULL, NULL);
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_9456 AFTER UPDATE ON t1 FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
DROP TRIGGER IF EXISTS t2;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) UNIQUE,
|
||||||
|
C BIGINT
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
X VARCHAR(20) PRIMARY KEY,
|
||||||
|
A VARCHAR(10),
|
||||||
|
FOREIGN KEY (A) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'p', 9999999999999);
|
||||||
|
INSERT INTO T1 VALUES ('b', 'q', -9999999999999);
|
||||||
|
INSERT INTO T2 VALUES ('m', 'a');
|
||||||
|
INSERT INTO T2 VALUES ('n', 'b');
|
||||||
|
SELECT T2.X, T1.C FROM T2 INNER JOIN T1 ON T2.A = T1.A WHERE T1.C > -1000000000000;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T2;
|
||||||
|
ALTER TABLE t1 ADD COLUMN extra_7517 FLOA DEFAULT (abs(random()) % 1000);
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
VACUUM;
|
||||||
|
ALTER TABLE T1 RENAME TO T1_r4172;
|
||||||
|
INSERT INTO T1 VALUES (NULL, NULL, NULL) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
SELECT GROUP_CONCAT(y, '|') FROM t2;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE X IS NOT NULL), SUM(rowid) FILTER (WHERE X > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(X) FILTER (WHERE X > 0 AND X < 100), COUNT(*) FILTER (WHERE typeof(X) = "text") FROM T2;
|
||||||
|
ALTER TABLE T1 ADD COLUMN extra_7361 BOOLEAN DEFAULT (random());
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r8174;
|
||||||
|
DROP TABLE IF EXISTS T2;
|
||||||
|
PRAGMA reverse_unordered_selects;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE x IS NOT NULL), SUM(rowid) FILTER (WHERE x > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(x) FILTER (WHERE x > 0 AND x < 100), COUNT(*) FILTER (WHERE typeof(x) = "text") FROM t1;
|
||||||
|
SELECT LAG(A, 1, NULL) OVER (PARTITION BY A ORDER BY A) FROM T2;
|
||||||
|
WITH RECURSIVE pair(a,b) AS (VALUES(0,1) UNION ALL SELECT b, a+b FROM pair WHERE b<100) SELECT * FROM pair;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T2_9819 AFTER DELETE ON T2 BEGIN INSERT INTO T2(A) VALUES (NULL); END;
|
||||||
|
SELECT * FROM T1 AS a LEFT OUTER JOIN T1 AS b ON a.rowid = b.rowid;
|
||||||
|
DELETE FROM t1 WHERE x > (SELECT AVG(x) FROM t1);
|
||||||
|
INSERT INTO T2 VALUES (NULL, 'x') ON CONFLICT(X) DO UPDATE SET X = excluded.X, A = excluded.A;
|
||||||
|
PRAGMA checkpoint_fullsync = NO;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,2.0,10.5), (1,-3.5,20.25), (2,9e999,-1.0);
|
||||||
|
WITH d AS (SELECT a,SUM(b*c) AS e FROM T GROUP BY a) SELECT * FROM d;
|
||||||
|
DETACH DATABASE aux98;
|
||||||
|
|
||||||
|
UPDATE t1 SET x = json_object('k', x) WHERE x BETWEEN 0 AND 100;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r3577;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
WARNING: writing to an imposter table will corrupt the "t1bc" index!
|
||||||
|
Braun|30|3
|
||||||
|
von|20|2
|
||||||
|
Braun|30
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ATTACH DATABASE ':memory:' AS aux28;
|
||||||
|
CREATE TABLE main.t1(a ANY, b INT);
|
||||||
|
INSERT INTO t1(a,b) VALUES('%',null),(null,null),((acos(char(-(-(sinh(jsonb_remove(1, '$.key')))), 2, 3, 4, 5)) + 0) -> 'key',null); /* PRAGMA read_uncommitted = TRUE; */ CREATE UNIQUE INDEX t1b ON t1(abs(b));
|
||||||
|
SELECT quote(a), /**/ quote(b), '|' FROM t1 GROUP BY a, abs(b);
|
||||||
|
|
||||||
|
REINDEX;
|
||||||
|
UPDATE t1 SET b = json_object('k', b) WHERE b IS NOT NULL RETURNING *;
|
||||||
|
SELECT STRING_AGG(b, '|') FROM t1;
|
||||||
|
DETACH DATABASE aux28;
|
||||||
|
VACUUM main;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_t1_9088 AS SELECT b FROM t1;
|
||||||
|
PRAGMA parser_trace = OFF;
|
||||||
|
SELECT GROUP_CONCAT(a, a) OVER (PARTITION BY a ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM t1;
|
||||||
|
INSERT INTO t1 DEFAULT VALUES;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_9991 AS SELECT a FROM t1;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN a TO a_r7522;
|
||||||
|
ALTER TABLE t1 ADD COLUMN extra_6255 DECIMAL(10,5) COLLATE NOCASE;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a','b',5.0), ('a','c',5.0), ('b','d',-8.25);
|
||||||
|
SELECT a,b,c,
|
||||||
|
RANK() OVER (PARTITION BY a ORDER BY c DESC) AS d FROM T;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
a|b|5.0|1
|
||||||
|
a|c|5.0|1
|
||||||
|
b|d|-8.25|1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
.limit
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(-6374042461028137888) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL,
|
||||||
|
C BIGINT UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'x', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'y', -1000000);
|
||||||
|
INSERT INTO T VALUES ('c', 'y', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 'y', 42);
|
||||||
|
INSERT INTO T VALUES ('e', 'x', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('f', 'z', 2147483648);
|
||||||
|
SELECT * FROM T WHERE C > 0 ORDER BY C DESC;
|
||||||
|
SELECT * FROM T;
|
||||||
|
UPDATE T SET A = NULL WHERE 1 RETURNING *;
|
||||||
|
DELETE FROM T WHERE B IS NULL;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T_5040 AS SELECT A FROM T;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
length 1000000000
|
||||||
|
sql_length 1000000000
|
||||||
|
column 2000
|
||||||
|
expr_depth 1000
|
||||||
|
compound_select 500
|
||||||
|
vdbe_op 250000000
|
||||||
|
function_arg 127
|
||||||
|
attached 10
|
||||||
|
like_pattern_length 50000
|
||||||
|
variable_number 32766
|
||||||
|
trigger_depth 1000
|
||||||
|
worker_threads 0
|
||||||
|
e|x|9223372036854775807
|
||||||
|
f|z|2147483648
|
||||||
|
d|y|42
|
||||||
|
a|x|-9223372036854775808
|
||||||
|
b|y|-1000000
|
||||||
|
c|y|0
|
||||||
|
d|y|42
|
||||||
|
e|x|9223372036854775807
|
||||||
|
f|z|2147483648
|
||||||
|
|x|-9223372036854775808
|
||||||
|
|y|-1000000
|
||||||
|
|y|0
|
||||||
|
|y|42
|
||||||
|
|x|9223372036854775807
|
||||||
|
|z|2147483648
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
length 1000000000
|
||||||
|
sql_length 1000000000
|
||||||
|
column 2000
|
||||||
|
expr_depth 1000
|
||||||
|
compound_select 500
|
||||||
|
vdbe_op 250000000
|
||||||
|
function_arg 1000
|
||||||
|
attached 10
|
||||||
|
like_pattern_length 50000
|
||||||
|
variable_number 32766
|
||||||
|
trigger_depth 1000
|
||||||
|
worker_threads 0
|
||||||
|
e|x|9223372036854775807
|
||||||
|
f|z|2147483648
|
||||||
|
d|y|42
|
||||||
|
a|x|-9223372036854775808
|
||||||
|
b|y|-1000000
|
||||||
|
c|y|0
|
||||||
|
d|y|42
|
||||||
|
e|x|9223372036854775807
|
||||||
|
f|z|2147483648
|
||||||
|
|x|-9223372036854775808
|
||||||
|
|y|-1000000
|
||||||
|
|y|0
|
||||||
|
|y|42
|
||||||
|
|x|9223372036854775807
|
||||||
|
|z|2147483648
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-nonce "n0Nc3"
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,295 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA ignore_check_constraints = 1;
|
||||||
|
SAVEPOINT sp4325;
|
||||||
|
SAVEPOINT sp5433;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (like('', 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA /**/ writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
ATTACH DATABASE ':memory:' AS aux43;
|
||||||
|
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);
|
||||||
|
SELECT * FROM t41 LEFT JOIN (SELECT count(*) AS cnt, x1.d FROM (t42 INNER JOIN t43 ON d=g) AS x1 WHERE x1.d>json_extract(5, '$') GROUP BY x1.d) AS x2 ON t41.b=x2.d;
|
||||||
|
|
||||||
|
DETACH DATABASE aux43;
|
||||||
|
SELECT * FROM (SELECT g FROM t43 WHERE g IS NOT NULL) AS sub;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA /**/ writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
ATTACH DATABASE ':memory:' AS aux43;
|
||||||
|
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);
|
||||||
|
SELECT * FROM t41 LEFT JOIN (SELECT count(*) AS cnt, x1.d FROM (t42 INNER JOIN t43 ON d=g) AS x1 WHERE x1.d>json_extract(5, '$') GROUP BY x1.d) AS x2 ON t41.b=x2.d;
|
||||||
|
|
||||||
|
DETACH DATABASE aux43;
|
||||||
|
SELECT * FROM (SELECT g FROM t43 WHERE g IS NOT NULL) AS sub;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA /**/ writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
ATTACH DATABASE ':memory:' AS aux43;
|
||||||
|
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);
|
||||||
|
SELECT * FROM t41 LEFT JOIN (SELECT count(*) AS cnt, x1.d FROM (t42 INNER JOIN t43 ON d=g) AS x1 WHERE x1.d>json_extract(5, '$') GROUP BY x1.d) AS x2 ON t41.b=x2.d;
|
||||||
|
|
||||||
|
DETACH DATABASE aux43;
|
||||||
|
SELECT * FROM (SELECT g FROM t43 WHERE g IS NOT NULL) AS sub;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA /**/ writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
ATTACH DATABASE ':memory:' AS aux43;
|
||||||
|
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);
|
||||||
|
SELECT * FROM t41 LEFT JOIN (SELECT count(*) AS cnt, x1.d FROM (t42 INNER JOIN t43 ON d=g) AS x1 WHERE x1.d>json_extract(5, '$') GROUP BY x1.d) AS x2 ON t41.b=x2.d;
|
||||||
|
|
||||||
|
DETACH DATABASE aux43;
|
||||||
|
SELECT * FROM (SELECT g FROM t43 WHERE g IS NOT NULL) AS sub;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA /**/ writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
ATTACH DATABASE ':memory:' AS aux43;
|
||||||
|
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);
|
||||||
|
SELECT * FROM t41 LEFT JOIN (SELECT count(*) AS cnt, x1.d FROM (t42 INNER JOIN t43 ON d=g) AS x1 WHERE x1.d>json_extract(5, '$') GROUP BY x1.d) AS x2 ON t41.b=x2.d;
|
||||||
|
|
||||||
|
DETACH DATABASE aux43;
|
||||||
|
SELECT * FROM (SELECT g FROM t43 WHERE g IS NOT NULL) AS sub;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA /**/ writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
ATTACH DATABASE ':memory:' AS aux43;
|
||||||
|
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);
|
||||||
|
SELECT * FROM t41 LEFT JOIN (SELECT count(*) AS cnt, x1.d FROM (t42 INNER JOIN t43 ON d=g) AS x1 WHERE x1.d>json_extract(5, '$') GROUP BY x1.d) AS x2 ON t41.b=x2.d;
|
||||||
|
|
||||||
|
DETACH DATABASE aux43;
|
||||||
|
SELECT * FROM (SELECT g FROM t43 WHERE g IS NOT NULL) AS sub;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA /**/ writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
ATTACH DATABASE ':memory:' AS aux43;
|
||||||
|
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);
|
||||||
|
SELECT * FROM t41 LEFT JOIN (SELECT count(*) AS cnt, x1.d FROM (t42 INNER JOIN t43 ON d=g) AS x1 WHERE x1.d>json_extract(5, '$') GROUP BY x1.d) AS x2 ON t41.b=x2.d;
|
||||||
|
|
||||||
|
DETACH DATABASE aux43;
|
||||||
|
SELECT * FROM (SELECT g FROM t43 WHERE g IS NOT NULL) AS sub;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA /**/ writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
ATTACH DATABASE ':memory:' AS aux43;
|
||||||
|
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);
|
||||||
|
SELECT * FROM t41 LEFT JOIN (SELECT count(*) AS cnt, x1.d FROM (t42 INNER JOIN t43 ON d=g) AS x1 WHERE x1.d>json_extract(5, '$') GROUP BY x1.d) AS x2 ON t41.b=x2.d;
|
||||||
|
|
||||||
|
DETACH DATABASE aux43;
|
||||||
|
SELECT * FROM (SELECT g FROM t43 WHERE g IS NOT NULL) AS sub;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA /**/ writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
ATTACH DATABASE ':memory:' AS aux43;
|
||||||
|
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);
|
||||||
|
SELECT * FROM t41 LEFT JOIN (SELECT count(*) AS cnt, x1.d FROM (t42 INNER JOIN t43 ON d=g) AS x1 WHERE x1.d>json_extract(5, '$') GROUP BY x1.d) AS x2 ON t41.b=x2.d;
|
||||||
|
|
||||||
|
DETACH DATABASE aux43;
|
||||||
|
SELECT * FROM (SELECT g FROM t43 WHERE g IS NOT NULL) AS sub;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA /**/ writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
ATTACH DATABASE ':memory:' AS aux43;
|
||||||
|
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);
|
||||||
|
SELECT * FROM t41 LEFT JOIN (SELECT count(*) AS cnt, x1.d FROM (t42 INNER JOIN t43 ON d=g) AS x1 WHERE x1.d>json_extract(5, '$') GROUP BY x1.d) AS x2 ON t41.b=x2.d;
|
||||||
|
|
||||||
|
DETACH DATABASE aux43;
|
||||||
|
SELECT * FROM (SELECT g FROM t43 WHERE g IS NOT NULL) AS sub;
|
||||||
|
|
||||||
|
REINDEX t42;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t43;
|
||||||
|
ALTER TABLE t42 ADD COLUMN extra_4589 TEXT UNIQUE;
|
||||||
|
SELECT STRING_AGG(g, '|') FROM t43;
|
||||||
|
INSERT INTO t1 DEFAULT VALUES;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t42;
|
||||||
|
PRAGMA legacy_alter_table = FALSE;
|
||||||
|
RELEASE sp5433;
|
||||||
|
SELECT g FROM t43 WHERE +g = (SELECT MAX(g) FROM t43);
|
||||||
|
RELEASE sp4325;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
WARNING: writing to an imposter table will corrupt the "t1bc" index!
|
||||||
|
Braun|30|3
|
||||||
|
Wernher|10|0
|
||||||
|
von|20|2
|
||||||
|
Braun|30
|
||||||
|
Wernher|10
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
Braun|30|3
|
||||||
|
Wernher|10|0
|
||||||
|
von|20|2
|
||||||
|
Braun|30
|
||||||
|
Wernher|10
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,70 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
.recover
|
||||||
|
PRAGMA checkpoint_fullsync = OFF;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a TEXT,
|
||||||
|
b INTEGER,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a',1,2.0), ('a',2,-3.0), ('b',1,4.5);
|
||||||
|
SELECT a,b,c,
|
||||||
|
SUM(c) OVER (
|
||||||
|
PARTITION BY a
|
||||||
|
ORDER BY b
|
||||||
|
) AS d
|
||||||
|
FROM T;
|
||||||
|
VACUUM main;
|
||||||
|
VACUUM;
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_T_4915 ON T(lower(b)) WHERE b > 0;
|
||||||
|
ALTER TABLE T RENAME COLUMN c TO c_r7795;
|
||||||
|
ALTER TABLE T RENAME COLUMN b TO b_r3208;
|
||||||
|
INSERT OR REPLACE INTO T VALUES ('', NULL, 0);
|
||||||
|
SELECT GROUP_CONCAT(a, '|') FROM T;
|
||||||
|
DELETE FROM T WHERE 0;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA foreign_keys=OFF;
|
||||||
|
BEGIN;
|
||||||
|
PRAGMA writable_schema = on;
|
||||||
|
PRAGMA writable_schema = off;
|
||||||
|
COMMIT;
|
||||||
|
a|1|2.0|2.0
|
||||||
|
a|2|-3.0|-1.0
|
||||||
|
b|1|4.5|4.5
|
||||||
|
a|a|b|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
.dbconfig defensive off
|
||||||
|
BEGIN;
|
||||||
|
PRAGMA writable_schema = on;
|
||||||
|
PRAGMA foreign_keys = off;
|
||||||
|
PRAGMA encoding = 'UTF-8';
|
||||||
|
PRAGMA page_size = '4096';
|
||||||
|
PRAGMA auto_vacuum = '0';
|
||||||
|
PRAGMA user_version = '0';
|
||||||
|
PRAGMA application_id = '0';
|
||||||
|
PRAGMA writable_schema = off;
|
||||||
|
COMMIT;
|
||||||
|
a|1|2.0|2.0
|
||||||
|
a|2|-3.0|-1.0
|
||||||
|
b|1|4.5|4.5
|
||||||
|
a|a|b|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,54 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA trusted_schema = YES;
|
||||||
|
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;
|
||||||
|
|
||||||
|
SELECT * FROM tempx;
|
||||||
|
WITH cte(x) AS (VALUES(CAST(-0 AS NCHAR(55))),(2),(3)) SELECT * FROM cte WHERE x > 1;
|
||||||
|
PRAGMA automatic_index = 1;
|
||||||
|
PRAGMA page_size = 4096;
|
||||||
|
INSERT INTO x VALUES (NULL, NULL);
|
||||||
|
SELECT RANK() OVER (ORDER BY id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM x;
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_tempx_9401 ON tempx(lower(id)) WHERE id > 0;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1|1
|
||||||
|
1|t-first
|
||||||
|
2
|
||||||
|
3
|
||||||
|
1
|
||||||
|
2
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1|1
|
||||||
|
1|t-first
|
||||||
|
0
|
||||||
|
2
|
||||||
|
3
|
||||||
|
1
|
||||||
|
2
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
.dump main
|
||||||
|
PRAGMA secure_delete /**/ = YES;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c INTEGER
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (octet_length(123),'a',NULL), (2,'b',1), (3,'c',2);
|
||||||
|
WITH RECURSIVE d(a,b,c,e) AS (
|
||||||
|
SELECT *,1 FROM T WHERE c IS NULL
|
||||||
|
UNION ALL
|
||||||
|
SELECT T.a,T.b,T.c,d.e+1
|
||||||
|
FROM T JOIN d ON T.c=d.a
|
||||||
|
)
|
||||||
|
SELECT * FROM d;
|
||||||
|
ALTER TABLE T ADD COLUMN extra_6942 NUMERIC DEFAULT 0;
|
||||||
|
INSERT INTO T DEFAULT VALUES;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA foreign_keys=OFF;
|
||||||
|
BEGIN TRANSACTION;
|
||||||
|
COMMIT;
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,41 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE one(o);
|
||||||
|
INSERT INTO one DEFAULT VALUES;
|
||||||
|
CREATE TABLE t1(x, z);
|
||||||
|
INSERT INTO t1 VALUES('aaa', unicode(NULL));
|
||||||
|
INSERT INTO t1 VALUES('aaa', unicode('A'));
|
||||||
|
CREATE VIEW vvv AS SELECT * FROM t1 UNION ALL SELECT typeof(NULL), unhex(0, ' ') WHERE 0;
|
||||||
|
SELECT /**/ ( SELECT sum(z) FROM vvv WHERE x='aaa' ) FROM one;
|
||||||
|
|
||||||
|
CREATE VIEW IF NOT EXISTS v_t1_7523 AS SELECT x FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM one;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_one_9622 AS SELECT o FROM one;
|
||||||
|
SELECT * FROM one WHERE o IN (SELECT o FROM one WHERE o IN (SELECT o FROM one));
|
||||||
|
ALTER TABLE t1 RENAME COLUMN z TO z_r2864;
|
||||||
|
ALTER TABLE one RENAME COLUMN o TO o_r5469;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA vdbe_addoptrace = OFF;
|
||||||
|
BEGIN DEFERRED TRANSACTION;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES ((-(-(lower('你好'))) * jsonb_insert(asinh(1), '$.key', 1)), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(20) PRIMARY KEY,
|
||||||
|
X VARCHAR(10) UNIQUE
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20) PRIMARY KEY,
|
||||||
|
Y VARCHAR(10) UNIQUE
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T1 VALUES ('c', 'o');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
INSERT INTO T2 VALUES ('c', 'l');
|
||||||
|
SELECT A FROM T1 INTERSECT SELECT A FROM T2;
|
||||||
|
WITH cte AS (SELECT * FROM T2), cte2 AS (SELECT * FROM cte) SELECT * FROM cte2;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN b TO b_r6813;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(15) PRIMARY KEY,
|
||||||
|
B VARCHAR(30) NOT NULL UNIQUE
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
X VARCHAR(15) NOT NULL,
|
||||||
|
C BIGINT,
|
||||||
|
FOREIGN KEY (X) REFERENCES T1(A)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('p', 'x');
|
||||||
|
INSERT INTO T1 VALUES ('q', 'y');
|
||||||
|
INSERT INTO T2 VALUES ('a', 'p', 9223372036854775807);
|
||||||
|
INSERT INTO T2 VALUES ('b', 'q', -9223372036854775808);
|
||||||
|
SELECT X, SUM(C) AS D, COUNT(*) AS E FROM T2 GROUP BY X;
|
||||||
|
SELECT * /**/ FROM T2 WHERE NOT NOT (NOT C < (SELECT MIN(C) FROM T2)) ;
|
||||||
|
ALTER TABLE T2 RENAME COLUMN X TO X_r945;
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
INSERT INTO t1 DEFAULT VALUES;
|
||||||
|
ALTER TABLE T2 RENAME COLUMN C TO C_r8599;
|
||||||
|
SELECT * FROM (SELECT * FROM t1) AS sub;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,1.5,10.0), (2,-2.5,20.0), (3,-9e999,30.0);
|
||||||
|
SELECT * FROM T WHERE b < 2.0 ORDER BY b;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
INSERT INTO t1 DEFAULT VALUES;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
ANALYZE t1;
|
||||||
|
SELECT * FROM T1 AS a JOIN T1 AS b ON a.rowid = b.rowid;
|
||||||
|
DROP VIEW IF EXISTS t1;
|
||||||
|
SELECT * FROM T NATURAL JOIN T1;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
WARNING: writing to an imposter table will corrupt the "t1bc" index!
|
||||||
|
Braun|30|3
|
||||||
|
von|20|2
|
||||||
|
Braun|30
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,2.0,10.5), (1,-3.5,20.25), (2,9e999,-1.0);
|
||||||
|
WITH d AS (SELECT a,SUM(b*c) AS e FROM T GROUP BY a) SELECT * FROM d;
|
||||||
|
PRAGMA trusted_schema;
|
||||||
|
PRAGMA defer_foreign_keys;
|
||||||
|
PRAGMA synchronous = 'EXTRA';
|
||||||
|
.nullvalue -(-(2))32327d3-536b-41de-a764-a6301986aeab
|
||||||
|
CREATE TABLE t0(c0);
|
||||||
|
INSERT INTO t0(c0) VALUES (NULL);
|
||||||
|
CREATE INDEX i0 ON t0(1) WHERE c0 NOT NULL;
|
||||||
|
SELECT 1 FROM t0 WHERE (t0.c0 IS FALSE) IS FALSE;
|
||||||
|
SELECT 1 FROM t0 WHERE (t0.c0 IS FALSE) BETWEEN FALSE AND TRUE;
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1|-49.875
|
||||||
|
2|-Inf
|
||||||
|
1
|
||||||
|
0
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1|-49.875
|
||||||
|
2|-Inf
|
||||||
|
0
|
||||||
|
0
|
||||||
|
1
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,739 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
.log ON
|
||||||
|
ATTACH DATABASE ':memory:' AS aux57;
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = '{';
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (NOT NOT (ABS(c) > 5 OR ABS(d) > 5)) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
|
||||||
|
SELECT * FROM T t1 JOIN (SELECT * FROM T) AS sub ON t1.B = sub.B;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
PRAGMA vdbe_trace = OFF;
|
||||||
|
DETACH DATABASE aux57;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r974;
|
||||||
|
SELECT * FROM T t1 JOIN (SELECT * FROM T) AS sub ON t1.A = sub.A;
|
||||||
|
SELECT c, (SELECT c FROM abc LIMIT 1) AS first_val FROM abc;
|
||||||
|
INSERT INTO t1 VALUES (1, 1, 'x', 1) ON CONFLICT(a) DO UPDATE SET a = excluded.a, b = excluded.b, c = excluded.c;
|
||||||
|
WITH cte AS (SELECT c, COUNT(*) AS cnt FROM t1 GROUP BY c) SELECT * FROM cte;
|
||||||
|
UPDATE T SET C = NULL RETURNING *;
|
||||||
|
SELECT RANK() OVER (ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
|
||||||
|
VACUUM;
|
||||||
|
WITH cte AS (SELECT * FROM abc), cte2 AS (SELECT * FROM cte) SELECT * FROM cte2;
|
||||||
|
SELECT * FROM t1 AS a LEFT OUTER JOIN abc AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT MIN(C) FROM T;
|
||||||
|
INSERT INTO T VALUES ('x', 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
INSERT INTO t1 VALUES ('x', 'x', NULL, 'x') ON CONFLICT(a) DO UPDATE SET a = excluded.a, b = excluded.b, c = excluded.c;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
WARNING: writing to an imposter table will corrupt the "t1bc" index!
|
||||||
|
Braun|30|3
|
||||||
|
von|20|2
|
||||||
|
Braun|30
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA parser_trace = NO;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux99;
|
||||||
|
.print
|
||||||
|
BEGIN DEFERRED;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (jsonb_array(ifnull(sign(0), 1)),2.0,10.5), (1,-3.5,20.25), (2,9e999,-1.0);
|
||||||
|
WITH d AS (SELECT a,SUM(b*c) AS e FROM T GROUP BY a) SELECT * FROM d;
|
||||||
|
SAVEPOINT sp9028;
|
||||||
|
.width
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux68;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d
|
||||||
|
INT);
|
||||||
|
INSERT INTO t1 VALUES (NULL, 'Wernher', CAST(ltrim('xxxhelloxxx', 'x') AS TEXT), CAST(100 -> '$[0]' AS DOUB));
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
|
||||||
|
.quit
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,1.5), (2,-7.25), /* PRAGMA vdbe_debug = FALSE; */ (3,0.0);
|
||||||
|
SELECT a,b FROM T WHERE NOT NOT (a >= 2) ORDER BY b;
|
||||||
|
ANALYZE T;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE b IS NOT NULL), SUM(rowid) FILTER (WHERE b > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(b) FILTER (WHERE b > 0 AND b < 100), COUNT(*) FILTER (WHERE typeof(b) = "text") FROM T;
|
||||||
|
DETACH DATABASE aux68;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE b IS NOT NULL), SUM(rowid) FILTER (WHERE b > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(b) FILTER (WHERE b > 0 AND b < 100), COUNT(*) FILTER (WHERE typeof(b) = "text") FROM T;
|
||||||
|
SELECT MIN(b) OVER (PARTITION BY b ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT COUNT(*) OVER (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS) FROM t1;
|
||||||
|
UPDATE t1 SET d = '' WHERE 1;
|
||||||
|
INSERT OR ABORT INTO t1 VALUES (0, 0, NULL, 7);
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp9028;
|
||||||
|
RELEASE SAVEPOINT sp9028;
|
||||||
|
REINDEX T;
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
SELECT * FROM t1 AS a FULL JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
SELECT SUM(b) FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT STRING_AGG(b) FROM T;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T_495 AS SELECT a FROM T;
|
||||||
|
END TRANSACTION;
|
||||||
|
INSERT INTO t1 SELECT * FROM t1;
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DELETE FROM T WHERE rowid = 75 RETURNING *;
|
||||||
|
ALTER TABLE T ADD COLUMN extra_685 DECIMAL(10,5) NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE T ADD COLUMN extra_8806 TEXT COLLATE RTRIM;
|
||||||
|
DETACH DATABASE aux99;
|
||||||
|
PRAGMA journal_size_limit;
|
||||||
|
SELECT * FROM T WHERE b = (SELECT MAX(b) FROM T WHERE b = (SELECT MAX(b) FROM T));
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_t1_2068 ON t1(b COLLATE NOCASE) WHERE b > 0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
ALTER TABLE T ADD COLUMN extra_4370 INT2 COLLATE RTRIM;
|
||||||
|
VACUUM main;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
WARNING: writing to an imposter table will corrupt the "t1bc" index!
|
||||||
|
Braun|30|3
|
||||||
|
Wernher|helloxxx|1
|
||||||
|
von|20|2
|
||||||
|
Braun|30
|
||||||
|
Wernher|helloxxx
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,759 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SAVEPOINT sp1638;
|
||||||
|
.headers off
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15),
|
||||||
|
C BIGINT,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -9223372036854775808);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 4000);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 1700);
|
||||||
|
INSERT INTO T VALUES ('d', 'r', 9223372036854775807);
|
||||||
|
INSERT INTO T VALUES ('e', 's', 0);
|
||||||
|
SELECT A, C FROM T WHERE +C > 1200 AND C < 9999999999 ORDER BY C;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (likelihood(1, 0.0625), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
SAVEPOINT sp2410;
|
||||||
|
-- replace({v}, '', 'x')
|
||||||
|
|
||||||
|
.log ON
|
||||||
|
ATTACH DATABASE ':memory:' AS aux57;
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = '{';
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a MEDIUMINT PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat((1 * 1), 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT NOT (NOT NOT (ABS(c) > 5 OR ABS(d) > 5)) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE /**/ d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper; /**/ SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux79;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux15;
|
||||||
|
.print https://yewtu.be/watch?v=dQw4w9WgXcQ
|
||||||
|
PRAGMA vdbe_listing = 2147483648;
|
||||||
|
PRAGMA short_column_names = YES;
|
||||||
|
SAVEPOINT sp5958;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (concat(1, 1, 1), 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
BEGIN;
|
||||||
|
create TABLE main.abc(a, b, c, PRIMARY KEY(a, b));
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL,
|
||||||
|
d REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (json_valid(1, 4),'a',40.5,-70.0), (2,'b',-10.25,20.5), (3,'c',9e999,-9e999);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C DOUBLE PRECISION
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', -0.000000001);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0.0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 3.14159265358979);
|
||||||
|
INSERT INTO T VALUES ('e', 't', 1.7976931348623157e+308);
|
||||||
|
INSERT INTO T VALUES ('f', 't', 750.25);
|
||||||
|
SELECT B, AVG(C) AS D, MIN(C) AS E, MAX(C) AS F FROM T GROUP BY B;
|
||||||
|
SELECT b FROM T WHERE NOT NOT (ABS(c) > 5 OR ABS(d) > 5) ;
|
||||||
|
INSERT INTO abc VALUES(1, 1, 1);
|
||||||
|
INSERT INTO abc SELECT a+(select max(a) FROM abc), b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
|
||||||
|
COMMIT;
|
||||||
|
SELECT count((SELECT a FROM abc WHERE +a = NULL ANd b >= upper.c)) FROM abc AS upper;
|
||||||
|
SELECT * FROM sqlite_master WHERE rowid=10;
|
||||||
|
ALTER TABLE T RENAME TO T_r2547;
|
||||||
|
SELECT b, (SELECT AVG(b) FROM abc) AS avg_val FROM abc;
|
||||||
|
INSERT INTO T VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
SELECT AVG(B) FROM T;
|
||||||
|
SELECT * FROM t1 WHERE c < ANY (SELECT c FROM t1);
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_7090 AFTER INSERT ON t1 BEGIN SELECT RAISE(ROLLBACK, 'rb'); END;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp5958;
|
||||||
|
RELEASE SAVEPOINT sp5958;
|
||||||
|
UPDATE abc SET a = NULL WHERE a IS NOT NULL RETURNING *;
|
||||||
|
DROP VIEW IF EXISTS abc;
|
||||||
|
DELETE FROM t1 WHERE rowid = 76;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
UPDATE T SET A = NULL WHERE 1;
|
||||||
|
ALTER TABLE T RENAME TO T_r3110;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL, NULL, NULL);
|
||||||
|
ALTER TABLE abc DROP COLUMN a;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_1503 BEFORE UPDATE OF a ON abc FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE d IS NOT NULL), SUM(rowid) FILTER (WHERE d > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(d) FILTER (WHERE d > 0 AND d < 100), COUNT(*) FILTER (WHERE typeof(d) = "text") FROM t1;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_abc_3299 ON abc(lower(b)) WHERE b IS NOT NULL;
|
||||||
|
WITH cte AS (SELECT "123" AS x) SELECT x + 0 FROM cte;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_abc_3167 BEFORE UPDATE OF c ON abc FOR EACH ROW BEGIN INSERT INTO abc(c) VALUES (NULL); END;
|
||||||
|
SELECT STRING_AGG(C) FROM T;
|
||||||
|
INSERT OR IGNORE INTO abc VALUES (NULL, 9, 'x');
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
INSERT OR IGNORE INTO t1 VALUES (3, '', 0, -10);
|
||||||
|
CREATE VIEW IF NOT EXISTS v_T_8516 AS SELECT C FROM T;
|
||||||
|
CREATE TEMP VIEW IF NOT EXISTS v_t1_5754 AS SELECT b FROM t1;
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
DROP TRIGGER IF EXISTS t1;
|
||||||
|
SELECT * FROM t1 AS a FULL OUTER JOIN T AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT * FROM T WHERE B IN (SELECT B FROM T LIMIT 0);
|
||||||
|
DETACH DATABASE aux15;
|
||||||
|
WITH cte AS (SELECT * FROM abc LIMIT 1) DELETE FROM abc WHERE a IN (SELECT a FROM cte) AND 1=0;
|
||||||
|
WITH RECURSIVE vals(x) AS (SELECT C FROM T WHERE C IS NOT NULL UNION ALL SELECT C FROM T WHERE C IS NOT NULL LIMIT 10) SELECT * FROM vals;
|
||||||
|
ALTER TABLE t1 RENAME COLUMN c TO c_r3776;
|
||||||
|
DETACH DATABASE aux79;
|
||||||
|
SELECT * FROM T t1 RIGHT JOIN T t2 ON t1.A = (SELECT A FROM T WHERE A = t1.A);
|
||||||
|
INSERT OR ABORT INTO T VALUES ('x', 0, NULL);
|
||||||
|
SELECT GROUP_CONCAT(c, '.') OVER (PARTITION BY c ORDER BY c ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING EXCLUDE CURRENT ROW) FROM t1;
|
||||||
|
SELECT * FROM T t1 JOIN (SELECT * FROM T) AS sub ON t1.B = sub.B;
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
PRAGMA vdbe_trace = OFF;
|
||||||
|
DETACH DATABASE aux57;
|
||||||
|
ALTER TABLE T RENAME COLUMN B TO B_r974;
|
||||||
|
SELECT * FROM T t1 JOIN (SELECT * FROM T) AS sub ON t1.A = sub.A;
|
||||||
|
SELECT c, (SELECT c FROM abc LIMIT 1) AS first_val FROM abc;
|
||||||
|
INSERT INTO t1 VALUES (1, 1, 'x', 1) ON CONFLICT(a) DO UPDATE SET a = excluded.a, b = excluded.b, c = excluded.c;
|
||||||
|
WITH cte AS (SELECT c, COUNT(*) AS cnt FROM t1 GROUP BY c) SELECT * FROM cte;
|
||||||
|
UPDATE T SET C = NULL RETURNING *;
|
||||||
|
SELECT RANK() OVER (ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
|
||||||
|
VACUUM;
|
||||||
|
WITH cte AS (SELECT * FROM abc), cte2 AS (SELECT * FROM cte) SELECT * FROM cte2;
|
||||||
|
SELECT * FROM t1 AS a LEFT OUTER JOIN abc AS b ON a.rowid = b.rowid;
|
||||||
|
SELECT MIN(C) FROM T;
|
||||||
|
INSERT INTO T VALUES ('x', 'x', 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, B = excluded.B, C = excluded.C;
|
||||||
|
INSERT INTO t1 VALUES ('x', 'x', NULL, 'x') ON CONFLICT(a) DO UPDATE SET a = excluded.a, b = excluded.b, c = excluded.c;
|
||||||
|
VACUUM;
|
||||||
|
SELECT * FROM abc WHERE b < ANY (SELECT b FROM abc);
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp2410;
|
||||||
|
RELEASE SAVEPOINT sp2410;
|
||||||
|
CREATE VIEW IF NOT EXISTS v_abc_7604 AS SELECT b FROM abc;
|
||||||
|
PRAGMA vdbe_trace = ON;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_t1_913 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SELECT RAISE(IGNORE); END;
|
||||||
|
ALTER TABLE abc RENAME COLUMN a TO a_r6922;
|
||||||
|
DELETE FROM t1 WHERE 1;
|
||||||
|
DELETE FROM abc WHERE c IS NULL RETURNING *;
|
||||||
|
ALTER TABLE t1 DROP COLUMN c;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INT, d INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 'Wernher', 10, 100);
|
||||||
|
INSERT INTO t1 VALUES (2, 'von', 20, 200);
|
||||||
|
INSERT INTO t1 VALUES (3, 'Braun', 30, 300);
|
||||||
|
CREATE INDEX t1bc ON t1(b, c);
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(20),
|
||||||
|
B VARCHAR(30),
|
||||||
|
C VARCHAR(30),
|
||||||
|
PRIMARY KEY (A, B),
|
||||||
|
UNIQUE (A, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', 'x');
|
||||||
|
INSERT INTO T VALUES ('a', 'q', 'y');
|
||||||
|
INSERT INTO T VALUES ('b', 'p', 'z');
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 'w');
|
||||||
|
INSERT INTO T VALUES ('d', 's', 'v');
|
||||||
|
SELECT A, COUNT(DISTINCT B) AS D FROM T GROUP BY A HAVING COUNT(DISTINCT B) >= 1;
|
||||||
|
PRAGMA writable_schema = ON;
|
||||||
|
.imposter t1bc t2
|
||||||
|
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT b, c FROM t1 ORDER BY b, c;
|
||||||
|
.quit
|
||||||
|
UPDATE abc SET c = NULL WHERE 1 RETURNING *;
|
||||||
|
REINDEX T;
|
||||||
|
DROP TRIGGER IF EXISTS T;
|
||||||
|
ALTER TABLE T ADD COLUMN extra_2614 MEDIUMINT COLLATE NOCASE;
|
||||||
|
REINDEX T;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_t1_2917 ON t1(lower(d)) WHERE d IS NOT NULL;
|
||||||
|
SELECT LAG(d) OVER (ORDER BY d ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES) FROM t1;
|
||||||
|
INSERT INTO abc DEFAULT VALUES;
|
||||||
|
WITH cte AS (SELECT 1.5 AS x) SELECT CAST(x AS TEXT) FROM cte;
|
||||||
|
VACUUM;
|
||||||
|
REINDEX T;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE C IS NOT NULL), SUM(rowid) FILTER (WHERE C > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(C) FILTER (WHERE C > 0 AND C < 100), COUNT(*) FILTER (WHERE typeof(C) = "text") FROM T;
|
||||||
|
ALTER TABLE t1 ADD COLUMN extra_5836 DOUBLE DEFAULT (random());
|
||||||
|
VACUUM main;
|
||||||
|
SELECT * FROM T;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp1638;
|
||||||
|
RELEASE SAVEPOINT sp1638;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
c|1700
|
||||||
|
b|4000
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
WARNING: writing to an imposter table will corrupt the "t1bc" index!
|
||||||
|
Braun|30|3
|
||||||
|
Wernher|10|1
|
||||||
|
von|20|2
|
||||||
|
Braun|30
|
||||||
|
Wernher|10
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
c|1700
|
||||||
|
b|4000
|
||||||
|
CREATE TABLE "t2"("b","c","_ROWID_",PRIMARY KEY("b","c","_ROWID_"))WITHOUT ROWID;
|
||||||
|
Braun|30|3
|
||||||
|
Wernher|10|1
|
||||||
|
von|20|2
|
||||||
|
Braun|30
|
||||||
|
Wernher|10
|
||||||
|
von|20
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
PRAGMA count_changes = NO;
|
||||||
|
PRAGMA trusted_schema = YES;
|
||||||
|
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;
|
||||||
|
|
||||||
|
SELECT * FROM tempx;
|
||||||
|
WITH cte(x) AS (VALUES(CAST(-'𝕊𝕢𝕝' AS NCHAR(9223372036854775806))),(2),(3)) SELECT * FROM cte WHERE NOT NOT (x > 1) ;
|
||||||
|
PRAGMA automatic_index = 1;
|
||||||
|
PRAGMA page_size = 4096;
|
||||||
|
INSERT INTO x VALUES (NULL, NULL);
|
||||||
|
SELECT RANK() OVER (ORDER BY id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM x;
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_tempx_9401 ON tempx(lower(id)) WHERE id > 0;
|
||||||
|
UPDATE x SET a = -32 WHERE a IS NOT NULL;
|
||||||
|
CREATE TABLE T (
|
||||||
|
a INTEGER,
|
||||||
|
b TEXT,
|
||||||
|
c REAL
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES (1,'a',3.14), (1,'b',-7.75), (2,'c',-9e999);
|
||||||
|
SELECT b,a,c,
|
||||||
|
RANK() OVER (PARTITION BY a ORDER BY c DESC) AS d FROM T;
|
||||||
|
ALTER TABLE T DROP COLUMN b;
|
||||||
|
PRAGMA cache_spill = 1;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1|1
|
||||||
|
1|t-first
|
||||||
|
2
|
||||||
|
3
|
||||||
|
1
|
||||||
|
2
|
||||||
|
a|1|3.14|1
|
||||||
|
b|1|-7.75|2
|
||||||
|
c|2|-Inf|1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
1|1
|
||||||
|
1|t-first
|
||||||
|
0
|
||||||
|
2
|
||||||
|
3
|
||||||
|
1
|
||||||
|
2
|
||||||
|
a|1|3.14|1
|
||||||
|
b|1|-7.75|2
|
||||||
|
c|2|-Inf|1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-bail
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ATTACH DATABASE ':memory:' AS aux81;
|
||||||
|
BEGIN DEFERRED;
|
||||||
|
.schema !@#$%^&*()qwertyuiop[]\{}|asdfghjkl;':"zxcvbnm,./<>?
|
||||||
|
CREATE TABLE [T] (
|
||||||
|
A VARCHAR(10) PRIMARY KEY,
|
||||||
|
B VARCHAR(15) NOT NULL,
|
||||||
|
C INTEGER,
|
||||||
|
UNIQUE (B, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', -2147483648);
|
||||||
|
INSERT INTO T VALUES ('b', 'q', 700);
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 0);
|
||||||
|
INSERT INTO T VALUES ('d', 's', 2147483647);
|
||||||
|
INSERT INTO T VALUES ('e', 't', -1);
|
||||||
|
INSERT INTO T VALUES ('f', 'u', 1);
|
||||||
|
SELECT * FROM T WHERE C BETWEEN -1000 AND 1000 ORDER BY C ASC;
|
||||||
|
PRAGMA trusted_schema = 1;
|
||||||
|
ATTACH DATABASE ':memory:' AS aux7;
|
||||||
|
CREATE TABLE artists (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name varchar(255));
|
||||||
|
CREATE TABLE albums ( id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name varchar(255), artist_id integer REFERENCES artists);
|
||||||
|
INSERT INTO artists (name) VALUES ('Ar');
|
||||||
|
INSERT INTO albums (name, artist_id) VALUES ('Al', 1);
|
||||||
|
SELECT artists.* FROM artists INNER JOIN artists AS b ON (b.id = artists.id) WHERE (artists.id IN ( SELECT albums.artist_id FROM albums WHERE ((name = 'Al') AND (albums.artist_id IS NOT NULL) AND (albums.id IN ( SELECT id FROM ( SELECT albums.id, row_number() OVER (PARTITION BY albums.artist_id ORDER BY name) AS x FROM albums WHERE (name = 'Al') ) AS t1 WHERE (x = 1) )) AND (albums.id IN (1, 2))) ));
|
||||||
|
|
||||||
|
DETACH DATABASE aux7;
|
||||||
|
INSERT INTO artists VALUES (NULL, 1) ON CONFLICT(id) DO UPDATE SET id = excluded.id, name = excluded.name;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_albums_9678 AFTER DELETE ON albums FOR EACH ROW BEGIN INSERT INTO albums(id) VALUES (NULL); END;
|
||||||
|
DROP TRIGGER IF EXISTS albums;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_T_2726 BEFORE INSERT ON T BEGIN SELECT RAISE(IGNORE); END;
|
||||||
|
ALTER TABLE albums RENAME COLUMN artist_id TO artist_id_r2718;
|
||||||
|
PRAGMA vdbe_trace = OFF;
|
||||||
|
SELECT * FROM artists NATURAL JOIN artists;
|
||||||
|
ANALYZE albums;
|
||||||
|
ALTER TABLE artists ADD COLUMN extra_4610 SMALLINT DEFAULT 0;
|
||||||
|
COMMIT;
|
||||||
|
DETACH DATABASE aux81;
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_artists_5965 AFTER INSERT ON artists BEGIN SELECT RAISE(FAIL, 'no'); END;
|
||||||
|
DELETE FROM artists WHERE rowid = -CAST('[1,2,3]' AS INT8);
|
||||||
|
DROP TABLE IF EXISTS albums;
|
||||||
|
SELECT NTH_VALUE(id, '@') OVER (ORDER BY id) FROM artists;
|
||||||
|
REINDEX;
|
||||||
|
SELECT * FROM albums WHERE id > (SELECT MAX(id) FROM albums);
|
||||||
|
SELECT COUNT(*) FILTER (WHERE artist_id IS NOT NULL), SUM(rowid) FILTER (WHERE artist_id > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(artist_id) FILTER (WHERE artist_id > 0 AND artist_id < 100), COUNT(*) FILTER (WHERE typeof(artist_id) = "text") FROM albums;
|
||||||
|
REINDEX albums;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE name IS NOT NULL), SUM(rowid) FILTER (WHERE name > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(name) FILTER (WHERE name > 0 AND name < 100), COUNT(*) FILTER (WHERE typeof(name) = "text") FROM artists;
|
||||||
|
SELECT COUNT(name) FROM artists;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3.39.0 2022-05-10 23:28:12 764b71267e0b31ff7eaf2a0def7526a1a02dce4d5b456dea060d97ed342ealt1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
3.51.1 2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88 (64-bit)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
-version
|
||||||
|
```
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,136 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SAVEPOINT sp9324;
|
||||||
|
.timer on
|
||||||
|
PRAGMA parser_trace = FALSE;
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux81;
|
||||||
|
PRAGMA reverse_unordered_selects = ON;
|
||||||
|
PRAGMA max_page_count;
|
||||||
|
PRAGMA case_sensitive_like = OFF;
|
||||||
|
PRAGMA writable_schema = NO;
|
||||||
|
.quit
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1(a int, b int);
|
||||||
|
INSERT INTO t1 VALUES(glob(NULL, NULL),NULL),(CAST(CAST(CAST(log10(if('"', cosh(5035996954804773676), 1, 5035996954804773676, 5035996954804773676)) AS CLOB) AS UNSIGNED BIG INT) AS SMALLINT),18),(2,19);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT x, y FROM (SELECT 98 AS x, 99 AS y UNION SELECT a AS x, sum(b) AS y FROM _m GROUP BY /* PRAGMA secure_delete = TRUE; */ a) AS w WHERE NOT y>=20 ORDER BY +x;
|
||||||
|
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;
|
||||||
|
DROP VIEW IF EXISTS t1;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL);
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
X VARCHAR(10),
|
||||||
|
PRIMARY KEY (A, X),
|
||||||
|
UNIQUE (X)
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
Y VARCHAR(10) UNIQUE,
|
||||||
|
PRIMARY KEY (A, Y)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
SELECT A FROM T1 UNION ALL SELECT A FROM T2 ORDER BY A;
|
||||||
|
CREATE TABLE "T" (
|
||||||
|
A VARCHAR(20),
|
||||||
|
B VARCHAR(30),
|
||||||
|
C VARCHAR(30),
|
||||||
|
PRIMARY KEY (A, B),
|
||||||
|
UNIQUE (A, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', 'x');
|
||||||
|
INSERT INTO T VALUES ('a', 'q', 'y');
|
||||||
|
INSERT INTO T VALUES ('b', 'p', 'z');
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 'w');
|
||||||
|
INSERT INTO T VALUES ('d', 's', 'v');
|
||||||
|
SELECT A, COUNT(DISTINCT B) AS D FROM T GROUP BY A HAVING COUNT(DISTINCT B) >= 1;
|
||||||
|
INSERT INTO T2 VALUES (NULL, NULL);
|
||||||
|
ALTER TABLE T2 ADD COLUMN extra_2116 NUMERIC DEFAULT 0;
|
||||||
|
REINDEX;
|
||||||
|
UPDATE T2 SET A = 'x' WHERE A IS NOT NULL RETURNING *;
|
||||||
|
SELECT * FROM (SELECT Y, COUNT(*) FROM T2 GROUP BY Y) AS sub;
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
SELECT LAG(X, 0) OVER (PARTITION BY X ORDER BY X ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM T1;
|
||||||
|
SELECT 0x0ACB29BM205381;
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
SELECT LEAD(X, 1, NULL) OVER (PARTITION BY X ORDER BY X ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES) FROM T1;
|
||||||
|
PRAGMA vdbe_listing = YES;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T1_7197 AS SELECT A FROM T1;
|
||||||
|
ALTER TABLE T1 DROP COLUMN A;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T1_4345 ON T1((X + 1)) WHERE X IS NOT NULL;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
DETACH DATABASE aux81;
|
||||||
|
SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t1 WHERE b > 0);
|
||||||
|
VACUUM main;
|
||||||
|
SELECT * FROM T2 WHERE A IN (SELECT A FROM T2 WHERE A IS NOT NULL);
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r6007;
|
||||||
|
ALTER TABLE T1 RENAME TO T1_r5111;
|
||||||
|
SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t1 WHERE a = NULL);
|
||||||
|
SELECT COUNT(X) OVER (ORDER BY X RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM T1;
|
||||||
|
SELECT NTH_VALUE(b, -1) OVER (ORDER BY b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t1;
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
INSERT INTO T1 VALUES (NULL, 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, X = excluded.X;
|
||||||
|
SELECT * FROM t1 WHERE b IN (SELECT b FROM t1 WHERE b GLOB "*");
|
||||||
|
INSERT OR FAIL INTO t1 VALUES (0, 0);
|
||||||
|
REINDEX;
|
||||||
|
INSERT INTO T1 VALUES ('x', NULL) ON CONFLICT(A) DO UPDATE SET A = excluded.A, X = excluded.X;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
ANALYZE T2;
|
||||||
|
WITH m AS MATERIALIZED (SELECT * FROM T2) SELECT m.A FROM m JOIN m AS m2 ON m.A = m2.A;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r3665;
|
||||||
|
DELETE FROM T1 WHERE rowid = 99 RETURNING *;
|
||||||
|
WITH RECURSIVE cnt(x) AS (VALUES(0) UNION ALL SELECT x-1 FROM cnt WHERE x>-10) SELECT * FROM cnt;
|
||||||
|
INSERT INTO T1 VALUES (NULL, NULL);
|
||||||
|
REINDEX;
|
||||||
|
ALTER TABLE T2 RENAME TO T2_r3541;
|
||||||
|
WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<23) SELECT COUNT(*) FROM cnt;
|
||||||
|
SELECT * FROM T WHERE A NOT IN (SELECT A FROM T);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM T1;
|
||||||
|
INSERT INTO T1 VALUES (NULL, 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, X = excluded.X;
|
||||||
|
INSERT INTO T SELECT * FROM T;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_t1_2111 AS SELECT a FROM t1;
|
||||||
|
INSERT INTO T1 SELECT * FROM T1;
|
||||||
|
SELECT NTH_VALUE(a, 2) OVER (ORDER BY a) FROM t1;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r4405;
|
||||||
|
ROLLBACK TRANSACTION TO SAVEPOINT sp9324;
|
||||||
|
RELEASE SAVEPOINT sp9324;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000026
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000161
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000005
|
||||||
|
1073741823
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000009
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000006
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000003
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
Run Time: real 0.000008 user 0.000021 sys 0.000000
|
||||||
|
Run Time: real 0.000651 user 0.000105 sys 0.000000
|
||||||
|
Run Time: real 0.000004 user 0.000004 sys 0.000000
|
||||||
|
4294967294
|
||||||
|
Run Time: real 0.000007 user 0.000007 sys 0.000000
|
||||||
|
Run Time: real 0.000003 user 0.000004 sys 0.000000
|
||||||
|
Run Time: real 0.000002 user 0.000002 sys 0.000000
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
## Summary
|
||||||
|
<!--Explain briefly what goes wrong and explain why you believe this is a bug and not the intended behavior of SQLite (if it is not a crash).-->**No review yet**
|
||||||
|
|
||||||
|
## Minimized query
|
||||||
|
|
||||||
|
```sql
|
||||||
|
.timer on
|
||||||
|
PRAGMA parser_trace = FALSE;
|
||||||
|
ATTACH DATABASE '' || (':memory:') AS aux81;
|
||||||
|
PRAGMA reverse_unordered_selects = ON;
|
||||||
|
PRAGMA max_page_count;
|
||||||
|
PRAGMA case_sensitive_like = OFF;
|
||||||
|
PRAGMA writable_schema = NO;
|
||||||
|
.quit
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1(a int, b int);
|
||||||
|
INSERT INTO t1 VALUES(glob(NULL, NULL),NULL),(CAST(CAST(CAST(log10(if(0, 5035996954804773676, 1, 5035996954804773676, 5035996954804773676)) AS CLOB) AS UNSIGNED BIG INT) AS SMALLINT),18),(2,19);
|
||||||
|
WITH _m AS MATERIALIZED (SELECT * FROM t1) SELECT x, y FROM (SELECT 98 AS x, 99 AS y UNION SELECT a AS x, sum(b) AS y FROM _m GROUP BY /* PRAGMA secure_delete = TRUE; */ a) AS w WHERE y>=20 ORDER BY +x;
|
||||||
|
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;
|
||||||
|
DROP VIEW IF EXISTS t1;
|
||||||
|
INSERT INTO t1 VALUES (NULL, NULL);
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
X VARCHAR(10),
|
||||||
|
PRIMARY KEY (A, X),
|
||||||
|
UNIQUE (X)
|
||||||
|
);
|
||||||
|
CREATE TABLE T2 (
|
||||||
|
A VARCHAR(20),
|
||||||
|
Y VARCHAR(10) UNIQUE,
|
||||||
|
PRIMARY KEY (A, Y)
|
||||||
|
);
|
||||||
|
INSERT INTO T1 VALUES ('a', 'm');
|
||||||
|
INSERT INTO T1 VALUES ('b', 'n');
|
||||||
|
INSERT INTO T2 VALUES ('b', 'k');
|
||||||
|
SELECT A FROM T1 UNION ALL SELECT A FROM T2 ORDER BY A;
|
||||||
|
CREATE TABLE T (
|
||||||
|
A VARCHAR(20),
|
||||||
|
B VARCHAR(30),
|
||||||
|
C VARCHAR(30),
|
||||||
|
PRIMARY KEY (A, B),
|
||||||
|
UNIQUE (A, C)
|
||||||
|
);
|
||||||
|
INSERT INTO T VALUES ('a', 'p', 'x');
|
||||||
|
INSERT INTO T VALUES ('a', 'q', 'y');
|
||||||
|
INSERT INTO T VALUES ('b', 'p', 'z');
|
||||||
|
INSERT INTO T VALUES ('c', 'r', 'w');
|
||||||
|
INSERT INTO T VALUES ('d', 's', 'v');
|
||||||
|
SELECT A, COUNT(DISTINCT B) AS D FROM T GROUP BY A HAVING COUNT(DISTINCT B) >= 1;
|
||||||
|
INSERT INTO T2 VALUES (NULL, NULL);
|
||||||
|
ALTER TABLE T2 ADD COLUMN extra_2116 NUMERIC DEFAULT 0;
|
||||||
|
REINDEX;
|
||||||
|
UPDATE T2 SET A = 'x' WHERE A IS NOT NULL RETURNING *;
|
||||||
|
SELECT * FROM (SELECT Y, COUNT(*) FROM T2 GROUP BY Y) AS sub;
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
SELECT LAG(X, 0) OVER (PARTITION BY X ORDER BY X ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE GROUP) FROM T1;
|
||||||
|
SELECT 0x0ACB29BM205381;
|
||||||
|
SELECT sqlite_compileoption_used('æçå¤©ä½ æ¯æä¹äº');
|
||||||
|
SELECT 1 >> -999999999999999999999999999;
|
||||||
|
SELECT sqlite_compileoption_get($1);
|
||||||
|
SELECT sqlite_version();
|
||||||
|
SELECT LEAD(X, 1, NULL) OVER (PARTITION BY X ORDER BY X ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES) FROM T1;
|
||||||
|
PRAGMA vdbe_listing = YES;
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS v_T1_7197 AS SELECT A FROM T1;
|
||||||
|
ALTER TABLE T1 DROP COLUMN A;
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_T1_4345 ON T1((X + 1)) WHERE X IS NOT NULL;
|
||||||
|
SELECT * FROM T1;
|
||||||
|
DETACH DATABASE aux81;
|
||||||
|
SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t1 WHERE b > 0);
|
||||||
|
VACUUM main;
|
||||||
|
SELECT * FROM T2 WHERE A IN (SELECT A FROM T2 WHERE A IS NOT NULL);
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r6007;
|
||||||
|
ALTER TABLE T1 RENAME TO T1_r5111;
|
||||||
|
SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t1 WHERE a = NULL);
|
||||||
|
SELECT COUNT(X) OVER (ORDER BY X RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM T1;
|
||||||
|
SELECT NTH_VALUE(b, -1) OVER (ORDER BY b GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t1;
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
INSERT INTO T1 VALUES (NULL, 1) ON CONFLICT(A) DO UPDATE SET A = excluded.A, X = excluded.X;
|
||||||
|
SELECT * FROM t1 WHERE b IN (SELECT b FROM t1 WHERE b GLOB "*");
|
||||||
|
INSERT OR FAIL INTO t1 VALUES (0, 0);
|
||||||
|
REINDEX;
|
||||||
|
INSERT INTO T1 VALUES ('x', NULL) ON CONFLICT(A) DO UPDATE SET A = excluded.A, X = excluded.X;
|
||||||
|
SELECT COUNT(*) FILTER (WHERE A IS NOT NULL), SUM(rowid) FILTER (WHERE A > 0), COUNT(*) FILTER (WHERE 1=0), COUNT(*) FILTER (WHERE 1=1), COUNT(*) FILTER (WHERE NULL), AVG(A) FILTER (WHERE A > 0 AND A < 100), COUNT(*) FILTER (WHERE typeof(A) = "text") FROM T;
|
||||||
|
ANALYZE T2;
|
||||||
|
WITH m AS MATERIALIZED (SELECT * FROM T2) SELECT m.A FROM m JOIN m AS m2 ON m.A = m2.A;
|
||||||
|
ALTER TABLE t1 RENAME TO t1_r3665;
|
||||||
|
DELETE FROM T1 WHERE rowid = 99 RETURNING *;
|
||||||
|
WITH RECURSIVE cnt(x) AS (VALUES(0) UNION ALL SELECT x-1 FROM cnt WHERE x>-10) SELECT * FROM cnt;
|
||||||
|
INSERT INTO T1 VALUES (NULL, NULL);
|
||||||
|
REINDEX;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Actual output
|
||||||
|
|
||||||
|
```sql
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000052
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000133
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000004
|
||||||
|
1073741823
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000009
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000006
|
||||||
|
Run Time: real 0.000 user 0.000000 sys 0.000003
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expectation
|
||||||
|
|
||||||
|
```sql
|
||||||
|
Run Time: real 0.000021 user 0.000036 sys 0.000000
|
||||||
|
Run Time: real 0.000073 user 0.000073 sys 0.000000
|
||||||
|
Run Time: real 0.000002 user 0.000003 sys 0.000000
|
||||||
|
4294967294
|
||||||
|
Run Time: real 0.000006 user 0.000006 sys 0.000000
|
||||||
|
Run Time: real 0.000003 user 0.000004 sys 0.000000
|
||||||
|
Run Time: real 0.000002 user 0.000002 sys 0.000000
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flag
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user