勇芳软件工作室.汉化:  SQLite3 API Functions > Database Connection >

sqlite3_db_config

Previous pageReturn to chapter overviewNext page

描述

 

sqlite3_db_config功能用于对数据库连接进行配置更改。该界面类似于sqlite3_config,只是更改适用于单个数据库连接(在第一个参数中指定)。

 

C / C ++语法

 

int sqlite3_db_config(sqlite3*, int op, ...);

 

PB语法

 

FUNCTION sqlite3_config ( _

BYVAL hDbc AS DWORD, _

BYVAL op AS LONG, _

OPTIONAL BYREF ANY, BYREF ANY, BYREF ANY, BYREF ANY, _

BYREF ANY, BYREF ANY, BYREF ANY, BYREF ANY, BYREF ANY, _

BYREF ANY, BYREF ANY, BYREF ANY, BYREF ANY, BYREF ANY, _

BYREF ANY, BYREF ANY _

) AS LONG

 

参数

 

pDb

 

[in]数据库连接句柄。必须是从sqlite3_opensqlite3_open16sqlite3_open_v2获取的NULL指针或sqlite3对象指针,而不是先前关闭。使用NULL指针参数调用sqlite3_close是无害的操作。

 

op

 

[in]配置动词 - 表示正在配置数据库连接的哪个方面的整数代码。后续参数因配置动词而异。

 

返回值

 

当且仅当该呼叫被认为是成功时,才会呼叫sqlite3_db_config返回SQLITE_OK。

 

C ++实现代码

 

/*

** Configuration settings for an individual database connection

*/

SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){

va_list ap;

int rc;

va_start(ap, op);

switch( op ){

  case SQLITE_DBCONFIG_LOOKASIDE: {

    void *pBuf = va_arg(ap, void*); /* IMP: R-26835-10964 */

    int sz = va_arg(ap, int);       /* IMP: R-47871-25994 */

    int cnt = va_arg(ap, int);      /* IMP: R-04460-53386 */

    rc = setupLookaside(db, pBuf, sz, cnt);

    break;

  }

  default: {

    static const struct {

      int op;      /* The opcode */

      u32 mask;    /* Mask of the bit in sqlite3.flags to set/clear */

    } aFlagOp[] = {

      { SQLITE_DBCONFIG_ENABLE_FKEY,    SQLITE_ForeignKeys    },

      { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger  },

    };

    unsigned int i;

    rc = SQLITE_ERROR; /* IMP: R-42790-23372 */

    for(i=0; i<ArraySize(aFlagOp); i++){

      if( aFlagOp[i].op==op ){

        int onoff = va_arg(ap, int);

        int *pRes = va_arg(ap, int*);

        int oldFlags = db->flags;

        if( onoff>0 ){

          db->flags |= aFlagOp[i].mask;

        }else if( onoff==0 ){

          db->flags &= ~aFlagOp[i].mask;

        }

        if( oldFlags!=db->flags ){

          sqlite3ExpirePreparedStatements(db);

        }

        if( pRes ){

          *pRes = (db->flags & aFlagOp[i].mask)!=0;

        }

        rc = SQLITE_OK;

        break;

      }

    }

    break;

  }

}

va_end(ap);

return rc;

}