SQLite

View Ticket
Login
2019-05-01
15:32 Fixed ticket [3be1295b]: Inconsistent behavior of a unique constraint on a boolean expression. plus 5 other changes (artifact: 1100ca34 user: drh)
15:32
Avoid unwelcomed side effects on the input operands in the OP_Concat operator. Fix for ticket [3be1295b264be2fac49b681] (check-in: 713caa38 user: drh tags: trunk)
14:28 New ticket [3be1295b] Inconsistent behavior of a unique constraint on a boolean expression.. (artifact: f434cc99 user: drh)

Ticket Hash: 3be1295b264be2fac49b68189a98c82061c17904
Title: Inconsistent behavior of a unique constraint on a boolean expression.
Status: Fixed Type: Code_Defect
Severity: Important Priority: Immediate
Subsystem: Unknown Resolution: Fixed
Last Modified: 2019-05-01 15:32:51
Version Found In: 3.28.0
User Comments:
drh added on 2019-05-01 14:28:03:

In the SQL below, the first INSERT statement fails due to a uniqueness constraint failure. But the next two inserts actually work, even though they collectively insert the same content.

CREATE TABLE test (c0, c1 TEXT);
CREATE UNIQUE INDEX IF NOT EXISTS index_0 ON test(c1 == FALSE);
CREATE INDEX IF NOT EXISTS index_1 ON test(c0 || FALSE) WHERE c1;
INSERT INTO test(c0, c1) VALUES('a',TRUE),('a',FALSE); -- fails
INSERT INTO test(c0, c1) VALUES('a',TRUE);
INSERT INTO test(c0, c1) VALUES('a',FALSE); -- works

This issue arose from a mailing list report by Manual Rigger. As the anomalous behavior depends on having a boolean expression as a term in a UNIQUE constraint, and since that is a unlikely construct to occur in practice, this ticket is given a low priority.