⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test1.c

📁 一个小型的嵌入式数据库
💻 C
📖 第 1 页 / 共 5 页
字号:
  char zBuf[50];  int rc;  if( objc!=5 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " DB sql bytes tailvar", 0);    return TCL_ERROR;  }  if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;  zSql = Tcl_GetString(objv[2]);  if( Tcl_GetIntFromObj(interp, objv[3], &bytes) ) return TCL_ERROR;  rc = sqlite3_prepare(db, zSql, bytes, &pStmt, &zTail);  if( sqlite3TestErrCode(interp, db, rc) ) return TCL_ERROR;  if( zTail ){    if( bytes>=0 ){      bytes = bytes - (zTail-zSql);    }    Tcl_ObjSetVar2(interp, objv[4], 0, Tcl_NewStringObj(zTail, bytes), 0);  }  if( rc!=SQLITE_OK ){    assert( pStmt==0 );    sprintf(zBuf, "(%d) ", rc);    Tcl_AppendResult(interp, zBuf, sqlite3_errmsg(db), 0);    return TCL_ERROR;  }  if( pStmt ){    if( makePointerStr(interp, zBuf, pStmt) ) return TCL_ERROR;    Tcl_AppendResult(interp, zBuf, 0);  }  return TCL_OK;}/*** Usage: sqlite3_prepare DB sql bytes tailvar**** Compile up to <bytes> bytes of the supplied SQL string <sql> using** database handle <DB>. The parameter <tailval> is the name of a global** variable that is set to the unused portion of <sql> (if any). A** STMT handle is returned.*/static int test_prepare16(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){#ifndef SQLITE_OMIT_UTF16  sqlite3 *db;  const void *zSql;  const void *zTail = 0;  Tcl_Obj *pTail = 0;  sqlite3_stmt *pStmt = 0;  char zBuf[50];   int rc;  int bytes;                /* The integer specified as arg 3 */  int objlen;               /* The byte-array length of arg 2 */  if( objc!=5 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " DB sql bytes tailvar", 0);    return TCL_ERROR;  }  if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;  zSql = Tcl_GetByteArrayFromObj(objv[2], &objlen);  if( Tcl_GetIntFromObj(interp, objv[3], &bytes) ) return TCL_ERROR;  rc = sqlite3_prepare16(db, zSql, bytes, &pStmt, &zTail);  if( sqlite3TestErrCode(interp, db, rc) ) return TCL_ERROR;  if( rc ){    return TCL_ERROR;  }  if( zTail ){    objlen = objlen - ((u8 *)zTail-(u8 *)zSql);  }else{    objlen = 0;  }  pTail = Tcl_NewByteArrayObj((u8 *)zTail, objlen);  Tcl_IncrRefCount(pTail);  Tcl_ObjSetVar2(interp, objv[4], 0, pTail, 0);  Tcl_DecrRefCount(pTail);  if( pStmt ){    if( makePointerStr(interp, zBuf, pStmt) ) return TCL_ERROR;  }  Tcl_AppendResult(interp, zBuf, 0);#endif /* SQLITE_OMIT_UTF16 */  return TCL_OK;}/*** Usage: sqlite3_open filename ?options-list?*/static int test_open(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  const char *zFilename;  sqlite3 *db;  int rc;  char zBuf[100];  if( objc!=3 && objc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " filename options-list", 0);    return TCL_ERROR;  }  zFilename = Tcl_GetString(objv[1]);  rc = sqlite3_open(zFilename, &db);    if( makePointerStr(interp, zBuf, db) ) return TCL_ERROR;  Tcl_AppendResult(interp, zBuf, 0);  return TCL_OK;}/*** Usage: sqlite3_open16 filename options*/static int test_open16(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){#ifndef SQLITE_OMIT_UTF16  const void *zFilename;  sqlite3 *db;  int rc;  char zBuf[100];  if( objc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " filename options-list", 0);    return TCL_ERROR;  }  zFilename = Tcl_GetByteArrayFromObj(objv[1], 0);  rc = sqlite3_open16(zFilename, &db);    if( makePointerStr(interp, zBuf, db) ) return TCL_ERROR;  Tcl_AppendResult(interp, zBuf, 0);#endif /* SQLITE_OMIT_UTF16 */  return TCL_OK;}/*** Usage: sqlite3_complete16 <UTF-16 string>**** Return 1 if the supplied argument is a complete SQL statement, or zero** otherwise.*/static int test_complete16(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){#ifndef SQLITE_OMIT_UTF16  char *zBuf;  if( objc!=2 ){    Tcl_WrongNumArgs(interp, 1, objv, "<utf-16 sql>");    return TCL_ERROR;  }  zBuf = Tcl_GetByteArrayFromObj(objv[1], 0);  Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_complete16(zBuf)));#endif /* SQLITE_OMIT_UTF16 */  return TCL_OK;}/*** Usage: sqlite3_step STMT**** Advance the statement to the next row.*/static int test_step(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  sqlite3_stmt *pStmt;  int rc;  if( objc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " STMT", 0);    return TCL_ERROR;  }  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;  rc = sqlite3_step(pStmt);  /* if( rc!=SQLITE_DONE && rc!=SQLITE_ROW ) return TCL_ERROR; */  Tcl_SetResult(interp, (char *)errorName(rc), 0);  return TCL_OK;}/*** Usage: sqlite3_column_count STMT **** Return the number of columns returned by the sql statement STMT.*/static int test_column_count(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  sqlite3_stmt *pStmt;  if( objc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " STMT column", 0);    return TCL_ERROR;  }  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;  Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_column_count(pStmt)));  return TCL_OK;}/*** Usage: sqlite3_column_type STMT column**** Return the type of the data in column 'column' of the current row.*/static int test_column_type(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  sqlite3_stmt *pStmt;  int col;  int tp;  if( objc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " STMT column", 0);    return TCL_ERROR;  }  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;  tp = sqlite3_column_type(pStmt, col);  switch( tp ){    case SQLITE_INTEGER:       Tcl_SetResult(interp, "INTEGER", TCL_STATIC);       break;    case SQLITE_NULL:      Tcl_SetResult(interp, "NULL", TCL_STATIC);       break;    case SQLITE_FLOAT:      Tcl_SetResult(interp, "FLOAT", TCL_STATIC);       break;    case SQLITE_TEXT:      Tcl_SetResult(interp, "TEXT", TCL_STATIC);       break;    case SQLITE_BLOB:      Tcl_SetResult(interp, "BLOB", TCL_STATIC);       break;    default:      assert(0);  }  return TCL_OK;}/*** Usage: sqlite3_column_int64 STMT column**** Return the data in column 'column' of the current row cast as an** wide (64-bit) integer.*/static int test_column_int64(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  sqlite3_stmt *pStmt;  int col;  i64 iVal;  if( objc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " STMT column", 0);    return TCL_ERROR;  }  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;  iVal = sqlite3_column_int64(pStmt, col);  Tcl_SetObjResult(interp, Tcl_NewWideIntObj(iVal));  return TCL_OK;}/*** Usage: sqlite3_column_blob STMT column*/static int test_column_blob(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  sqlite3_stmt *pStmt;  int col;  int len;  const void *pBlob;  if( objc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " STMT column", 0);    return TCL_ERROR;  }  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;  pBlob = sqlite3_column_blob(pStmt, col);  len = sqlite3_column_bytes(pStmt, col);  Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(pBlob, len));  return TCL_OK;}/*** Usage: sqlite3_column_double STMT column**** Return the data in column 'column' of the current row cast as a double.*/static int test_column_double(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  sqlite3_stmt *pStmt;  int col;  double rVal;  if( objc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " STMT column", 0);    return TCL_ERROR;  }  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;  rVal = sqlite3_column_double(pStmt, col);  Tcl_SetObjResult(interp, Tcl_NewDoubleObj(rVal));  return TCL_OK;}/*** Usage: sqlite3_data_count STMT **** Return the number of columns returned by the sql statement STMT.*/static int test_data_count(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  sqlite3_stmt *pStmt;  if( objc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " STMT column", 0);    return TCL_ERROR;  }  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;  Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_data_count(pStmt)));  return TCL_OK;}/*** Usage: sqlite3_column_text STMT column**** Usage: sqlite3_column_decltype STMT column**** Usage: sqlite3_column_name STMT column*/static int test_stmt_utf8(  void * clientData,        /* Pointer to SQLite API function to be invoke */  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  sqlite3_stmt *pStmt;  int col;  const char *(*xFunc)(sqlite3_stmt*, int) = clientData;  const char *zRet;  if( objc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " STMT column", 0);    return TCL_ERROR;  }  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;  zRet = xFunc(pStmt, col);  if( zRet ){    Tcl_SetResult(interp, (char *)zRet, 0);  }  return TCL_OK;}/*** Usage: sqlite3_column_text STMT column**** Usage: sqlite3_column_decltype STMT column**** Usage: sqlite3_column_name STMT column*/static int test_stmt_utf16(  void * clientData,     /* Pointer to SQLite API function to be invoked */  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){#ifndef SQLITE_OMIT_UTF16  sqlite3_stmt *pStmt;  int col;  Tcl_Obj *pRet;  const void *zName16;  const void *(*xFunc)(sqlite3_stmt*, int) = clientData;  if( objc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetString(objv[0]), " STMT column", 0);    return TCL_ERROR;  }  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;  zName16 = xFunc(pStmt, col);  if( zName16 ){    pRet = Tcl_NewByteArrayObj(zName16, sqlite3utf16ByteLen(zName16, -1)+2);    Tcl_SetObjResult(interp, pRet);  }#endif /* SQLITE_OMIT_UTF16 */  return TCL_OK;}/*** Us

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -