1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-05 15:55:57 +03:00

Add the sqlite_open_aux_file() API. (CVS 646)

FossilOrigin-Name: 332164d6455658ca633a1dc49811d9fb0fd4b01c
This commit is contained in:
drh
2002-06-25 19:31:18 +00:00
parent e3c163e4e0
commit 411995dc0d
7 changed files with 116 additions and 26 deletions

View File

@@ -14,7 +14,7 @@
** other files are for internal use by SQLite and should not be
** accessed by users of the library.
**
** $Id: main.c,v 1.84 2002/06/25 01:09:11 drh Exp $
** $Id: main.c,v 1.85 2002/06/25 19:31:18 drh Exp $
*/
#include "sqliteInt.h"
#include "os.h"
@@ -710,7 +710,9 @@ int sqlite_create_aggregate(
}
/*
** Change the datatype for all functions with a given name.
** Change the datatype for all functions with a given name. See the
** header comment for the prototype of this function in sqlite.h for
** additional information.
*/
int sqlite_function_type(sqlite *db, const char *zName, int dataType){
FuncDef *p = (FuncDef*)sqliteHashFind(&db->aFunc, zName, strlen(zName));
@@ -720,3 +722,43 @@ int sqlite_function_type(sqlite *db, const char *zName, int dataType){
}
return SQLITE_OK;
}
/*
** Attempt to open the file named in the argument as the auxiliary database
** file. The auxiliary database file is used to store TEMP tables. But
** by using this API, it is possible to trick SQLite into opening two
** separate databases and acting on them as if they were one.
**
** This routine closes the existing auxiliary database file, which will
** cause any previously created TEMP tables to be created.
**
** The zName parameter can be a NULL pointer or an empty string to cause
** a temporary file to be opened and automatically deleted when closed.
*/
int sqlite_open_aux_file(sqlite *db, const char *zName, char **pzErrMsg){
int rc;
if( zName && zName[0]==0 ) zName = 0;
if( sqliteSafetyOn(db) ) goto openaux_misuse;
sqliteResetInternalSchema(db);
if( db->pBeTemp!=0 ){
sqliteBtreeClose(db->pBeTemp);
}
rc = sqliteBtreeOpen(zName, 0, MAX_PAGES, &db->pBeTemp);
if( rc ){
if( zName==0 ) zName = "a temporary file";
sqliteSetString(pzErrMsg, "unable to open ", zName,
": ", sqlite_error_string(rc), 0);
sqliteStrRealloc(pzErrMsg);
sqliteSafetyOff(db);
return rc;
}
rc = sqliteInit(db, pzErrMsg);
if( sqliteSafetyOff(db) ) goto openaux_misuse;
sqliteStrRealloc(pzErrMsg);
return rc;
openaux_misuse:
sqliteSetString(pzErrMsg, sqlite_error_string(SQLITE_MISUSE), 0);
sqliteStrRealloc(pzErrMsg);
return SQLITE_MISUSE;
}