]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Change the pModule parameter of the xCreate and xConnect methods to a void*. (CVS...
authordanielk1977 <danielk1977@noemail.net>
Wed, 14 Jun 2006 06:58:15 +0000 (06:58 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Wed, 14 Jun 2006 06:58:15 +0000 (06:58 +0000)
FossilOrigin-Name: 3ffa51b50a7831ef359bc40acf605decc922c498

manifest
manifest.uuid
src/sqlite.h.in
src/test8.c
src/test_tclvar.c
src/vtab.c

index 630170c89b080a0127c00300508cfab4875af7b3..326e7b5c7a7bd97c11ad9099868755bd8ee2c6a0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\stests\sfor\serror\sconditions\ssurrounding\sthe\screation/connection\sof\svirtual\stables.\s(CVS\s3235)
-D 2006-06-14T06:31:28
+C Change\sthe\spModule\sparameter\sof\sthe\sxCreate\sand\sxConnect\smethods\sto\sa\svoid*.\s(CVS\s3236)
+D 2006-06-14T06:58:16
 F Makefile.in 200f6dc376ecfd9b01e5359c4e0c10c02f649b34
 F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -72,7 +72,7 @@ F src/random.c d40f8d356cecbd351ccfab6eaedd7ec1b54f5261
 F src/select.c 38eda11d950ed5e631ea9054f84a4a8b9e9b39d8
 F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
 F src/shell.c ad73192b30a338a58fe81183d4a5d5a1d4e51d36
-F src/sqlite.h.in 84522f48a0a044987267a82d680121194d31fb7a
+F src/sqlite.h.in 45975614ab23be1be971a1624a2c5f6801c99c2d
 F src/sqlite3ext.h 127bd394c8eea481f2ac9b754bf399dbfc818b75
 F src/sqliteInt.h e8710fd5c10c03ca4a2fb49802b8aae6689f27a0
 F src/table.c f64ec4fbfe333f8df925bc6ba494f55e05b0e75e
@@ -84,11 +84,11 @@ F src/test4.c 8b784cd82de158a2317cb4ac4bc86f91ad315e25
 F src/test5.c 7162f8526affb771c4ed256826eee7bb9eca265f
 F src/test6.c 60a02961ceb7b3edc25f5dc5c1ac2556622a76de
 F src/test7.c 03fa8d787f6aebc6d1f72504d52f33013ad2c8e3
-F src/test8.c f91c78d8ad3aecf3e670e66c087a79ff806b21b2
+F src/test8.c 06c0a7b6057b8733f8ef94e9eae815b32141c143
 F src/test_async.c e3deaedd4d86a56391b81808fde9e44fbd92f1d3
 F src/test_md5.c 6c42bc0a3c0b54be34623ff77a0eec32b2fa96e3
 F src/test_server.c a6460daed0b92ecbc2531b6dc73717470e7a648c
-F src/test_tclvar.c 3157e17194caa73434041d310b66ec93803aa1be
+F src/test_tclvar.c d434037c1730cfffbf007ac82f1c405d7155a92a
 F src/tokenize.c 6ebcafa6622839968dda4418a7b6945f277a128f
 F src/trigger.c 48bbb94c11954c8e132efcc04478efe8304c4196
 F src/update.c 0186f09414a6578156d40666becc964f85c2a616
@@ -102,7 +102,7 @@ F src/vdbeapi.c af663689ef57e5506f190bbd1068d28936b0fb34
 F src/vdbeaux.c c9474fd27f1735170feb4f6a46885d282cf22d52
 F src/vdbefifo.c 9efb94c8c3f4c979ebd0028219483f88e57584f5
 F src/vdbemem.c 5f0afe3b92bb2c037f8d5d697f7c151fa50783a3
-F src/vtab.c 6af0aa0ef2ebca743a4647eb22fd5d5d3813d83e
+F src/vtab.c b198496e428e1d1c1fef96afeac36828f0171628
 F src/where.c 299c385e32a7b98d42864c7c83cdc6a778fae562
 F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
@@ -364,7 +364,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P 29199eeea4c46168ccaa7535d4941bd740479dee
-R dc5e6094d3fe7373d35dfb54c78f916b
+P 5e592c422b86deb5802c6536e91661717ee9bbe1
+R 4fa19ffe7cfb0134822441de8330a6ea
 U danielk1977
-Z 267156075d7b55f7a94e810698d71dbc
+Z 368680ae09650a1bb3f150de6a1748ad
index 2a5b43643116bc39d12778b0a563bbc06497460a..78871a9a1ddf4332628551ae1579f64b44d9a199 100644 (file)
@@ -1 +1 @@
-5e592c422b86deb5802c6536e91661717ee9bbe1
\ No newline at end of file
+3ffa51b50a7831ef359bc40acf605decc922c498
\ No newline at end of file
index 9d59515b91f1c15b8d5ac2dace26c7371e8bb0b9..0d3d255398b7ff95f9db320afdee542f7c4d400a 100644 (file)
@@ -12,7 +12,7 @@
 ** This header file defines the interface that the SQLite library
 ** presents to client programs.
 **
-** @(#) $Id: sqlite.h.in,v 1.174 2006/06/13 23:51:34 drh Exp $
+** @(#) $Id: sqlite.h.in,v 1.175 2006/06/14 06:58:16 danielk1977 Exp $
 */
 #ifndef _SQLITE3_H_
 #define _SQLITE3_H_
@@ -1537,10 +1537,10 @@ struct sqlite3_module {
   int iVersion;
   const char *zName;
   void *pAux;
-  int (*xCreate)(sqlite3*, const sqlite3_module *pModule,
+  int (*xCreate)(sqlite3*, void *pAux,
                int argc, char **argv,
                sqlite3_vtab **ppVTab);
-  int (*xConnect)(sqlite3*, const sqlite3_module *pModule,
+  int (*xConnect)(sqlite3*, void *pAux,
                int argc, char **argv,
                sqlite3_vtab **ppVTab);
   int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
index 903ec3c7b412e63499711457acd9cadff2fcf314..eeefaff8c412bb956e40f10048419661eab0e6af 100644 (file)
@@ -13,7 +13,7 @@
 ** is not included in the SQLite library.  It is used for automated
 ** testing of the SQLite library.
 **
-** $Id: test8.c,v 1.12 2006/06/14 06:31:28 danielk1977 Exp $
+** $Id: test8.c,v 1.13 2006/06/14 06:58:16 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include "tcl.h"
@@ -223,7 +223,7 @@ static int echoDestructor(sqlite3_vtab *pVtab){
 
 static int echoConstructor(
   sqlite3 *db,
-  const sqlite3_module *pModule,
+  void *pAux,
   int argc, char **argv,
   sqlite3_vtab **ppVtab
 ){
@@ -231,8 +231,7 @@ static int echoConstructor(
   echo_vtab *pVtab;
 
   pVtab = sqliteMalloc( sizeof(*pVtab) );
-  pVtab->base.pModule = pModule;
-  pVtab->interp = pModule->pAux;
+  pVtab->interp = (Tcl_Interp *)pAux;
   pVtab->db = db;
   pVtab->zTableName = sqlite3MPrintf("%s", argv[1]);
   for(i=0; i<argc; i++){
@@ -251,21 +250,21 @@ static int echoConstructor(
 /* Methods for the echo module */
 static int echoCreate(
   sqlite3 *db,
-  const sqlite3_module *pModule,
+  void *pAux,
   int argc, char **argv,
   sqlite3_vtab **ppVtab
 ){
-  appendToEchoModule((Tcl_Interp *)(pModule->pAux), "xCreate");
-  return echoConstructor(db, pModule, argc, argv, ppVtab);
+  appendToEchoModule((Tcl_Interp *)(pAux), "xCreate");
+  return echoConstructor(db, pAux, argc, argv, ppVtab);
 }
 static int echoConnect(
   sqlite3 *db,
-  const sqlite3_module *pModule,
+  void *pAux,
   int argc, char **argv,
   sqlite3_vtab **ppVtab
 ){
-  appendToEchoModule((Tcl_Interp *)(pModule->pAux), "xConnect");
-  return echoConstructor(db, pModule, argc, argv, ppVtab);
+  appendToEchoModule((Tcl_Interp *)(pAux), "xConnect");
+  return echoConstructor(db, pAux, argc, argv, ppVtab);
 }
 
 static int echoDisconnect(sqlite3_vtab *pVtab){
index 00937c276954450c4d7a7f51472518e7b7312388..fc474bb70fc81ca619a6b2017b4e8da456a331b2 100644 (file)
@@ -16,7 +16,7 @@
 ** The emphasis of this file is a virtual table that provides
 ** access to TCL variables.
 **
-** $Id: test_tclvar.c,v 1.1 2006/06/13 23:51:35 drh Exp $
+** $Id: test_tclvar.c,v 1.2 2006/06/14 06:58:16 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include "tcl.h"
@@ -45,7 +45,7 @@ struct tclvar_cursor {
 /* Methods for the tclvar module */
 static int tclvarConnect(
   sqlite3 *db,
-  const sqlite3_module *pModule,
+  void *pAux,
   int argc, char **argv,
   sqlite3_vtab **ppVtab
 ){
@@ -55,8 +55,7 @@ static int tclvarConnect(
   pVtab = sqliteMalloc( sizeof(*pVtab) );
   if( pVtab==0 ) return SQLITE_NOMEM;
   *ppVtab = &pVtab->base;
-  pVtab->base.pModule = pModule;
-  pVtab->interp = pModule->pAux;
+  pVtab->interp = (Tcl_Interp *)pAux;
 #ifndef SQLITE_OMIT_VIRTUALTABLE
   sqlite3_declare_vtab(db, zSchema);
 #endif
index 6f94e2ce1e063425e5970712bf45d7bd18de5e07..2f606277625cf51c387015f4bed48163789bc8c5 100644 (file)
@@ -11,7 +11,7 @@
 *************************************************************************
 ** This file contains code used to help implement virtual tables.
 **
-** $Id: vtab.c,v 1.9 2006/06/14 06:31:28 danielk1977 Exp $
+** $Id: vtab.c,v 1.10 2006/06/14 06:58:16 danielk1977 Exp $
 */
 #ifndef SQLITE_OMIT_VIRTUALTABLE
 #include "sqliteInt.h"
@@ -234,6 +234,49 @@ void sqlite3VtabArgExtend(Parse *pParse, Token *p){
   pParse->zArg[pParse->nArgUsed] = 0;
 }
 
+/*
+** Invoke a virtual table constructor (either xCreate or xConnect). The
+** pointer to the function to invoke is passed as the fourth parameter
+** to this procedure.
+*/
+static int vtabCallConstructor(
+  sqlite3 *db, 
+  Table *pTab,
+  sqlite3_module *pModule,
+  int (*xConstruct)(sqlite3*, void *, int, char **, sqlite3_vtab **),
+  char **pzErr
+){
+  int rc;
+  int rc2;
+  char **azArg = pTab->azModuleArg;
+  int nArg = pTab->nModuleArg;
+
+  assert( !db->pVTab );
+  assert( xConstruct );
+
+  db->pVTab = pTab;
+  rc = sqlite3SafetyOff(db);
+  assert( rc==SQLITE_OK );
+  rc = xConstruct(db, pModule->pAux, nArg, azArg, &pTab->pVtab);
+  rc2 = sqlite3SafetyOn(db);
+  if( pTab->pVtab ){
+    pTab->pVtab->pModule = pModule;
+  }
+
+  if( SQLITE_OK!=rc ){
+    *pzErr = sqlite3MPrintf("vtable constructor failed: %s", pTab->zName);
+  } else if( db->pVTab ){
+    const char *zFormat = "vtable constructor did not declare schema: %s";
+    *pzErr = sqlite3MPrintf(zFormat, pTab->zName);
+    rc = SQLITE_ERROR;
+  } 
+  if( rc==SQLITE_OK ){
+    rc = rc2;
+  }
+  db->pVTab = 0;
+  return rc;
+}
+
 /*
 ** This function is invoked by the parser to call the xConnect() method
 ** of the virtual table pTab. If an error occurs, an error code is returned 
@@ -252,31 +295,54 @@ int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){
 
   pModule = pTab->pModule;
   zModule = pTab->azModuleArg[0];
-  if( !pModule || !pModule->xConnect ){
+  if( !pModule ){
     const char *zModule = pTab->azModuleArg[0];
     sqlite3ErrorMsg(pParse, "no such module: %s", zModule);
     rc = SQLITE_ERROR;
   } else {
-    char **azArg = pTab->azModuleArg;
-    int nArg = pTab->nModuleArg;
-    sqlite3 *db = pParse->db;
-    assert( !db->pVTab );
-    db->pVTab = pTab;
-    rc = sqlite3SafetyOff(db);
-    assert( rc==SQLITE_OK );
-    rc = pModule->xConnect(db, pModule, nArg, azArg, &pTab->pVtab);
-    db->pVTab = 0;
-    if( rc ){
-      sqlite3ErrorMsg(pParse, "module connect failed: %s", zModule);
-      sqlite3SafetyOn(db);
-    } else {
-      rc = sqlite3SafetyOn(db);
+    char *zErr = 0;
+    rc = vtabCallConstructor(pParse->db,pTab,pModule,pModule->xConnect,&zErr);
+    if( rc!=SQLITE_OK ){
+      sqlite3ErrorMsg(pParse, "%s", zErr);
     }
+    sqliteFree(zErr);
   }
 
   return rc;
 }
 
+/*
+** This function is invoked by the vdbe to call the xCreate method
+** of the virtual table named zTab in database iDb. 
+**
+** If an error occurs, *pzErr is set to point an an English language
+** description of the error and an SQLITE_XXX error code is returned.
+** In this case the caller must call sqliteFree() on *pzErr.
+*/
+int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab, char **pzErr){
+  int rc = SQLITE_OK;
+  Table *pTab;
+  sqlite3_module *pModule;
+  const char *zModule;
+
+  pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName);
+  assert(pTab && pTab->isVirtual && !pTab->pVtab);
+  pModule = pTab->pModule;
+  zModule = pTab->azModuleArg[0];
+
+  /* If the module has been registered and includes a Create method, 
+  ** invoke it now. If the module has not been registered, return an 
+  ** error. Otherwise, do nothing.
+  */
+  if( !pModule ){
+    *pzErr = sqlite3MPrintf("no such module: %s", zModule);
+    rc = SQLITE_ERROR;
+  }else{
+    rc = vtabCallConstructor(db, pTab, pModule, pModule->xCreate, pzErr);
+  }
+
+  return rc;
+}
 
 /*
 ** This function is used to set the schema of a virtual table.  It is only
@@ -325,61 +391,6 @@ int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
   return rc;
 }
 
-/*
-** This function is invoked by the vdbe to call the xCreate method
-** of the virtual table named zTab in database iDb. 
-**
-** If an error occurs, *pzErr is set to point an an English language
-** description of the error and an SQLITE_XXX error code is returned.
-** In this case the caller must call sqliteFree() on *pzErr.
-*/
-int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab, char **pzErr){
-  int rc = SQLITE_OK;
-  Table *pTab;
-  sqlite3_module *pModule;
-  const char *zModule;
-
-  pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName);
-  assert(pTab && pTab->isVirtual && !pTab->pVtab);
-  pModule = pTab->pModule;
-  zModule = pTab->azModuleArg[0];
-
-  /* If the module has been registered and includes a Create method, 
-  ** invoke it now. If the module has not been registered, return an 
-  ** error. Otherwise, do nothing.
-  */
-  if( !pModule ){
-    *pzErr = sqlite3MPrintf("no such module: %s", zModule);
-    rc = SQLITE_ERROR;
-  }else{
-    int rc2;
-    char **azArg = pTab->azModuleArg;
-    int nArg = pTab->nModuleArg;
-
-    assert( !db->pVTab );
-    assert( pModule->xCreate );
-    db->pVTab = pTab;
-    rc = sqlite3SafetyOff(db);
-    assert( rc==SQLITE_OK );
-    rc = pModule->xCreate(db, pModule, nArg, azArg, &pTab->pVtab);
-    rc2 = sqlite3SafetyOn(db);
-
-    if( SQLITE_OK!=rc ){
-      *pzErr = sqlite3MPrintf("vtable constructor failed: %s", zTab);
-    } else if( db->pVTab ){
-      const char *zFormat = "vtable constructor did not declare schema: %s";
-      *pzErr = sqlite3MPrintf(zFormat, zTab);
-      rc = SQLITE_ERROR;
-    } 
-    db->pVTab = 0;
-    if( rc==SQLITE_OK ){
-      rc = rc2;
-    }
-  }
-
-  return rc;
-}
-
 /*
 ** This function is invoked by the vdbe to call the xDestroy method
 ** of the virtual table named zTab in database iDb. This occurs