SQLite

View Ticket
Login
Ticket Hash: a9efb42811fa41ee286e84cabcef24f3abc84d9c
Title: Incorrect result for GLOB operator
Status: Fixed Type: Code_Defect
Severity: Severe Priority: Immediate
Subsystem: Unknown Resolution: Rejected
Last Modified: 2019-11-02 13:33:10
Version Found In: 3.30.0
User Comments:
mrigger added on 2019-11-02 08:22:26:

Consider the following test case:

CREATE TABLE t0(c0);
CREATE INDEX i0 ON t0(0) WHERE c0 GLOB c0;
INSERT INTO t0 VALUES (0);
CREATE UNIQUE INDEX i1 ON t0(0);
CREATE UNIQUE INDEX i2 ON t0(0);
REPLACE INTO t0 VALUES(0);
SELECT COUNT(*) FROM t0 WHERE t0.c0 GLOB t0.c0; -- expected: 1, actual: 2

Unexpectedly, the COUNT(*) computes that two rows are contained in the table, although only one was inserted:

SELECT t0.c0 GLOB t0.c0 FROM t0; -- 1

Further simplification of the first query also shows that the database disk image is corrupted:

SELECT * FROM t0 WHERE t0.c0 GLOB t0.c0; -- database disk image is malformed