Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Do not set OP_Column flags on the instructions generated by sqlite3ExprCodeGetColumn() if the opcode generated is not really an OP_Column, which might happen if the column is virtual. Fix for ticket [b439bfcfb7deedc6] |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
2401e04730a156aa48787b91af4e5164 |
User & Date: | drh 2019-12-14 17:43:37 |
Context
2019-12-14
| ||
18:08 | Due to the previous change, the p5 parameter to OP_VColumn no longer ever contains extraneous bits, so change a testcase() into an assert() to show as much. (check-in: 5b4a88cd user: drh tags: trunk) | |
17:43 | Do not set OP_Column flags on the instructions generated by sqlite3ExprCodeGetColumn() if the opcode generated is not really an OP_Column, which might happen if the column is virtual. Fix for ticket [b439bfcfb7deedc6] (check-in: 2401e047 user: drh tags: trunk) | |
15:01 | Make the sqlite3ExprCodeTarget() expression code generator routine robust in the face of unknown opcodes - it simply generates a NULL value. (check-in: f8e876c8 user: drh tags: trunk) | |
Changes
Changes to src/expr.c.
︙ | ︙ | |||
3483 3484 3485 3486 3487 3488 3489 | int iTable, /* The cursor pointing to the table */ int iReg, /* Store results here */ u8 p5 /* P5 value for OP_Column + FLAGS */ ){ assert( pParse->pVdbe!=0 ); sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pTab, iTable, iColumn, iReg); if( p5 ){ | | > | 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 | int iTable, /* The cursor pointing to the table */ int iReg, /* Store results here */ u8 p5 /* P5 value for OP_Column + FLAGS */ ){ assert( pParse->pVdbe!=0 ); sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pTab, iTable, iColumn, iReg); if( p5 ){ VdbeOp *pOp = sqlite3VdbeGetOp(pParse->pVdbe,-1); if( pOp->opcode==OP_Column ) pOp->p5 = p5; } return iReg; } /* ** Generate code to move content from registers iFrom...iFrom+nReg-1 ** over to iTo..iTo+nReg-1. |
︙ | ︙ |
Changes to test/gencol1.test.
︙ | ︙ | |||
338 339 340 341 342 343 344 | sqlite3 db :memory: do_execsql_test gencol1-12.10 { CREATE TABLE t0 (c0, c1 NOT NULL AS (c0==0)); INSERT INTO t0(c0) VALUES (0); PRAGMA integrity_check; } {ok} | | | 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 | sqlite3 db :memory: do_execsql_test gencol1-12.10 { CREATE TABLE t0 (c0, c1 NOT NULL AS (c0==0)); INSERT INTO t0(c0) VALUES (0); PRAGMA integrity_check; } {ok} # 2019-12-09 bug report from Yongheng Chen # Ensure that the SrcList_item.colUsed field is set correctly when a # generated column appears in the USING clause of a join. # do_execsql_test gencol1-13.10 { CREATE TABLE t1(x, y AS(x+1)); INSERT INTO t1 VALUES(10); SELECT y FROM t1 JOIN t1 USING (y,y); |
︙ | ︙ | |||
364 365 366 367 368 369 370 371 372 373 | do_execsql_test gencol1-13.21 { CREATE INDEX t1x ON t1(x); SELECT 123 FROM t1 JOIN t1 USING (x); } {123} do_execsql_test gencol1-13.22 { SELECT 456 FROM t1 JOIN t1 USING (x,x); } {456} finish_test | > > > > > > > > > > > > > > | 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 | do_execsql_test gencol1-13.21 { CREATE INDEX t1x ON t1(x); SELECT 123 FROM t1 JOIN t1 USING (x); } {123} do_execsql_test gencol1-13.22 { SELECT 456 FROM t1 JOIN t1 USING (x,x); } {456} # 2019-12-14 ticket b439bfcfb7deedc6 # sqlite3 db :memory: do_execsql_test gencol1-14.10 { CREATE TABLE t0(c0 AS(1 >= 1), c1 UNIQUE AS(TYPEOF(c0)), c2); INSERT INTO t0 VALUES(0); REINDEX; SELECT * FROM t0; } {1 integer 0} do_catchsql_test gencol1-14.10 { INSERT INTO t0 VALUES(2); } {1 {UNIQUE constraint failed: t0.c1}} finish_test |