Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | The OP_Eq and OP_Ne operators have a special P5 value SQLITE_NOTNULL that asserts that the values are not null. Except that is not always true for a corrupt database. Adjust the assert() and add a testcase() to make this point clear. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
a3fdb2c78d23b94d68dc08126b22d031 |
User & Date: | drh 2018-12-22 00:34:30.237 |
Context
2018-12-22
| ||
01:13 | Do not all REPLACE to sneak a NULL value into a NOT NULL column. Detect that situation and ABORT instead. Fix for ticket [e6f1f2e34dceeb1ed61531c7e98]. (check-in: db8d1d12f5 user: drh tags: trunk) | |
00:34 | The OP_Eq and OP_Ne operators have a special P5 value SQLITE_NOTNULL that asserts that the values are not null. Except that is not always true for a corrupt database. Adjust the assert() and add a testcase() to make this point clear. (check-in: a3fdb2c78d user: drh tags: trunk) | |
2018-12-21
| ||
22:11 | Update the dbtotxt utility program so that it does not output characters that are special to TCL, thus making the output of dbtotxt easier to insert into test scripts. (check-in: 48438bb35b user: drh tags: trunk) | |
Changes
Changes to src/vdbe.c.
︙ | ︙ | |||
1921 1922 1923 1924 1925 1926 1927 | if( pOp->p5 & SQLITE_NULLEQ ){ /* If SQLITE_NULLEQ is set (which will only happen if the operator is ** OP_Eq or OP_Ne) then take the jump or not depending on whether ** or not both operands are null. */ assert( pOp->opcode==OP_Eq || pOp->opcode==OP_Ne ); assert( (flags1 & MEM_Cleared)==0 ); | | > | 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 | if( pOp->p5 & SQLITE_NULLEQ ){ /* If SQLITE_NULLEQ is set (which will only happen if the operator is ** OP_Eq or OP_Ne) then take the jump or not depending on whether ** or not both operands are null. */ assert( pOp->opcode==OP_Eq || pOp->opcode==OP_Ne ); assert( (flags1 & MEM_Cleared)==0 ); assert( (pOp->p5 & SQLITE_JUMPIFNULL)==0 || CORRUPT_DB ); testcase( (pOp->p5 & SQLITE_JUMPIFNULL)!=0 ); if( (flags1&flags3&MEM_Null)!=0 && (flags3&MEM_Cleared)==0 ){ res = 0; /* Operands are equal */ }else{ res = 1; /* Operands are not equal */ } |
︙ | ︙ |