forked from cory/tildefriends
		
	sqlite 3.46.1.
This commit is contained in:
		| @@ -7,7 +7,7 @@ VERSION_CODE := 26 | |||||||
| VERSION_NUMBER := 0.0.22-wip | VERSION_NUMBER := 0.0.22-wip | ||||||
| VERSION_NAME := Look for the helpers. | VERSION_NAME := Look for the helpers. | ||||||
|  |  | ||||||
| SQLITE_URL := https://www.sqlite.org/2024/sqlite-amalgamation-3460000.zip | SQLITE_URL := https://www.sqlite.org/2024/sqlite-amalgamation-3460100.zip | ||||||
| LIBUV_URL := https://dist.libuv.org/dist/v1.48.0/libuv-v1.48.0.tar.gz | LIBUV_URL := https://dist.libuv.org/dist/v1.48.0/libuv-v1.48.0.tar.gz | ||||||
| BUNDLETOOL_URL := https://github.com/google/bundletool/releases/download/1.17.0/bundletool-all-1.17.0.jar | BUNDLETOOL_URL := https://github.com/google/bundletool/releases/download/1.17.0/bundletool-all-1.17.0.jar | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										40
									
								
								deps/sqlite/shell.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								deps/sqlite/shell.c
									
									
									
									
										vendored
									
									
								
							| @@ -604,11 +604,6 @@ zSkipValidUtf8(const char *z, int nAccept, long ccm); | |||||||
| # define CIO_WIN_WC_XLATE 0 /* Not exposing translation routines at all */ | # define CIO_WIN_WC_XLATE 0 /* Not exposing translation routines at all */ | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if CIO_WIN_WC_XLATE |  | ||||||
| /* Character used to represent a known-incomplete UTF-8 char group (<28>) */ |  | ||||||
| static WCHAR cBadGroup = 0xfffd; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #if CIO_WIN_WC_XLATE | #if CIO_WIN_WC_XLATE | ||||||
| static HANDLE handleOfFile(FILE *pf){ | static HANDLE handleOfFile(FILE *pf){ | ||||||
|   int fileDesc = _fileno(pf); |   int fileDesc = _fileno(pf); | ||||||
| @@ -12547,7 +12542,7 @@ static int expertFilter( | |||||||
|   pCsr->pData = 0; |   pCsr->pData = 0; | ||||||
|   if( rc==SQLITE_OK ){ |   if( rc==SQLITE_OK ){ | ||||||
|     rc = idxPrintfPrepareStmt(pExpert->db, &pCsr->pData, &pVtab->base.zErrMsg, |     rc = idxPrintfPrepareStmt(pExpert->db, &pCsr->pData, &pVtab->base.zErrMsg, | ||||||
|         "SELECT * FROM main.%Q WHERE sample()", pVtab->pTab->zName |         "SELECT * FROM main.%Q WHERE sqlite_expert_sample()", pVtab->pTab->zName | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -13421,7 +13416,7 @@ struct IdxRemCtx { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| /* | /* | ||||||
| ** Implementation of scalar function rem(). | ** Implementation of scalar function sqlite_expert_rem(). | ||||||
| */ | */ | ||||||
| static void idxRemFunc( | static void idxRemFunc( | ||||||
|   sqlite3_context *pCtx, |   sqlite3_context *pCtx, | ||||||
| @@ -13434,7 +13429,7 @@ static void idxRemFunc( | |||||||
|   assert( argc==2 ); |   assert( argc==2 ); | ||||||
|  |  | ||||||
|   iSlot = sqlite3_value_int(argv[0]); |   iSlot = sqlite3_value_int(argv[0]); | ||||||
|   assert( iSlot<=p->nSlot ); |   assert( iSlot<p->nSlot ); | ||||||
|   pSlot = &p->aSlot[iSlot]; |   pSlot = &p->aSlot[iSlot]; | ||||||
|  |  | ||||||
|   switch( pSlot->eType ){ |   switch( pSlot->eType ){ | ||||||
| @@ -13545,7 +13540,8 @@ static int idxPopulateOneStat1( | |||||||
|     const char *zName = (const char*)sqlite3_column_text(pIndexXInfo, 0); |     const char *zName = (const char*)sqlite3_column_text(pIndexXInfo, 0); | ||||||
|     const char *zColl = (const char*)sqlite3_column_text(pIndexXInfo, 1); |     const char *zColl = (const char*)sqlite3_column_text(pIndexXInfo, 1); | ||||||
|     zCols = idxAppendText(&rc, zCols,  |     zCols = idxAppendText(&rc, zCols,  | ||||||
|         "%sx.%Q IS rem(%d, x.%Q) COLLATE %s", zComma, zName, nCol, zName, zColl |         "%sx.%Q IS sqlite_expert_rem(%d, x.%Q) COLLATE %s",  | ||||||
|  |         zComma, zName, nCol, zName, zColl | ||||||
|     ); |     ); | ||||||
|     zOrder = idxAppendText(&rc, zOrder, "%s%d", zComma, ++nCol); |     zOrder = idxAppendText(&rc, zOrder, "%s%d", zComma, ++nCol); | ||||||
|   } |   } | ||||||
| @@ -13678,13 +13674,13 @@ static int idxPopulateStat1(sqlite3expert *p, char **pzErr){ | |||||||
|  |  | ||||||
|   if( rc==SQLITE_OK ){ |   if( rc==SQLITE_OK ){ | ||||||
|     sqlite3 *dbrem = (p->iSample==100 ? p->db : p->dbv); |     sqlite3 *dbrem = (p->iSample==100 ? p->db : p->dbv); | ||||||
|     rc = sqlite3_create_function( |     rc = sqlite3_create_function(dbrem, "sqlite_expert_rem",  | ||||||
|         dbrem, "rem", 2, SQLITE_UTF8, (void*)pCtx, idxRemFunc, 0, 0 |         2, SQLITE_UTF8, (void*)pCtx, idxRemFunc, 0, 0 | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|   if( rc==SQLITE_OK ){ |   if( rc==SQLITE_OK ){ | ||||||
|     rc = sqlite3_create_function( |     rc = sqlite3_create_function(p->db, "sqlite_expert_sample",  | ||||||
|         p->db, "sample", 0, SQLITE_UTF8, (void*)&samplectx, idxSampleFunc, 0, 0 |         0, SQLITE_UTF8, (void*)&samplectx, idxSampleFunc, 0, 0 | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -13736,6 +13732,9 @@ static int idxPopulateStat1(sqlite3expert *p, char **pzErr){ | |||||||
|     rc = sqlite3_exec(p->dbm, "ANALYZE sqlite_schema", 0, 0, 0); |     rc = sqlite3_exec(p->dbm, "ANALYZE sqlite_schema", 0, 0, 0); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   sqlite3_create_function(p->db, "sqlite_expert_rem", 2, SQLITE_UTF8, 0,0,0,0); | ||||||
|  |   sqlite3_create_function(p->db, "sqlite_expert_sample", 0,SQLITE_UTF8,0,0,0,0); | ||||||
|  |  | ||||||
|   sqlite3_exec(p->db, "DROP TABLE IF EXISTS temp."UNIQUE_TABLE_NAME,0,0,0); |   sqlite3_exec(p->db, "DROP TABLE IF EXISTS temp."UNIQUE_TABLE_NAME,0,0,0); | ||||||
|   return rc; |   return rc; | ||||||
| } | } | ||||||
| @@ -16836,8 +16835,8 @@ static int recoverError( | |||||||
|   va_start(ap, zFmt); |   va_start(ap, zFmt); | ||||||
|   if( zFmt ){ |   if( zFmt ){ | ||||||
|     z = sqlite3_vmprintf(zFmt, ap); |     z = sqlite3_vmprintf(zFmt, ap); | ||||||
|     va_end(ap); |  | ||||||
|   } |   } | ||||||
|  |   va_end(ap); | ||||||
|   sqlite3_free(p->zErrMsg); |   sqlite3_free(p->zErrMsg); | ||||||
|   p->zErrMsg = z; |   p->zErrMsg = z; | ||||||
|   p->errCode = errCode; |   p->errCode = errCode; | ||||||
| @@ -27085,7 +27084,6 @@ static int do_meta_command(char *zLine, ShellState *p){ | |||||||
|       import_cleanup(&sCtx); |       import_cleanup(&sCtx); | ||||||
|       shell_out_of_memory(); |       shell_out_of_memory(); | ||||||
|     } |     } | ||||||
|     nByte = strlen(zSql);     |  | ||||||
|     rc =  sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); |     rc =  sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); | ||||||
|     sqlite3_free(zSql); |     sqlite3_free(zSql); | ||||||
|     zSql = 0; |     zSql = 0; | ||||||
| @@ -27104,16 +27102,21 @@ static int do_meta_command(char *zLine, ShellState *p){ | |||||||
|     sqlite3_finalize(pStmt); |     sqlite3_finalize(pStmt); | ||||||
|     pStmt = 0; |     pStmt = 0; | ||||||
|     if( nCol==0 ) return 0; /* no columns, no error */ |     if( nCol==0 ) return 0; /* no columns, no error */ | ||||||
|     zSql = sqlite3_malloc64( nByte*2 + 20 + nCol*2 ); |  | ||||||
|  |     nByte = 64                 /* space for "INSERT INTO", "VALUES(", ")\0" */ | ||||||
|  |           + (zSchema ? strlen(zSchema)*2 + 2: 0)  /* Quoted schema name */ | ||||||
|  |           + strlen(zTable)*2 + 2                  /* Quoted table name */ | ||||||
|  |           + nCol*2;            /* Space for ",?" for each column */ | ||||||
|  |     zSql = sqlite3_malloc64( nByte ); | ||||||
|     if( zSql==0 ){ |     if( zSql==0 ){ | ||||||
|       import_cleanup(&sCtx); |       import_cleanup(&sCtx); | ||||||
|       shell_out_of_memory(); |       shell_out_of_memory(); | ||||||
|     } |     } | ||||||
|     if( zSchema ){ |     if( zSchema ){ | ||||||
|       sqlite3_snprintf(nByte+20, zSql, "INSERT INTO \"%w\".\"%w\" VALUES(?",  |       sqlite3_snprintf(nByte, zSql, "INSERT INTO \"%w\".\"%w\" VALUES(?",  | ||||||
|                        zSchema, zTable); |                        zSchema, zTable); | ||||||
|     }else{ |     }else{ | ||||||
|       sqlite3_snprintf(nByte+20, zSql, "INSERT INTO \"%w\" VALUES(?", zTable); |       sqlite3_snprintf(nByte, zSql, "INSERT INTO \"%w\" VALUES(?", zTable); | ||||||
|     } |     } | ||||||
|     j = strlen30(zSql); |     j = strlen30(zSql); | ||||||
|     for(i=1; i<nCol; i++){ |     for(i=1; i<nCol; i++){ | ||||||
| @@ -27122,6 +27125,7 @@ static int do_meta_command(char *zLine, ShellState *p){ | |||||||
|     } |     } | ||||||
|     zSql[j++] = ')'; |     zSql[j++] = ')'; | ||||||
|     zSql[j] = 0; |     zSql[j] = 0; | ||||||
|  |     assert( j<nByte ); | ||||||
|     if( eVerbose>=2 ){ |     if( eVerbose>=2 ){ | ||||||
|       oputf("Insert using: %s\n", zSql); |       oputf("Insert using: %s\n", zSql); | ||||||
|     } |     } | ||||||
|   | |||||||
							
								
								
									
										138
									
								
								deps/sqlite/sqlite3.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										138
									
								
								deps/sqlite/sqlite3.c
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| /******************************************************************************
 | /******************************************************************************
 | ||||||
| ** This file is an amalgamation of many separate C source files from SQLite | ** This file is an amalgamation of many separate C source files from SQLite | ||||||
| ** version 3.46.0.  By combining all the individual C code files into this | ** version 3.46.1.  By combining all the individual C code files into this | ||||||
| ** single large file, the entire code can be compiled as a single translation | ** single large file, the entire code can be compiled as a single translation | ||||||
| ** unit.  This allows many compilers to do optimizations that would not be | ** unit.  This allows many compilers to do optimizations that would not be | ||||||
| ** possible if the files were compiled separately.  Performance improvements | ** possible if the files were compiled separately.  Performance improvements | ||||||
| @@ -18,7 +18,7 @@ | |||||||
| ** separate file. This file contains only code for the core SQLite library. | ** separate file. This file contains only code for the core SQLite library. | ||||||
| ** | ** | ||||||
| ** The content in this amalgamation comes from Fossil check-in | ** The content in this amalgamation comes from Fossil check-in | ||||||
| ** 96c92aba00c8375bc32fafcdf12429c58bd8. | ** c9c2ab54ba1f5f46360f1b4f35d849cd3f08. | ||||||
| */ | */ | ||||||
| #define SQLITE_CORE 1 | #define SQLITE_CORE 1 | ||||||
| #define SQLITE_AMALGAMATION 1 | #define SQLITE_AMALGAMATION 1 | ||||||
| @@ -459,9 +459,9 @@ extern "C" { | |||||||
| ** [sqlite3_libversion_number()], [sqlite3_sourceid()], | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], | ||||||
| ** [sqlite_version()] and [sqlite_source_id()]. | ** [sqlite_version()] and [sqlite_source_id()]. | ||||||
| */ | */ | ||||||
| #define SQLITE_VERSION        "3.46.0" | #define SQLITE_VERSION        "3.46.1" | ||||||
| #define SQLITE_VERSION_NUMBER 3046000 | #define SQLITE_VERSION_NUMBER 3046001 | ||||||
| #define SQLITE_SOURCE_ID      "2024-05-23 13:25:27 96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e" | #define SQLITE_SOURCE_ID      "2024-08-13 09:16:08 c9c2ab54ba1f5f46360f1b4f35d849cd3f080e6fc2b6c60e91b16c63f69a1e33" | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
| ** CAPI3REF: Run-Time Library Version Numbers | ** CAPI3REF: Run-Time Library Version Numbers | ||||||
| @@ -19361,7 +19361,7 @@ struct SrcList { | |||||||
| #define WHERE_AGG_DISTINCT     0x0400 /* Query is "SELECT agg(DISTINCT ...)" */ | #define WHERE_AGG_DISTINCT     0x0400 /* Query is "SELECT agg(DISTINCT ...)" */ | ||||||
| #define WHERE_ORDERBY_LIMIT    0x0800 /* ORDERBY+LIMIT on the inner loop */ | #define WHERE_ORDERBY_LIMIT    0x0800 /* ORDERBY+LIMIT on the inner loop */ | ||||||
| #define WHERE_RIGHT_JOIN       0x1000 /* Processing a RIGHT JOIN */ | #define WHERE_RIGHT_JOIN       0x1000 /* Processing a RIGHT JOIN */ | ||||||
|                         /*     0x2000    not currently used */ | #define WHERE_KEEP_ALL_JOINS   0x2000 /* Do not do the omit-noop-join opt */ | ||||||
| #define WHERE_USE_LIMIT        0x4000 /* Use the LIMIT in cost estimates */ | #define WHERE_USE_LIMIT        0x4000 /* Use the LIMIT in cost estimates */ | ||||||
|                         /*     0x8000    not currently used */ |                         /*     0x8000    not currently used */ | ||||||
| 
 | 
 | ||||||
| @@ -90173,7 +90173,8 @@ SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe *v, int iVar, u8 aff | |||||||
|   assert( iVar>0 ); |   assert( iVar>0 ); | ||||||
|   if( v ){ |   if( v ){ | ||||||
|     Mem *pMem = &v->aVar[iVar-1]; |     Mem *pMem = &v->aVar[iVar-1]; | ||||||
|     assert( (v->db->flags & SQLITE_EnableQPSG)==0 ); |     assert( (v->db->flags & SQLITE_EnableQPSG)==0 | ||||||
|  |          || (v->db->mDbFlags & DBFLAG_InternalFunc)!=0 ); | ||||||
|     if( 0==(pMem->flags & MEM_Null) ){ |     if( 0==(pMem->flags & MEM_Null) ){ | ||||||
|       sqlite3_value *pRet = sqlite3ValueNew(v->db); |       sqlite3_value *pRet = sqlite3ValueNew(v->db); | ||||||
|       if( pRet ){ |       if( pRet ){ | ||||||
| @@ -90193,7 +90194,8 @@ SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe *v, int iVar, u8 aff | |||||||
| */ | */ | ||||||
| SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){ | SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){ | ||||||
|   assert( iVar>0 ); |   assert( iVar>0 ); | ||||||
|   assert( (v->db->flags & SQLITE_EnableQPSG)==0 ); |   assert( (v->db->flags & SQLITE_EnableQPSG)==0 | ||||||
|  |        || (v->db->mDbFlags & DBFLAG_InternalFunc)!=0 ); | ||||||
|   if( iVar>=32 ){ |   if( iVar>=32 ){ | ||||||
|     v->expmask |= 0x80000000; |     v->expmask |= 0x80000000; | ||||||
|   }else{ |   }else{ | ||||||
| @@ -106950,7 +106952,7 @@ static void extendFJMatch( | |||||||
| static SQLITE_NOINLINE int isValidSchemaTableName( | static SQLITE_NOINLINE int isValidSchemaTableName( | ||||||
|   const char *zTab,         /* Name as it appears in the SQL */ |   const char *zTab,         /* Name as it appears in the SQL */ | ||||||
|   Table *pTab,              /* The schema table we are trying to match */ |   Table *pTab,              /* The schema table we are trying to match */ | ||||||
|   Schema *pSchema           /* non-NULL if a database qualifier is present */ |   const char *zDb           /* non-NULL if a database qualifier is present */ | ||||||
| ){ | ){ | ||||||
|   const char *zLegacy; |   const char *zLegacy; | ||||||
|   assert( pTab!=0 ); |   assert( pTab!=0 ); | ||||||
| @@ -106961,7 +106963,7 @@ static SQLITE_NOINLINE int isValidSchemaTableName( | |||||||
|     if( sqlite3StrICmp(zTab+7, &PREFERRED_TEMP_SCHEMA_TABLE[7])==0 ){ |     if( sqlite3StrICmp(zTab+7, &PREFERRED_TEMP_SCHEMA_TABLE[7])==0 ){ | ||||||
|       return 1; |       return 1; | ||||||
|     } |     } | ||||||
|     if( pSchema==0 ) return 0; |     if( zDb==0 ) return 0; | ||||||
|     if( sqlite3StrICmp(zTab+7, &LEGACY_SCHEMA_TABLE[7])==0 ) return 1; |     if( sqlite3StrICmp(zTab+7, &LEGACY_SCHEMA_TABLE[7])==0 ) return 1; | ||||||
|     if( sqlite3StrICmp(zTab+7, &PREFERRED_SCHEMA_TABLE[7])==0 ) return 1; |     if( sqlite3StrICmp(zTab+7, &PREFERRED_SCHEMA_TABLE[7])==0 ) return 1; | ||||||
|   }else{ |   }else{ | ||||||
| @@ -107144,7 +107146,7 @@ static int lookupName( | |||||||
|             } |             } | ||||||
|           }else if( sqlite3StrICmp(zTab, pTab->zName)!=0 ){ |           }else if( sqlite3StrICmp(zTab, pTab->zName)!=0 ){ | ||||||
|             if( pTab->tnum!=1 ) continue; |             if( pTab->tnum!=1 ) continue; | ||||||
|             if( !isValidSchemaTableName(zTab, pTab, pSchema) ) continue; |             if( !isValidSchemaTableName(zTab, pTab, zDb) ) continue; | ||||||
|           } |           } | ||||||
|           assert( ExprUseYTab(pExpr) ); |           assert( ExprUseYTab(pExpr) ); | ||||||
|           if( IN_RENAME_OBJECT && pItem->zAlias ){ |           if( IN_RENAME_OBJECT && pItem->zAlias ){ | ||||||
| @@ -108876,6 +108878,9 @@ SQLITE_PRIVATE int sqlite3ResolveExprNames( | |||||||
| ** Resolve all names for all expression in an expression list.  This is | ** Resolve all names for all expression in an expression list.  This is | ||||||
| ** just like sqlite3ResolveExprNames() except that it works for an expression | ** just like sqlite3ResolveExprNames() except that it works for an expression | ||||||
| ** list rather than a single expression. | ** list rather than a single expression. | ||||||
|  | ** | ||||||
|  | ** The return value is SQLITE_OK (0) for success or SQLITE_ERROR (1) for a | ||||||
|  | ** failure. | ||||||
| */ | */ | ||||||
| SQLITE_PRIVATE int sqlite3ResolveExprListNames( | SQLITE_PRIVATE int sqlite3ResolveExprListNames( | ||||||
|   NameContext *pNC,       /* Namespace to resolve expressions in. */ |   NameContext *pNC,       /* Namespace to resolve expressions in. */ | ||||||
| @@ -108884,7 +108889,7 @@ SQLITE_PRIVATE int sqlite3ResolveExprListNames( | |||||||
|   int i; |   int i; | ||||||
|   int savedHasAgg = 0; |   int savedHasAgg = 0; | ||||||
|   Walker w; |   Walker w; | ||||||
|   if( pList==0 ) return WRC_Continue; |   if( pList==0 ) return SQLITE_OK; | ||||||
|   w.pParse = pNC->pParse; |   w.pParse = pNC->pParse; | ||||||
|   w.xExprCallback = resolveExprStep; |   w.xExprCallback = resolveExprStep; | ||||||
|   w.xSelectCallback = resolveSelectStep; |   w.xSelectCallback = resolveSelectStep; | ||||||
| @@ -108898,7 +108903,7 @@ SQLITE_PRIVATE int sqlite3ResolveExprListNames( | |||||||
| #if SQLITE_MAX_EXPR_DEPTH>0 | #if SQLITE_MAX_EXPR_DEPTH>0 | ||||||
|     w.pParse->nHeight += pExpr->nHeight; |     w.pParse->nHeight += pExpr->nHeight; | ||||||
|     if( sqlite3ExprCheckHeight(w.pParse, w.pParse->nHeight) ){ |     if( sqlite3ExprCheckHeight(w.pParse, w.pParse->nHeight) ){ | ||||||
|       return WRC_Abort; |       return SQLITE_ERROR; | ||||||
|     } |     } | ||||||
| #endif | #endif | ||||||
|     sqlite3WalkExprNN(&w, pExpr); |     sqlite3WalkExprNN(&w, pExpr); | ||||||
| @@ -108915,10 +108920,10 @@ SQLITE_PRIVATE int sqlite3ResolveExprListNames( | |||||||
|                           (NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg); |                           (NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg); | ||||||
|       pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg); |       pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg); | ||||||
|     } |     } | ||||||
|     if( w.pParse->nErr>0 ) return WRC_Abort; |     if( w.pParse->nErr>0 ) return SQLITE_ERROR; | ||||||
|   } |   } | ||||||
|   pNC->ncFlags |= savedHasAgg; |   pNC->ncFlags |= savedHasAgg; | ||||||
|   return WRC_Continue; |   return SQLITE_OK; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
| @@ -117457,7 +117462,7 @@ static int renameResolveTrigger(Parse *pParse){ | |||||||
|   /* ALWAYS() because if the table of the trigger does not exist, the
 |   /* ALWAYS() because if the table of the trigger does not exist, the
 | ||||||
|   ** error would have been hit before this point */ |   ** error would have been hit before this point */ | ||||||
|   if( ALWAYS(pParse->pTriggerTab) ){ |   if( ALWAYS(pParse->pTriggerTab) ){ | ||||||
|     rc = sqlite3ViewGetColumnNames(pParse, pParse->pTriggerTab); |     rc = sqlite3ViewGetColumnNames(pParse, pParse->pTriggerTab)!=0; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /* Resolve symbols in WHEN clause */ |   /* Resolve symbols in WHEN clause */ | ||||||
| @@ -124426,8 +124431,9 @@ create_view_fail: | |||||||
| #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) | #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) | ||||||
| /*
 | /*
 | ||||||
| ** The Table structure pTable is really a VIEW.  Fill in the names of | ** The Table structure pTable is really a VIEW.  Fill in the names of | ||||||
| ** the columns of the view in the pTable structure.  Return the number | ** the columns of the view in the pTable structure.  Return non-zero if | ||||||
| ** of errors.  If an error is seen leave an error message in pParse->zErrMsg. | ** there are errors.  If an error is seen an error message is left | ||||||
|  | ** in pParse->zErrMsg. | ||||||
| */ | */ | ||||||
| static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){ | static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){ | ||||||
|   Table *pSelTab;   /* A fake table from which we get the result set */ |   Table *pSelTab;   /* A fake table from which we get the result set */ | ||||||
| @@ -124550,7 +124556,7 @@ static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){ | |||||||
|     sqlite3DeleteColumnNames(db, pTable); |     sqlite3DeleteColumnNames(db, pTable); | ||||||
|   } |   } | ||||||
| #endif /* SQLITE_OMIT_VIEW */ | #endif /* SQLITE_OMIT_VIEW */ | ||||||
|   return nErr; |   return nErr + pParse->nErr; | ||||||
| } | } | ||||||
| SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){ | SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){ | ||||||
|   assert( pTable!=0 ); |   assert( pTable!=0 ); | ||||||
| @@ -130848,6 +130854,8 @@ static void groupConcatValue(sqlite3_context *context){ | |||||||
|       sqlite3_result_error_toobig(context); |       sqlite3_result_error_toobig(context); | ||||||
|     }else if( pAccum->accError==SQLITE_NOMEM ){ |     }else if( pAccum->accError==SQLITE_NOMEM ){ | ||||||
|       sqlite3_result_error_nomem(context); |       sqlite3_result_error_nomem(context); | ||||||
|  |     }else if( pGCC->nAccum>0 && pAccum->nChar==0 ){ | ||||||
|  |       sqlite3_result_text(context, "", 1, SQLITE_STATIC); | ||||||
|     }else{ |     }else{ | ||||||
|       const char *zText = sqlite3_str_value(pAccum); |       const char *zText = sqlite3_str_value(pAccum); | ||||||
|       sqlite3_result_text(context, zText, pAccum->nChar, SQLITE_TRANSIENT); |       sqlite3_result_text(context, zText, pAccum->nChar, SQLITE_TRANSIENT); | ||||||
| @@ -133602,6 +133610,7 @@ SQLITE_PRIVATE Select *sqlite3MultiValues(Parse *pParse, Select *pLeft, ExprList | |||||||
|         pRet->pSrc->nSrc = 1; |         pRet->pSrc->nSrc = 1; | ||||||
|         pRet->pPrior = pLeft->pPrior; |         pRet->pPrior = pLeft->pPrior; | ||||||
|         pRet->op = pLeft->op; |         pRet->op = pLeft->op; | ||||||
|  |         if( pRet->pPrior ) pRet->selFlags |= SF_Values; | ||||||
|         pLeft->pPrior = 0; |         pLeft->pPrior = 0; | ||||||
|         pLeft->op = TK_SELECT; |         pLeft->op = TK_SELECT; | ||||||
|         assert( pLeft->pNext==0 ); |         assert( pLeft->pNext==0 ); | ||||||
| @@ -166067,7 +166076,9 @@ static int whereLoopAddBtree( | |||||||
|                   " according to whereIsCoveringIndex()\n", pProbe->zName)); |                   " according to whereIsCoveringIndex()\n", pProbe->zName)); | ||||||
|             } |             } | ||||||
|           } |           } | ||||||
|         }else if( m==0 ){ |         }else if( m==0 | ||||||
|  |            && (HasRowid(pTab) || pWInfo->pSelect!=0 || sqlite3FaultSim(700)) | ||||||
|  |         ){ | ||||||
|           WHERETRACE(0x200, |           WHERETRACE(0x200, | ||||||
|              ("-> %s a covering index according to bitmasks\n", |              ("-> %s a covering index according to bitmasks\n", | ||||||
|              pProbe->zName, m==0 ? "is" : "is not")); |              pProbe->zName, m==0 ? "is" : "is not")); | ||||||
| @@ -167956,6 +167967,10 @@ static void showAllWhereLoops(WhereInfo *pWInfo, WhereClause *pWC){ | |||||||
| **      the right-most table of a subquery that was flattened into the | **      the right-most table of a subquery that was flattened into the | ||||||
| **      main query and that subquery was the right-hand operand of an | **      main query and that subquery was the right-hand operand of an | ||||||
| **      inner join that held an ON or USING clause. | **      inner join that held an ON or USING clause. | ||||||
|  | **   6) The ORDER BY clause has 63 or fewer terms | ||||||
|  | **   7) The omit-noop-join optimization is enabled. | ||||||
|  | ** | ||||||
|  | ** Items (1), (6), and (7) are checked by the caller. | ||||||
| ** | ** | ||||||
| ** For example, given: | ** For example, given: | ||||||
| ** | ** | ||||||
| @@ -168369,6 +168384,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( | |||||||
|   if( pOrderBy && pOrderBy->nExpr>=BMS ){ |   if( pOrderBy && pOrderBy->nExpr>=BMS ){ | ||||||
|     pOrderBy = 0; |     pOrderBy = 0; | ||||||
|     wctrlFlags &= ~WHERE_WANT_DISTINCT; |     wctrlFlags &= ~WHERE_WANT_DISTINCT; | ||||||
|  |     wctrlFlags |= WHERE_KEEP_ALL_JOINS; /* Disable omit-noop-join opt */ | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /* The number of tables in the FROM clause is limited by the number of
 |   /* The number of tables in the FROM clause is limited by the number of
 | ||||||
| @@ -168669,10 +168685,10 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( | |||||||
|   ** in-line sqlite3WhereCodeOneLoopStart() for performance reasons. |   ** in-line sqlite3WhereCodeOneLoopStart() for performance reasons. | ||||||
|   */ |   */ | ||||||
|   notReady = ~(Bitmask)0; |   notReady = ~(Bitmask)0; | ||||||
|   if( pWInfo->nLevel>=2 |   if( pWInfo->nLevel>=2       /* Must be a join, or this opt8n is pointless */ | ||||||
|    && pResultSet!=0                         /* these two combine to guarantee */ |    && pResultSet!=0           /* Condition (1) */ | ||||||
|    && 0==(wctrlFlags & WHERE_AGG_DISTINCT)  /* condition (1) above */ |    && 0==(wctrlFlags & (WHERE_AGG_DISTINCT|WHERE_KEEP_ALL_JOINS)) /* (1),(6) */ | ||||||
|    && OptimizationEnabled(db, SQLITE_OmitNoopJoin) |    && OptimizationEnabled(db, SQLITE_OmitNoopJoin)                /* (7) */ | ||||||
|   ){ |   ){ | ||||||
|     notReady = whereOmitNoopJoin(pWInfo, notReady); |     notReady = whereOmitNoopJoin(pWInfo, notReady); | ||||||
|     nTabList = pWInfo->nLevel; |     nTabList = pWInfo->nLevel; | ||||||
| @@ -168992,26 +169008,6 @@ whereBeginError: | |||||||
|   } |   } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef SQLITE_DEBUG |  | ||||||
| /*
 |  | ||||||
| ** Return true if cursor iCur is opened by instruction k of the |  | ||||||
| ** bytecode.  Used inside of assert() only. |  | ||||||
| */ |  | ||||||
| static int cursorIsOpen(Vdbe *v, int iCur, int k){ |  | ||||||
|   while( k>=0 ){ |  | ||||||
|     VdbeOp *pOp = sqlite3VdbeGetOp(v,k--); |  | ||||||
|     if( pOp->p1!=iCur ) continue; |  | ||||||
|     if( pOp->opcode==OP_Close ) return 0; |  | ||||||
|     if( pOp->opcode==OP_OpenRead ) return 1; |  | ||||||
|     if( pOp->opcode==OP_OpenWrite ) return 1; |  | ||||||
|     if( pOp->opcode==OP_OpenDup ) return 1; |  | ||||||
|     if( pOp->opcode==OP_OpenAutoindex ) return 1; |  | ||||||
|     if( pOp->opcode==OP_OpenEphemeral ) return 1; |  | ||||||
|   } |  | ||||||
|   return 0; |  | ||||||
| } |  | ||||||
| #endif /* SQLITE_DEBUG */ |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
| ** Generate the end of the WHERE loop.  See comments on | ** Generate the end of the WHERE loop.  See comments on | ||||||
| ** sqlite3WhereBegin() for additional information. | ** sqlite3WhereBegin() for additional information. | ||||||
| @@ -169311,16 +169307,10 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ | |||||||
|             ** reference.  Verify that this is harmless - that the |             ** reference.  Verify that this is harmless - that the | ||||||
|             ** table being referenced really is open. |             ** table being referenced really is open. | ||||||
|             */ |             */ | ||||||
| #ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC |             if( pLoop->wsFlags & WHERE_IDX_ONLY ){ | ||||||
|             assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 |               sqlite3ErrorMsg(pParse, "internal query planner error"); | ||||||
|                  || cursorIsOpen(v,pOp->p1,k) |               pParse->rc = SQLITE_INTERNAL; | ||||||
|                  || pOp->opcode==OP_Offset |             } | ||||||
|             ); |  | ||||||
| #else |  | ||||||
|             assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 |  | ||||||
|                  || cursorIsOpen(v,pOp->p1,k) |  | ||||||
|             ); |  | ||||||
| #endif |  | ||||||
|           } |           } | ||||||
|         }else if( pOp->opcode==OP_Rowid ){ |         }else if( pOp->opcode==OP_Rowid ){ | ||||||
|           pOp->p1 = pLevel->iIdxCur; |           pOp->p1 = pLevel->iIdxCur; | ||||||
| @@ -172591,9 +172581,9 @@ static void updateDeleteLimitError( | |||||||
|           break; |           break; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|       if( (p->selFlags & SF_MultiValue)==0 && |       if( (p->selFlags & (SF_MultiValue|SF_Values))==0 | ||||||
|         (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 && |        && (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 | ||||||
|         cnt>mxSelect |        && cnt>mxSelect | ||||||
|       ){ |       ){ | ||||||
|         sqlite3ErrorMsg(pParse, "too many terms in compound SELECT"); |         sqlite3ErrorMsg(pParse, "too many terms in compound SELECT"); | ||||||
|       } |       } | ||||||
| @@ -237004,7 +236994,11 @@ static int sqlite3Fts5ExprNew( | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   sqlite3_free(sParse.apPhrase); |   sqlite3_free(sParse.apPhrase); | ||||||
|  |   if( 0==*pzErr ){ | ||||||
|     *pzErr = sParse.zErr; |     *pzErr = sParse.zErr; | ||||||
|  |   }else{ | ||||||
|  |     sqlite3_free(sParse.zErr); | ||||||
|  |   } | ||||||
|   return sParse.rc; |   return sParse.rc; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -239132,6 +239126,7 @@ static Fts5ExprNode *sqlite3Fts5ParseImplicitAnd( | |||||||
|     assert( pRight->eType==FTS5_STRING |     assert( pRight->eType==FTS5_STRING | ||||||
|         || pRight->eType==FTS5_TERM |         || pRight->eType==FTS5_TERM | ||||||
|         || pRight->eType==FTS5_EOF |         || pRight->eType==FTS5_EOF | ||||||
|  |         || (pRight->eType==FTS5_AND && pParse->bPhraseToAnd) | ||||||
|     ); |     ); | ||||||
| 
 | 
 | ||||||
|     if( pLeft->eType==FTS5_AND ){ |     if( pLeft->eType==FTS5_AND ){ | ||||||
| @@ -251299,6 +251294,7 @@ static int fts5UpdateMethod( | |||||||
|         rc = SQLITE_ERROR; |         rc = SQLITE_ERROR; | ||||||
|       }else{ |       }else{ | ||||||
|         rc = fts5SpecialDelete(pTab, apVal); |         rc = fts5SpecialDelete(pTab, apVal); | ||||||
|  |         bUpdateOrDelete = 1; | ||||||
|       } |       } | ||||||
|     }else{ |     }else{ | ||||||
|       rc = fts5SpecialInsert(pTab, z, apVal[2 + pConfig->nCol + 1]); |       rc = fts5SpecialInsert(pTab, z, apVal[2 + pConfig->nCol + 1]); | ||||||
| @@ -252473,14 +252469,16 @@ static int sqlite3Fts5GetTokenizer( | |||||||
|   if( pMod==0 ){ |   if( pMod==0 ){ | ||||||
|     assert( nArg>0 ); |     assert( nArg>0 ); | ||||||
|     rc = SQLITE_ERROR; |     rc = SQLITE_ERROR; | ||||||
|     *pzErr = sqlite3_mprintf("no such tokenizer: %s", azArg[0]); |     if( pzErr ) *pzErr = sqlite3_mprintf("no such tokenizer: %s", azArg[0]); | ||||||
|   }else{ |   }else{ | ||||||
|     rc = pMod->x.xCreate( |     rc = pMod->x.xCreate( | ||||||
|         pMod->pUserData, (azArg?&azArg[1]:0), (nArg?nArg-1:0), &pConfig->pTok |         pMod->pUserData, (azArg?&azArg[1]:0), (nArg?nArg-1:0), &pConfig->pTok | ||||||
|     ); |     ); | ||||||
|     pConfig->pTokApi = &pMod->x; |     pConfig->pTokApi = &pMod->x; | ||||||
|     if( rc!=SQLITE_OK ){ |     if( rc!=SQLITE_OK ){ | ||||||
|       if( pzErr ) *pzErr = sqlite3_mprintf("error in tokenizer constructor"); |       if( pzErr && rc!=SQLITE_NOMEM ){ | ||||||
|  |         *pzErr = sqlite3_mprintf("error in tokenizer constructor"); | ||||||
|  |       } | ||||||
|     }else{ |     }else{ | ||||||
|       pConfig->ePattern = sqlite3Fts5TokenizerPattern( |       pConfig->ePattern = sqlite3Fts5TokenizerPattern( | ||||||
|           pMod->x.xCreate, pConfig->pTok |           pMod->x.xCreate, pConfig->pTok | ||||||
| @@ -252539,7 +252537,7 @@ static void fts5SourceIdFunc( | |||||||
| ){ | ){ | ||||||
|   assert( nArg==0 ); |   assert( nArg==0 ); | ||||||
|   UNUSED_PARAM2(nArg, apUnused); |   UNUSED_PARAM2(nArg, apUnused); | ||||||
|   sqlite3_result_text(pCtx, "fts5: 2024-05-23 13:25:27 96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e", -1, SQLITE_TRANSIENT); |   sqlite3_result_text(pCtx, "fts5: 2024-08-13 09:16:08 c9c2ab54ba1f5f46360f1b4f35d849cd3f080e6fc2b6c60e91b16c63f69a1e33", -1, SQLITE_TRANSIENT); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
| @@ -252574,17 +252572,23 @@ static int fts5IntegrityMethod( | |||||||
| 
 | 
 | ||||||
|   assert( pzErr!=0 && *pzErr==0 ); |   assert( pzErr!=0 && *pzErr==0 ); | ||||||
|   UNUSED_PARAM(isQuick); |   UNUSED_PARAM(isQuick); | ||||||
|  |   assert( pTab->p.pConfig->pzErrmsg==0 ); | ||||||
|  |   pTab->p.pConfig->pzErrmsg = pzErr; | ||||||
|   rc = sqlite3Fts5StorageIntegrity(pTab->pStorage, 0); |   rc = sqlite3Fts5StorageIntegrity(pTab->pStorage, 0); | ||||||
|  |   if( *pzErr==0 && rc!=SQLITE_OK ){ | ||||||
|     if( (rc&0xff)==SQLITE_CORRUPT ){ |     if( (rc&0xff)==SQLITE_CORRUPT ){ | ||||||
|       *pzErr = sqlite3_mprintf("malformed inverted index for FTS5 table %s.%s", |       *pzErr = sqlite3_mprintf("malformed inverted index for FTS5 table %s.%s", | ||||||
|           zSchema, zTabname); |           zSchema, zTabname); | ||||||
|       rc = (*pzErr) ? SQLITE_OK : SQLITE_NOMEM; |       rc = (*pzErr) ? SQLITE_OK : SQLITE_NOMEM; | ||||||
|   }else if( rc!=SQLITE_OK ){ |     }else{ | ||||||
|       *pzErr = sqlite3_mprintf("unable to validate the inverted index for" |       *pzErr = sqlite3_mprintf("unable to validate the inverted index for" | ||||||
|           " FTS5 table %s.%s: %s", |           " FTS5 table %s.%s: %s", | ||||||
|           zSchema, zTabname, sqlite3_errstr(rc)); |           zSchema, zTabname, sqlite3_errstr(rc)); | ||||||
|     } |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   sqlite3Fts5IndexCloseReader(pTab->p.pIndex); |   sqlite3Fts5IndexCloseReader(pTab->p.pIndex); | ||||||
|  |   pTab->p.pConfig->pzErrmsg = 0; | ||||||
| 
 | 
 | ||||||
|   return rc; |   return rc; | ||||||
| } | } | ||||||
| @@ -254018,7 +254022,7 @@ static int fts5AsciiCreate( | |||||||
|       int i; |       int i; | ||||||
|       memset(p, 0, sizeof(AsciiTokenizer)); |       memset(p, 0, sizeof(AsciiTokenizer)); | ||||||
|       memcpy(p->aTokenChar, aAsciiTokenChar, sizeof(aAsciiTokenChar)); |       memcpy(p->aTokenChar, aAsciiTokenChar, sizeof(aAsciiTokenChar)); | ||||||
|       for(i=0; rc==SQLITE_OK && i<nArg; i+=2){ |       for(i=0; rc==SQLITE_OK && i<nArg-1; i+=2){ | ||||||
|         const char *zArg = azArg[i+1]; |         const char *zArg = azArg[i+1]; | ||||||
|         if( 0==sqlite3_stricmp(azArg[i], "tokenchars") ){ |         if( 0==sqlite3_stricmp(azArg[i], "tokenchars") ){ | ||||||
|           fts5AsciiAddExceptions(p, zArg, 1); |           fts5AsciiAddExceptions(p, zArg, 1); | ||||||
| @@ -254029,6 +254033,7 @@ static int fts5AsciiCreate( | |||||||
|           rc = SQLITE_ERROR; |           rc = SQLITE_ERROR; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |       if( rc==SQLITE_OK && i<nArg ) rc = SQLITE_ERROR; | ||||||
|       if( rc!=SQLITE_OK ){ |       if( rc!=SQLITE_OK ){ | ||||||
|         fts5AsciiDelete((Fts5Tokenizer*)p); |         fts5AsciiDelete((Fts5Tokenizer*)p); | ||||||
|         p = 0; |         p = 0; | ||||||
| @@ -254320,17 +254325,16 @@ static int fts5UnicodeCreate( | |||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       /* Search for a "categories" argument */ |       /* Search for a "categories" argument */ | ||||||
|       for(i=0; rc==SQLITE_OK && i<nArg; i+=2){ |       for(i=0; rc==SQLITE_OK && i<nArg-1; i+=2){ | ||||||
|         if( 0==sqlite3_stricmp(azArg[i], "categories") ){ |         if( 0==sqlite3_stricmp(azArg[i], "categories") ){ | ||||||
|           zCat = azArg[i+1]; |           zCat = azArg[i+1]; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
| 
 |  | ||||||
|       if( rc==SQLITE_OK ){ |       if( rc==SQLITE_OK ){ | ||||||
|         rc = unicodeSetCategories(p, zCat); |         rc = unicodeSetCategories(p, zCat); | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       for(i=0; rc==SQLITE_OK && i<nArg; i+=2){ |       for(i=0; rc==SQLITE_OK && i<nArg-1; i+=2){ | ||||||
|         const char *zArg = azArg[i+1]; |         const char *zArg = azArg[i+1]; | ||||||
|         if( 0==sqlite3_stricmp(azArg[i], "remove_diacritics") ){ |         if( 0==sqlite3_stricmp(azArg[i], "remove_diacritics") ){ | ||||||
|           if( (zArg[0]!='0' && zArg[0]!='1' && zArg[0]!='2') || zArg[1] ){ |           if( (zArg[0]!='0' && zArg[0]!='1' && zArg[0]!='2') || zArg[1] ){ | ||||||
| @@ -254355,6 +254359,7 @@ static int fts5UnicodeCreate( | |||||||
|           rc = SQLITE_ERROR; |           rc = SQLITE_ERROR; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |       if( i<nArg && rc==SQLITE_OK ) rc = SQLITE_ERROR; | ||||||
| 
 | 
 | ||||||
|     }else{ |     }else{ | ||||||
|       rc = SQLITE_NOMEM; |       rc = SQLITE_NOMEM; | ||||||
| @@ -255237,7 +255242,7 @@ static int fts5TriCreate( | |||||||
|     int i; |     int i; | ||||||
|     pNew->bFold = 1; |     pNew->bFold = 1; | ||||||
|     pNew->iFoldParam = 0; |     pNew->iFoldParam = 0; | ||||||
|     for(i=0; rc==SQLITE_OK && i<nArg; i+=2){ |     for(i=0; rc==SQLITE_OK && i<nArg-1; i+=2){ | ||||||
|       const char *zArg = azArg[i+1]; |       const char *zArg = azArg[i+1]; | ||||||
|       if( 0==sqlite3_stricmp(azArg[i], "case_sensitive") ){ |       if( 0==sqlite3_stricmp(azArg[i], "case_sensitive") ){ | ||||||
|         if( (zArg[0]!='0' && zArg[0]!='1') || zArg[1] ){ |         if( (zArg[0]!='0' && zArg[0]!='1') || zArg[1] ){ | ||||||
| @@ -255255,6 +255260,7 @@ static int fts5TriCreate( | |||||||
|         rc = SQLITE_ERROR; |         rc = SQLITE_ERROR; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |     if( i<nArg && rc==SQLITE_OK ) rc = SQLITE_ERROR; | ||||||
| 
 | 
 | ||||||
|     if( pNew->iFoldParam!=0 && pNew->bFold==0 ){ |     if( pNew->iFoldParam!=0 && pNew->bFold==0 ){ | ||||||
|       rc = SQLITE_ERROR; |       rc = SQLITE_ERROR; | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								deps/sqlite/sqlite3.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								deps/sqlite/sqlite3.h
									
									
									
									
										vendored
									
									
								
							| @@ -146,9 +146,9 @@ extern "C" { | |||||||
| ** [sqlite3_libversion_number()], [sqlite3_sourceid()], | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], | ||||||
| ** [sqlite_version()] and [sqlite_source_id()]. | ** [sqlite_version()] and [sqlite_source_id()]. | ||||||
| */ | */ | ||||||
| #define SQLITE_VERSION        "3.46.0" | #define SQLITE_VERSION        "3.46.1" | ||||||
| #define SQLITE_VERSION_NUMBER 3046000 | #define SQLITE_VERSION_NUMBER 3046001 | ||||||
| #define SQLITE_SOURCE_ID      "2024-05-23 13:25:27 96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e" | #define SQLITE_SOURCE_ID      "2024-08-13 09:16:08 c9c2ab54ba1f5f46360f1b4f35d849cd3f080e6fc2b6c60e91b16c63f69a1e33" | ||||||
|  |  | ||||||
| /* | /* | ||||||
| ** CAPI3REF: Run-Time Library Version Numbers | ** CAPI3REF: Run-Time Library Version Numbers | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user