---
This commit is contained in:
@@ -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;
|
||||
Reference in New Issue
Block a user