Fossil SCM
merge previous fork
Commit
dddad4f0734d399a7a74ee82ec29ccf4d548b6d784d37063ba5de18154df8880
Parent
3c2ef25d03fb48d…
2 files changed
+25
-8
+1
-1
+25
-8
| --- src/sqlite3.c | ||
| +++ src/sqlite3.c | ||
| @@ -1147,11 +1147,11 @@ | ||
| 1147 | 1147 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1148 | 1148 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1149 | 1149 | */ |
| 1150 | 1150 | #define SQLITE_VERSION "3.22.0" |
| 1151 | 1151 | #define SQLITE_VERSION_NUMBER 3022000 |
| 1152 | -#define SQLITE_SOURCE_ID "2018-01-15 19:00:35 b0b7d0363acf38c2178e2d3041d8ce2a0de061a51caa64670dbf539ee6d4356b" | |
| 1152 | +#define SQLITE_SOURCE_ID "2018-01-16 13:37:43 feb2c2b6f66b0f45490beb1642d99cdb89fa220e299a8c118929df557c814189" | |
| 1153 | 1153 | |
| 1154 | 1154 | /* |
| 1155 | 1155 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1156 | 1156 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1157 | 1157 | ** |
| @@ -137648,19 +137648,36 @@ | ||
| 137648 | 137648 | WHERETRACE(0xffff,("*** Optimizer Finished ***\n")); |
| 137649 | 137649 | pWInfo->pParse->nQueryLoop += pWInfo->nRowOut; |
| 137650 | 137650 | |
| 137651 | 137651 | /* If the caller is an UPDATE or DELETE statement that is requesting |
| 137652 | 137652 | ** to use a one-pass algorithm, determine if this is appropriate. |
| 137653 | + ** | |
| 137654 | + ** A one-pass approach can be used if the caller has requested one | |
| 137655 | + ** and either (a) the scan visits at most one row or (b) each | |
| 137656 | + ** of the following are true: | |
| 137657 | + ** | |
| 137658 | + ** * the caller has indicated that a one-pass approach can be used | |
| 137659 | + ** with multiple rows (by setting WHERE_ONEPASS_MULTIROW), and | |
| 137660 | + ** * the table is not a virtual table, and | |
| 137661 | + ** * either the scan does not use the OR optimization or the caller | |
| 137662 | + ** is a DELETE operation (WHERE_DUPLICATES_OK is only specified | |
| 137663 | + ** for DELETE). | |
| 137664 | + ** | |
| 137665 | + ** The last qualification is because an UPDATE statement uses | |
| 137666 | + ** WhereInfo.aiCurOnePass[1] to determine whether or not it really can | |
| 137667 | + ** use a one-pass approach, and this is not set accurately for scans | |
| 137668 | + ** that use the OR optimization. | |
| 137653 | 137669 | */ |
| 137654 | 137670 | assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 ); |
| 137655 | 137671 | if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 ){ |
| 137656 | 137672 | int wsFlags = pWInfo->a[0].pWLoop->wsFlags; |
| 137657 | 137673 | int bOnerow = (wsFlags & WHERE_ONEROW)!=0; |
| 137658 | - if( bOnerow | |
| 137659 | - || ((wctrlFlags & WHERE_ONEPASS_MULTIROW)!=0 | |
| 137660 | - && 0==(wsFlags & WHERE_VIRTUALTABLE)) | |
| 137661 | - ){ | |
| 137674 | + if( bOnerow || ( | |
| 137675 | + 0!=(wctrlFlags & WHERE_ONEPASS_MULTIROW) | |
| 137676 | + && 0==(wsFlags & WHERE_VIRTUALTABLE) | |
| 137677 | + && (0==(wsFlags & WHERE_MULTI_OR) || (wctrlFlags & WHERE_DUPLICATES_OK)) | |
| 137678 | + )){ | |
| 137662 | 137679 | pWInfo->eOnePass = bOnerow ? ONEPASS_SINGLE : ONEPASS_MULTI; |
| 137663 | 137680 | if( HasRowid(pTabList->a[0].pTab) && (wsFlags & WHERE_IDX_ONLY) ){ |
| 137664 | 137681 | if( wctrlFlags & WHERE_ONEPASS_MULTIROW ){ |
| 137665 | 137682 | bFordelete = OPFLAG_FORDELETE; |
| 137666 | 137683 | } |
| @@ -203099,11 +203116,11 @@ | ||
| 203099 | 203116 | int nArg, /* Number of args */ |
| 203100 | 203117 | sqlite3_value **apUnused /* Function arguments */ |
| 203101 | 203118 | ){ |
| 203102 | 203119 | assert( nArg==0 ); |
| 203103 | 203120 | UNUSED_PARAM2(nArg, apUnused); |
| 203104 | - sqlite3_result_text(pCtx, "fts5: 2018-01-15 19:00:35 b0b7d0363acf38c2178e2d3041d8ce2a0de061a51caa64670dbf539ee6d4356b", -1, SQLITE_TRANSIENT); | |
| 203121 | + sqlite3_result_text(pCtx, "fts5: 2018-01-16 13:37:43 feb2c2b6f66b0f45490beb1642d99cdb89fa220e299a8c118929df557c814189", -1, SQLITE_TRANSIENT); | |
| 203105 | 203122 | } |
| 203106 | 203123 | |
| 203107 | 203124 | static int fts5Init(sqlite3 *db){ |
| 203108 | 203125 | static const sqlite3_module fts5Mod = { |
| 203109 | 203126 | /* iVersion */ 2, |
| @@ -207367,12 +207384,12 @@ | ||
| 207367 | 207384 | } |
| 207368 | 207385 | #endif /* SQLITE_CORE */ |
| 207369 | 207386 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 207370 | 207387 | |
| 207371 | 207388 | /************** End of stmt.c ************************************************/ |
| 207372 | -#if __LINE__!=207372 | |
| 207389 | +#if __LINE__!=207389 | |
| 207373 | 207390 | #undef SQLITE_SOURCE_ID |
| 207374 | -#define SQLITE_SOURCE_ID "2018-01-15 19:00:35 b0b7d0363acf38c2178e2d3041d8ce2a0de061a51caa64670dbf539ee6d4alt2" | |
| 207391 | +#define SQLITE_SOURCE_ID "2018-01-16 13:37:43 feb2c2b6f66b0f45490beb1642d99cdb89fa220e299a8c118929df557c81alt2" | |
| 207375 | 207392 | #endif |
| 207376 | 207393 | /* Return the source-id for this library */ |
| 207377 | 207394 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 207378 | 207395 | /************************** End of sqlite3.c ******************************/ |
| 207379 | 207396 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -1147,11 +1147,11 @@ | |
| 1147 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1148 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1149 | */ |
| 1150 | #define SQLITE_VERSION "3.22.0" |
| 1151 | #define SQLITE_VERSION_NUMBER 3022000 |
| 1152 | #define SQLITE_SOURCE_ID "2018-01-15 19:00:35 b0b7d0363acf38c2178e2d3041d8ce2a0de061a51caa64670dbf539ee6d4356b" |
| 1153 | |
| 1154 | /* |
| 1155 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1156 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1157 | ** |
| @@ -137648,19 +137648,36 @@ | |
| 137648 | WHERETRACE(0xffff,("*** Optimizer Finished ***\n")); |
| 137649 | pWInfo->pParse->nQueryLoop += pWInfo->nRowOut; |
| 137650 | |
| 137651 | /* If the caller is an UPDATE or DELETE statement that is requesting |
| 137652 | ** to use a one-pass algorithm, determine if this is appropriate. |
| 137653 | */ |
| 137654 | assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 ); |
| 137655 | if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 ){ |
| 137656 | int wsFlags = pWInfo->a[0].pWLoop->wsFlags; |
| 137657 | int bOnerow = (wsFlags & WHERE_ONEROW)!=0; |
| 137658 | if( bOnerow |
| 137659 | || ((wctrlFlags & WHERE_ONEPASS_MULTIROW)!=0 |
| 137660 | && 0==(wsFlags & WHERE_VIRTUALTABLE)) |
| 137661 | ){ |
| 137662 | pWInfo->eOnePass = bOnerow ? ONEPASS_SINGLE : ONEPASS_MULTI; |
| 137663 | if( HasRowid(pTabList->a[0].pTab) && (wsFlags & WHERE_IDX_ONLY) ){ |
| 137664 | if( wctrlFlags & WHERE_ONEPASS_MULTIROW ){ |
| 137665 | bFordelete = OPFLAG_FORDELETE; |
| 137666 | } |
| @@ -203099,11 +203116,11 @@ | |
| 203099 | int nArg, /* Number of args */ |
| 203100 | sqlite3_value **apUnused /* Function arguments */ |
| 203101 | ){ |
| 203102 | assert( nArg==0 ); |
| 203103 | UNUSED_PARAM2(nArg, apUnused); |
| 203104 | sqlite3_result_text(pCtx, "fts5: 2018-01-15 19:00:35 b0b7d0363acf38c2178e2d3041d8ce2a0de061a51caa64670dbf539ee6d4356b", -1, SQLITE_TRANSIENT); |
| 203105 | } |
| 203106 | |
| 203107 | static int fts5Init(sqlite3 *db){ |
| 203108 | static const sqlite3_module fts5Mod = { |
| 203109 | /* iVersion */ 2, |
| @@ -207367,12 +207384,12 @@ | |
| 207367 | } |
| 207368 | #endif /* SQLITE_CORE */ |
| 207369 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 207370 | |
| 207371 | /************** End of stmt.c ************************************************/ |
| 207372 | #if __LINE__!=207372 |
| 207373 | #undef SQLITE_SOURCE_ID |
| 207374 | #define SQLITE_SOURCE_ID "2018-01-15 19:00:35 b0b7d0363acf38c2178e2d3041d8ce2a0de061a51caa64670dbf539ee6d4alt2" |
| 207375 | #endif |
| 207376 | /* Return the source-id for this library */ |
| 207377 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 207378 | /************************** End of sqlite3.c ******************************/ |
| 207379 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -1147,11 +1147,11 @@ | |
| 1147 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1148 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1149 | */ |
| 1150 | #define SQLITE_VERSION "3.22.0" |
| 1151 | #define SQLITE_VERSION_NUMBER 3022000 |
| 1152 | #define SQLITE_SOURCE_ID "2018-01-16 13:37:43 feb2c2b6f66b0f45490beb1642d99cdb89fa220e299a8c118929df557c814189" |
| 1153 | |
| 1154 | /* |
| 1155 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1156 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1157 | ** |
| @@ -137648,19 +137648,36 @@ | |
| 137648 | WHERETRACE(0xffff,("*** Optimizer Finished ***\n")); |
| 137649 | pWInfo->pParse->nQueryLoop += pWInfo->nRowOut; |
| 137650 | |
| 137651 | /* If the caller is an UPDATE or DELETE statement that is requesting |
| 137652 | ** to use a one-pass algorithm, determine if this is appropriate. |
| 137653 | ** |
| 137654 | ** A one-pass approach can be used if the caller has requested one |
| 137655 | ** and either (a) the scan visits at most one row or (b) each |
| 137656 | ** of the following are true: |
| 137657 | ** |
| 137658 | ** * the caller has indicated that a one-pass approach can be used |
| 137659 | ** with multiple rows (by setting WHERE_ONEPASS_MULTIROW), and |
| 137660 | ** * the table is not a virtual table, and |
| 137661 | ** * either the scan does not use the OR optimization or the caller |
| 137662 | ** is a DELETE operation (WHERE_DUPLICATES_OK is only specified |
| 137663 | ** for DELETE). |
| 137664 | ** |
| 137665 | ** The last qualification is because an UPDATE statement uses |
| 137666 | ** WhereInfo.aiCurOnePass[1] to determine whether or not it really can |
| 137667 | ** use a one-pass approach, and this is not set accurately for scans |
| 137668 | ** that use the OR optimization. |
| 137669 | */ |
| 137670 | assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 ); |
| 137671 | if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 ){ |
| 137672 | int wsFlags = pWInfo->a[0].pWLoop->wsFlags; |
| 137673 | int bOnerow = (wsFlags & WHERE_ONEROW)!=0; |
| 137674 | if( bOnerow || ( |
| 137675 | 0!=(wctrlFlags & WHERE_ONEPASS_MULTIROW) |
| 137676 | && 0==(wsFlags & WHERE_VIRTUALTABLE) |
| 137677 | && (0==(wsFlags & WHERE_MULTI_OR) || (wctrlFlags & WHERE_DUPLICATES_OK)) |
| 137678 | )){ |
| 137679 | pWInfo->eOnePass = bOnerow ? ONEPASS_SINGLE : ONEPASS_MULTI; |
| 137680 | if( HasRowid(pTabList->a[0].pTab) && (wsFlags & WHERE_IDX_ONLY) ){ |
| 137681 | if( wctrlFlags & WHERE_ONEPASS_MULTIROW ){ |
| 137682 | bFordelete = OPFLAG_FORDELETE; |
| 137683 | } |
| @@ -203099,11 +203116,11 @@ | |
| 203116 | int nArg, /* Number of args */ |
| 203117 | sqlite3_value **apUnused /* Function arguments */ |
| 203118 | ){ |
| 203119 | assert( nArg==0 ); |
| 203120 | UNUSED_PARAM2(nArg, apUnused); |
| 203121 | sqlite3_result_text(pCtx, "fts5: 2018-01-16 13:37:43 feb2c2b6f66b0f45490beb1642d99cdb89fa220e299a8c118929df557c814189", -1, SQLITE_TRANSIENT); |
| 203122 | } |
| 203123 | |
| 203124 | static int fts5Init(sqlite3 *db){ |
| 203125 | static const sqlite3_module fts5Mod = { |
| 203126 | /* iVersion */ 2, |
| @@ -207367,12 +207384,12 @@ | |
| 207384 | } |
| 207385 | #endif /* SQLITE_CORE */ |
| 207386 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 207387 | |
| 207388 | /************** End of stmt.c ************************************************/ |
| 207389 | #if __LINE__!=207389 |
| 207390 | #undef SQLITE_SOURCE_ID |
| 207391 | #define SQLITE_SOURCE_ID "2018-01-16 13:37:43 feb2c2b6f66b0f45490beb1642d99cdb89fa220e299a8c118929df557c81alt2" |
| 207392 | #endif |
| 207393 | /* Return the source-id for this library */ |
| 207394 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 207395 | /************************** End of sqlite3.c ******************************/ |
| 207396 |
+1
-1
| --- src/sqlite3.h | ||
| +++ src/sqlite3.h | ||
| @@ -123,11 +123,11 @@ | ||
| 123 | 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | 125 | */ |
| 126 | 126 | #define SQLITE_VERSION "3.22.0" |
| 127 | 127 | #define SQLITE_VERSION_NUMBER 3022000 |
| 128 | -#define SQLITE_SOURCE_ID "2018-01-15 19:00:35 b0b7d0363acf38c2178e2d3041d8ce2a0de061a51caa64670dbf539ee6d4356b" | |
| 128 | +#define SQLITE_SOURCE_ID "2018-01-16 13:37:43 feb2c2b6f66b0f45490beb1642d99cdb89fa220e299a8c118929df557c814189" | |
| 129 | 129 | |
| 130 | 130 | /* |
| 131 | 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | 133 | ** |
| 134 | 134 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -123,11 +123,11 @@ | |
| 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | */ |
| 126 | #define SQLITE_VERSION "3.22.0" |
| 127 | #define SQLITE_VERSION_NUMBER 3022000 |
| 128 | #define SQLITE_SOURCE_ID "2018-01-15 19:00:35 b0b7d0363acf38c2178e2d3041d8ce2a0de061a51caa64670dbf539ee6d4356b" |
| 129 | |
| 130 | /* |
| 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | ** |
| 134 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -123,11 +123,11 @@ | |
| 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | */ |
| 126 | #define SQLITE_VERSION "3.22.0" |
| 127 | #define SQLITE_VERSION_NUMBER 3022000 |
| 128 | #define SQLITE_SOURCE_ID "2018-01-16 13:37:43 feb2c2b6f66b0f45490beb1642d99cdb89fa220e299a8c118929df557c814189" |
| 129 | |
| 130 | /* |
| 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | ** |
| 134 |