Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Merge test script fixes from trunk into this branch. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | apple-osx |
Files: | files | file ages | folders |
SHA3-256: |
32f5f4613985283498162f2eaaba0431 |
User & Date: | dan 2017-11-17 20:10:12.906 |
Context
2017-11-17
| ||
20:16 | Add an 'extern "C"' wrapper to sqlite3_private.h. (check-in: 97ab1efe4e user: dan tags: apple-osx) | |
20:10 | Merge test script fixes from trunk into this branch. (check-in: 32f5f46139 user: dan tags: apple-osx) | |
20:07 | Add some missing "finish_test" lines to the end of test scripts. (check-in: c21406ab32 user: dan tags: trunk) | |
13:23 | Merge latest changes from trunk, including the temporary db/ATTACH/master-journal fix. (check-in: 162c754365 user: dan tags: apple-osx) | |
Changes
Changes to src/expr.c.
︙ | ︙ | |||
2182 2183 2184 2185 2186 2187 2188 | ** SELECT <column1>, <column2>... FROM <table> ** ** If the RHS of the IN operator is a list or a more complex subquery, then ** an ephemeral table might need to be generated from the RHS and then ** pX->iTable made to point to the ephemeral table instead of an ** existing table. ** | | | | | | < | | 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 | ** SELECT <column1>, <column2>... FROM <table> ** ** If the RHS of the IN operator is a list or a more complex subquery, then ** an ephemeral table might need to be generated from the RHS and then ** pX->iTable made to point to the ephemeral table instead of an ** existing table. ** ** The inFlags parameter must contain, at a minimum, one of the bits ** IN_INDEX_MEMBERSHIP or IN_INDEX_LOOP but not both. If inFlags contains ** IN_INDEX_MEMBERSHIP, then the generated table will be used for a fast ** membership test. When the IN_INDEX_LOOP bit is set, the IN index will ** be used to loop over all values of the RHS of the IN operator. ** ** When IN_INDEX_LOOP is used (and the b-tree will be used to iterate ** through the set members) then the b-tree must not contain duplicates. ** An epheremal table will be created unless the selected columns are guaranteed ** to be unique - either because it is an INTEGER PRIMARY KEY or due to ** a UNIQUE constraint or index. ** ** When IN_INDEX_MEMBERSHIP is used (and the b-tree will be used ** for fast set membership tests) then an epheremal table must ** be used unless <columns> is a single INTEGER PRIMARY KEY column or an ** index can be found with the specified <columns> as its left-most. |
︙ | ︙ |
Changes to src/wherecode.c.
︙ | ︙ | |||
372 373 374 375 376 377 378 379 380 381 382 383 384 385 | if( sqlite3CompareAffinity(p, zAff[i])==SQLITE_AFF_BLOB || sqlite3ExprNeedsNoAffinityChange(p, zAff[i]) ){ zAff[i] = SQLITE_AFF_BLOB; } } } /* ** Generate code for a single equality term of the WHERE clause. An equality ** term can be either X=expr or X IN (...). pTerm is the term to be ** coded. ** ** The current value for the constraint is left in a register, the index | > > > > > > > > > > > > > > > > > > > > > | 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 | if( sqlite3CompareAffinity(p, zAff[i])==SQLITE_AFF_BLOB || sqlite3ExprNeedsNoAffinityChange(p, zAff[i]) ){ zAff[i] = SQLITE_AFF_BLOB; } } } #ifdef SQLITE_DEBUG /* Return true if the pSub ExprList is a subset of pMain. The terms ** of pSub can be in a different order from pMain. The only requirement ** is that every term in pSub must exist somewhere in pMain. ** ** Return false if pSub contains any term that is not found in pMain. */ static int exprListSubset(ExprList *pSub, ExprList *pMain){ int i, j; for(i=0; i<pSub->nExpr; i++){ Expr *p = pSub->a[i].pExpr; for(j=0; j<pMain->nExpr; j++){ if( sqlite3ExprCompare(0, p, pMain->a[j].pExpr, 0)==0 ) break; } if( j>=pMain->nExpr ) return 0; } return 1; } #endif /* SQLITE_DEBUG */ /* ** Generate code for a single equality term of the WHERE clause. An equality ** term can be either X=expr or X IN (...). pTerm is the term to be ** coded. ** ** The current value for the constraint is left in a register, the index |
︙ | ︙ | |||
459 460 461 462 463 464 465 466 467 468 469 470 471 472 | Expr *pNewRhs = sqlite3ExprDup(db, pOrigRhs->a[iField].pExpr, 0); Expr *pNewLhs = sqlite3ExprDup(db, pOrigLhs->a[iField].pExpr, 0); pRhs = sqlite3ExprListAppend(pParse, pRhs, pNewRhs); pLhs = sqlite3ExprListAppend(pParse, pLhs, pNewLhs); } } if( !db->mallocFailed ){ Expr *pLeft = pX->pLeft; if( pSelect->pOrderBy ){ /* If the SELECT statement has an ORDER BY clause, zero the ** iOrderByCol variables. These are set to non-zero when an ** ORDER BY term exactly matches one of the terms of the | > > > > > > > > | 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 | Expr *pNewRhs = sqlite3ExprDup(db, pOrigRhs->a[iField].pExpr, 0); Expr *pNewLhs = sqlite3ExprDup(db, pOrigLhs->a[iField].pExpr, 0); pRhs = sqlite3ExprListAppend(pParse, pRhs, pNewRhs); pLhs = sqlite3ExprListAppend(pParse, pLhs, pNewLhs); } } /* pRhs should be a subset of pOrigRhs (though possibly in a different ** order). And pLhs should be a subset of pOrigLhs. To put it ** another way: Every term of pRhs should exist in pOrigRhs and ** every term of pLhs should exist in pOrigLhs. */ assert( db->mallocFailed || exprListSubset(pRhs, pOrigRhs) ); assert( db->mallocFailed || exprListSubset(pLhs, pOrigLhs) ); if( !db->mallocFailed ){ Expr *pLeft = pX->pLeft; if( pSelect->pOrderBy ){ /* If the SELECT statement has an ORDER BY clause, zero the ** iOrderByCol variables. These are set to non-zero when an ** ORDER BY term exactly matches one of the terms of the |
︙ | ︙ |
Changes to test/tkt-26ff0c2d1e.test.
︙ | ︙ | |||
27 28 29 30 31 32 33 | do_test bug-20100512-3 { sqlite3_bind_int $STMT 1 123 sqlite3_bind_int $STMT 2 456 sqlite3_step $STMT sqlite3_column_int $STMT 0 } {555} sqlite3_finalize $STMT | > > | 27 28 29 30 31 32 33 34 35 | do_test bug-20100512-3 { sqlite3_bind_int $STMT 1 123 sqlite3_bind_int $STMT 2 456 sqlite3_step $STMT sqlite3_column_int $STMT 0 } {555} sqlite3_finalize $STMT finish_test |
Changes to test/tkt-7a31705a7e6.test.
︙ | ︙ | |||
19 20 21 22 23 24 25 | do_execsql_test tkt-7a31705a7e6-1.1 { CREATE TABLE t1 (a INTEGER PRIMARY KEY); CREATE TABLE t2 (a INTEGER PRIMARY KEY, b INTEGER); CREATE TABLE t2x (b INTEGER PRIMARY KEY); SELECT t1.a FROM ((t1 JOIN t2 ON t1.a=t2.a) AS x JOIN t2x ON x.b=t2x.b) as y; } {} | > > | 19 20 21 22 23 24 25 26 27 | do_execsql_test tkt-7a31705a7e6-1.1 { CREATE TABLE t1 (a INTEGER PRIMARY KEY); CREATE TABLE t2 (a INTEGER PRIMARY KEY, b INTEGER); CREATE TABLE t2x (b INTEGER PRIMARY KEY); SELECT t1.a FROM ((t1 JOIN t2 ON t1.a=t2.a) AS x JOIN t2x ON x.b=t2x.b) as y; } {} finish_test |
Changes to test/tkt-a8a0d2996a.test.
︙ | ︙ | |||
87 88 89 90 91 92 93 | } {-9.22337203685478e+18} do_execsql_test 4.5 { SELECT '9223372036854775806x'+'1x'; } {9.22337203685478e+18} do_execsql_test 4.6 { SELECT '1234x'/'10y'; } {123.4} | > > | 87 88 89 90 91 92 93 94 95 | } {-9.22337203685478e+18} do_execsql_test 4.5 { SELECT '9223372036854775806x'+'1x'; } {9.22337203685478e+18} do_execsql_test 4.6 { SELECT '1234x'/'10y'; } {123.4} finish_test |
Changes to test/tkt3334.test.
︙ | ︙ | |||
78 79 80 81 82 83 84 | } } {1 1 1} do_test tkt3334-1.10 { execsql { SELECT count(*) FROM (SELECT a FROM t1) WHERE a=1; } } {3} | > > | 78 79 80 81 82 83 84 85 86 | } } {1 1 1} do_test tkt3334-1.10 { execsql { SELECT count(*) FROM (SELECT a FROM t1) WHERE a=1; } } {3} finish_test |
Changes to test/vacuum4.test.
︙ | ︙ | |||
61 62 63 64 65 66 67 | c120, c121, c122, c123, c124, c125, c126, c127, c128, c129, c130, c131, c132, c133, c134, c135, c136, c137, c138, c139, c140, c141, c142, c143, c144, c145, c146, c147, c148, c149 ); VACUUM; } } {} | > > | 61 62 63 64 65 66 67 68 69 | c120, c121, c122, c123, c124, c125, c126, c127, c128, c129, c130, c131, c132, c133, c134, c135, c136, c137, c138, c139, c140, c141, c142, c143, c144, c145, c146, c147, c148, c149 ); VACUUM; } } {} finish_test |
Changes to test/varint.test.
︙ | ︙ | |||
26 27 28 29 30 31 32 | incr cnt do_test varint-1.$cnt { btree_varint_test $start $mult 5000 $incr } {} } } } | > > | 26 27 28 29 30 31 32 33 34 | incr cnt do_test varint-1.$cnt { btree_varint_test $start $mult 5000 $incr } {} } } } finish_test |