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

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

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

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

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

示例1: main

int main (void){	sqlite3 *db;	//char *err = 0;	int ret = 0;	char **datatable1;	char **datatable3;	int nRow;	int nColumn;	char *sql;	int i;	char *zErrMsg = 0;	cgi_init();	cgi_init_headers();	cgi_process_form();	puts("<html><head><title>chaxun</title>");   puts("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />");	//puts("<link href=/"/Style.css/" rel=/"stylesheet/" type=/"text/css/" />");	puts("</head>");	puts("<body bgColor=#fffff0>");	db = open_db("OAK.db");	sql = sqlite3_mprintf("select * from IpInfo");	ret = sqlite3_get_table(db, sql, &datatable1, &nRow, &nColumn, &zErrMsg);	if (ret != SQLITE_OK) {		fprintf(stderr, "SQL error: %s/n", zErrMsg);		exit(1);	}	puts("<form action=/"load.cgi/">");	puts("<table width='70%' align='left' border=1 border-coer=#000066>");	puts("<tr><td width='20%'>");	puts("<select NAME = /"ip/">");		puts("<option value = /"/"> 选择IP</option> ");		if (!(0 == nRow && 0 == nColumn)) {		for (i = 1; i <= nRow*nColumn ; i += nColumn ) {			printf("<option value = /"%s/"", datatable1[i]);			if (cgi_param("company")) {			    if (0 == strncmp(cgi_param("ip"), datatable1[i],strlen(datatable1[i])))					  printf("SELECTED");			}		printf("> %s </option> ", datatable1[i]);				}	}	puts("</select>");	puts("</td>");	puts("<td>");	puts("<input type=/"submit/" value=/"上传/"  name=/"action/" >");		puts("</td></tr></table>");	sql = sqlite3_mprintf("select R.R_id,R.R_name,R.R_flag,C.C_name from ResInfo R left join CompanyInfo C on R.C_id = C.C_id;");	puts("<br />");		puts("<br />");		ret = sqlite3_get_table(db, sql, &datatable3, &nRow, &nColumn, &zErrMsg);		if (ret != SQLITE_OK) {			fprintf(stderr, "SQL error: %s/n", zErrMsg);			exit(1);		}		puts("<table width='70%' align='left' border=1>");		puts("<tr><td style=/"width:50px/" align=center>选择</td>");		puts("<td style=/"width:150px/" align=center>媒体名称</td>");		puts("<td style=/"width:120px/" align=center>媒体类型</td>");		puts("<td style=/"width:170px/" align=center>所属公司</td>");		puts("</tr>");		if (!(0 == nRow && 0 == nColumn)) {			for (i = 4; i <= nRow*nColumn ; i += nColumn ) {				puts("<tr><td align='center'><input type = 'checkbox' name='xuanqu' ");				printf(" value=%s />", datatable3[i+0]);				puts("</td>");				printf("<td>%s</td>", datatable3[i+1]);				if(atoi(datatable3[i+2]) == 0){					printf("<td>视频文件</td>");				} else {					printf("<td>图片文件</td>");						}								printf("<td>%s</td></tr>",datatable3[i+3]);			}		}		puts("</table>");	puts("</form>");	puts("</body></html>");	cgi_end();	return 0;}
开发者ID:TLARP,项目名称:research,代码行数:85,


示例2: amatchConnect

/*** xConnect/xCreate method for the amatch module. Arguments are:****   argv[0]    -> module name  ("approximate_match")**   argv[1]    -> database name**   argv[2]    -> table name**   argv[3...] -> arguments*/static int amatchConnect(  sqlite3 *db,  void *pAux,  int argc, const char *const*argv,  sqlite3_vtab **ppVtab,  char **pzErr){  int rc = SQLITE_OK;             /* Return code */  amatch_vtab *pNew = 0;          /* New virtual table */  const char *zModule = argv[0];  const char *zDb = argv[1];  const char *zVal;  int i;  (void)pAux;  *ppVtab = 0;  pNew = sqlite3_malloc( sizeof(*pNew) );  if( pNew==0 ) return SQLITE_NOMEM;  rc = SQLITE_NOMEM;  memset(pNew, 0, sizeof(*pNew));  pNew->db = db;  pNew->zClassName = sqlite3_mprintf("%s", zModule);  if( pNew->zClassName==0 ) goto amatchConnectError;  pNew->zDb = sqlite3_mprintf("%s", zDb);  if( pNew->zDb==0 ) goto amatchConnectError;  pNew->zSelf = sqlite3_mprintf("%s", argv[2]);  if( pNew->zSelf==0 ) goto amatchConnectError;  for(i=3; i<argc; i++){    zVal = amatchValueOfKey("vocabulary_table", argv[i]);    if( zVal ){      sqlite3_free(pNew->zVocabTab);      pNew->zVocabTab = amatchDequote(zVal);      if( pNew->zVocabTab==0 ) goto amatchConnectError;      continue;    }    zVal = amatchValueOfKey("vocabulary_word", argv[i]);    if( zVal ){      sqlite3_free(pNew->zVocabWord);      pNew->zVocabWord = amatchDequote(zVal);      if( pNew->zVocabWord==0 ) goto amatchConnectError;      continue;    }    zVal = amatchValueOfKey("vocabulary_language", argv[i]);    if( zVal ){      sqlite3_free(pNew->zVocabLang);      pNew->zVocabLang = amatchDequote(zVal);      if( pNew->zVocabLang==0 ) goto amatchConnectError;      continue;    }    zVal = amatchValueOfKey("edit_distances", argv[i]);    if( zVal ){      sqlite3_free(pNew->zCostTab);      pNew->zCostTab = amatchDequote(zVal);      if( pNew->zCostTab==0 ) goto amatchConnectError;      continue;    }    *pzErr = sqlite3_mprintf("unrecognized argument: [%s]/n", argv[i]);    amatchFree(pNew);    *ppVtab = 0;    return SQLITE_ERROR;  }  rc = SQLITE_OK;  if( pNew->zCostTab==0 ){    *pzErr = sqlite3_mprintf("no edit_distances table specified");    rc = SQLITE_ERROR;  }else{    rc = amatchLoadRules(db, pNew, pzErr);  }  if( rc==SQLITE_OK ){    rc = sqlite3_declare_vtab(db,           "CREATE TABLE x(word,distance,language,"           "command HIDDEN,nword HIDDEN)"         );#define AMATCH_COL_WORD       0#define AMATCH_COL_DISTANCE   1#define AMATCH_COL_LANGUAGE   2#define AMATCH_COL_COMMAND    3#define AMATCH_COL_NWORD      4  }  if( rc!=SQLITE_OK ){    amatchFree(pNew);  }  *ppVtab = &pNew->base;  return rc;amatchConnectError:  amatchFree(pNew);  return rc;}
开发者ID:cris-auts,项目名称:linux_c_study,代码行数:97,


示例3: dive_db_merge_next

gboolean dive_db_merge_next(gint dive_id,glong dive_number,MergeDiveData *merge_data){  gint rc;  gchar *sqlErrMsg=NULL,*sqlcmd,*tptr;  gboolean rval=TRUE;  glong sample_interval;  gdouble profile_temperature;    sqlcmd=sqlite3_mprintf(    "SELECT Dive.dive_id,dive_number,dive_datetime,dive_maxdepth,dive_duration,dive_maxtemp,dive_mintemp,Profile.dive_id FROM Dive LEFT JOIN Profile ON Profile.dive_id=Dive.dive_id WHERE dive_number=%d LIMIT 1",	  dive_number+1  );  rc=sqlite3_exec(logbook_db,sqlcmd,(gpointer)dive_db_merge_next_callback,merge_data,&sqlErrMsg);  if(rc!=SQLITE_OK){    g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR,"Error in dive_db_merge_next()/nCode=%d/nError Message='%s'/n",rc,sqlErrMsg);    sqlite3_free(sqlErrMsg);    rval=FALSE;  }  else {    sqlite3_free(sqlcmd);    /* do merge    /* 1 - If both dives have profiles and the SI < 1 min, insert a profile segment   */    /* one interval before second dive with same depth and temperature as last        */    /* profile segment of dive 1                                                      */    /* 2 - Update duration maxdepth and temperatures of dive one                      */    /* 3 - If dive 2 has profile update the profile segments for dive 2 to dive 1 by  */    /* setting to id of dive one and adding time to profile_time                      */    /* 4 - delete dive two by calling dive_db_delete()                                */    sqlcmd=sqlite3_mprintf(      "UPDATE Dive SET dive_maxdepth=%f,dive_duration=%d,dive_maxtemp=%f,dive_mintemp=%f WHERE dive_id=%d",	    merge_data->max_depth,merge_data->duration,merge_data->max_temperature,merge_data->min_temperature,dive_id    );        if(merge_data->has_profile) {      tptr=sqlcmd;      sqlcmd=sqlite3_mprintf(        "%s;UPDATE Profile SET profile_time=profile_time+%d,dive_id=%d WHERE dive_id=%d",        sqlcmd,merge_data->duration_mod,dive_id,merge_data->dive_id      );      sqlite3_free(tptr);      if(profile_exists() && merge_data->SI>60) {        tptr=sqlcmd;        sqlcmd=sqlite3_mprintf(          "INSERT INTO Profile (dive_id,profile_time,profile_depth,profile_temperature) "            "SELECT %d, %d-(SELECT MAX(profile_time)/COUNT(*) FROM Profile WHERE dive_id=%d),"              "profile_depth,profile_temperature FROM Profile WHERE dive_id=%d "              "ORDER BY profile_time DESC LIMIT 1;%s",          dive_id,merge_data->duration_mod,merge_data->dive_id,dive_id,sqlcmd        );        sqlite3_free(tptr);      }    }    rc=sqlite3_exec(logbook_db,sqlcmd,NULL,0,&sqlErrMsg);    if(rc!=SQLITE_OK) {      g_log (G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,"Error in dive_db_merge_next()/nCode=%d/nError Message='%s'/n",rc,sqlErrMsg);      sqlite3_free(sqlErrMsg);      rval=FALSE;    }    else dive_db_delete(merge_data->dive_id,merge_data->dive_number);  }  sqlite3_free(sqlcmd);  return rval;}
开发者ID:eskil,项目名称:gdivelog,代码行数:63,


示例4: main

intmain (int argc, char *argv[]){    int ret;    sqlite3 *handle;    char *err_msg = NULL;    char **results;    int rows;    int columns;    unsigned char *blob;    int blob_len;    char *hexBlob;    unsigned char *xml;    int len;    char *sql;    void *cache = spatialite_alloc_connection ();    if (argc > 1 || argv[0] == NULL)	argc = 1;		/* silencing stupid compiler warnings */    ret =	sqlite3_open_v2 (":memory:", &handle,			 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);    if (ret != SQLITE_OK)      {	  fprintf (stderr, "cannot open in-memory db: %s/n",		   sqlite3_errmsg (handle));	  sqlite3_close (handle);	  return -1;      }    spatialite_init_ex (handle, cache, 0);    ret =	sqlite3_exec (handle, "SELECT InitSpatialMetadata(1, 'WGS84')", NULL,		      NULL, &err_msg);    if (ret != SQLITE_OK)      {	  fprintf (stderr, "Unexpected InitSpatialMetadata result: %i, (%s)/n",		   ret, err_msg);	  sqlite3_free (err_msg);	  return -2;      }#ifdef ENABLE_LIBXML2		/* only if LIBXML2 is supported */    ret =	sqlite3_get_table (handle, "SELECT CreateStylingTables(1)", &results,			   &rows, &columns, &err_msg);    if (ret != SQLITE_OK)      {	  fprintf (stderr, "Error CreateStylingTables: %s/n", err_msg);	  sqlite3_free (err_msg);	  return -3;      }    if ((rows != 1) || (columns != 1))      {	  sqlite3_free_table (results);	  fprintf (stderr, "Unexpected row / column count: %i x %i/n", rows,		   columns);	  return -4;      }    if (strcmp (results[1 * columns + 0], "1") != 0)      {	  fprintf (stderr, "Unexpected #0 result (got %s, expected 1)",		   results[1 * columns + 0]);	  sqlite3_free_table (results);	  return -5;      }    sqlite3_free_table (results);    blob = load_blob ("empty.png", &blob_len);    if (blob == NULL)	return -6;    hexBlob = build_hex_blob (blob, blob_len);    free (blob);    if (hexBlob == NULL)	return -7;    sql =	sqlite3_mprintf ("SELECT RegisterExternalGraphic('url-A', x%Q)",			 hexBlob);    ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);    sqlite3_free (sql);    if (ret != SQLITE_OK)      {	  fprintf (stderr, "Error RegisterExternalGraphic #1: %s/n", err_msg);	  sqlite3_free (err_msg);	  return -8;      }    if ((rows != 1) || (columns != 1))      {	  sqlite3_free_table (results);	  fprintf (stderr, "Unexpected row / column count: %i x %i/n", rows,		   columns);	  return -9;      }    if (strcmp (results[1 * columns + 0], "1") != 0)      {	  fprintf (stderr, "Unexpected #1 result (got %s, expected 1)",		   results[1 * columns + 0]);//.........这里部分代码省略.........
开发者ID:kochizufan,项目名称:spatiasql.js,代码行数:101,


示例5: amatchLoadOneRule

/*** Statement pStmt currently points to a row in the amatch data table. This** function allocates and populates a amatch_rule structure according to** the content of the row.**** If successful, *ppRule is set to point to the new object and SQLITE_OK** is returned. Otherwise, *ppRule is zeroed, *pzErr may be set to point** to an error message and an SQLite error code returned.*/static int amatchLoadOneRule(  amatch_vtab *p,                 /* Fuzzer virtual table handle */  sqlite3_stmt *pStmt,            /* Base rule on statements current row */  amatch_rule **ppRule,           /* OUT: New rule object */  char **pzErr                    /* OUT: Error message */){  sqlite3_int64 iLang = sqlite3_column_int64(pStmt, 0);  const char *zFrom = (const char *)sqlite3_column_text(pStmt, 1);  const char *zTo = (const char *)sqlite3_column_text(pStmt, 2);  amatch_cost rCost = sqlite3_column_int(pStmt, 3);  int rc = SQLITE_OK;             /* Return code */  int nFrom;                      /* Size of string zFrom, in bytes */  int nTo;                        /* Size of string zTo, in bytes */  amatch_rule *pRule = 0;         /* New rule object to return */  if( zFrom==0 ) zFrom = "";  if( zTo==0 ) zTo = "";  nFrom = (int)strlen(zFrom);  nTo = (int)strlen(zTo);  /* Silently ignore null transformations */  if( strcmp(zFrom, zTo)==0 ){    if( zFrom[0]=='?' && zFrom[1]==0 ){      if( p->rSub==0 || p->rSub>rCost ) p->rSub = rCost;    }    *ppRule = 0;    return SQLITE_OK;  }  if( rCost<=0 || rCost>AMATCH_MX_COST ){    *pzErr = sqlite3_mprintf("%s: cost must be between 1 and %d",         p->zClassName, AMATCH_MX_COST    );    rc = SQLITE_ERROR;  }else  if( nFrom>AMATCH_MX_LENGTH || nTo>AMATCH_MX_LENGTH ){    *pzErr = sqlite3_mprintf("%s: maximum string length is %d",         p->zClassName, AMATCH_MX_LENGTH    );    rc = SQLITE_ERROR;      }else  if( iLang<0 || iLang>AMATCH_MX_LANGID ){    *pzErr = sqlite3_mprintf("%s: iLang must be between 0 and %d",         p->zClassName, AMATCH_MX_LANGID    );    rc = SQLITE_ERROR;      }else  if( strcmp(zFrom,"")==0 && strcmp(zTo,"?")==0 ){    if( p->rIns==0 || p->rIns>rCost ) p->rIns = rCost;  }else  if( strcmp(zFrom,"?")==0 && strcmp(zTo,"")==0 ){    if( p->rDel==0 || p->rDel>rCost ) p->rDel = rCost;  }else  {    pRule = sqlite3_malloc( sizeof(*pRule) + nFrom + nTo );    if( pRule==0 ){      rc = SQLITE_NOMEM;    }else{      memset(pRule, 0, sizeof(*pRule));      pRule->zFrom = &pRule->zTo[nTo+1];      pRule->nFrom = (amatch_len)nFrom;      memcpy(pRule->zFrom, zFrom, nFrom+1);      memcpy(pRule->zTo, zTo, nTo+1);      pRule->nTo = (amatch_len)nTo;      pRule->rCost = rCost;      pRule->iLang = (int)iLang;    }  }  *ppRule = pRule;  return rc;}
开发者ID:cris-auts,项目名称:linux_c_study,代码行数:82,


示例6: cangjie_get_characters_by_shortcode

int cangjie_get_characters_by_shortcode(Cangjie          *cj,                                        char             *input_code,                                        CangjieCharList **l) {    CangjieCharList *tmp = NULL;    sqlite3_stmt *stmt;    int ret;    char *query;    if (input_code == NULL || strlen(input_code) != 1) {        return CANGJIE_INVALID;    }    query = sqlite3_mprintf(cj->shortcode_query, 0, input_code);    if (query == NULL) {        return CANGJIE_NOMEM;    }    ret = sqlite3_prepare_v2(cj->db, query, -1, &stmt, 0);    if (ret != SQLITE_OK) {        // FIXME: Unhandled error codes        return ret;    }    sqlite3_free(query);    while (1) {        ret = sqlite3_step(stmt);        if (ret == SQLITE_ROW) {            char *chchar = (char *)sqlite3_column_text(stmt, 0);            uint32_t frequency = (uint32_t)sqlite3_column_int(stmt, 2);            CangjieChar *c;            int ret = cangjie_char_new(&c, chchar, input_code, frequency);            if (ret != CANGJIE_OK) {                return ret;            }            ret = cangjie_char_list_prepend(&tmp, c);            if (ret != CANGJIE_OK) {                return ret;            }        } else if(ret == SQLITE_DONE) {            // All rows finished            sqlite3_finalize(stmt);            break;        } else {            // Some error encountered            return CANGJIE_DBERROR;        }    }    if (tmp == NULL) {        return CANGJIE_NOCHARS;    }    *l = tmp;    return CANGJIE_OK;}
开发者ID:anthonywong,项目名称:libcangjie-pkg,代码行数:61,


示例7: midorator_history_remove_item_cb

static void midorator_history_remove_item_cb(KatzeArray *a, const char *item, sqlite3 *db) {    char *cmd = sqlite3_mprintf("DELETE FROM midorator_command_history WHERE command = '%q';", item);    sqlite3_exec(db, cmd, NULL, NULL, NULL);    sqlite3_free(cmd);}
开发者ID:sash-kan,项目名称:midorator,代码行数:5,


示例8: scalarFunc

  SQLITE_EXTENSION_INIT1#endif#include "fts3_hash.h"#include "fts3_tokenizer.h"#include <assert.h>/*** Implementation of the SQL scalar function for accessing the underlying ** hash table. This function may be called as follows:****   SELECT <function-name>(<key-name>);**   SELECT <function-name>(<key-name>, <pointer>);**** where <function-name> is the name passed as the second argument** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer').**** If the <pointer> argument is specified, it must be a blob value** containing a pointer to be stored as the hash data corresponding** to the string <key-name>. If <pointer> is not specified, then** the string <key-name> must already exist in the has table. Otherwise,** an error is returned.**** Whether or not the <pointer> argument is specified, the value returned** is a blob containing the pointer stored as the hash data corresponding** to string <key-name> (after the hash-table is updated, if applicable).*/static void scalarFunc(  sqlite3_context *context,  int argc,  sqlite3_value **argv){  fts3Hash *pHash;  void *pPtr = 0;  const unsigned char *zName;  int nName;  assert( argc==1 || argc==2 );  pHash = (fts3Hash *)sqlite3_user_data(context);  zName = sqlite3_value_text(argv[0]);  nName = sqlite3_value_bytes(argv[0])+1;  if( argc==2 ){    void *pOld;    int n = sqlite3_value_bytes(argv[1]);    if( n!=sizeof(pPtr) ){      sqlite3_result_error(context, "argument type mismatch", -1);      return;    }    pPtr = *(void **)sqlite3_value_blob(argv[1]);    pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr);    if( pOld==pPtr ){      sqlite3_result_error(context, "out of memory", -1);      return;    }  }else{    pPtr = sqlite3Fts3HashFind(pHash, zName, nName);    if( !pPtr ){      char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);      sqlite3_result_error(context, zErr, -1);      sqlite3_free(zErr);      return;    }  }  sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT);}
开发者ID:shenjian74,项目名称:Bitcoin-History,代码行数:69,


示例9: pkg_update_full

static intpkg_update_full(const char *repofile, struct pkg_repo *repo, time_t *mtime){	char repofile_unchecked[MAXPATHLEN];	int fd = -1, rc = EPKG_FATAL;	sqlite3 *sqlite = NULL;	char *req = NULL;	char *bad_abis = NULL;	const char *myarch;	snprintf(repofile_unchecked, sizeof(repofile_unchecked),			"%s.unchecked", repofile);	/* If the repo.sqlite file exists, test that we can write to		   it.  If it doesn't exist, assume we can create it */	if (eaccess(repofile, F_OK) == 0 && eaccess(repofile, W_OK) == -1) {		pkg_emit_error("Insufficient privilege to update %s/n",				repofile);		rc = EPKG_ENOACCESS;		goto cleanup;	}	if ((fd = repo_fetch_remote_tmp(repo, repo_db_archive, "txz", mtime, &rc)) == -1) {		goto cleanup;	}	if ((rc = repo_archive_extract_file(fd, repo_db_file, repofile_unchecked, repo->pubkey, -1)) != EPKG_OK) {		goto cleanup;	}	/* check if the repository is for valid architecture */	if (access(repofile_unchecked, R_OK|W_OK) == -1) {		pkg_emit_error("Archive file does not have repo.sqlite file");		rc = EPKG_FATAL;		goto cleanup;	}	if (sqlite3_open(repofile_unchecked, &sqlite) != SQLITE_OK) {		unlink(repofile_unchecked);		pkg_emit_error("Corrupted repository");		rc = EPKG_FATAL;		goto cleanup;	}	pkg_config_string(PKG_CONFIG_ABI, &myarch);	req = sqlite3_mprintf("select group_concat(arch, ', ') from "			"(select distinct arch from packages "			"where arch not GLOB '%q')", myarch);	if (get_sql_string(sqlite, req, &bad_abis) != EPKG_OK) {		sqlite3_free(req);		pkg_emit_error("Unable to query repository");		rc = EPKG_FATAL;		sqlite3_close(sqlite);		goto cleanup;	}	if (bad_abis != NULL) {		pkg_emit_error("At least one of the packages provided by "				"the repository is not compatible with your ABI:/n"				"    Your ABI: %s/n"				"    Incompatible ABIs found: %s",				myarch, bad_abis);		rc = EPKG_FATAL;		sqlite3_close(sqlite);		goto cleanup;	}	/* register the packagesite */	if (pkg_register_repo(repo, sqlite) != EPKG_OK) {		sqlite3_close(sqlite);		goto cleanup;	}	sqlite3_close(sqlite);	sqlite3_shutdown();	if (rename(repofile_unchecked, repofile) != 0) {		pkg_emit_errno("rename", "");		rc = EPKG_FATAL;		goto cleanup;	}	if ((rc = remote_add_indexes(pkg_repo_ident(repo))) != EPKG_OK)		goto cleanup;	rc = EPKG_OK;	cleanup:	if (fd != -1)		(void)close(fd);	return (rc);}
开发者ID:renchap,项目名称:pkg,代码行数:93,


示例10: vspidx_filter

static intvspidx_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,	       int argc, sqlite3_value ** argv){/* setting up a cursor filter */    char *db_prefix = NULL;    char *table_name = NULL;    char *geom_column;    char *xtable = NULL;    char *xgeom = NULL;    char *idx_name;    char *idx_nameQ;    char *sql_statement;    gaiaGeomCollPtr geom = NULL;    int ok_table = 0;    int ok_geom = 0;    const unsigned char *blob;    int size;    int exists;    int ret;    sqlite3_stmt *stmt;    float minx;    float miny;    float maxx;    float maxy;    double tic;    double tic2;    VirtualSpatialIndexCursorPtr cursor =	(VirtualSpatialIndexCursorPtr) pCursor;    VirtualSpatialIndexPtr spidx = (VirtualSpatialIndexPtr) cursor->pVtab;    if (idxStr)	idxStr = idxStr;	/* unused arg warning suppression */    cursor->eof = 1;    if (idxNum == 1 && argc == 3)      {	  /* retrieving the Table/Column/MBR params */	  if (sqlite3_value_type (argv[0]) == SQLITE_TEXT)	    {		char *tn = (char *) sqlite3_value_text (argv[0]);		vspidx_parse_table_name (tn, &db_prefix, &table_name);		ok_table = 1;	    }	  if (sqlite3_value_type (argv[1]) == SQLITE_TEXT)	    {		geom_column = (char *) sqlite3_value_text (argv[1]);		ok_geom = 1;	    }	  if (sqlite3_value_type (argv[2]) == SQLITE_BLOB)	    {		blob = sqlite3_value_blob (argv[2]);		size = sqlite3_value_bytes (argv[2]);		geom = gaiaFromSpatiaLiteBlobWkb (blob, size);	    }	  if (ok_table && ok_geom && geom)	      ;	  else	    {		/* invalid args */		goto stop;	    }      }    if (idxNum == 2 && argc == 2)      {	  /* retrieving the Table/MBR params */	  if (sqlite3_value_type (argv[0]) == SQLITE_TEXT)	    {		char *tn = (char *) sqlite3_value_text (argv[0]);		vspidx_parse_table_name (tn, &db_prefix, &table_name);		ok_table = 1;	    }	  if (sqlite3_value_type (argv[1]) == SQLITE_BLOB)	    {		blob = sqlite3_value_blob (argv[1]);		size = sqlite3_value_bytes (argv[1]);		geom = gaiaFromSpatiaLiteBlobWkb (blob, size);	    }	  if (ok_table && geom)	      ;	  else	    {		/* invalid args */		goto stop;	    }      }/* checking if the corresponding R*Tree exists */    if (ok_geom)	exists =	    vspidx_check_rtree (spidx->db, db_prefix, table_name, geom_column,				&xtable, &xgeom);    else	exists =	    vspidx_find_rtree (spidx->db, db_prefix, table_name, &xtable,			       &xgeom);    if (!exists)	goto stop;/* building the RTree query */    idx_name = sqlite3_mprintf ("idx_%s_%s", xtable, xgeom);    idx_nameQ = gaiaDoubleQuotedSql (idx_name);//.........这里部分代码省略.........
开发者ID:CMUPracticum,项目名称:nutiteq-demo,代码行数:101,


示例11: vspidx_check_view_rtree

static intvspidx_check_view_rtree (sqlite3 * sqlite, const char *table_name,			 const char *geom_column, char **real_table,			 char **real_geom){/* checks if the required RTree is actually defined - SpatialView */    sqlite3_stmt *stmt;    char *sql_statement;    int ret;    int count = 0;    char *rt = NULL;    char *rg = NULL;/* testing if views_geometry_columns exists */    sql_statement = sqlite3_mprintf ("SELECT tbl_name FROM sqlite_master "				     "WHERE type = 'table' AND tbl_name = 'views_geometry_columns'");    ret =	sqlite3_prepare_v2 (sqlite, sql_statement, strlen (sql_statement),			    &stmt, NULL);    sqlite3_free (sql_statement);    if (ret != SQLITE_OK)	return 0;    while (1)      {	  /* scrolling the result set rows */	  ret = sqlite3_step (stmt);	  if (ret == SQLITE_DONE)	      break;		/* end of result set */	  if (ret == SQLITE_ROW)	      count++;      }    sqlite3_finalize (stmt);    if (count != 1)	return 0;    count = 0;/* attempting to find the RTree Geometry Column */    sql_statement =	sqlite3_mprintf ("SELECT a.f_table_name, a.f_geometry_column "			 "FROM views_geometry_columns AS a "			 "JOIN geometry_columns AS b ON ("			 "Upper(a.f_table_name) = Upper(b.f_table_name) AND "			 "Upper(a.f_geometry_column) = Upper(b.f_geometry_column)) "			 "WHERE Upper(a.view_name) = Upper(%Q) "			 "AND Upper(a.view_geometry) = Upper(%Q) AND b.spatial_index_enabled = 1",			 table_name, geom_column);    ret =	sqlite3_prepare_v2 (sqlite, sql_statement, strlen (sql_statement),			    &stmt, NULL);    sqlite3_free (sql_statement);    if (ret != SQLITE_OK)	return 0;    while (1)      {	  /* scrolling the result set rows */	  ret = sqlite3_step (stmt);	  if (ret == SQLITE_DONE)	      break;		/* end of result set */	  if (ret == SQLITE_ROW)	    {		const char *v = (const char *) sqlite3_column_text (stmt, 0);		int len = sqlite3_column_bytes (stmt, 0);		if (rt)		    free (rt);		rt = malloc (len + 1);		strcpy (rt, v);		v = (const char *) sqlite3_column_text (stmt, 1);		len = sqlite3_column_bytes (stmt, 1);		if (rg)		    free (rg);		rg = malloc (len + 1);		strcpy (rg, v);		count++;	    }      }    sqlite3_finalize (stmt);    if (count != 1)	return 0;    *real_table = rt;    *real_geom = rg;    return 1;}
开发者ID:CMUPracticum,项目名称:nutiteq-demo,代码行数:82,


示例12: vspidx_find_rtree

static intvspidx_find_rtree (sqlite3 * sqlite, const char *db_prefix,		   const char *table_name, char **real_table, char **real_geom){/* attempts to find the corresponding RTree Geometry Column */    sqlite3_stmt *stmt;    char *sql_statement;    int ret;    int count = 0;    char *rt = NULL;    char *rg = NULL;    if (db_prefix == NULL)      {	  sql_statement =	      sqlite3_mprintf	      ("SELECT f_table_name, f_geometry_column FROM geometry_columns "	       "WHERE Upper(f_table_name) = Upper(%Q) AND spatial_index_enabled = 1",	       table_name);      }    else      {	  char *quoted_db = gaiaDoubleQuotedSql (db_prefix);	  sql_statement =	      sqlite3_mprintf	      ("SELECT f_table_name, f_geometry_column FROM /"%s/".geometry_columns "	       "WHERE Upper(f_table_name) = Upper(%Q) AND spatial_index_enabled = 1",	       quoted_db, table_name);	  free (quoted_db);      }    ret =	sqlite3_prepare_v2 (sqlite, sql_statement, strlen (sql_statement),			    &stmt, NULL);    sqlite3_free (sql_statement);    if (ret != SQLITE_OK)	return 0;    while (1)      {	  /* scrolling the result set rows */	  ret = sqlite3_step (stmt);	  if (ret == SQLITE_DONE)	      break;		/* end of result set */	  if (ret == SQLITE_ROW)	    {		const char *v = (const char *) sqlite3_column_text (stmt, 0);		int len = sqlite3_column_bytes (stmt, 0);		if (rt)		    free (rt);		rt = malloc (len + 1);		strcpy (rt, v);		v = (const char *) sqlite3_column_text (stmt, 1);		len = sqlite3_column_bytes (stmt, 1);		if (rg)		    free (rg);		rg = malloc (len + 1);		strcpy (rg, v);		count++;	    }      }    sqlite3_finalize (stmt);    if (count != 1)	return vspidx_find_view_rtree (sqlite, db_prefix, table_name,				       real_table, real_geom);    else      {	  *real_table = rt;	  *real_geom = rg;      }    return 1;}
开发者ID:CMUPracticum,项目名称:nutiteq-demo,代码行数:70,


示例13: vspidx_find_view_rtree

static intvspidx_find_view_rtree (sqlite3 * sqlite, const char *db_prefix,			const char *table_name, char **real_table,			char **real_geom){/* attempts to find the corresponding RTree Geometry Column - SpatialView */    sqlite3_stmt *stmt;    char *sql_statement;    int ret;    int count = 0;    char *rt = NULL;    char *rg = NULL;/* testing if views_geometry_columns exists */    if (db_prefix == NULL)      {	  sql_statement = sqlite3_mprintf ("SELECT tbl_name FROM sqlite_master "					   "WHERE type = 'table' AND tbl_name = 'views_geometry_columns'");      }    else      {	  char *quoted_db = gaiaDoubleQuotedSql (db_prefix);	  sql_statement =	      sqlite3_mprintf ("SELECT tbl_name FROM /"%s/".sqlite_master "			       "WHERE type = 'table' AND tbl_name = 'views_geometry_columns'",			       quoted_db);	  free (quoted_db);      }    ret =	sqlite3_prepare_v2 (sqlite, sql_statement, strlen (sql_statement),			    &stmt, NULL);    sqlite3_free (sql_statement);    if (ret != SQLITE_OK)	return 0;    while (1)      {	  /* scrolling the result set rows */	  ret = sqlite3_step (stmt);	  if (ret == SQLITE_DONE)	      break;		/* end of result set */	  if (ret == SQLITE_ROW)	      count++;      }    sqlite3_finalize (stmt);    if (count != 1)	return 0;    count = 0;/* attempting to find the RTree Geometry Column */    if (db_prefix == NULL)      {	  sql_statement =	      sqlite3_mprintf ("SELECT a.f_table_name, a.f_geometry_column "			       "FROM views_geometry_columns AS a "			       "JOIN geometry_columns AS b ON ("			       "Upper(a.f_table_name) = Upper(b.f_table_name) AND "			       "Upper(a.f_geometry_column) = Upper(b.f_geometry_column)) "			       "WHERE Upper(a.view_name) = Upper(%Q) AND b.spatial_index_enabled = 1",			       table_name);      }    else      {	  char *quoted_db = gaiaDoubleQuotedSql (db_prefix);	  sql_statement =	      sqlite3_mprintf ("SELECT a.f_table_name, a.f_geometry_column "			       "FROM /"%s/".views_geometry_columns AS a "			       "JOIN /"%s/".geometry_columns AS b ON ("			       "Upper(a.f_table_name) = Upper(b.f_table_name) AND "			       "Upper(a.f_geometry_column) = Upper(b.f_geometry_column)) "			       "WHERE Upper(a.view_name) = Upper(%Q) AND b.spatial_index_enabled = 1",			       quoted_db, quoted_db, table_name);	  free (quoted_db);      }    ret =	sqlite3_prepare_v2 (sqlite, sql_statement, strlen (sql_statement),			    &stmt, NULL);    sqlite3_free (sql_statement);    if (ret != SQLITE_OK)	return 0;    while (1)      {	  /* scrolling the result set rows */	  ret = sqlite3_step (stmt);	  if (ret == SQLITE_DONE)	      break;		/* end of result set */	  if (ret == SQLITE_ROW)	    {		const char *v = (const char *) sqlite3_column_text (stmt, 0);		int len = sqlite3_column_bytes (stmt, 0);		if (rt)		    free (rt);		rt = malloc (len + 1);		strcpy (rt, v);		v = (const char *) sqlite3_column_text (stmt, 1);		len = sqlite3_column_bytes (stmt, 1);		if (rg)		    free (rg);		rg = malloc (len + 1);		strcpy (rg, v);		count++;//.........这里部分代码省略.........
开发者ID:CMUPracticum,项目名称:nutiteq-demo,代码行数:101,


示例14: flexi_init

int flexi_init(sqlite3 *db,               char **pzErrMsg,               const sqlite3_api_routines *pApi, FlexiliteContext_t **pDBCtx){    int result;    *pDBCtx = (FlexiliteContext_t *) sqlite3_malloc(sizeof(FlexiliteContext_t));    FlexiliteContext_t *pCtx = *pDBCtx;    pCtx->db = db;    pCtx->L = lua_newstate(lua_alloc_handler, pDBCtx);    if (pCtx->L == nullptr)    {        *pzErrMsg = sqlite3_mprintf("Flexilite: cannot initialize LuaJIT");        result = SQLITE_ERROR;        goto ONERROR;    }    lua_gc(pCtx->L, LUA_GCSTOP, 0);    luaL_openlibs(pCtx->L);    lua_gc(pCtx->L, LUA_GCRESTART, -1);    /*     * Open other Lua modules implemented in C    */    luaopen_lfs(pCtx->L);    luaopen_base64(pCtx->L);    luaopen_lsqlite3(pCtx->L);    luaopen_cjson(pCtx->L);    luaopen_cjson_safe(pCtx->L);    // Create context, by passing SQLite db connection    if (luaL_dostring(pCtx->L, "return require 'sqlite3'"))    {        *pzErrMsg = sqlite3_mprintf("Flexilite require sqlite3: %s/n", lua_tostring(pCtx->L, -1));        result = SQLITE_ERROR;        goto ONERROR;    }    lua_getfield(pCtx->L, -1, "open_ptr");    lua_pushlightuserdata(pCtx->L, db);    if (lua_pcall(pCtx->L, 1, 1, 0))    {        *pzErrMsg = sqlite3_mprintf("Flexilite sqlite.open_ptr: %s/n", lua_tostring(pCtx->L, -1));        result = SQLITE_ERROR;        goto ONERROR;    }    pCtx->SQLiteConn_Index = luaL_ref(pCtx->L, LUA_REGISTRYINDEX);    // Create context, by passing SQLite db connection    if (luaL_dostring(pCtx->L,                      "package.cpath = package.cpath .. ';./libFlexilite.dll'; return require ('DBContext')"))    {        *pzErrMsg = sqlite3_mprintf("Flexilite require DBContext: %s/n", lua_tostring(pCtx->L, -1));        result = SQLITE_ERROR;        goto ONERROR;    }    lua_rawgeti(pCtx->L, LUA_REGISTRYINDEX, pCtx->SQLiteConn_Index);    if (lua_pcall(pCtx->L, 1, 1, 0))    {        *pzErrMsg = sqlite3_mprintf("Flexilite DBContext(db): %s/n", lua_tostring(pCtx->L, -1));        result = SQLITE_ERROR;        goto ONERROR;    }    pCtx->DBContext_Index = luaL_ref(pCtx->L, LUA_REGISTRYINDEX);    result = SQLITE_OK;    goto EXIT;    ONERROR:    flexi_free(pCtx);    *pDBCtx = nullptr;    EXIT:    return result;}
开发者ID:slanska,项目名称:flexilite,代码行数:80,


示例15: testFunc

/*** Implementation of a special SQL scalar function for testing tokenizers ** designed to be used in concert with the Tcl testing framework. This** function must be called with two arguments:****   SELECT <function-name>(<key-name>, <input-string>);**   SELECT <function-name>(<key-name>, <pointer>);**** where <function-name> is the name passed as the second argument** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer')** concatenated with the string '_test' (e.g. 'fts3_tokenizer_test').**** The return value is a string that may be interpreted as a Tcl** list. For each token in the <input-string>, three elements are** added to the returned list. The first is the token position, the ** second is the token text (folded, stemmed, etc.) and the third is the** substring of <input-string> associated with the token. For example, ** using the built-in "simple" tokenizer:****   SELECT fts_tokenizer_test('simple', 'I don't see how');**** will return the string:****   "{0 i I 1 dont don't 2 see see 3 how how}"**   */static void testFunc(  sqlite3_context *context,  int argc,  sqlite3_value **argv){  Fts3Hash *pHash;  sqlite3_tokenizer_module *p;  sqlite3_tokenizer *pTokenizer = 0;  sqlite3_tokenizer_cursor *pCsr = 0;  const char *zErr = 0;  const char *zName;  int nName;  const char *zInput;  int nInput;  const char *zArg = 0;  const char *zToken;  int nToken;  int iStart;  int iEnd;  int iPos;  Tcl_Obj *pRet;  assert( argc==2 || argc==3 );  nName = sqlite3_value_bytes(argv[0]);  zName = (const char *)sqlite3_value_text(argv[0]);  nInput = sqlite3_value_bytes(argv[argc-1]);  zInput = (const char *)sqlite3_value_text(argv[argc-1]);  if( argc==3 ){    zArg = (const char *)sqlite3_value_text(argv[1]);  }  pHash = (Fts3Hash *)sqlite3_user_data(context);  p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1);  if( !p ){    char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);    sqlite3_result_error(context, zErr, -1);    sqlite3_free(zErr);    return;  }  pRet = Tcl_NewObj();  Tcl_IncrRefCount(pRet);  if( SQLITE_OK!=p->xCreate(zArg ? 1 : 0, &zArg, &pTokenizer) ){    zErr = "error in xCreate()";    goto finish;  }  pTokenizer->pModule = p;  if( SQLITE_OK!=p->xOpen(pTokenizer, zInput, nInput, &pCsr) ){    zErr = "error in xOpen()";    goto finish;  }  pCsr->pTokenizer = pTokenizer;  while( SQLITE_OK==p->xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos) ){    Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(iPos));    Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken));    zToken = &zInput[iStart];    nToken = iEnd-iStart;    Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken));  }  if( SQLITE_OK!=p->xClose(pCsr) ){    zErr = "error in xClose()";    goto finish;  }//.........这里部分代码省略.........
开发者ID:AlexL871,项目名称:rt-thread-stm32f4discovery,代码行数:101,


示例16: pkg_update

intpkg_update(struct pkg_repo *repo, bool force){	char repofile[MAXPATHLEN];	const char *dbdir = NULL;	struct stat st;	time_t t = 0;	sqlite3 *sqlite = NULL;	char *req = NULL;	int64_t res;	sqlite3_initialize();	if (pkg_config_string(PKG_CONFIG_DBDIR, &dbdir) != EPKG_OK) {		pkg_emit_error("Cant get dbdir config entry");		return (EPKG_FATAL);	}	snprintf(repofile, sizeof(repofile), "%s/%s.sqlite", dbdir, pkg_repo_name(repo));	if (stat(repofile, &st) != -1)		t = force ? 0 : st.st_mtime;	if (t != 0) {		if (sqlite3_open(repofile, &sqlite) != SQLITE_OK) {			pkg_emit_error("Unable to open local database");			return (EPKG_FATAL);		}		if (get_pragma(sqlite, "SELECT count(name) FROM sqlite_master "		    "WHERE type='table' AND name='repodata';", &res) != EPKG_OK) {			pkg_emit_error("Unable to query repository");			sqlite3_close(sqlite);			return (EPKG_FATAL);		}		if (res != 1) {			t = 0;			if (sqlite != NULL) {				sqlite3_close(sqlite);				sqlite = NULL;			}		}	}	if (t != 0) {		req = sqlite3_mprintf("select count(key) from repodata "		    "WHERE key = /"packagesite/" and value = '%q'", pkg_repo_url(repo));		if (get_pragma(sqlite, req, &res) != EPKG_OK) {			sqlite3_free(req);			pkg_emit_error("Unable to query repository");			sqlite3_close(sqlite);			return (EPKG_FATAL);		}		sqlite3_free(req);		if (res != 1) {			t = 0;			if (sqlite != NULL) {				sqlite3_close(sqlite);				sqlite = NULL;			}			unlink(repofile);		}	}	res = pkg_update_incremental(repofile, repo, &t);	if (res != EPKG_OK && res != EPKG_UPTODATE) {		pkg_emit_notice("No digest falling back on legacy catalog format");		/* Still try to do full upgrade */		if ((res = pkg_update_full(repofile, repo, &t)) != EPKG_OK)			goto cleanup;	}	res = EPKG_OK;cleanup:	/* Set mtime from http request if possible */	if (t != 0) {		struct timeval ftimes[2] = {			{			.tv_sec = t,			.tv_usec = 0			},			{			.tv_sec = t,			.tv_usec = 0			}		};
开发者ID:renchap,项目名称:pkg,代码行数:92,


示例17: cangjie_get_characters

int cangjie_get_characters(Cangjie          *cj,                           char             *input_code,                           CangjieCharList **l) {    CangjieCharList *tmp = NULL;    sqlite3_stmt *stmt;    char *cj_query;    char *query_code;    char *star_ptr;    char *query;    int ret;    if (input_code == NULL || strlen(input_code) == 0 || strlen(input_code) > 5) {        return CANGJIE_INVALID;    }    if (input_code[0] == '*' || input_code[strlen(input_code) - 1] == '*') {        return CANGJIE_INVALID;    }    // Start with the Cangjie instance's cj_query    cj_query = calloc(strlen(cj->cj_query) + MAX_LEN_CODE_QUERY + 1,                      sizeof(char));    if (cj_query == NULL) {        return CANGJIE_NOMEM;    }    strcpy(cj_query, cj->cj_query);    query_code = calloc(6, sizeof(char));    if (query_code == NULL) {        free(cj_query);        return CANGJIE_NOMEM;    }    strncpy(query_code, input_code, 5);    // Handle optional wildcards    star_ptr = strchr(query_code, '*');    if (star_ptr == NULL) {        strcat(cj_query, "AND code = '%q';");    } else {        strcat(cj_query, "AND code GLOB '%q';");    }    query = sqlite3_mprintf(cj_query, cj->version, query_code);    free(query_code);    free(cj_query);    if (query == NULL) {        return CANGJIE_NOMEM;    }    ret = sqlite3_prepare_v2(cj->db, query, -1, &stmt, 0);    if (ret != SQLITE_OK) {        // FIXME: Unhandled error codes        return ret;    }    sqlite3_free(query);    while (1) {        ret = sqlite3_step(stmt);        if (ret == SQLITE_ROW) {            char *chchar = (char *)sqlite3_column_text(stmt, 0);            char *code = (char *)sqlite3_column_text(stmt, 1);            uint32_t frequency = (uint32_t)sqlite3_column_int(stmt, 2);            CangjieChar *c;            int ret = cangjie_char_new(&c, chchar, code, frequency);            if (ret != CANGJIE_OK) {                return ret;            }            ret = cangjie_char_list_prepend(&tmp, c);            if (ret != CANGJIE_OK) {                return ret;            }        } else if(ret == SQLITE_DONE) {            // All rows finished            sqlite3_finalize(stmt);            break;        } else {            // Some error encountered            return CANGJIE_DBERROR;        }    }    if (tmp == NULL) {        return CANGJIE_NOCHARS;    }    *l = tmp;    return CANGJIE_OK;}
开发者ID:anthonywong,项目名称:libcangjie-pkg,代码行数:96,


示例18: sqlite3LoadExtension

/*** Attempt to load an SQLite extension library contained in the file** zFile.  The entry point is zProc.  zProc may be 0 in which case a** default entry point name (sqlite3_extension_init) is used.  Use** of the default name is recommended.**** Return SQLITE_OK on success and SQLITE_ERROR if something goes wrong.**** If an error occurs and pzErrMsg is not 0, then fill *pzErrMsg with ** error message text.  The calling function should free this memory** by calling sqlite3DbFree(db, ).*/static int sqlite3LoadExtension(  sqlite3 *db,          /* Load the extension into this database connection */  const char *zFile,    /* Name of the shared library containing extension */  const char *zProc,    /* Entry point.  Use "sqlite3_extension_init" if 0 */  char **pzErrMsg       /* Put error message here if not 0 */){  sqlite3_vfs *pVfs = db->pVfs;  void *handle;  int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);  char *zErrmsg = 0;  const char *zEntry;  char *zAltEntry = 0;  void **aHandle;  u64 nMsg = 300 + sqlite3Strlen30(zFile);  int ii;  /* Shared library endings to try if zFile cannot be loaded as written */  static const char *azEndings[] = {#if SQLITE_OS_WIN     "dll"   #elif defined(__APPLE__)     "dylib"#else     "so"#endif  };  if( pzErrMsg ) *pzErrMsg = 0;  /* Ticket #1863.  To avoid a creating security problems for older  ** applications that relink against newer versions of SQLite, the  ** ability to run load_extension is turned off by default.  One  ** must call sqlite3_enable_load_extension() to turn on extension  ** loading.  Otherwise you get the following error.  */  if( (db->flags & SQLITE_LoadExtension)==0 ){    if( pzErrMsg ){      *pzErrMsg = sqlite3_mprintf("not authorized");    }    return SQLITE_ERROR;  }  zEntry = zProc ? zProc : "sqlite3_extension_init";  handle = sqlite3OsDlOpen(pVfs, zFile);#if SQLITE_OS_UNIX || SQLITE_OS_WIN  for(ii=0; ii<ArraySize(azEndings) && handle==0; ii++){    char *zAltFile = sqlite3_mprintf("%s.%s", zFile, azEndings[ii]);    if( zAltFile==0 ) return SQLITE_NOMEM;    handle = sqlite3OsDlOpen(pVfs, zAltFile);    sqlite3_free(zAltFile);  }#endif  if( handle==0 ){    if( pzErrMsg ){      *pzErrMsg = zErrmsg = sqlite3_malloc64(nMsg);      if( zErrmsg ){        sqlite3_snprintf(nMsg, zErrmsg,             "unable to open shared library [%s]", zFile);        sqlite3OsDlError(pVfs, nMsg-1, zErrmsg);      }    }    return SQLITE_ERROR;  }  xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))                   sqlite3OsDlSym(pVfs, handle, zEntry);  /* If no entry point was specified and the default legacy  ** entry point name "sqlite3_extension_init" was not found, then  ** construct an entry point name "sqlite3_X_init" where the X is  ** replaced by the lowercase value of every ASCII alphabetic   ** character in the filename after the last "/" upto the first ".",  ** and eliding the first three characters if they are "lib".    ** Examples:  **  **    /usr/local/lib/libExample5.4.3.so ==>  sqlite3_example_init  **    C:/lib/mathfuncs.dll              ==>  sqlite3_mathfuncs_init  */  if( xInit==0 && zProc==0 ){    int iFile, iEntry, c;    int ncFile = sqlite3Strlen30(zFile);    zAltEntry = sqlite3_malloc64(ncFile+30);    if( zAltEntry==0 ){      sqlite3OsDlClose(pVfs, handle);      return SQLITE_NOMEM;    }    memcpy(zAltEntry, "sqlite3_", 8);//.........这里部分代码省略.........
开发者ID:Amazeus-Mozart,项目名称:sqlcipher,代码行数:101,


示例19: mbtiles_write_metadata

void mbtiles_write_metadata(sqlite3 *outdb, const char *fname, char **layername, int minzoom, int maxzoom, double minlat, double minlon, double maxlat, double maxlon, double midlat, double midlon, struct pool **file_keys, int nlayers, int forcetable) {	char *sql, *err;	sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('name', %Q);", fname);	if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {		fprintf(stderr, "set name in metadata: %s/n", err);		if (!forcetable) {			exit(EXIT_FAILURE);		}	}	sqlite3_free(sql);	sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('description', %Q);", fname);	if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {		fprintf(stderr, "set description in metadata: %s/n", err);		if (!forcetable) {			exit(EXIT_FAILURE);		}	}	sqlite3_free(sql);	sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('version', %d);", 1);	if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {		fprintf(stderr, "set version : %s/n", err);		if (!forcetable) {			exit(EXIT_FAILURE);		}	}	sqlite3_free(sql);	sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('minzoom', %d);", minzoom);	if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {		fprintf(stderr, "set minzoom: %s/n", err);		if (!forcetable) {			exit(EXIT_FAILURE);		}	}	sqlite3_free(sql);	sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('maxzoom', %d);", maxzoom);	if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {		fprintf(stderr, "set maxzoom: %s/n", err);		if (!forcetable) {			exit(EXIT_FAILURE);		}	}	sqlite3_free(sql);	sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('center', '%f,%f,%d');", midlon, midlat, maxzoom);	if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {		fprintf(stderr, "set center: %s/n", err);		if (!forcetable) {			exit(EXIT_FAILURE);		}	}	sqlite3_free(sql);	sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('bounds', '%f,%f,%f,%f');", minlon, minlat, maxlon, maxlat);	if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {		fprintf(stderr, "set bounds: %s/n", err);		if (!forcetable) {			exit(EXIT_FAILURE);		}	}	sqlite3_free(sql);	sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('type', %Q);", "overlay");	if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {		fprintf(stderr, "set type: %s/n", err);		if (!forcetable) {			exit(EXIT_FAILURE);		}	}	sqlite3_free(sql);	sql = sqlite3_mprintf("INSERT INTO metadata (name, value) VALUES ('format', %Q);", "pbf");	if (sqlite3_exec(outdb, sql, NULL, NULL, &err) != SQLITE_OK) {		fprintf(stderr, "set format: %s/n", err);		if (!forcetable) {			exit(EXIT_FAILURE);		}	}	sqlite3_free(sql);	char *buf = strdup("{");	aprintf(&buf, "/"vector_layers/": [ ");	int i;	for (i = 0; i < nlayers; i++) {		if (i != 0) {			aprintf(&buf, ", ");		}		aprintf(&buf, "{ /"id/": /"");		quote(&buf, layername[i]);		aprintf(&buf, "/", /"description/": /"/", /"minzoom/": %d, /"maxzoom/": %d, /"fields/": {", minzoom, maxzoom);		int n = 0;		struct pool_val *pv;		for (pv = file_keys[i]->head; pv != NULL; pv = pv->next) {//.........这里部分代码省略.........
开发者ID:jaylev1,项目名称:tippecanoe,代码行数:101,


示例20: csvInit

//.........这里部分代码省略.........    *pzErr = sqlite3_mprintf("%s", aErrMsg[5]);    return SQLITE_NOMEM;  }  /* intialize virtual table object */  memset(pCSV, 0, sizeof(CSV)+nDb+nName+nFile+3);  pCSV->db = db;  pCSV->nBusy = 1;  pCSV->base.pModule = &csvModule;  pCSV->cDelim = cDelim;  pCSV->zDb = (char *)&pCSV[1];  pCSV->zName = &pCSV->zDb[nDb+1];  pCSV->zFile = &pCSV->zName[nName+1];  memcpy(pCSV->zDb, argv[1], nDb);  memcpy(pCSV->zName, argv[2], nName);  /* pull out name of csv file (remove quotes) */  if( argv[3][0] == '/'' ){    memcpy( pCSV->zFile, argv[3]+1, nFile-2 );    pCSV->zFile[nFile-2] = '/0';  }else{    memcpy( pCSV->zFile, argv[3], nFile );  }  /* if a custom delimiter specified, pull it out */  if( argc > 4 ){    if( argv[4][0] == '/'' ){      pCSV->cDelim = argv[4][1];    }else{      pCSV->cDelim = argv[4][0];    }  }  /* should the header zRow be used */  if( argc > 5 ){    if( !strcmp(argv[5], "USE_HEADER_ROW") ){      bUseHeaderRow = -1;    }  }  /* open the source csv file */  pCSV->f = csv_open( pCSV );  if( !pCSV->f ){    *pzErr = sqlite3_mprintf(aErrMsg[2], pCSV->zFile);    csvRelease( pCSV );    return SQLITE_ERROR;  }  /* Read first zRow to obtain column names/number */  csvCsr.base.pVtab = (sqlite3_vtab *)pCSV;  rc = csvNext( (sqlite3_vtab_cursor *)&csvCsr );  if( (SQLITE_OK!=rc) || (pCSV->nCol<=0) ){    *pzErr = sqlite3_mprintf("%s", aErrMsg[3]);    csvRelease( pCSV );    return SQLITE_ERROR;  }  if( bUseHeaderRow ){    pCSV->offsetFirstRow = csv_tell( pCSV );  }  /* Create the underlying relational database schema. If  ** that is successful, call sqlite3_declare_vtab() to configure  ** the csv table schema.  */  zSql = sqlite3_mprintf("CREATE TABLE x(");  for(i=0; zSql && i<pCSV->nCol; i++){    const char *zTail = (i+1<pCSV->nCol) ? ", " : ");";    char *zTmp = zSql;    if( bUseHeaderRow ){      const char *zCol = pCSV->aCols[i];      if( !zCol ){        *pzErr = sqlite3_mprintf("%s", aErrMsg[4]);        sqlite3_free(zSql);        csvRelease( pCSV );        return SQLITE_ERROR;      }      zSql = sqlite3_mprintf("%s/"%s/"%s", zTmp, zCol, zTail); // FIXME Column type (INT/REAL/TEXT)    }else{      zSql = sqlite3_mprintf("%scol%d%s", zTmp, i+1, zTail); // FIXME Column type (INT/REAL/TEXT)    }    sqlite3_free(zTmp);  }  if( !zSql ){    *pzErr = sqlite3_mprintf("%s", aErrMsg[5]);    csvRelease( pCSV );    return SQLITE_NOMEM;  }  rc = sqlite3_declare_vtab( db, zSql );  sqlite3_free(zSql);  if( SQLITE_OK != rc ){    *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));    csvRelease( pCSV );    return SQLITE_ERROR;  }  *ppVtab = (sqlite3_vtab *)pCSV;  *pzErr  = NULL;  return SQLITE_OK;}
开发者ID:gwenn,项目名称:sqlite-csv-ext,代码行数:101,


示例21: closureConnect

/*** xConnect/xCreate method for the closure module. Arguments are:****   argv[0]    -> module name  ("transitive_closure")**   argv[1]    -> database name**   argv[2]    -> table name**   argv[3...] -> arguments*/static int closureConnect(  sqlite3 *db,  void *pAux,  int argc, const char *const*argv,  sqlite3_vtab **ppVtab,  char **pzErr){  int rc = SQLITE_OK;              /* Return code */  closure_vtab *pNew = 0;          /* New virtual table */  const char *zDb = argv[1];  const char *zVal;  int i;  (void)pAux;  *ppVtab = 0;  pNew = sqlite3_malloc( sizeof(*pNew) );  if( pNew==0 ) return SQLITE_NOMEM;  rc = SQLITE_NOMEM;  memset(pNew, 0, sizeof(*pNew));  pNew->db = db;  pNew->zDb = sqlite3_mprintf("%s", zDb);  if( pNew->zDb==0 ) goto closureConnectError;  pNew->zSelf = sqlite3_mprintf("%s", argv[2]);  if( pNew->zSelf==0 ) goto closureConnectError;  for(i=3; i<argc; i++){    zVal = closureValueOfKey("tablename", argv[i]);    if( zVal ){      sqlite3_free(pNew->zTableName);      pNew->zTableName = closureDequote(zVal);      if( pNew->zTableName==0 ) goto closureConnectError;      continue;    }    zVal = closureValueOfKey("idcolumn", argv[i]);    if( zVal ){      sqlite3_free(pNew->zIdColumn);      pNew->zIdColumn = closureDequote(zVal);      if( pNew->zIdColumn==0 ) goto closureConnectError;      continue;    }    zVal = closureValueOfKey("parentcolumn", argv[i]);    if( zVal ){      sqlite3_free(pNew->zParentColumn);      pNew->zParentColumn = closureDequote(zVal);      if( pNew->zParentColumn==0 ) goto closureConnectError;      continue;    }    *pzErr = sqlite3_mprintf("unrecognized argument: [%s]/n", argv[i]);    closureFree(pNew);    *ppVtab = 0;    return SQLITE_ERROR;  }  rc = sqlite3_declare_vtab(db,         "CREATE TABLE x(id,depth,root HIDDEN,tablename HIDDEN,"                        "idcolumn HIDDEN,parentcolumn HIDDEN)"       );#define CLOSURE_COL_ID              0#define CLOSURE_COL_DEPTH           1#define CLOSURE_COL_ROOT            2#define CLOSURE_COL_TABLENAME       3#define CLOSURE_COL_IDCOLUMN        4#define CLOSURE_COL_PARENTCOLUMN    5  if( rc!=SQLITE_OK ){    closureFree(pNew);  }  *ppVtab = &pNew->base;  return rc;closureConnectError:  closureFree(pNew);  return rc;}
开发者ID:HongliYu,项目名称:firefox-ios,代码行数:79,


示例22: SetVTableError

static void SetVTableError(VTableInfo *vtabP, const char *msg){    if (vtabP->vtab.zErrMsg)        sqlite3_free(vtabP->vtab.zErrMsg);    vtabP->vtab.zErrMsg = sqlite3_mprintf("%s", msg);}
开发者ID:digsrc,项目名称:windowstoolset,代码行数:6,


示例23: amatchNext

/*** Advance a cursor to its next row of output*/static int amatchNext(sqlite3_vtab_cursor *cur){  amatch_cursor *pCur = (amatch_cursor*)cur;  amatch_word *pWord = 0;  amatch_avl *pNode;  int isMatch = 0;  amatch_vtab *p = pCur->pVtab;  int nWord;  int rc;  int i;  const char *zW;  amatch_rule *pRule;  char *zBuf = 0;  char nBuf = 0;  char zNext[8];  char zNextIn[8];  int nNextIn;  if( p->pVCheck==0 ){    char *zSql;    if( p->zVocabLang && p->zVocabLang[0] ){      zSql = sqlite3_mprintf(          "SELECT /"%w/" FROM /"%w/"",          " WHERE /"%w/">=?1 AND /"%w/"=?2"          " ORDER BY 1",          p->zVocabWord, p->zVocabTab,          p->zVocabWord, p->zVocabLang      );    }else{      zSql = sqlite3_mprintf(          "SELECT /"%w/" FROM /"%w/""          " WHERE /"%w/">=?1"          " ORDER BY 1",          p->zVocabWord, p->zVocabTab,          p->zVocabWord      );    }    rc = sqlite3_prepare_v2(p->db, zSql, -1, &p->pVCheck, 0);    sqlite3_free(zSql);    if( rc ) return rc;  }  sqlite3_bind_int(p->pVCheck, 2, pCur->iLang);  do{    pNode = amatchAvlFirst(pCur->pCost);    if( pNode==0 ){      pWord = 0;      break;    }    pWord = pNode->pWord;    amatchAvlRemove(&pCur->pCost, &pWord->sCost);#ifdef AMATCH_TRACE_1    printf("PROCESS [%s][%.*s^%s] %d (/"%s/" /"%s/")/n",       pWord->zWord+2, pWord->nMatch, pCur->zInput, pCur->zInput+pWord->nMatch,       pWord->rCost, pWord->zWord, pWord->zCost);#endif    nWord = (int)strlen(pWord->zWord+2);    if( nWord+20>nBuf ){      nBuf = (char)(nWord+100);      zBuf = sqlite3_realloc(zBuf, nBuf);      if( zBuf==0 ) return SQLITE_NOMEM;    }    amatchStrcpy(zBuf, pWord->zWord+2);    zNext[0] = 0;    zNextIn[0] = pCur->zInput[pWord->nMatch];    if( zNextIn[0] ){      for(i=1; i<=4 && (pCur->zInput[pWord->nMatch+i]&0xc0)==0x80; i++){        zNextIn[i] = pCur->zInput[pWord->nMatch+i];      }      zNextIn[i] = 0;      nNextIn = i;    }else{      nNextIn = 0;    }    if( zNextIn[0] && zNextIn[0]!='*' ){      sqlite3_reset(p->pVCheck);      amatchStrcat(zBuf, zNextIn);      sqlite3_bind_text(p->pVCheck, 1, zBuf, nWord+nNextIn, SQLITE_STATIC);      rc = sqlite3_step(p->pVCheck);      if( rc==SQLITE_ROW ){        zW = (const char*)sqlite3_column_text(p->pVCheck, 0);        if( strncmp(zBuf, zW, nWord+nNextIn)==0 ){          amatchAddWord(pCur, pWord->rCost, pWord->nMatch+nNextIn, zBuf, "");        }      }      zBuf[nWord] = 0;    }    while( 1 ){      amatchStrcpy(zBuf+nWord, zNext);      sqlite3_reset(p->pVCheck);      sqlite3_bind_text(p->pVCheck, 1, zBuf, -1, SQLITE_TRANSIENT);      rc = sqlite3_step(p->pVCheck);      if( rc!=SQLITE_ROW ) break;      zW = (const char*)sqlite3_column_text(p->pVCheck, 0);      amatchStrcpy(zBuf+nWord, zNext);//.........这里部分代码省略.........
开发者ID:cris-auts,项目名称:linux_c_study,代码行数:101,


示例24: VTableCreateOrConnect

static int VTableCreateOrConnect(    sqlite3 *sqliteP,    void *clientdata,    int argc,    const char *const *argv,    sqlite3_vtab **vtabPP,    char **errstrP,    int create){    VTableDB *vtdbP = (VTableDB *)clientdata;    VTableInfo *vtabP;    int status;    int i;    Tcl_Obj *objv[4];    Tcl_Interp *interp = vtdbP->vticP->interp;    /*     * argv[0] - name of our module (i.e. PACKAGE_NAME)     * argv[1] - name of database where the virtual table is being created     * argv[2] - name of the table     * argv[3..argc-1] - arguments passed to CREATE VIRTUAL TABLE. argv[3]     *   is the script to invoke, remaining are arguments passed     *   only to the create and connect methods.     */    VTABLE_ASSERT(vtdbP->sqliteP == sqliteP);    if (argc < 4) {        *errstrP = sqlite3_mprintf("Insufficient number of arguments for virtual table");        return SQLITE_ERROR;    }        vtabP = VTableInfoNew(vtdbP, argv[2]);    /*     * argv[3] is the command prefix to be invoked for virtual     * table operations.     */    vtabP->cmdprefixP = Tcl_NewStringObj(argv[3], -1);    Tcl_IncrRefCount(vtabP->cmdprefixP);    if (Tcl_ListObjLength(interp, vtabP->cmdprefixP, &i) != TCL_OK) {        *errstrP = sqlite3_mprintf("Command prefix '%s' does not have a valid list format.", argv[3]);        VTableInfoDelete(vtabP);        return SQLITE_ERROR;    }    objv[0] = vtdbP->dbcmd_objP;    objv[1] = Tcl_NewStringObj(argv[1], -1);  /* DB name */    objv[2] = Tcl_NewStringObj(argv[2], -1); /* virtual table name */    objv[3] = Tcl_NewListObj(0, NULL);    for (i = 4; i < argc; ++i) {        Tcl_ListObjAppendElement(interp, objv[3], Tcl_NewStringObj(argv[i],-1));    }    if (VTableInvokeCmd(interp, vtabP, create ? "xCreate" : "xConnect",                        4, objv) != TCL_OK) {        *errstrP = sqlite3_mprintf("%s", Tcl_GetStringResult(interp));        VTableInfoDelete(vtabP);        return SQLITE_ERROR;    }    /* Return value is DDL that we have to use to create the table */    status = sqlite3_declare_vtab(sqliteP, Tcl_GetStringResult(interp));    if (status != SQLITE_OK) {        VTableDisconnectOrDestroy(vtabP, create); /* Will also delete vtabP */        return status;    }    *vtabPP = &vtabP->vtab;    return SQLITE_OK;}
开发者ID:digsrc,项目名称:windowstoolset,代码行数:69,


示例25: amatchLoadRules

/*** Load the content of the amatch data table into memory.*/static int amatchLoadRules(  sqlite3 *db,                    /* Database handle */  amatch_vtab *p,                 /* Virtual amatch table to configure */  char **pzErr                    /* OUT: Error message */){  int rc = SQLITE_OK;             /* Return code */  char *zSql;                     /* SELECT used to read from rules table */  amatch_rule *pHead = 0;  zSql = sqlite3_mprintf("SELECT * FROM %Q.%Q", p->zDb, p->zCostTab);  if( zSql==0 ){    rc = SQLITE_NOMEM;  }else{    int rc2;                      /* finalize() return code */    sqlite3_stmt *pStmt = 0;    rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);    if( rc!=SQLITE_OK ){      *pzErr = sqlite3_mprintf("%s: %s", p->zClassName, sqlite3_errmsg(db));    }else if( sqlite3_column_count(pStmt)!=4 ){      *pzErr = sqlite3_mprintf("%s: %s has %d columns, expected 4",          p->zClassName, p->zCostTab, sqlite3_column_count(pStmt)      );      rc = SQLITE_ERROR;    }else{      while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){        amatch_rule *pRule = 0;        rc = amatchLoadOneRule(p, pStmt, &pRule, pzErr);        if( pRule ){          pRule->pNext = pHead;          pHead = pRule;        }      }    }    rc2 = sqlite3_finalize(pStmt);    if( rc==SQLITE_OK ) rc = rc2;  }  sqlite3_free(zSql);  /* All rules are now in a singly linked list starting at pHead. This  ** block sorts them by cost and then sets amatch_vtab.pRule to point to   ** point to the head of the sorted list.  */  if( rc==SQLITE_OK ){    unsigned int i;    amatch_rule *pX;    amatch_rule *a[15];    for(i=0; i<sizeof(a)/sizeof(a[0]); i++) a[i] = 0;    while( (pX = pHead)!=0 ){      pHead = pX->pNext;      pX->pNext = 0;      for(i=0; a[i] && i<sizeof(a)/sizeof(a[0])-1; i++){        pX = amatchMergeRules(a[i], pX);        a[i] = 0;      }      a[i] = amatchMergeRules(a[i], pX);    }    for(pX=a[0], i=1; i<sizeof(a)/sizeof(a[0]); i++){      pX = amatchMergeRules(a[i], pX);    }    p->pRule = amatchMergeRules(p->pRule, pX);  }else{    /* An error has occurred. Setting p->pRule to point to the head of the    ** allocated list ensures that the list will be cleaned up in this case.    */    assert( p->pRule==0 );    p->pRule = pHead;  }  return rc;}
开发者ID:cris-auts,项目名称:linux_c_study,代码行数:73,


示例26: xBestIndex

int xBestIndex(sqlite3_vtab *sqltabP, sqlite3_index_info *infoP){    VTableInfo *vtabP = (VTableInfo *) sqltabP;    Tcl_Obj *objv[3];    Tcl_Interp *interp;    Tcl_Obj *constraints;    Tcl_Obj *order;    int i;    char *s;    Tcl_Obj **response;    int   nobjs;    Tcl_Obj **usage;    int       nusage;    if (vtabP->vtdbP == NULL || (interp = vtabP->vtdbP->vticP->interp) == NULL) {        /* Should not really happen */        SetVTableError(vtabP, gNullInterpError);        return SQLITE_ERROR;    }    constraints = Tcl_NewListObj(0, NULL);    for (i = 0; i < infoP->nConstraint; ++i) {        objv[0] = Tcl_NewIntObj(infoP->aConstraint[i].iColumn);        switch (infoP->aConstraint[i].op) {        case 2: s = "eq" ; break;        case 4: s = "gt" ; break;        case 8: s = "le" ; break;        case 16: s = "lt" ; break;        case 32: s = "ge" ; break;        case 64: s = "match"; break;        default:            SetVTableError(vtabP, "Unknown or unsupported constraint operator.");            return SQLITE_ERROR;        }        objv[1] = Tcl_NewStringObj(s, -1);        objv[2] = Tcl_NewBooleanObj(infoP->aConstraint[i].usable);        Tcl_ListObjAppendElement(interp, constraints, Tcl_NewListObj(3, objv));    }    order = Tcl_NewListObj(0, NULL);    for (i = 0; i < infoP->nOrderBy; ++i) {        objv[0] = Tcl_NewIntObj(infoP->aOrderBy[i].iColumn);        objv[1] = Tcl_NewBooleanObj(infoP->aOrderBy[i].desc);        Tcl_ListObjAppendElement(interp, order, Tcl_NewListObj(2, objv));    }    objv[0] = constraints;    objv[1] = order;    if (VTableInvokeCmd(interp, vtabP, "xBestIndex", 2, objv) != TCL_OK) {        SetVTableErrorFromInterp(vtabP, interp);        return SQLITE_ERROR;    }    /* Parse and return the response */    if (Tcl_ListObjGetElements(interp, Tcl_GetObjResult(interp),                               &nobjs, &response) != TCL_OK)        goto bad_response;    if (nobjs == 0)        return SQLITE_OK;    if (nobjs != 5) {        /* If non-empty, list must have exactly five elements */        goto bad_response;    }    if (Tcl_ListObjGetElements(interp, response[0],                               &nusage, &usage) != TCL_OK        || nusage > infoP->nConstraint) {        /*         * Length of constraints used must not be greater than original         * number of constraints         * TBD - should it be exactly equal ?         */        goto bad_response;    }    for (i = 0; i < nusage; ++i) {        Tcl_Obj **usage_constraint;        int nusage_constraint;        int argindex;        int omit;        if (Tcl_ListObjGetElements(interp, usage[i],                                   &nusage_constraint, &usage_constraint) != TCL_OK            || nusage_constraint != 2            || Tcl_GetIntFromObj(interp, usage_constraint[0], &argindex) != TCL_OK            || Tcl_GetBooleanFromObj(interp, usage_constraint[1], &omit) != TCL_OK            ) {            goto bad_response;        }        infoP->aConstraintUsage[i].argvIndex = argindex;        infoP->aConstraintUsage[i].omit = omit;    }        if (Tcl_GetIntFromObj(interp, response[1], &infoP->idxNum) != TCL_OK)        goto bad_response;        s = Tcl_GetStringFromObj(response[2], &i);    if (i) {        infoP->idxStr = sqlite3_mprintf("%s", s);//.........这里部分代码省略.........
开发者ID:digsrc,项目名称:windowstoolset,代码行数:101,


示例27: schemaNext

/*** Advance the cursor to the next row.*/static int schemaNext(sqlite3_vtab_cursor *cur){  int rc = SQLITE_OK;  schema_cursor *pCur = (schema_cursor *)cur;  schema_vtab *pVtab = (schema_vtab *)(cur->pVtab);  char *zSql = 0;  while( !pCur->pColumnList || SQLITE_ROW!=sqlite3_step(pCur->pColumnList) ){    if( SQLITE_OK!=(rc = finalize(&pCur->pColumnList)) ) goto next_exit;    while( !pCur->pTableList || SQLITE_ROW!=sqlite3_step(pCur->pTableList) ){      if( SQLITE_OK!=(rc = finalize(&pCur->pTableList)) ) goto next_exit;      assert(pCur->pDbList);      while( SQLITE_ROW!=sqlite3_step(pCur->pDbList) ){        rc = finalize(&pCur->pDbList);        goto next_exit;      }      /* Set zSql to the SQL to pull the list of tables from the       ** sqlite_master (or sqlite_temp_master) table of the database      ** identfied by the row pointed to by the SQL statement pCur->pDbList      ** (iterating through a "PRAGMA database_list;" statement).      */      if( sqlite3_column_int(pCur->pDbList, 0)==1 ){        zSql = sqlite3_mprintf(            "SELECT name FROM sqlite_temp_master WHERE type='table'"        );      }else{        sqlite3_stmt *pDbList = pCur->pDbList;        zSql = sqlite3_mprintf(            "SELECT name FROM %Q.sqlite_master WHERE type='table'",             sqlite3_column_text(pDbList, 1)        );      }      if( !zSql ){        rc = SQLITE_NOMEM;        goto next_exit;      }      rc = sqlite3_prepare(pVtab->db, zSql, -1, &pCur->pTableList, 0);      sqlite3_free(zSql);      if( rc!=SQLITE_OK ) goto next_exit;    }    /* Set zSql to the SQL to the table_info pragma for the table currently    ** identified by the rows pointed to by statements pCur->pDbList and    ** pCur->pTableList.    */    zSql = sqlite3_mprintf("PRAGMA %Q.table_info(%Q)",         sqlite3_column_text(pCur->pDbList, 1),        sqlite3_column_text(pCur->pTableList, 0)    );    if( !zSql ){      rc = SQLITE_NOMEM;      goto next_exit;    }    rc = sqlite3_prepare(pVtab->db, zSql, -1, &pCur->pColumnList, 0);    sqlite3_free(zSql);    if( rc!=SQLITE_OK ) goto next_exit;  }  pCur->rowid++;next_exit:  /* TODO: Handle rc */  return rc;}
开发者ID:cdaffara,项目名称:symbiandump-mw1,代码行数:70,


示例28: vtxt_create

static intvtxt_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,	     sqlite3_vtab ** ppVTab, char **pzErr){/* creates the virtual table connected to some TEXT file */    char path[2048];    char encoding[128];    const char *vtable;    const char *pEncoding = NULL;    int len;    gaiaTextReaderPtr text = NULL;    const char *pPath = NULL;    char field_separator = '/t';    char text_separator = '"';    char decimal_separator = '.';    char first_line_titles = 1;    int i;    char sql[65535];    int seed;    int dup;    int idup;    char dummyName[4096];    char **col_name = NULL;    VirtualTextPtr p_vt;    if (pAux)	pAux = pAux;		/* unused arg warning suppression *//* checking for TEXTfile PATH */    if (argc >= 5 && argc <= 9)      {	  vtable = argv[1];	  pPath = argv[3];	  len = strlen (pPath);	  if ((*(pPath + 0) == '/'' || *(pPath + 0) == '"')	      && (*(pPath + len - 1) == '/'' || *(pPath + len - 1) == '"'))	    {		/* the path is enclosed between quotes - we need to dequote it */		strcpy (path, pPath + 1);		len = strlen (path);		*(path + len - 1) = '/0';	    }	  else	      strcpy (path, pPath);	  pEncoding = argv[4];	  len = strlen (pEncoding);	  if ((*(pEncoding + 0) == '/'' || *(pEncoding + 0) == '"')	      && (*(pEncoding + len - 1) == '/''		  || *(pEncoding + len - 1) == '"'))	    {		/* the charset-name is enclosed between quotes - we need to dequote it */		strcpy (encoding, pEncoding + 1);		len = strlen (encoding);		*(encoding + len - 1) = '/0';	    }	  else	      strcpy (encoding, pEncoding);	  if (argc >= 6)	    {		if (*(argv[5]) == '0' || *(argv[5]) == 'n' || *(argv[5]) == 'N')		    first_line_titles = 0;	    }	  if (argc >= 7)	    {		if (strcasecmp (argv[6], "COMMA") == 0)		    decimal_separator = ',';		if (strcasecmp (argv[6], "POINT") == 0)		    decimal_separator = '.';	    }	  if (argc >= 8)	    {		if (strcasecmp (argv[7], "SINGLEQUOTE") == 0)		    text_separator = '/'';		if (strcasecmp (argv[7], "DOUBLEQUOTE") == 0)		    text_separator = '"';		if (strcasecmp (argv[7], "NONE") == 0)		    text_separator = '/0';	    }	  if (argc == 9)	    {		if (strlen (argv[8]) == 3)		  {		      if (strcasecmp (argv[8], "TAB") == 0)			  field_separator = '/t';		      if (*(argv[8] + 0) == '/'' && *(argv[8] + 2) == '/'')			  field_separator = *(argv[8] + 1);		  }	    }      }    else      {	  *pzErr =	      sqlite3_mprintf	      ("[VirtualText module] CREATE VIRTUAL: illegal arg list/n"	       "/t/t{ text_path, encoding [, first_row_as_titles [, [decimal_separator [, text_separator, [field_separator] ] ] ] }/n");	  return SQLITE_ERROR;      }    p_vt = (VirtualTextPtr) sqlite3_malloc (sizeof (VirtualText));    if (!p_vt)	return SQLITE_NOMEM;    p_vt->pModule = &virtualtext_module;    p_vt->nRef = 0;//.........这里部分代码省略.........
开发者ID:kochizufan,项目名称:spatiasql.js,代码行数:101,


示例29: sqlite3LoadExtension

/*** Attempt to load an SQLite extension library contained in the file** zFile.  The entry point is zProc.  zProc may be 0 in which case a** default entry point name (sqlite3_extension_init) is used.  Use** of the default name is recommended.**** Return SQLITE_OK on success and SQLITE_ERROR if something goes wrong.**** If an error occurs and pzErrMsg is not 0, then fill *pzErrMsg with ** error message text.  The calling function should free this memory** by calling sqlite3DbFree(db, ).*/static int sqlite3LoadExtension(  sqlite3 *db,          /* Load the extension into this database connection */  const char *zFile,    /* Name of the shared library containing extension */  const char *zProc,    /* Entry point.  Use "sqlite3_extension_init" if 0 */  char **pzErrMsg       /* Put error message here if not 0 */){  sqlite3_vfs *pVfs = db->pVfs;  void *handle;  int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);  char *zErrmsg = 0;  void **aHandle;  /* Ticket #1863.  To avoid a creating security problems for older  ** applications that relink against newer versions of SQLite, the  ** ability to run load_extension is turned off by default.  One  ** must call sqlite3_enable_load_extension() to turn on extension  ** loading.  Otherwise you get the following error.  */  if( (db->flags & SQLITE_LoadExtension)==0 ){    if( pzErrMsg ){      *pzErrMsg = sqlite3_mprintf("not authorized");    }    return SQLITE_ERROR;  }  if( zProc==0 ){    zProc = "sqlite3_extension_init";  }  handle = sqlite3OsDlOpen(pVfs, zFile);  if( handle==0 ){    if( pzErrMsg ){      char zErr[256];      zErr[sizeof(zErr)-1] = '/0';      sqlite3_snprintf(sizeof(zErr)-1, zErr,           "unable to open shared library [%s]", zFile);      sqlite3OsDlError(pVfs, sizeof(zErr)-1, zErr);      *pzErrMsg = sqlite3DbStrDup(0, zErr);    }    return SQLITE_ERROR;  }  xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))                   sqlite3OsDlSym(pVfs, handle, zProc);  if( xInit==0 ){    if( pzErrMsg ){      char zErr[256];      zErr[sizeof(zErr)-1] = '/0';      sqlite3_snprintf(sizeof(zErr)-1, zErr,          "no entry point [%s] in shared library [%s]", zProc,zFile);      sqlite3OsDlError(pVfs, sizeof(zErr)-1, zErr);      *pzErrMsg = sqlite3DbStrDup(0, zErr);      sqlite3OsDlClose(pVfs, handle);    }    return SQLITE_ERROR;  }else if( xInit(db, &zErrmsg, &sqlite3Apis) ){    if( pzErrMsg ){      *pzErrMsg = sqlite3_mprintf("error during initialization: %s", zErrmsg);    }    sqlite3_free(zErrmsg);    sqlite3OsDlClose(pVfs, handle);    return SQLITE_ERROR;  }  /* Append the new shared library handle to the db->aExtension array. */  aHandle = sqlite3DbMallocZero(db, sizeof(handle)*(db->nExtension+1));  if( aHandle==0 ){    return SQLITE_NOMEM;  }  if( db->nExtension>0 ){    memcpy(aHandle, db->aExtension, sizeof(handle)*db->nExtension);  }  sqlite3DbFree(db, db->aExtension);  db->aExtension = aHandle;  db->aExtension[db->nExtension++] = handle;  return SQLITE_OK;}
开发者ID:cdaffara,项目名称:symbiandump-os2,代码行数:89,


示例30: settings

//.........这里部分代码省略.........            thisfield.replace(" ", "");            thisfield.replace('"', "");            thisfield.replace("'","");            thisfield.replace(",","");            thisfield.replace(";","");            // Avoid empty field names            if(thisfield.isEmpty())                thisfield = QString("field%1").arg(std::distance(csv.csv().at(0).begin(), it) + 1);            fieldList.push_back(sqlb::FieldPtr(new sqlb::Field(thisfield, "")));        }    } else {        for(size_t i=0; i < csv.columns(); ++i)            fieldList.push_back(sqlb::FieldPtr(new sqlb::Field(QString("field%1").arg(i+1), "")));    }    // Show progress dialog    QProgressDialog progress(tr("Inserting data..."), tr("Cancel"), 0, csv.csv().size());    progress.setWindowModality(Qt::ApplicationModal);    progress.show();    // Are we importing into an existing table?    bool importToExistingTable = false;    objectMap objects = pdb->getBrowsableObjects();    for(objectMap::ConstIterator i=objects.begin();i!=objects.end();++i)    {        if(i.value().gettype() == "table" && i.value().getname() == ui->editName->text())        {            if((size_t)i.value().table.fields().size() != csv.columns())            {                QMessageBox::warning(this, QApplication::applicationName(),                                     tr("There is already a table of that name and an import into an existing table is only possible if the number of columns match."));                return;            } else {                if(QMessageBox::question(this, QApplication::applicationName(), tr("There is already a table of that name. Do you want to import the data into it?"), QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)                {                    importToExistingTable = true;                    break;                } else {                    return;                }            }        }    }    // Create a savepoint, so we can rollback in case of any errors during importing    // db needs to be saved or an error will occur    QString restorepointName = QString("CSVIMPORT_%1").arg(QDateTime::currentMSecsSinceEpoch());    if(!pdb->setSavepoint(restorepointName))        return rollback(this, pdb, progress, restorepointName, 0, tr("Creating restore point failed: %1").arg(pdb->lastErrorMessage));    // Create table    if(!importToExistingTable)    {        if(!pdb->createTable(ui->editName->text(), fieldList))            return rollback(this, pdb, progress, restorepointName, 0, tr("Creating the table failed: %1").arg(pdb->lastErrorMessage));    }    // now lets import all data, one row at a time    for(CSVParser::TCSVResult::const_iterator it = itBegin;        it != csv.csv().end();        ++it)    {        QString sql = QString("INSERT INTO `%1` VALUES(").arg(ui->editName->text());        QStringList insertlist;        for(QStringList::const_iterator jt = it->begin(); jt != it->end(); ++jt)        {            // need to mprintf here            char* formSQL = sqlite3_mprintf("%Q", (const char*)jt->toUtf8());            insertlist << formSQL;            if(formSQL)                sqlite3_free(formSQL);        }        // add missing fields with empty values        for(unsigned int i = insertlist.size(); i < csv.columns(); ++i)        {            qWarning() << "ImportCSV" << tr("Missing field for record %1").arg(std::distance(itBegin, it) + 1);            insertlist << "NULL";        }        sql.append(insertlist.join(QChar(',')));        sql.append(");");        if(!pdb->executeSQL(sql, false, false))            return rollback(this, pdb, progress, restorepointName, std::distance(itBegin, it) + 1, tr("Inserting row failed: %1").arg(pdb->lastErrorMessage));        // Update progress bar and check if cancel button was clicked        unsigned int prog = std::distance(csv.csv().begin(), it);        if(prog % 100 == 0)            progress.setValue(prog);        if(progress.wasCanceled())            return rollback(this, pdb, progress, restorepointName, std::distance(itBegin, it) + 1, "");    }    QApplication::restoreOverrideCursor();  // restore original cursor    QDialog::accept();}
开发者ID:GeorgijK,项目名称:sqlitebrowser,代码行数:101,



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


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