您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ sqlite3SetString函数代码示例

51自学网 2021-06-03 08:14:29
  C++
这篇教程C++ sqlite3SetString函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中sqlite3SetString函数的典型用法代码示例。如果您正苦于以下问题:C++ sqlite3SetString函数的具体用法?C++ sqlite3SetString怎么用?C++ sqlite3SetString使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了sqlite3SetString函数的23个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: os2FullPathname

/*** Turn a relative pathname into a full pathname.  Write the full** pathname into zFull[].  zFull[] will be at least pVfs->mxPathname** bytes in size.*/static int os2FullPathname(  sqlite3_vfs *pVfs,          /* Pointer to vfs object */  const char *zRelative,      /* Possibly relative input path */  int nFull,                  /* Size of output buffer in bytes */  char *zFull                 /* Output buffer */){  if( strchr(zRelative, ':') ){    sqlite3SetString( &zFull, zRelative, (char*)0 );  }else{    ULONG ulDriveNum = 0;    ULONG ulDriveMap = 0;    ULONG cbzBufLen = SQLITE_TEMPNAME_SIZE;    char zDrive[2];    char *zBuff = (char*)malloc( cbzBufLen );    if( zBuff == 0 ){      return SQLITE_NOMEM;    }    DosQueryCurrentDisk( &ulDriveNum, &ulDriveMap );    if( DosQueryCurrentDir( ulDriveNum, (PBYTE)zBuff, &cbzBufLen ) == NO_ERROR ){      sprintf( zDrive, "%c", (char)('A' + ulDriveNum - 1) );      sqlite3SetString( &zFull, zDrive, "://", zBuff,                        "//", zRelative, (char*)0 );    }    free( zBuff );  }  return SQLITE_OK;}
开发者ID:soubok,项目名称:libset,代码行数:32,


示例2: sqlite3SetString

/*** Turn a relative pathname into a full pathname.  Return a pointer** to the full pathname stored in space obtained from sqliteMalloc().** The calling function is responsible for freeing this space once it** is no longer needed.*/char *sqlite3OsFullPathname(const char *zRelative){  char *zFull = 0;  if( zRelative[0]=='/' ){    sqlite3SetString(&zFull, zRelative, (char*)0);  }else{    char zBuf[5000];    sqlite3SetString(&zFull, getcwd(zBuf, sizeof(zBuf)), "/", zRelative,                    (char*)0);  }  return zFull;}
开发者ID:huangyt,项目名称:foundations.github.com,代码行数:17,


示例3: execSql

/*** Execute zSql on database db.**** If zSql returns rows, then each row will have exactly one** column.  (This will only happen if zSql begins with "SELECT".)** Take each row of result and call execSql() again recursively.**** The execSqlF() routine does the same thing, except it accepts** a format string as its third argument*/static int execSql(sqlite3 *db, char **pzErrMsg, const char *zSql){  sqlite3_stmt *pStmt;  int rc;  /* printf("SQL: [%s]/n", zSql); fflush(stdout); */  rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);  if( rc!=SQLITE_OK ) return rc;  while( SQLITE_ROW==(rc = sqlite3_step(pStmt)) ){    const char *zSubSql = (const char*)sqlite3_column_text(pStmt,0);    assert( sqlite3_strnicmp(zSql,"SELECT",6)==0 );    /* The secondary SQL must be one of CREATE TABLE, CREATE INDEX,    ** or INSERT.  Historically there have been attacks that first    ** corrupt the sqlite_master.sql field with other kinds of statements    ** then run VACUUM to get those statements to execute at inappropriate    ** times. */    if( zSubSql     && (strncmp(zSubSql,"CRE",3)==0 || strncmp(zSubSql,"INS",3)==0)    ){      rc = execSql(db, pzErrMsg, zSubSql);      if( rc!=SQLITE_OK ) break;    }  }  assert( rc!=SQLITE_ROW );  if( rc==SQLITE_DONE ) rc = SQLITE_OK;  if( rc ){    sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db));  }  (void)sqlite3_finalize(pStmt);  return rc;}
开发者ID:SCALE-GmbH,项目名称:sqlcipher,代码行数:40,


示例4: corruptSchema

/*** Fill the InitData structure with an error message that indicates** that the database is corrupt.*/static void corruptSchema(InitData *pData, const char *zExtra){  if( !sqlite3MallocFailed() ){    sqlite3SetString(pData->pzErrMsg, "malformed database schema",       zExtra!=0 && zExtra[0]!=0 ? " - " : (char*)0, zExtra, (char*)0);  }  pData->rc = SQLITE_CORRUPT;}
开发者ID:9iky6,项目名称:amxmodx,代码行数:11,


示例5: sqlcipher_finalize

/*** Finalize a prepared statement.  If there was an error, store the** text of the error message in *pzErrMsg.  Return the result code.** ** Based on vacuumFinalize from vacuum.c*/static int sqlcipher_finalize(sqlite3 *db, sqlite3_stmt *pStmt, char **pzErrMsg){  int rc;  rc = sqlite3VdbeFinalize((Vdbe*)pStmt);  if( rc ){    sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db));  }  return rc;}
开发者ID:CoderXL,项目名称:sqlcipher,代码行数:14,


示例6: btreeVacuum

int btreeVacuum(Btree *p, char **pzErrMsg) {	sqlite3 *db;	int rc;	u_int32_t truncatedPages;	db = p->db;	/* Return directly if vacuum is on progress */	if (p->inVacuum)		return SQLITE_OK;	/*	 * We're going to do updates in this transaction at the Berkeley DB	 * Core level (i.e., call DB->compact), but we start it read-only at	 * the SQL level to avoid overhead from checkpoint-on-commit.	 */	if ((rc = sqlite3BtreeBeginTrans(p, 0)) != SQLITE_OK) {		sqlite3SetString(pzErrMsg, db,		    "failed to begin a vacuum transaction");		return rc;	}	p->inVacuum = 1;	truncatedPages = 0;	/* Go through all tables */	do {		rc = btreeIncrVacuum(p, &truncatedPages);	} while (rc == SQLITE_OK);	p->needVacuum = 0;	if (rc != SQLITE_DONE) {		sqlite3SetString(pzErrMsg, db,		    "error during vacuum, rolled back");		(void)sqlite3BtreeRollback(p);	} else if ((rc = sqlite3BtreeCommit(p)) != SQLITE_OK) {		sqlite3SetString(pzErrMsg, db,		    "failed to commit the vacuum transaction");	}	p->inVacuum = 0;	return rc;}
开发者ID:galaxyeye,项目名称:bdb,代码行数:44,


示例7: corruptSchema

static void corruptSchema(    InitData *pData,    const char *zObj,    const char *zExtra) {    sqlite3 *db = pData->db;    if( !db->mallocFailed && (db->flags & SQLITE_RecoveryMode)==0 ) {        if( zObj==0 ) zObj = "?";        sqlite3SetString(pData->pzErrMsg, db,                         "malformed database schema (%s)", zObj);        if( zExtra ) {            *pData->pzErrMsg = sqlite3MAppendf(db, *pData->pzErrMsg,                                               "%s - %s", *pData->pzErrMsg, zExtra);        }    }    pData->rc = db->mallocFailed ? SQLITE_NOMEM : SQLITE_CORRUPT_BKPT;}
开发者ID:qtekfun,项目名称:htcDesire820Kernel,代码行数:17,


示例8: corruptSchema

/*** Fill the InitData structure with an error message that indicates** that the database is corrupt.*/static void corruptSchema(    InitData *pData,     /* Initialization context */    const char *zObj,    /* Object being parsed at the point of error */    const char *zExtra   /* Error information */) {    sqlite3 *db = pData->db;    if( !db->mallocFailed && (db->flags & SQLITE_RecoveryMode)==0 ) {        if( zObj==0 ) zObj = "?";        sqlite3SetString(pData->pzErrMsg, db,                         "malformed database schema (%s)", zObj);        if( zExtra ) {            *pData->pzErrMsg = sqlite3MAppendf(db, *pData->pzErrMsg,                                               "%s - %s", *pData->pzErrMsg, zExtra);        }    }    pData->rc = db->mallocFailed ? SQLITE_NOMEM : SQLITE_CORRUPT_BKPT;}
开发者ID:JennYung,项目名称:sqlcipher,代码行数:21,


示例9: sqlite3RunVacuum

/*** This routine implements the OP_Vacuum opcode of the VDBE.*/int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db) {	int rc;	Btree *p;	p = db->aDb[0].pBt;	rc = SQLITE_OK;	if (p->pBt->dbStorage != DB_STORE_NAMED)		return SQLITE_OK;	if ((rc = sqlite3Init(db, pzErrMsg)) != SQLITE_OK)		return rc;	if (!db->autoCommit) {		sqlite3SetString(pzErrMsg, db,		    "cannot VACUUM from within a transaction");		return SQLITE_ERROR;	}	assert(sqlite3_mutex_held(db->mutex));	rc = btreeVacuum(p, pzErrMsg);	return rc;}
开发者ID:galaxyeye,项目名称:bdb,代码行数:27,


示例10: sqlite3RunVacuum

/*** This routine implements the OP_Vacuum opcode of the VDBE.*/int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){  int rc = SQLITE_OK;     /* Return code from service routines */  Btree *pMain;           /* The database being vacuumed */  Pager *pMainPager;      /* Pager for database being vacuumed */  Btree *pTemp;           /* The temporary database we vacuum into */  char *zSql = 0;         /* SQL statements */  int saved_flags;        /* Saved value of the db->flags */  int saved_nChange;      /* Saved value of db->nChange */  int saved_nTotalChange; /* Saved value of db->nTotalChange */  Db *pDb = 0;            /* Database to detach at end of vacuum */  int isMemDb;            /* True is vacuuming a :memory: database */  int nRes;  /* Save the current value of the write-schema flag before setting it. */  saved_flags = db->flags;  saved_nChange = db->nChange;  saved_nTotalChange = db->nTotalChange;  db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks;  if( !db->autoCommit ){    sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction");    rc = SQLITE_ERROR;    goto end_of_vacuum;  }  pMain = db->aDb[0].pBt;  pMainPager = sqlite3BtreePager(pMain);  isMemDb = sqlite3PagerFile(pMainPager)->pMethods==0;  /* Attach the temporary database as 'vacuum_db'. The synchronous pragma  ** can be set to 'off' for this file, as it is not recovered if a crash  ** occurs anyway. The integrity of the database is maintained by a  ** (possibly synchronous) transaction opened on the main database before  ** sqlite3BtreeCopyFile() is called.  **  ** An optimisation would be to use a non-journaled pager.  ** (Later:) I tried setting "PRAGMA vacuum_db.journal_mode=OFF" but  ** that actually made the VACUUM run slower.  Very little journalling  ** actually occurs when doing a vacuum since the vacuum_db is initially  ** empty.  Only the journal header is written.  Apparently it takes more  ** time to parse and run the PRAGMA to turn journalling off than it does  ** to write the journal header file.  */  zSql = "ATTACH '' AS vacuum_db;";  rc = execSql(db, zSql);  if( rc!=SQLITE_OK ) goto end_of_vacuum;  pDb = &db->aDb[db->nDb-1];  assert( strcmp(db->aDb[db->nDb-1].zName,"vacuum_db")==0 );  pTemp = db->aDb[db->nDb-1].pBt;  nRes = sqlite3BtreeGetReserve(pMain);  /* A VACUUM cannot change the pagesize of an encrypted database. */#ifdef SQLITE_HAS_CODEC  if( db->nextPagesize ){    extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*);    int nKey;    char *zKey;    sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey);    if( nKey ) db->nextPagesize = 0;  }#endif  if( sqlite3BtreeSetPageSize(pTemp, sqlite3BtreeGetPageSize(pMain), nRes)   || (!isMemDb && sqlite3BtreeSetPageSize(pTemp, db->nextPagesize, nRes))   || db->mallocFailed   ){    rc = SQLITE_NOMEM;    goto end_of_vacuum;  }  rc = execSql(db, "PRAGMA vacuum_db.synchronous=OFF");  if( rc!=SQLITE_OK ){    goto end_of_vacuum;  }#ifndef SQLITE_OMIT_AUTOVACUUM  sqlite3BtreeSetAutoVacuum(pTemp, db->nextAutovac>=0 ? db->nextAutovac :                                           sqlite3BtreeGetAutoVacuum(pMain));#endif  /* Begin a transaction */  rc = execSql(db, "BEGIN EXCLUSIVE;");  if( rc!=SQLITE_OK ) goto end_of_vacuum;  /* Query the schema of the main database. Create a mirror schema  ** in the temporary database.  */  rc = execExecSql(db,       "SELECT 'CREATE TABLE vacuum_db.' || substr(sql,14) "      "  FROM sqlite_master WHERE type='table' AND name!='sqlite_sequence'"      "   AND rootpage>0"  );  if( rc!=SQLITE_OK ) goto end_of_vacuum;  rc = execExecSql(db,       "SELECT 'CREATE INDEX vacuum_db.' || substr(sql,14)"      "  FROM sqlite_master WHERE sql LIKE 'CREATE INDEX %' ");  if( rc!=SQLITE_OK ) goto end_of_vacuum;  rc = execExecSql(db, //.........这里部分代码省略.........
开发者ID:kfengbest,项目名称:GenericDB,代码行数:101,


示例11: sqlite3RunParser1

int sqlite3RunParser1(Parse *pParse, const char *zSql, int sqlLen, char **pzErrMsg) {  int nErr = 0;  int i;  void *pEngine;  int tokenType;  int lastTokenParsed = -1; // sqlite3 *db = pParse->db;  extern void *sqlite3ParserAlloc(void*(*)(int));  extern void sqlite3ParserFree(void*, void(*)(void*));  extern int sqlite3Parser(void*, int, Token, Parse*);  //db->flags &= ~SQLITE_Interrupt;  pParse->flags &= ~SQLITE_Interrupt;  pParse->rc = SQLITE_OK;  i = 0;  pEngine = sqlite3ParserAlloc((void*(*)(int))sqlite3MallocX);  if( pEngine==0 ){    return SQLITE_NOMEM;  }  assert( pParse->sLastToken.dyn==0 );  assert( pParse->pNewTable==0 );  assert( pParse->pNewTrigger==0 );  assert( pParse->nVar==0 );  assert( pParse->nVarExpr==0 );  assert( pParse->nVarExprAlloc==0 );  assert( pParse->apVarExpr==0 );  pParse->zTail = pParse->zSql = zSql;  while( !sqlite3MallocFailed() && /*zSql[i]!=0*/ i < sqlLen ){    assert( i>=0 );    pParse->sLastToken.z = (u8*)&zSql[i];    assert( pParse->sLastToken.dyn==0 );    pParse->sLastToken.n = getToken((unsigned char*)&zSql[i],&tokenType);    i += pParse->sLastToken.n;        if (tokenType != TK_SPACE) {        TokenItem tokenItem;        tokenItem.token = pParse->sLastToken;        tokenItem.tokenType = tokenType;        sqlite3TokenArrayAppend(&pParse->tokens, &tokenItem);    }    switch( tokenType ){      case TK_SPACE:      case TK_COMMENT: {        //if( (db->flags & SQLITE_Interrupt)!=0 ){        if( (pParse->flags & SQLITE_Interrupt)!=0 ){          pParse->rc = SQLITE_INTERRUPT;          sqlite3SetString(pzErrMsg, "interrupt", (char*)0);          goto abort_parse;        }        break;      }      case TK_ILLEGAL: {        if( pzErrMsg ){          sqliteFree(*pzErrMsg);          *pzErrMsg = sqlite3MPrintf("unrecognized token: /"%T/"",                          &pParse->sLastToken);        }        nErr++;        goto abort_parse;      }      case TK_SEMI: {        pParse->zTail = &zSql[i];        /* Fall thru into the default case */      }      default: {        sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse);        lastTokenParsed = tokenType;        if( pParse->rc!=SQLITE_OK ){          goto abort_parse;        }        break;      }    }  }abort_parse:    while(!sqlite3MallocFailed() && i < sqlLen) {        pParse->sLastToken.z = (u8*)&zSql[i];        assert( pParse->sLastToken.dyn==0 );        pParse->sLastToken.n = getToken((unsigned char*)&zSql[i],&tokenType);        i += pParse->sLastToken.n;        if (tokenType != TK_SPACE) {            TokenItem tokenItem;            tokenItem.token = pParse->sLastToken;            tokenItem.tokenType = tokenType;            sqlite3TokenArrayAppend(&pParse->tokens, &tokenItem);        }    }    if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){    if( lastTokenParsed!=TK_SEMI ){      sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse);      pParse->zTail = &zSql[i];    }    sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);  }  sqlite3ParserFree(pEngine, sqlite3FreeX);  if( sqlite3MallocFailed() ){    pParse->rc = SQLITE_NOMEM;//.........这里部分代码省略.........
开发者ID:Matrix0xCC,项目名称:lemon,代码行数:101,


示例12: sqlite3RunParser

/*** Run the parser on the given SQL string.  The parser structure is** passed in.  An SQLITE_ status code is returned.  If an error occurs** and pzErrMsg!=NULL then an error message might be written into ** memory obtained from malloc() and *pzErrMsg made to point to that** error message.  Or maybe not.*/int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){  int nErr = 0;  int i;  void *pEngine;  int tokenType;  int lastTokenParsed = -1;  sqlite3 *db = pParse->db;  extern void *sqlite3ParserAlloc(void*(*)(int));  extern void sqlite3ParserFree(void*, void(*)(void*));  extern int sqlite3Parser(void*, int, Token, Parse*);  db->flags &= ~SQLITE_Interrupt;  pParse->rc = SQLITE_OK;  i = 0;  pEngine = sqlite3ParserAlloc((void*(*)(int))sqlite3MallocX);  if( pEngine==0 ){    sqlite3SetString(pzErrMsg, "out of memory", (char*)0);    return SQLITE_NOMEM;  }  assert( pParse->sLastToken.dyn==0 );  assert( pParse->pNewTable==0 );  assert( pParse->pNewTrigger==0 );  assert( pParse->nVar==0 );  assert( pParse->nVarExpr==0 );  assert( pParse->nVarExprAlloc==0 );  assert( pParse->apVarExpr==0 );  pParse->zTail = pParse->zSql = zSql;  while( sqlite3_malloc_failed==0 && zSql[i]!=0 ){    assert( i>=0 );    pParse->sLastToken.z = &zSql[i];    assert( pParse->sLastToken.dyn==0 );    pParse->sLastToken.n = getToken((unsigned char*)&zSql[i],&tokenType);    i += pParse->sLastToken.n;    switch( tokenType ){      case TK_SPACE:      case TK_COMMENT: {        if( (db->flags & SQLITE_Interrupt)!=0 ){          pParse->rc = SQLITE_INTERRUPT;          sqlite3SetString(pzErrMsg, "interrupt", (char*)0);          goto abort_parse;        }        break;      }      case TK_ILLEGAL: {        if( pzErrMsg ){          sqliteFree(*pzErrMsg);          *pzErrMsg = sqlite3MPrintf("unrecognized token: /"%T/"",                          &pParse->sLastToken);        }        nErr++;        goto abort_parse;      }      case TK_SEMI: {        pParse->zTail = &zSql[i];        /* Fall thru into the default case */      }      default: {        sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse);        lastTokenParsed = tokenType;        if( pParse->rc!=SQLITE_OK ){          goto abort_parse;        }        break;      }    }  }abort_parse:  if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){    if( lastTokenParsed!=TK_SEMI ){      sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse);      pParse->zTail = &zSql[i];    }    sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);  }  sqlite3ParserFree(pEngine, sqlite3FreeX);  if( sqlite3_malloc_failed ){    pParse->rc = SQLITE_NOMEM;  }  if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){    sqlite3SetString(&pParse->zErrMsg, sqlite3ErrStr(pParse->rc),                    (char*)0);  }  if( pParse->zErrMsg ){    if( pzErrMsg && *pzErrMsg==0 ){      *pzErrMsg = pParse->zErrMsg;    }else{      sqliteFree(pParse->zErrMsg);    }    pParse->zErrMsg = 0;    if( !nErr ) nErr++;  }  if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){    sqlite3VdbeDelete(pParse->pVdbe);//.........这里部分代码省略.........
开发者ID:DSD-TELCEL-ESCOM,项目名称:INE-Votation-Distributed-System,代码行数:101,


示例13: sqlite3RunVacuum

/*** This routine implements the OP_Vacuum opcode of the VDBE.*/int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){  int rc = SQLITE_OK;     /* Return code from service routines */#if !defined(SQLITE_OMIT_VACUUM) || SQLITE_OMIT_VACUUM  const char *zFilename;  /* full pathname of the database file */  int nFilename;          /* number of characters  in zFilename[] */  char *zTemp = 0;        /* a temporary file in same directory as zFilename */  int i;                  /* Loop counter */  Btree *pMain;           /* The database being vacuumed */  Btree *pTemp;  char *zSql = 0;  if( !db->autoCommit ){    sqlite3SetString(pzErrMsg, "cannot VACUUM from within a transaction",        (char*)0);    rc = SQLITE_ERROR;    goto end_of_vacuum;  }  /* Get the full pathname of the database file and create a  ** temporary filename in the same directory as the original file.  */  pMain = db->aDb[0].pBt;  zFilename = sqlite3BtreeGetFilename(pMain);  assert( zFilename );  if( zFilename[0]=='/0' ){    /* The in-memory database. Do nothing. Return directly to avoid causing    ** an error trying to DETACH the vacuum_db (which never got attached)    ** in the exit-handler.    */    return SQLITE_OK;  }  nFilename = strlen(zFilename);  zTemp = sqliteMalloc( nFilename+100 );  if( zTemp==0 ){    rc = SQLITE_NOMEM;    goto end_of_vacuum;  }  strcpy(zTemp, zFilename);  i = 0;  do {    zTemp[nFilename] = '-';    randomName((unsigned char*)&zTemp[nFilename+1]);  } while( i<10 && sqlite3OsFileExists(zTemp) );  /* Attach the temporary database as 'vacuum_db'. The synchronous pragma  ** can be set to 'off' for this file, as it is not recovered if a crash  ** occurs anyway. The integrity of the database is maintained by a  ** (possibly synchronous) transaction opened on the main database before  ** sqlite3BtreeCopyFile() is called.  **  ** An optimisation would be to use a non-journaled pager.  */  zSql = sqlite3MPrintf("ATTACH '%q' AS vacuum_db;", zTemp);  if( !zSql ){    rc = SQLITE_NOMEM;    goto end_of_vacuum;  }  rc = execSql(db, zSql);  sqliteFree(zSql);  zSql = 0;  if( rc!=SQLITE_OK ) goto end_of_vacuum;  assert( strcmp(db->aDb[db->nDb-1].zName,"vacuum_db")==0 );  pTemp = db->aDb[db->nDb-1].pBt;  sqlite3BtreeSetPageSize(pTemp, sqlite3BtreeGetPageSize(pMain),     sqlite3BtreeGetReserve(pMain));  assert( sqlite3BtreeGetPageSize(pTemp)==sqlite3BtreeGetPageSize(pMain) );  execSql(db, "PRAGMA vacuum_db.synchronous=OFF");  /* Begin a transaction */  rc = execSql(db, "BEGIN;");  if( rc!=SQLITE_OK ) goto end_of_vacuum;  /* Query the schema of the main database. Create a mirror schema  ** in the temporary database.  */  rc = execExecSql(db,       "SELECT 'CREATE TABLE vacuum_db.' || substr(sql,14,100000000) "      "  FROM sqlite_master WHERE type='table' "      "UNION ALL "      "SELECT 'CREATE INDEX vacuum_db.' || substr(sql,14,100000000) "      "  FROM sqlite_master WHERE sql LIKE 'CREATE INDEX %' "      "UNION ALL "      "SELECT 'CREATE UNIQUE INDEX vacuum_db.' || substr(sql,21,100000000) "      "  FROM sqlite_master WHERE sql LIKE 'CREATE UNIQUE INDEX %'"      "UNION ALL "      "SELECT 'CREATE VIEW vacuum_db.' || substr(sql,13,100000000) "      "  FROM sqlite_master WHERE type='view'"  );  if( rc!=SQLITE_OK ) goto end_of_vacuum;  /* Loop through the tables in the main database. For each, do  ** an "INSERT INTO vacuum_db.xxx SELECT * FROM xxx;" to copy  ** the contents to the temporary database.  */  rc = execExecSql(db,       "SELECT 'INSERT INTO vacuum_db.' || quote(name) "      "|| ' SELECT * FROM ' || quote(name) || ';'"//.........这里部分代码省略.........
开发者ID:kanbang,项目名称:Colt,代码行数:101,


示例14: sqlite3_table_column_metadata

int sqlite3_table_column_metadata(  sqlite3 *db,                /* Connection handle */  const char *zDbName,        /* Database name or NULL */  const char *zTableName,     /* Table name */  const char *zColumnName,    /* Column name */  char const **pzDataType,    /* OUTPUT: Declared data type */  char const **pzCollSeq,     /* OUTPUT: Collation sequence name */  int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */  int *pPrimaryKey,           /* OUTPUT: True if column part of PK */  int *pAutoinc               /* OUTPUT: True if colums is auto-increment */){  int rc;  char *zErrMsg = 0;  Table *pTab = 0;  Column *pCol = 0;  int iCol;  char const *zDataType = 0;  char const *zCollSeq = 0;  int notnull = 0;  int primarykey = 0;  int autoinc = 0;  /* Ensure the database schema has been loaded */  if( sqlite3SafetyOn(db) ){    return SQLITE_MISUSE;  }  rc = sqlite3Init(db, &zErrMsg);  if( SQLITE_OK!=rc ){    goto error_out;  }  /* Locate the table in question */  pTab = sqlite3FindTable(db, zTableName, zDbName);  if( !pTab || pTab->pSelect ){    pTab = 0;    goto error_out;  }  /* Find the column for which info is requested */  if( sqlite3IsRowid(zColumnName) ){    iCol = pTab->iPKey;    if( iCol>=0 ){      pCol = &pTab->aCol[iCol];    }  }else{    for(iCol=0; iCol<pTab->nCol; iCol++){      pCol = &pTab->aCol[iCol];      if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){        break;      }    }    if( iCol==pTab->nCol ){      pTab = 0;      goto error_out;    }  }  /* The following block stores the meta information that will be returned  ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey  ** and autoinc. At this point there are two possibilities:  **   **     1. The specified column name was rowid", "oid" or "_rowid_"   **        and there is no explicitly declared IPK column.   **  **     2. The table is not a view and the column name identified an   **        explicitly declared column. Copy meta information from *pCol.  */   if( pCol ){    zDataType = pCol->zType;    zCollSeq = pCol->zColl;    notnull = (pCol->notNull?1:0);    primarykey  = (pCol->isPrimKey?1:0);    autoinc = ((pTab->iPKey==iCol && pTab->autoInc)?1:0);  }else{    zDataType = "INTEGER";    primarykey = 1;  }  if( !zCollSeq ){    zCollSeq = "BINARY";  }error_out:  if( sqlite3SafetyOff(db) ){    rc = SQLITE_MISUSE;  }  /* Whether the function call succeeded or failed, set the output parameters  ** to whatever their local counterparts contain. If an error did occur,  ** this has the effect of zeroing all output parameters.  */  if( pzDataType ) *pzDataType = zDataType;  if( pzCollSeq ) *pzCollSeq = zCollSeq;  if( pNotNull ) *pNotNull = notnull;  if( pPrimaryKey ) *pPrimaryKey = primarykey;  if( pAutoinc ) *pAutoinc = autoinc;  if( SQLITE_OK==rc && !pTab ){    sqlite3SetString(&zErrMsg, "no such table column: ", zTableName, ".",         zColumnName, 0);//.........这里部分代码省略.........
开发者ID:BackupTheBerlios,项目名称:sqlitepp-svn,代码行数:101,


示例15: sqlite3VdbeList

/*** Give a listing of the program in the virtual machine.**** The interface is the same as sqlite3VdbeExec().  But instead of** running the code, it invokes the callback once for each instruction.** This feature is used to implement "EXPLAIN".*/int sqlite3VdbeList(  Vdbe *p                   /* The VDBE */){  sqlite3 *db = p->db;  int i;  int rc = SQLITE_OK;  assert( p->explain );  /* Even though this opcode does not put dynamic strings onto the  ** the stack, they may become dynamic if the user calls  ** sqlite3_column_text16(), causing a translation to UTF-16 encoding.  */  if( p->pTos==&p->aStack[4] ){    releaseMemArray(p->aStack, 5);  }  p->resOnStack = 0;  i = p->pc++;  if( i>=p->nOp ){    p->rc = SQLITE_OK;    rc = SQLITE_DONE;  }else if( db->flags & SQLITE_Interrupt ){    db->flags &= ~SQLITE_Interrupt;    if( db->magic!=SQLITE_MAGIC_BUSY ){      p->rc = SQLITE_MISUSE;    }else{      p->rc = SQLITE_INTERRUPT;    }    rc = SQLITE_ERROR;    sqlite3SetString(&p->zErrMsg, sqlite3ErrStr(p->rc), (char*)0);  }else{    Op *pOp = &p->aOp[i];    Mem *pMem = p->aStack;    pMem->flags = MEM_Int;    pMem->type = SQLITE_INTEGER;    pMem->i = i;                                /* Program counter */    pMem++;    pMem->flags = MEM_Static|MEM_Str|MEM_Term;    pMem->z = sqlite3OpcodeNames[pOp->opcode];  /* Opcode */    pMem->n = strlen(pMem->z);    pMem->type = SQLITE_TEXT;    pMem->enc = SQLITE_UTF8;    pMem++;    pMem->flags = MEM_Int;    pMem->i = pOp->p1;                          /* P1 */    pMem->type = SQLITE_INTEGER;    pMem++;    pMem->flags = MEM_Int;    pMem->i = pOp->p2;                          /* P2 */    pMem->type = SQLITE_INTEGER;    pMem++;    pMem->flags = MEM_Short|MEM_Str|MEM_Term;   /* P3 */    pMem->z = displayP3(pOp, pMem->zShort, sizeof(pMem->zShort));    pMem->type = SQLITE_TEXT;    pMem->enc = SQLITE_UTF8;    p->nResColumn = 5;    p->pTos = pMem;    p->rc = SQLITE_OK;    p->resOnStack = 1;    rc = SQLITE_ROW;  }  return rc;}
开发者ID:Shad000w,项目名称:NWNX2-windows,代码行数:76,


示例16: sqlite3RunParser

/*** Run the parser on the given SQL string.  The parser structure is** passed in.  An SQLITE_ status code is returned.  If an error occurs** then an and attempt is made to write an error message into ** memory obtained from sqlite3_malloc() and to make *pzErrMsg point to that** error message.*/int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){  int nErr = 0;                   /* Number of errors encountered */  int i;                          /* Loop counter */  void *pEngine;                  /* The LEMON-generated LALR(1) parser */  int tokenType;                  /* type of the next token */  int lastTokenParsed = -1;       /* type of the previous token */  u8 enableLookaside;             /* Saved value of db->lookaside.bEnabled */  sqlite3 *db = pParse->db;       /* The database connection */  int mxSqlLen;                   /* Max length of an SQL string */  mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];  if( db->activeVdbeCnt==0 ){    db->u1.isInterrupted = 0;  }  pParse->rc = SQLITE_OK;  pParse->zTail = pParse->zSql = zSql;  i = 0;  assert( pzErrMsg!=0 );  pEngine = sqlite3ParserAlloc((void*(*)(size_t))sqlite3Malloc);  if( pEngine==0 ){    db->mallocFailed = 1;    return SQLITE_NOMEM;  }  assert( pParse->sLastToken.dyn==0 );  assert( pParse->pNewTable==0 );  assert( pParse->pNewTrigger==0 );  assert( pParse->nVar==0 );  assert( pParse->nVarExpr==0 );  assert( pParse->nVarExprAlloc==0 );  assert( pParse->apVarExpr==0 );  enableLookaside = db->lookaside.bEnabled;  if( db->lookaside.pStart ) db->lookaside.bEnabled = 1;  pParse->sLastToken.quoted = 1;  while( !db->mallocFailed && zSql[i]!=0 ){    assert( i>=0 );    pParse->sLastToken.z = (u8*)&zSql[i];    assert( pParse->sLastToken.dyn==0 );    assert( pParse->sLastToken.quoted );    pParse->sLastToken.n = sqlite3GetToken((unsigned char*)&zSql[i],&tokenType);    i += pParse->sLastToken.n;    if( i>mxSqlLen ){      pParse->rc = SQLITE_TOOBIG;      break;    }    switch( tokenType ){      case TK_SPACE: {        if( db->u1.isInterrupted ){          pParse->rc = SQLITE_INTERRUPT;          sqlite3SetString(pzErrMsg, db, "interrupt");          goto abort_parse;        }        break;      }      case TK_ILLEGAL: {        sqlite3DbFree(db, *pzErrMsg);        *pzErrMsg = sqlite3MPrintf(db, "unrecognized token: /"%T/"",                        &pParse->sLastToken);        nErr++;        goto abort_parse;      }      case TK_SEMI: {        pParse->zTail = &zSql[i];        /* Fall thru into the default case */      }      default: {        sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse);        lastTokenParsed = tokenType;        if( pParse->rc!=SQLITE_OK ){          goto abort_parse;        }        break;      }    }  }abort_parse:  if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){    if( lastTokenParsed!=TK_SEMI ){      sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse);      pParse->zTail = &zSql[i];    }    sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);  }#ifdef YYTRACKMAXSTACKDEPTH  sqlite3StatusSet(SQLITE_STATUS_PARSER_STACK,      sqlite3ParserStackPeak(pEngine)  );#endif /* YYDEBUG */  sqlite3ParserFree(pEngine, sqlite3_free);  db->lookaside.bEnabled = enableLookaside;  if( db->mallocFailed ){    pParse->rc = SQLITE_NOMEM;  }//.........这里部分代码省略.........
开发者ID:scottmills,项目名称:sqlcipher,代码行数:101,


示例17: sqlite3RunVacuumForRekey

/* CHANGE 1 of 3: Add function parameter nRes */SQLITE_PRIVATE int sqlite3RunVacuumForRekey(char **pzErrMsg, sqlite3 *db, int iDb, int nRes){  int rc = SQLITE_OK;     /* Return code from service routines */  Btree *pMain;           /* The database being vacuumed */  Btree *pTemp;           /* The temporary database we vacuum into */  u16 saved_mDbFlags;     /* Saved value of db->mDbFlags */  u32 saved_flags;        /* Saved value of db->flags */  int saved_nChange;      /* Saved value of db->nChange */  int saved_nTotalChange; /* Saved value of db->nTotalChange */  u8 saved_mTrace;        /* Saved trace settings */  Db *pDb = 0;            /* Database to detach at end of vacuum */  int isMemDb;            /* True if vacuuming a :memory: database */  /* CHANGE 2 of 3: Do not define local variable nRes */  /*int nRes;*/               /* Bytes of reserved space at the end of each page */  int nDb;                /* Number of attached databases */  const char *zDbMain;    /* Schema name of database to vacuum */  if (!db->autoCommit) {    sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction");    return SQLITE_ERROR;  }  if (db->nVdbeActive>1) {    sqlite3SetString(pzErrMsg, db, "cannot VACUUM - SQL statements in progress");    return SQLITE_ERROR;  }  /* Save the current value of the database flags so that it can be  ** restored before returning. Then set the writable-schema flag, and  ** disable CHECK and foreign key constraints.  */  saved_flags = db->flags;  saved_mDbFlags = db->mDbFlags;  saved_nChange = db->nChange;  saved_nTotalChange = db->nTotalChange;  saved_mTrace = db->mTrace;  db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks;  db->mDbFlags |= DBFLAG_PreferBuiltin | DBFLAG_Vacuum;  db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder | SQLITE_CountRows);  db->mTrace = 0;  zDbMain = db->aDb[iDb].zDbSName;  pMain = db->aDb[iDb].pBt;  isMemDb = sqlite3PagerIsMemdb(sqlite3BtreePager(pMain));  /* Attach the temporary database as 'vacuum_db'. The synchronous pragma  ** can be set to 'off' for this file, as it is not recovered if a crash  ** occurs anyway. The integrity of the database is maintained by a  ** (possibly synchronous) transaction opened on the main database before  ** sqlite3BtreeCopyFile() is called.  **  ** An optimisation would be to use a non-journaled pager.  ** (Later:) I tried setting "PRAGMA vacuum_db.journal_mode=OFF" but  ** that actually made the VACUUM run slower.  Very little journalling  ** actually occurs when doing a vacuum since the vacuum_db is initially  ** empty.  Only the journal header is written.  Apparently it takes more  ** time to parse and run the PRAGMA to turn journalling off than it does  ** to write the journal header file.  */  nDb = db->nDb;  rc = execSql(db, pzErrMsg, "ATTACH''AS vacuum_db");  if (rc != SQLITE_OK) goto end_of_vacuum;  assert((db->nDb - 1) == nDb);  pDb = &db->aDb[nDb];  assert(strcmp(pDb->zDbSName, "vacuum_db") == 0);  pTemp = pDb->pBt;  /* The call to execSql() to attach the temp database has left the file  ** locked (as there was more than one active statement when the transaction  ** to read the schema was concluded. Unlock it here so that this doesn't  ** cause problems for the call to BtreeSetPageSize() below.  */  sqlite3BtreeCommit(pTemp);  /* CHANGE 3 of 3: Do not call sqlite3BtreeGetOptimalReserve */  /* nRes = sqlite3BtreeGetOptimalReserve(pMain); */  /* A VACUUM cannot change the pagesize of an encrypted database. */#ifdef SQLITE_HAS_CODEC  if (db->nextPagesize) {    extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*);    int nKey;    char *zKey;    sqlite3CodecGetKey(db, iDb, (void**)&zKey, &nKey);    if (nKey) db->nextPagesize = 0;  }#endif  sqlite3BtreeSetCacheSize(pTemp, db->aDb[iDb].pSchema->cache_size);  sqlite3BtreeSetSpillSize(pTemp, sqlite3BtreeSetSpillSize(pMain, 0));  sqlite3BtreeSetPagerFlags(pTemp, PAGER_SYNCHRONOUS_OFF | PAGER_CACHESPILL);  /* Begin a transaction and take an exclusive lock on the main database  ** file. This is done before the sqlite3BtreeGetPageSize(pMain) call below,  ** to ensure that we do not try to change the page-size on a WAL database.  */  rc = execSql(db, pzErrMsg, "BEGIN");  if (rc != SQLITE_OK) goto end_of_vacuum;  rc = sqlite3BtreeBeginTrans(pMain, 2);  if (rc != SQLITE_OK) goto end_of_vacuum;  /* Do not attempt to change the page size for a WAL database */  if (sqlite3PagerGetJournalMode(sqlite3BtreePager(pMain))//.........这里部分代码省略.........
开发者ID:devbean,项目名称:QtCipherSqlitePlugin,代码行数:101,


示例18: sqlite3InitOne

/*** Attempt to read the database schema and initialize internal** data structures for a single database file.  The index of the** database file is given by iDb.  iDb==0 is used for the main** database.  iDb==1 should never be used.  iDb>=2 is used for** auxiliary databases.  Return one of the SQLITE_ error codes to** indicate success or failure.*/static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){  int rc;  BtCursor *curMain;  int size;  Table *pTab;  Db *pDb;  char const *azArg[4];  int meta[10];  InitData initData;  char const *zMasterSchema;  char const *zMasterName = SCHEMA_TABLE(iDb);  /*  ** The master database table has a structure like this  */  static const char master_schema[] =      "CREATE TABLE sqlite_master(/n"     "  type text,/n"     "  name text,/n"     "  tbl_name text,/n"     "  rootpage integer,/n"     "  sql text/n"     ")"  ;#ifndef SQLITE_OMIT_TEMPDB  static const char temp_master_schema[] =      "CREATE TEMP TABLE sqlite_temp_master(/n"     "  type text,/n"     "  name text,/n"     "  tbl_name text,/n"     "  rootpage integer,/n"     "  sql text/n"     ")"  ;#else  #define temp_master_schema 0#endif  assert( iDb>=0 && iDb<db->nDb );  assert( db->aDb[iDb].pSchema );  /* zMasterSchema and zInitScript are set to point at the master schema  ** and initialisation script appropriate for the database being  ** initialised. zMasterName is the name of the master table.  */  if( !OMIT_TEMPDB && iDb==1 ){    zMasterSchema = temp_master_schema;  }else{    zMasterSchema = master_schema;  }  zMasterName = SCHEMA_TABLE(iDb);  /* Construct the schema tables.  */  sqlite3SafetyOff(db);  azArg[0] = zMasterName;  azArg[1] = "1";  azArg[2] = zMasterSchema;  azArg[3] = 0;  initData.db = db;  initData.iDb = iDb;  initData.pzErrMsg = pzErrMsg;  rc = sqlite3InitCallback(&initData, 3, (char **)azArg, 0);  if( rc ){    sqlite3SafetyOn(db);    return initData.rc;  }  pTab = sqlite3FindTable(db, zMasterName, db->aDb[iDb].zName);  if( pTab ){    pTab->readOnly = 1;  }  sqlite3SafetyOn(db);  /* Create a cursor to hold the database open  */  pDb = &db->aDb[iDb];  if( pDb->pBt==0 ){    if( !OMIT_TEMPDB && iDb==1 ){      DbSetProperty(db, 1, DB_SchemaLoaded);    }    return SQLITE_OK;  }  rc = sqlite3BtreeCursor(pDb->pBt, MASTER_ROOT, 0, 0, 0, &curMain);  if( rc!=SQLITE_OK && rc!=SQLITE_EMPTY ){    sqlite3SetString(pzErrMsg, sqlite3ErrStr(rc), (char*)0);    return rc;  }  /* Get the database meta information.  **  ** Meta values are as follows:  **    meta[0]   Schema cookie.  Changes with each schema change.  **    meta[1]   File format of schema layer.//.........这里部分代码省略.........
开发者ID:9iky6,项目名称:amxmodx,代码行数:101,


示例19: sqlite3InitOne

/*** Attempt to read the database schema and initialize internal** data structures for a single database file.  The index of the** database file is given by iDb.  iDb==0 is used for the main** database.  iDb==1 should never be used.  iDb>=2 is used for** auxiliary databases.  Return one of the SQLITE_ error codes to** indicate success or failure.*/static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){  int rc;  BtCursor *curMain;  int size;  Table *pTab;  char const *azArg[5];  char zDbNum[30];  int meta[10];  InitData initData;  char const *zMasterSchema;  char const *zMasterName = SCHEMA_TABLE(iDb);  /*  ** The master database table has a structure like this  */  static const char master_schema[] =      "CREATE TABLE sqlite_master(/n"     "  type text,/n"     "  name text,/n"     "  tbl_name text,/n"     "  rootpage integer,/n"     "  sql text/n"     ")"  ;#ifndef SQLITE_OMIT_TEMPDB  static const char temp_master_schema[] =      "CREATE TEMP TABLE sqlite_temp_master(/n"     "  type text,/n"     "  name text,/n"     "  tbl_name text,/n"     "  rootpage integer,/n"     "  sql text/n"     ")"  ;#else  #define temp_master_schema 0#endif  assert( iDb>=0 && iDb<db->nDb );  /* zMasterSchema and zInitScript are set to point at the master schema  ** and initialisation script appropriate for the database being  ** initialised. zMasterName is the name of the master table.  */  if( !OMIT_TEMPDB && iDb==1 ){    zMasterSchema = temp_master_schema;  }else{    zMasterSchema = master_schema;  }  zMasterName = SCHEMA_TABLE(iDb);  /* Construct the schema tables.  */  sqlite3SafetyOff(db);  azArg[0] = zMasterName;  azArg[1] = "1";  azArg[2] = zMasterSchema;  sprintf(zDbNum, "%d", iDb);  azArg[3] = zDbNum;  azArg[4] = 0;  initData.db = db;  initData.pzErrMsg = pzErrMsg;  rc = sqlite3InitCallback(&initData, 4, (char **)azArg, 0);  if( rc!=SQLITE_OK ){    sqlite3SafetyOn(db);    return rc;  }  pTab = sqlite3FindTable(db, zMasterName, db->aDb[iDb].zName);  if( pTab ){    pTab->readOnly = 1;  }  sqlite3SafetyOn(db);  /* Create a cursor to hold the database open  */  if( db->aDb[iDb].pBt==0 ){    if( !OMIT_TEMPDB && iDb==1 ) DbSetProperty(db, 1, DB_SchemaLoaded);    return SQLITE_OK;  }  rc = sqlite3BtreeCursor(db->aDb[iDb].pBt, MASTER_ROOT, 0, 0, 0, &curMain);  if( rc!=SQLITE_OK && rc!=SQLITE_EMPTY ){    sqlite3SetString(pzErrMsg, sqlite3ErrStr(rc), (char*)0);    return rc;  }  /* Get the database meta information.  **  ** Meta values are as follows:  **    meta[0]   Schema cookie.  Changes with each schema change.  **    meta[1]   File format of schema layer.  **    meta[2]   Size of the page cache.  **    meta[3]   Use freelist if 0.  Autovacuum if greater than zero.  **    meta[4]   Db text encoding. 1:UTF-8 3:UTF-16 LE 4:UTF-16 BE//.........这里部分代码省略.........
开发者ID:DSD-TELCEL-ESCOM,项目名称:INE-Votation-Distributed-System,代码行数:101,


示例20: sqlite3RunVacuum

/*** This routine implements the OP_Vacuum opcode of the VDBE.*/int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){  int rc = SQLITE_OK;     /* Return code from service routines */  const char *zFilename;  /* full pathname of the database file */  int nFilename;          /* number of characters  in zFilename[] */  char *zTemp = 0;        /* a temporary file in same directory as zFilename */  Btree *pMain;           /* The database being vacuumed */  Btree *pTemp;  char *zSql = 0;  int saved_flags;       /* Saved value of the db->flags */  Db *pDb = 0;           /* Database to detach at end of vacuum */  /* Save the current value of the write-schema flag before setting it. */  saved_flags = db->flags;  db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks;  if( !db->autoCommit ){    sqlite3SetString(pzErrMsg, "cannot VACUUM from within a transaction",        (char*)0);    rc = SQLITE_ERROR;    goto end_of_vacuum;  }  /* Get the full pathname of the database file and create a  ** temporary filename in the same directory as the original file.  */  pMain = db->aDb[0].pBt;  zFilename = sqlite3BtreeGetFilename(pMain);  assert( zFilename );  if( zFilename[0]=='/0' ){    /* The in-memory database. Do nothing. Return directly to avoid causing    ** an error trying to DETACH the vacuum_db (which never got attached)    ** in the exit-handler.    */    return SQLITE_OK;  }  nFilename = strlen(zFilename);  zTemp = sqliteMalloc( nFilename+100 );  if( zTemp==0 ){    rc = SQLITE_NOMEM;    goto end_of_vacuum;  }  strcpy(zTemp, zFilename);  /* The randomName() procedure in the following loop uses an excellent  ** source of randomness to generate a name from a space of 1.3e+31   ** possibilities.  So unless the directory already contains on the order  ** of 1.3e+31 files, the probability that the following loop will  ** run more than once or twice is vanishingly small.  We are certain  ** enough that this loop will always terminate (and terminate quickly)  ** that we don't even bother to set a maximum loop count.  */  do {    zTemp[nFilename] = '-';    randomName((unsigned char*)&zTemp[nFilename+1]);  } while( sqlite3OsFileExists(zTemp) );  /* Attach the temporary database as 'vacuum_db'. The synchronous pragma  ** can be set to 'off' for this file, as it is not recovered if a crash  ** occurs anyway. The integrity of the database is maintained by a  ** (possibly synchronous) transaction opened on the main database before  ** sqlite3BtreeCopyFile() is called.  **  ** An optimisation would be to use a non-journaled pager.  */  zSql = sqlite3MPrintf("ATTACH '%q' AS vacuum_db;", zTemp);  if( !zSql ){    rc = SQLITE_NOMEM;    goto end_of_vacuum;  }  rc = execSql(db, zSql);  sqliteFree(zSql);  zSql = 0;  if( rc!=SQLITE_OK ) goto end_of_vacuum;  pDb = &db->aDb[db->nDb-1];  assert( strcmp(db->aDb[db->nDb-1].zName,"vacuum_db")==0 );  pTemp = db->aDb[db->nDb-1].pBt;  sqlite3BtreeSetPageSize(pTemp, sqlite3BtreeGetPageSize(pMain),     sqlite3BtreeGetReserve(pMain));  assert( sqlite3BtreeGetPageSize(pTemp)==sqlite3BtreeGetPageSize(pMain) );  rc = execSql(db, "PRAGMA vacuum_db.synchronous=OFF");  if( rc!=SQLITE_OK ){    goto end_of_vacuum;  }#ifndef SQLITE_OMIT_AUTOVACUUM  sqlite3BtreeSetAutoVacuum(pTemp, sqlite3BtreeGetAutoVacuum(pMain));#endif  /* Begin a transaction */  rc = execSql(db, "BEGIN EXCLUSIVE;");  if( rc!=SQLITE_OK ) goto end_of_vacuum;  /* Query the schema of the main database. Create a mirror schema  ** in the temporary database.  */  rc = execExecSql(db,       "SELECT 'CREATE TABLE vacuum_db.' || substr(sql,14,100000000) "//.........这里部分代码省略.........
开发者ID:WeyrSDev,项目名称:gamecode3,代码行数:101,


示例21: corruptSchema

/*** Fill the InitData structure with an error message that indicates** that the database is corrupt.*/static void corruptSchema(InitData *pData, const char *zExtra){  if( !sqlite3_malloc_failed ){    sqlite3SetString(pData->pzErrMsg, "malformed database schema",       zExtra!=0 && zExtra[0]!=0 ? " - " : (char*)0, zExtra, (char*)0);  }}
开发者ID:DSD-TELCEL-ESCOM,项目名称:INE-Votation-Distributed-System,代码行数:10,


示例22: sqlite3RunParser

/*** Run the parser on the given SQL string.  The parser structure is** passed in.  An SQLITE_ status code is returned.  If an error occurs** and pzErrMsg!=NULL then an error message might be written into ** memory obtained from sqlite3_malloc() and *pzErrMsg made to point to that** error message.  Or maybe not.*/int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){  int nErr = 0;  int i;  void *pEngine;  int tokenType;  int lastTokenParsed = -1;  sqlite3 *db = pParse->db;  if( db->activeVdbeCnt==0 ){    db->u1.isInterrupted = 0;  }  pParse->rc = SQLITE_OK;  i = 0;  pEngine = sqlite3ParserAlloc((void*(*)(size_t))sqlite3_malloc);  if( pEngine==0 ){    db->mallocFailed = 1;    return SQLITE_NOMEM;  }  assert( pParse->sLastToken.dyn==0 );  assert( pParse->pNewTable==0 );  assert( pParse->pNewTrigger==0 );  assert( pParse->nVar==0 );  assert( pParse->nVarExpr==0 );  assert( pParse->nVarExprAlloc==0 );  assert( pParse->apVarExpr==0 );  pParse->zTail = pParse->zSql = zSql;  while( !db->mallocFailed && zSql[i]!=0 ){    assert( i>=0 );    pParse->sLastToken.z = (u8*)&zSql[i];    assert( pParse->sLastToken.dyn==0 );    pParse->sLastToken.n = getToken((unsigned char*)&zSql[i],&tokenType);    i += pParse->sLastToken.n;    if( SQLITE_MAX_SQL_LENGTH>0 && i>SQLITE_MAX_SQL_LENGTH ){      pParse->rc = SQLITE_TOOBIG;      break;    }    switch( tokenType ){      case TK_SPACE:      case TK_COMMENT: {        if( db->u1.isInterrupted ){          pParse->rc = SQLITE_INTERRUPT;          sqlite3SetString(pzErrMsg, "interrupt", (char*)0);          goto abort_parse;        }        break;      }      case TK_ILLEGAL: {        if( pzErrMsg ){          sqlite3_free(*pzErrMsg);          *pzErrMsg = sqlite3MPrintf(db, "unrecognized token: /"%T/"",                          &pParse->sLastToken);        }        nErr++;        goto abort_parse;      }      case TK_SEMI: {        pParse->zTail = &zSql[i];        /* Fall thru into the default case */      }      default: {        sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse);        lastTokenParsed = tokenType;        if( pParse->rc!=SQLITE_OK ){          goto abort_parse;        }        break;      }    }  }abort_parse:  if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){    if( lastTokenParsed!=TK_SEMI ){      sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse);      pParse->zTail = &zSql[i];    }    sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);  }  sqlite3ParserFree(pEngine, sqlite3_free);  if( db->mallocFailed ){    pParse->rc = SQLITE_NOMEM;  }  if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){    sqlite3SetString(&pParse->zErrMsg, sqlite3ErrStr(pParse->rc), (char*)0);  }  if( pParse->zErrMsg ){    if( pzErrMsg && *pzErrMsg==0 ){      *pzErrMsg = pParse->zErrMsg;    }else{      sqlite3_free(pParse->zErrMsg);    }    pParse->zErrMsg = 0;    nErr++;  }//.........这里部分代码省略.........
开发者ID:riseven,项目名称:ri7engine,代码行数:101,


示例23: sqlite3_get_table_cb

/*** This routine is called once for each row in the result table.  Its job** is to fill in the TabResult structure appropriately, allocating new** memory as necessary.*/static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){  TabResult *p = (TabResult*)pArg;  int need;  int i;  char *z;  /* Make sure there is enough space in p->azResult to hold everything  ** we need to remember from this invocation of the callback.  */  if( p->nRow==0 && argv!=0 ){    need = nCol*2;  }else{    need = nCol;  }  if( p->nData + need >= p->nAlloc ){    char **azNew;    p->nAlloc = p->nAlloc*2 + need + 1;    azNew = sqlite3_realloc( p->azResult, sizeof(char*)*p->nAlloc );    if( azNew==0 ) goto malloc_failed;    p->azResult = azNew;  }  /* If this is the first row, then generate an extra row containing  ** the names of all columns.  */  if( p->nRow==0 ){    p->nColumn = nCol;    for(i=0; i<nCol; i++){      if( colv[i]==0 ){        z = sqlite3_mprintf("");      }else{        z = sqlite3_mprintf("%s", colv[i]);      }      p->azResult[p->nData++] = z;    }  }else if( p->nColumn!=nCol ){    sqlite3SetString(&p->zErrMsg,       "sqlite3_get_table() called with two or more incompatible queries",       (char*)0);    p->rc = SQLITE_ERROR;    return 1;  }  /* Copy over the row data  */  if( argv!=0 ){    for(i=0; i<nCol; i++){      if( argv[i]==0 ){        z = 0;      }else{        z = sqlite3_malloc( strlen(argv[i])+1 );        if( z==0 ) goto malloc_failed;        strcpy(z, argv[i]);      }      p->azResult[p->nData++] = z;    }    p->nRow++;  }  return 0;malloc_failed:  p->rc = SQLITE_NOMEM;  return 1;}
开发者ID:9iky6,项目名称:amxmodx,代码行数:69,



注:本文中的sqlite3SetString函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ sqlite3SrcListDelete函数代码示例
C++ sqlite3SelectDelete函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。