summaryrefslogtreecommitdiff
path: root/c/sqlite3.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c/sqlite3.c75
1 files changed, 48 insertions, 27 deletions
diff --git a/c/sqlite3.c b/c/sqlite3.c
index 30e6db8..54f8277 100644
--- a/c/sqlite3.c
+++ b/c/sqlite3.c
@@ -1,6 +1,6 @@
1/****************************************************************************** 1/******************************************************************************
2** This file is an amalgamation of many separate C source files from SQLite 2** This file is an amalgamation of many separate C source files from SQLite
3** version 3.35.0. By combining all the individual C code files into this 3** version 3.35.2. By combining all the individual C code files into this
4** single large file, the entire code can be compiled as a single translation 4** single large file, the entire code can be compiled as a single translation
5** unit. This allows many compilers to do optimizations that would not be 5** unit. This allows many compilers to do optimizations that would not be
6** possible if the files were compiled separately. Performance improvements 6** possible if the files were compiled separately. Performance improvements
@@ -1186,9 +1186,9 @@ extern "C" {
1186** [sqlite3_libversion_number()], [sqlite3_sourceid()], 1186** [sqlite3_libversion_number()], [sqlite3_sourceid()],
1187** [sqlite_version()] and [sqlite_source_id()]. 1187** [sqlite_version()] and [sqlite_source_id()].
1188*/ 1188*/
1189#define SQLITE_VERSION "3.35.0" 1189#define SQLITE_VERSION "3.35.2"
1190#define SQLITE_VERSION_NUMBER 3035000 1190#define SQLITE_VERSION_NUMBER 3035002
1191#define SQLITE_SOURCE_ID "2021-03-12 15:10:09 acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b" 1191#define SQLITE_SOURCE_ID "2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827"
1192 1192
1193/* 1193/*
1194** CAPI3REF: Run-Time Library Version Numbers 1194** CAPI3REF: Run-Time Library Version Numbers
@@ -17007,7 +17007,10 @@ struct sqlite3 {
17007 unsigned orphanTrigger : 1; /* Last statement is orphaned TEMP trigger */ 17007 unsigned orphanTrigger : 1; /* Last statement is orphaned TEMP trigger */
17008 unsigned imposterTable : 1; /* Building an imposter table */ 17008 unsigned imposterTable : 1; /* Building an imposter table */
17009 unsigned reopenMemdb : 1; /* ATTACH is really a reopen using MemDB */ 17009 unsigned reopenMemdb : 1; /* ATTACH is really a reopen using MemDB */
17010 unsigned bDropColumn : 1; /* Doing schema check after DROP COLUMN */
17010 char **azInit; /* "type", "name", and "tbl_name" columns */ 17011 char **azInit; /* "type", "name", and "tbl_name" columns */
17012 /* or if bDropColumn, then azInit[0] is the */
17013 /* name of the column being dropped */
17011 } init; 17014 } init;
17012 int nVdbeActive; /* Number of VDBEs currently running */ 17015 int nVdbeActive; /* Number of VDBEs currently running */
17013 int nVdbeRead; /* Number of active VDBEs that read or write */ 17016 int nVdbeRead; /* Number of active VDBEs that read or write */
@@ -22868,6 +22871,7 @@ static int isDate(
22868 int eType; 22871 int eType;
22869 memset(p, 0, sizeof(*p)); 22872 memset(p, 0, sizeof(*p));
22870 if( argc==0 ){ 22873 if( argc==0 ){
22874 if( !sqlite3NotPureFunc(context) ) return 1;
22871 return setDateTimeToCurrent(context, p); 22875 return setDateTimeToCurrent(context, p);
22872 } 22876 }
22873 if( (eType = sqlite3_value_type(argv[0]))==SQLITE_FLOAT 22877 if( (eType = sqlite3_value_type(argv[0]))==SQLITE_FLOAT
@@ -99167,6 +99171,7 @@ static int lookupName(
99167 assert( pExpr->op==TK_ID ); 99171 assert( pExpr->op==TK_ID );
99168 if( ExprHasProperty(pExpr,EP_DblQuoted) 99172 if( ExprHasProperty(pExpr,EP_DblQuoted)
99169 && areDoubleQuotedStringsEnabled(db, pTopNC) 99173 && areDoubleQuotedStringsEnabled(db, pTopNC)
99174 && (db->init.bDropColumn==0 || sqlite3StrICmp(zCol, db->init.azInit[0])!=0)
99170 ){ 99175 ){
99171 /* If a double-quoted identifier does not match any known column name, 99176 /* If a double-quoted identifier does not match any known column name,
99172 ** then treat it as a string. 99177 ** then treat it as a string.
@@ -99181,6 +99186,11 @@ static int lookupName(
99181 ** Someday, I hope to get rid of this hack. Unfortunately there is 99186 ** Someday, I hope to get rid of this hack. Unfortunately there is
99182 ** a huge amount of legacy SQL that uses it. So for now, we just 99187 ** a huge amount of legacy SQL that uses it. So for now, we just
99183 ** issue a warning. 99188 ** issue a warning.
99189 **
99190 ** 2021-03-15: ticket 1c24a659e6d7f3a1
99191 ** Do not do the ID-to-STRING conversion when doing the schema
99192 ** sanity check following a DROP COLUMN if the identifer name matches
99193 ** the name of the column being dropped.
99184 */ 99194 */
99185 sqlite3_log(SQLITE_WARNING, 99195 sqlite3_log(SQLITE_WARNING,
99186 "double-quoted string literal: \"%w\"", zCol); 99196 "double-quoted string literal: \"%w\"", zCol);
@@ -106780,7 +106790,8 @@ static void renameTestSchema(
106780 Parse *pParse, /* Parse context */ 106790 Parse *pParse, /* Parse context */
106781 const char *zDb, /* Name of db to verify schema of */ 106791 const char *zDb, /* Name of db to verify schema of */
106782 int bTemp, /* True if this is the temp db */ 106792 int bTemp, /* True if this is the temp db */
106783 const char *zWhen /* "when" part of error message */ 106793 const char *zWhen, /* "when" part of error message */
106794 const char *zDropColumn /* Name of column being dropped */
106784){ 106795){
106785 pParse->colNamesSet = 1; 106796 pParse->colNamesSet = 1;
106786 sqlite3NestedParse(pParse, 106797 sqlite3NestedParse(pParse,
@@ -106788,9 +106799,9 @@ static void renameTestSchema(
106788 "FROM \"%w\"." DFLT_SCHEMA_TABLE " " 106799 "FROM \"%w\"." DFLT_SCHEMA_TABLE " "
106789 "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'" 106800 "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'"
106790 " AND sql NOT LIKE 'create virtual%%'" 106801 " AND sql NOT LIKE 'create virtual%%'"
106791 " AND sqlite_rename_test(%Q, sql, type, name, %d, %Q)=NULL ", 106802 " AND sqlite_rename_test(%Q, sql, type, name, %d, %Q, %Q)=NULL ",
106792 zDb, 106803 zDb,
106793 zDb, bTemp, zWhen 106804 zDb, bTemp, zWhen, zDropColumn
106794 ); 106805 );
106795 106806
106796 if( bTemp==0 ){ 106807 if( bTemp==0 ){
@@ -106799,8 +106810,8 @@ static void renameTestSchema(
106799 "FROM temp." DFLT_SCHEMA_TABLE " " 106810 "FROM temp." DFLT_SCHEMA_TABLE " "
106800 "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'" 106811 "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'"
106801 " AND sql NOT LIKE 'create virtual%%'" 106812 " AND sql NOT LIKE 'create virtual%%'"
106802 " AND sqlite_rename_test(%Q, sql, type, name, 1, %Q)=NULL ", 106813 " AND sqlite_rename_test(%Q, sql, type, name, 1, %Q, %Q)=NULL ",
106803 zDb, zWhen 106814 zDb, zWhen, zDropColumn
106804 ); 106815 );
106805 } 106816 }
106806} 106817}
@@ -106963,7 +106974,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
106963 "sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, 1), " 106974 "sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, 1), "
106964 "tbl_name = " 106975 "tbl_name = "
106965 "CASE WHEN tbl_name=%Q COLLATE nocase AND " 106976 "CASE WHEN tbl_name=%Q COLLATE nocase AND "
106966 " sqlite_rename_test(%Q, sql, type, name, 1, 'after rename') " 106977 " sqlite_rename_test(%Q, sql, type, name, 1, 'after rename',0) "
106967 "THEN %Q ELSE tbl_name END " 106978 "THEN %Q ELSE tbl_name END "
106968 "WHERE type IN ('view', 'trigger')" 106979 "WHERE type IN ('view', 'trigger')"
106969 , zDb, zTabName, zName, zTabName, zDb, zName); 106980 , zDb, zTabName, zName, zTabName, zDb, zName);
@@ -106983,7 +106994,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
106983#endif 106994#endif
106984 106995
106985 renameReloadSchema(pParse, iDb, INITFLAG_AlterRename); 106996 renameReloadSchema(pParse, iDb, INITFLAG_AlterRename);
106986 renameTestSchema(pParse, zDb, iDb==1, "after rename"); 106997 renameTestSchema(pParse, zDb, iDb==1, "after rename", 0);
106987 106998
106988exit_rename_table: 106999exit_rename_table:
106989 sqlite3SrcListDelete(db, pSrc); 107000 sqlite3SrcListDelete(db, pSrc);
@@ -107351,7 +107362,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameColumn(
107351 107362
107352 /* Drop and reload the database schema. */ 107363 /* Drop and reload the database schema. */
107353 renameReloadSchema(pParse, iSchema, INITFLAG_AlterRename); 107364 renameReloadSchema(pParse, iSchema, INITFLAG_AlterRename);
107354 renameTestSchema(pParse, zDb, iSchema==1, "after rename"); 107365 renameTestSchema(pParse, zDb, iSchema==1, "after rename", 0);
107355 107366
107356 exit_rename_column: 107367 exit_rename_column:
107357 sqlite3SrcListDelete(db, pSrc); 107368 sqlite3SrcListDelete(db, pSrc);
@@ -107775,12 +107786,17 @@ static int renameParseSql(
107775 const char *zDb, /* Name of schema SQL belongs to */ 107786 const char *zDb, /* Name of schema SQL belongs to */
107776 sqlite3 *db, /* Database handle */ 107787 sqlite3 *db, /* Database handle */
107777 const char *zSql, /* SQL to parse */ 107788 const char *zSql, /* SQL to parse */
107778 int bTemp /* True if SQL is from temp schema */ 107789 int bTemp, /* True if SQL is from temp schema */
107790 const char *zDropColumn /* Name of column being dropped */
107779){ 107791){
107780 int rc; 107792 int rc;
107781 char *zErr = 0; 107793 char *zErr = 0;
107782 107794
107783 db->init.iDb = bTemp ? 1 : sqlite3FindDbName(db, zDb); 107795 db->init.iDb = bTemp ? 1 : sqlite3FindDbName(db, zDb);
107796 if( zDropColumn ){
107797 db->init.bDropColumn = 1;
107798 db->init.azInit = (char**)&zDropColumn;
107799 }
107784 107800
107785 /* Parse the SQL statement passed as the first argument. If no error 107801 /* Parse the SQL statement passed as the first argument. If no error
107786 ** occurs and the parse does not result in a new table, index or 107802 ** occurs and the parse does not result in a new table, index or
@@ -107813,6 +107829,7 @@ static int renameParseSql(
107813#endif 107829#endif
107814 107830
107815 db->init.iDb = 0; 107831 db->init.iDb = 0;
107832 db->init.bDropColumn = 0;
107816 return rc; 107833 return rc;
107817} 107834}
107818 107835
@@ -108114,7 +108131,7 @@ static void renameColumnFunc(
108114#ifndef SQLITE_OMIT_AUTHORIZATION 108131#ifndef SQLITE_OMIT_AUTHORIZATION
108115 db->xAuth = 0; 108132 db->xAuth = 0;
108116#endif 108133#endif
108117 rc = renameParseSql(&sParse, zDb, db, zSql, bTemp); 108134 rc = renameParseSql(&sParse, zDb, db, zSql, bTemp, 0);
108118 108135
108119 /* Find tokens that need to be replaced. */ 108136 /* Find tokens that need to be replaced. */
108120 memset(&sWalker, 0, sizeof(Walker)); 108137 memset(&sWalker, 0, sizeof(Walker));
@@ -108156,12 +108173,12 @@ static void renameColumnFunc(
108156 for(pIdx=sParse.pNewIndex; pIdx; pIdx=pIdx->pNext){ 108173 for(pIdx=sParse.pNewIndex; pIdx; pIdx=pIdx->pNext){
108157 sqlite3WalkExprList(&sWalker, pIdx->aColExpr); 108174 sqlite3WalkExprList(&sWalker, pIdx->aColExpr);
108158 } 108175 }
108159 }
108160#ifndef SQLITE_OMIT_GENERATED_COLUMNS 108176#ifndef SQLITE_OMIT_GENERATED_COLUMNS
108161 for(i=0; i<sParse.pNewTable->nCol; i++){ 108177 for(i=0; i<sParse.pNewTable->nCol; i++){
108162 sqlite3WalkExpr(&sWalker, sParse.pNewTable->aCol[i].pDflt); 108178 sqlite3WalkExpr(&sWalker, sParse.pNewTable->aCol[i].pDflt);
108163 } 108179 }
108164#endif 108180#endif
108181 }
108165 108182
108166 for(pFKey=sParse.pNewTable->pFKey; pFKey; pFKey=pFKey->pNextFrom){ 108183 for(pFKey=sParse.pNewTable->pFKey; pFKey; pFKey=pFKey->pNextFrom){
108167 for(i=0; i<pFKey->nCol; i++){ 108184 for(i=0; i<pFKey->nCol; i++){
@@ -108318,7 +108335,7 @@ static void renameTableFunc(
108318 sWalker.xSelectCallback = renameTableSelectCb; 108335 sWalker.xSelectCallback = renameTableSelectCb;
108319 sWalker.u.pRename = &sCtx; 108336 sWalker.u.pRename = &sCtx;
108320 108337
108321 rc = renameParseSql(&sParse, zDb, db, zInput, bTemp); 108338 rc = renameParseSql(&sParse, zDb, db, zInput, bTemp, 0);
108322 108339
108323 if( rc==SQLITE_OK ){ 108340 if( rc==SQLITE_OK ){
108324 int isLegacy = (db->flags & SQLITE_LegacyAlter); 108341 int isLegacy = (db->flags & SQLITE_LegacyAlter);
@@ -108434,6 +108451,7 @@ static void renameTableFunc(
108434** 3: Object name. 108451** 3: Object name.
108435** 4: True if object is from temp schema. 108452** 4: True if object is from temp schema.
108436** 5: "when" part of error message. 108453** 5: "when" part of error message.
108454** 6: Name of column being dropped, or NULL.
108437** 108455**
108438** Unless it finds an error, this function normally returns NULL. However, it 108456** Unless it finds an error, this function normally returns NULL. However, it
108439** returns integer value 1 if: 108457** returns integer value 1 if:
@@ -108452,6 +108470,7 @@ static void renameTableTest(
108452 int bTemp = sqlite3_value_int(argv[4]); 108470 int bTemp = sqlite3_value_int(argv[4]);
108453 int isLegacy = (db->flags & SQLITE_LegacyAlter); 108471 int isLegacy = (db->flags & SQLITE_LegacyAlter);
108454 char const *zWhen = (const char*)sqlite3_value_text(argv[5]); 108472 char const *zWhen = (const char*)sqlite3_value_text(argv[5]);
108473 char const *zDropColumn = (const char*)sqlite3_value_text(argv[6]);
108455 108474
108456#ifndef SQLITE_OMIT_AUTHORIZATION 108475#ifndef SQLITE_OMIT_AUTHORIZATION
108457 sqlite3_xauth xAuth = db->xAuth; 108476 sqlite3_xauth xAuth = db->xAuth;
@@ -108462,7 +108481,7 @@ static void renameTableTest(
108462 if( zDb && zInput ){ 108481 if( zDb && zInput ){
108463 int rc; 108482 int rc;
108464 Parse sParse; 108483 Parse sParse;
108465 rc = renameParseSql(&sParse, zDb, db, zInput, bTemp); 108484 rc = renameParseSql(&sParse, zDb, db, zInput, bTemp, zDropColumn);
108466 if( rc==SQLITE_OK ){ 108485 if( rc==SQLITE_OK ){
108467 if( isLegacy==0 && sParse.pNewTable && sParse.pNewTable->pSelect ){ 108486 if( isLegacy==0 && sParse.pNewTable && sParse.pNewTable->pSelect ){
108468 NameContext sNC; 108487 NameContext sNC;
@@ -108530,7 +108549,7 @@ static void dropColumnFunc(
108530#endif 108549#endif
108531 108550
108532 UNUSED_PARAMETER(NotUsed); 108551 UNUSED_PARAMETER(NotUsed);
108533 rc = renameParseSql(&sParse, zDb, db, zSql, iSchema==1); 108552 rc = renameParseSql(&sParse, zDb, db, zSql, iSchema==1, 0);
108534 if( rc!=SQLITE_OK ) goto drop_column_done; 108553 if( rc!=SQLITE_OK ) goto drop_column_done;
108535 pTab = sParse.pNewTable; 108554 pTab = sParse.pNewTable;
108536 if( pTab==0 || pTab->nCol==1 || iCol>=pTab->nCol ){ 108555 if( pTab==0 || pTab->nCol==1 || iCol>=pTab->nCol ){
@@ -108623,7 +108642,7 @@ SQLITE_PRIVATE void sqlite3AlterDropColumn(Parse *pParse, SrcList *pSrc, Token *
108623 iDb = sqlite3SchemaToIndex(db, pTab->pSchema); 108642 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
108624 assert( iDb>=0 ); 108643 assert( iDb>=0 );
108625 zDb = db->aDb[iDb].zDbSName; 108644 zDb = db->aDb[iDb].zDbSName;
108626 renameTestSchema(pParse, zDb, iDb==1, ""); 108645 renameTestSchema(pParse, zDb, iDb==1, "", 0);
108627 sqlite3NestedParse(pParse, 108646 sqlite3NestedParse(pParse,
108628 "UPDATE \"%w\"." DFLT_SCHEMA_TABLE " SET " 108647 "UPDATE \"%w\"." DFLT_SCHEMA_TABLE " SET "
108629 "sql = sqlite_drop_column(%d, sql, %d) " 108648 "sql = sqlite_drop_column(%d, sql, %d) "
@@ -108633,7 +108652,7 @@ SQLITE_PRIVATE void sqlite3AlterDropColumn(Parse *pParse, SrcList *pSrc, Token *
108633 108652
108634 /* Drop and reload the database schema. */ 108653 /* Drop and reload the database schema. */
108635 renameReloadSchema(pParse, iDb, INITFLAG_AlterDrop); 108654 renameReloadSchema(pParse, iDb, INITFLAG_AlterDrop);
108636 renameTestSchema(pParse, zDb, iDb==1, "after drop column"); 108655 renameTestSchema(pParse, zDb, iDb==1, "after drop column", zCol);
108637 108656
108638 /* Edit rows of table on disk */ 108657 /* Edit rows of table on disk */
108639 if( pParse->nErr==0 && (pTab->aCol[iCol].colFlags & COLFLAG_VIRTUAL)==0 ){ 108658 if( pParse->nErr==0 && (pTab->aCol[iCol].colFlags & COLFLAG_VIRTUAL)==0 ){
@@ -108693,7 +108712,7 @@ SQLITE_PRIVATE void sqlite3AlterFunctions(void){
108693 static FuncDef aAlterTableFuncs[] = { 108712 static FuncDef aAlterTableFuncs[] = {
108694 INTERNAL_FUNCTION(sqlite_rename_column, 9, renameColumnFunc), 108713 INTERNAL_FUNCTION(sqlite_rename_column, 9, renameColumnFunc),
108695 INTERNAL_FUNCTION(sqlite_rename_table, 7, renameTableFunc), 108714 INTERNAL_FUNCTION(sqlite_rename_table, 7, renameTableFunc),
108696 INTERNAL_FUNCTION(sqlite_rename_test, 6, renameTableTest), 108715 INTERNAL_FUNCTION(sqlite_rename_test, 7, renameTableTest),
108697 INTERNAL_FUNCTION(sqlite_drop_column, 3, dropColumnFunc), 108716 INTERNAL_FUNCTION(sqlite_drop_column, 3, dropColumnFunc),
108698 }; 108717 };
108699 sqlite3InsertBuiltinFuncs(aAlterTableFuncs, ArraySize(aAlterTableFuncs)); 108718 sqlite3InsertBuiltinFuncs(aAlterTableFuncs, ArraySize(aAlterTableFuncs));
@@ -135118,6 +135137,7 @@ static int flattenSubquery(
135118 if( (p->selFlags & SF_Recursive) ) return 0; 135137 if( (p->selFlags & SF_Recursive) ) return 0;
135119 135138
135120 if( pSrc->nSrc>1 ){ 135139 if( pSrc->nSrc>1 ){
135140 if( pParse->nSelect>500 ) return 0;
135121 aCsrMap = sqlite3DbMallocZero(db, pParse->nTab*sizeof(int)); 135141 aCsrMap = sqlite3DbMallocZero(db, pParse->nTab*sizeof(int));
135122 } 135142 }
135123 } 135143 }
@@ -135194,6 +135214,7 @@ static int flattenSubquery(
135194 if( pNew==0 ){ 135214 if( pNew==0 ){
135195 p->pPrior = pPrior; 135215 p->pPrior = pPrior;
135196 }else{ 135216 }else{
135217 pNew->selId = ++pParse->nSelect;
135197 if( aCsrMap && db->mallocFailed==0 ){ 135218 if( aCsrMap && db->mallocFailed==0 ){
135198 renumberCursors(pParse, pNew, iFrom, aCsrMap); 135219 renumberCursors(pParse, pNew, iFrom, aCsrMap);
135199 } 135220 }
@@ -229192,7 +229213,7 @@ static void fts5SourceIdFunc(
229192){ 229213){
229193 assert( nArg==0 ); 229214 assert( nArg==0 );
229194 UNUSED_PARAM2(nArg, apUnused); 229215 UNUSED_PARAM2(nArg, apUnused);
229195 sqlite3_result_text(pCtx, "fts5: 2021-03-12 15:10:09 acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b", -1, SQLITE_TRANSIENT); 229216 sqlite3_result_text(pCtx, "fts5: 2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827", -1, SQLITE_TRANSIENT);
229196} 229217}
229197 229218
229198/* 229219/*
@@ -234118,9 +234139,9 @@ SQLITE_API int sqlite3_stmt_init(
234118#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ 234139#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */
234119 234140
234120/************** End of stmt.c ************************************************/ 234141/************** End of stmt.c ************************************************/
234121#if __LINE__!=234121 234142#if __LINE__!=234142
234122#undef SQLITE_SOURCE_ID 234143#undef SQLITE_SOURCE_ID
234123#define SQLITE_SOURCE_ID "2021-03-12 15:10:09 acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115alt2" 234144#define SQLITE_SOURCE_ID "2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50calt2"
234124#endif 234145#endif
234125/* Return the source-id for this library */ 234146/* Return the source-id for this library */
234126SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } 234147SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }