From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id BC3D32B374 for ; Tue, 9 Apr 2019 13:17:08 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id MBX7m7ZZZ1PZ for ; Tue, 9 Apr 2019 13:17:08 -0400 (EDT) Received: from smtpng1.m.smailru.net (smtpng1.m.smailru.net [94.100.181.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id 24BE72B305 for ; Tue, 9 Apr 2019 13:17:08 -0400 (EDT) From: imeevma@tarantool.org Subject: [tarantool-patches] [PATCH v1 3/3] sql: remove unused functions from main.c Date: Tue, 9 Apr 2019 20:17:06 +0300 Message-Id: <61b31e4086c3914a3b76683e531e1309a70cd291.1554830037.git.imeevma@gmail.com> In-Reply-To: References: Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-Help: List-Unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-Subscribe: List-Owner: List-post: List-Archive: To: korablev@tarantool.org Cc: tarantool-patches@freelists.org These functions unused and should be removed. Needed for #4074 --- src/box/sql/build.c | 2 - src/box/sql/global.c | 3 +- src/box/sql/main.c | 956 +-------------------------------------------------- src/box/sql/random.c | 3 - src/box/sql/select.c | 2 - src/box/sql/sqlInt.h | 40 +-- src/box/sql/vdbe.c | 12 - 7 files changed, 3 insertions(+), 1015 deletions(-) diff --git a/src/box/sql/build.c b/src/box/sql/build.c index a06ba3e..3442442 100644 --- a/src/box/sql/build.c +++ b/src/box/sql/build.c @@ -327,8 +327,6 @@ sqlStartTable(Parse *pParse, Token *pName, int noErr) if (!noErr) { diag_set(ClientError, ER_SPACE_EXISTS, zName); pParse->is_aborted = true; - } else { - assert(!db->init.busy || CORRUPT_DB); } goto cleanup; } diff --git a/src/box/sql/global.c b/src/box/sql/global.c index f48cb8c..9af671a 100644 --- a/src/box/sql/global.c +++ b/src/box/sql/global.c @@ -228,8 +228,7 @@ FuncDefHash sqlBuiltinFunctions; * During testing, it is often desirable to move the pending byte to * a different position in the file. This allows code that has to * deal with the pending byte to run on files that are much smaller - * than 1 GiB. The sql_test_control() interface can be used to - * move the pending byte. + * than 1 GiB. * * IMPORTANT: Changing the pending byte to any value other than * 0x40000000 results in an incompatible database file format! diff --git a/src/box/sql/main.c b/src/box/sql/main.c index 9cc6536..fe1135a 100644 --- a/src/box/sql/main.c +++ b/src/box/sql/main.c @@ -75,8 +75,7 @@ char *sql_data_directory = 0; * and VFS subsystems prior to doing any serious work with * sql. * - * This routine is a no-op except on its very first call for the process, - * or for the first call after a call to sql_shutdown. + * This routine is a no-op except on its very first call for the process. * * The first thread to call this routine runs the initialization to * completion. If subsequent threads call this routine before the first @@ -175,177 +174,6 @@ sql_initialize(void) } /* - * Undo the effects of sql_initialize(). Must not be called while - * there are outstanding database connections or memory allocations or - * while any part of sql is otherwise in use in any thread. This - * routine is not threadsafe. But it is safe to invoke this routine - * on when sql is already shut down. If sql is already shut down - * when this routine is invoked, then this routine is a harmless no-op. - */ -int -sql_shutdown(void) -{ - if (sqlGlobalConfig.isInit) { -#ifdef SQL_EXTRA_SHUTDOWN - void SQL_EXTRA_SHUTDOWN(void); - SQL_EXTRA_SHUTDOWN(); -#endif - sql_os_end(); - sqlGlobalConfig.isInit = 0; - } - if (sqlGlobalConfig.isMallocInit) { - sqlMallocEnd(); - sqlGlobalConfig.isMallocInit = 0; - -#ifndef SQL_OMIT_SHUTDOWN_DIRECTORIES - /* The heap subsystem has now been shutdown and these values are supposed - * to be NULL or point to memory that was obtained from sql_malloc(), - * which would rely on that heap subsystem; therefore, make sure these - * values cannot refer to heap memory that was just invalidated when the - * heap subsystem was shutdown. This is only done if the current call to - * this function resulted in the heap subsystem actually being shutdown. - */ - sql_data_directory = 0; - sql_temp_directory = 0; -#endif - } - - return SQL_OK; -} - -/* - * This API allows applications to modify the global configuration of - * the sql library at run-time. - * - * This routine should only be called when there are no outstanding - * database connections or memory allocations. This routine is not - * threadsafe. Failure to heed these warnings can lead to unpredictable - * behavior. - */ -int -sql_config(int op, ...) -{ - va_list ap; - int rc = SQL_OK; - - /* sql_config() shall return SQL_MISUSE if it is invoked while - * the sql library is in use. - */ - if (sqlGlobalConfig.isInit) - return SQL_MISUSE; - - va_start(ap, op); - switch (op) { - case SQL_CONFIG_MEMSTATUS:{ - /* EVIDENCE-OF: R-61275-35157 The SQL_CONFIG_MEMSTATUS option takes - * single argument of type int, interpreted as a boolean, which enables - * or disables the collection of memory allocation statistics. - */ - sqlGlobalConfig.bMemstat = va_arg(ap, int); - break; - } - case SQL_CONFIG_SCRATCH:{ - /* EVIDENCE-OF: R-08404-60887 There are three arguments to - * SQL_CONFIG_SCRATCH: A pointer an 8-byte aligned memory buffer from - * which the scratch allocations will be drawn, the size of each scratch - * allocation (sz), and the maximum number of scratch allocations (N). - */ - sqlGlobalConfig.pScratch = va_arg(ap, void *); - sqlGlobalConfig.szScratch = va_arg(ap, int); - sqlGlobalConfig.nScratch = va_arg(ap, int); - break; - } - - case SQL_CONFIG_LOOKASIDE:{ - sqlGlobalConfig.szLookaside = va_arg(ap, int); - sqlGlobalConfig.nLookaside = va_arg(ap, int); - break; - } - - /* Record a pointer to the logger function and its first argument. - * The default is NULL. Logging is disabled if the function pointer is - * NULL. - */ - case SQL_CONFIG_LOG:{ - typedef void (*LOGFUNC_t) (void *, int, const char *); - sqlGlobalConfig.xLog = va_arg(ap, LOGFUNC_t); - sqlGlobalConfig.pLogArg = va_arg(ap, void *); - break; - } - - /* EVIDENCE-OF: R-55548-33817 The compile-time setting for URI filenames - * can be changed at start-time using the - * sql_config(SQL_CONFIG_URI,1) or - * sql_config(SQL_CONFIG_URI,0) configuration calls. - */ - case SQL_CONFIG_URI:{ - /* EVIDENCE-OF: R-25451-61125 The SQL_CONFIG_URI option takes a single - * argument of type int. If non-zero, then URI handling is globally - * enabled. If the parameter is zero, then URI handling is globally - * disabled. - */ - sqlGlobalConfig.bOpenUri = va_arg(ap, int); - break; - } - - case SQL_CONFIG_COVERING_INDEX_SCAN:{ - /* EVIDENCE-OF: R-36592-02772 The SQL_CONFIG_COVERING_INDEX_SCAN - * option takes a single integer argument which is interpreted as a - * boolean in order to enable or disable the use of covering indices for - * full table scans in the query optimizer. - */ - sqlGlobalConfig.bUseCis = va_arg(ap, int); - break; - } - - case SQL_CONFIG_MMAP_SIZE:{ - /* EVIDENCE-OF: R-58063-38258 SQL_CONFIG_MMAP_SIZE takes two 64-bit - * integer (sql_int64) values that are the default mmap size limit - * (the default setting for PRAGMA mmap_size) and the maximum allowed - * mmap size limit. - */ - sql_int64 szMmap = va_arg(ap, sql_int64); - sql_int64 mxMmap = va_arg(ap, sql_int64); - /* EVIDENCE-OF: R-53367-43190 If either argument to this option is - * negative, then that argument is changed to its compile-time default. - * - * EVIDENCE-OF: R-34993-45031 The maximum allowed mmap size will be - * silently truncated if necessary so that it does not exceed the - * compile-time maximum mmap size set by the SQL_MAX_MMAP_SIZE - * compile-time option. - */ - if (mxMmap < 0 || mxMmap > SQL_MAX_MMAP_SIZE) { - mxMmap = SQL_MAX_MMAP_SIZE; - } - if (szMmap < 0) - szMmap = SQL_DEFAULT_MMAP_SIZE; - if (szMmap > mxMmap) - szMmap = mxMmap; - sqlGlobalConfig.mxMmap = mxMmap; - sqlGlobalConfig.szMmap = szMmap; - break; - } - - case SQL_CONFIG_PMASZ:{ - sqlGlobalConfig.szPma = va_arg(ap, unsigned int); - break; - } - - case SQL_CONFIG_STMTJRNL_SPILL:{ - sqlGlobalConfig.nStmtSpill = va_arg(ap, int); - break; - } - - default:{ - rc = SQL_ERROR; - break; - } - } - va_end(ap); - return rc; -} - -/* * Set up the lookaside buffers for a database connection. * Return SQL_OK on success. * If lookaside is already active, return SQL_BUSY. @@ -567,37 +395,6 @@ sqlErrStr(int rc) return zErr; } -#ifndef SQL_OMIT_PROGRESS_CALLBACK -/* - * This routine sets the progress callback for an Sqlite database to the - * given callback function with the given argument. The progress callback will - * be invoked every nOps opcodes. - */ -void -sql_progress_handler(sql * db, - int nOps, int (*xProgress) (void *), void *pArg) -{ - if (nOps > 0) { - db->xProgress = xProgress; - db->nProgressOps = (unsigned)nOps; - db->pProgressArg = pArg; - } else { - db->xProgress = 0; - db->nProgressOps = 0; - db->pProgressArg = 0; - } -} -#endif - -/* - * Cause any pending operation to stop at its earliest opportunity. - */ -void -sql_interrupt(sql * db) -{ - db->u1.isInterrupted = 1; -} - /* * This function is exactly the same as sql_create_function(), except * that it is designed to be called by internal code. The difference is @@ -738,78 +535,6 @@ sql_trace_v2(sql * db, /* Trace this connection */ #endif /* SQL_OMIT_TRACE */ /* - * Register a function to be invoked when a transaction commits. - * If the invoked function returns non-zero, then the commit becomes a - * rollback. - */ -void * -sql_commit_hook(sql * db, /* Attach the hook to this database */ - int (*xCallback) (void *), /* Function to invoke on each commit */ - void *pArg) /* Argument to the function */ -{ - void *pOld; - - pOld = db->pCommitArg; - db->xCommitCallback = xCallback; - db->pCommitArg = pArg; - return pOld; -} - -/* - * Register a callback to be invoked each time a row is updated, - * inserted or deleted using this database connection. - */ -void * -sql_update_hook(sql * db, /* Attach the hook to this database */ - void (*xCallback) (void *, int, char const *, - char const *, sql_int64), - void *pArg) /* Argument to the function */ -{ - void *pRet; - - pRet = db->pUpdateArg; - db->xUpdateCallback = xCallback; - db->pUpdateArg = pArg; - return pRet; -} - -/* - * Register a callback to be invoked each time a transaction is rolled - * back by this database connection. - */ -void * -sql_rollback_hook(sql * db, /* Attach the hook to this database */ - void (*xCallback) (void *), /* Callback function */ - void *pArg) /* Argument to the function */ -{ - void *pRet; - - pRet = db->pRollbackArg; - db->xRollbackCallback = xCallback; - db->pRollbackArg = pArg; - return pRet; -} - -/* - * Configure an sql_wal_hook() callback to automatically checkpoint - * a database after committing a transaction if there are nFrame or - * more frames in the log file. Passing zero or a negative value as the - * nFrame parameter disables automatic checkpoints entirely. - * - * The callback registered by this function replaces any existing callback - * registered using sql_wal_hook(). Likewise, registering a callback - * using sql_wal_hook() disables the automatic checkpoint mechanism - * configured by this function. - */ -int -sql_wal_autocheckpoint(sql * db, int nFrame) -{ - UNUSED_PARAMETER(db); - UNUSED_PARAMETER(nFrame); - return SQL_OK; -} - -/* * This function returns true if main-memory should be used instead of * a temporary file for transient pager files and statement journals. * The value returned depends on the value of db->temp_store (runtime @@ -848,37 +573,6 @@ sqlTempInMemory(const sql * db) } /* - * Return UTF-8 encoded English language explanation of the most recent - * error. - */ -const char * -sql_errmsg(sql * db) -{ - const char *z; - if (!db) { - return sqlErrStr(SQL_NOMEM); - } - if (!sqlSafetyCheckSickOrOk(db)) { - return sqlErrStr(SQL_MISUSE); - } - if (db->mallocFailed) { - z = sqlErrStr(SQL_NOMEM); - } else { - testcase(db->pErr == 0); - assert(!db->mallocFailed); - if (db->errCode != SQL_TARANTOOL_ERROR) { - z = (char *)sql_value_text(db->pErr); - if (z == NULL) - z = sqlErrStr(db->errCode); - } else { - z = diag_last_error(diag_get())->errmsg; - } - assert(z != NULL); - } - return z; -} - -/* * Return the most recent error code generated by an sql routine. If NULL is * passed to this function, we assume a malloc() failed during sql_open(). */ @@ -894,35 +588,6 @@ sql_errcode(sql * db) return db->errCode & db->errMask; } -int -sql_extended_errcode(sql * db) -{ - if (db && !sqlSafetyCheckSickOrOk(db)) { - return SQL_MISUSE; - } - if (!db || db->mallocFailed) { - return SQL_NOMEM; - } - return db->errCode; -} - -int -sql_system_errno(sql * db) -{ - return db ? db->iSysErrno : 0; -} - -/* - * Return a string that describes the kind of error specified in the - * argument. For now, this simply calls the internal sqlErrStr() - * function. - */ -const char * -sql_errstr(int rc) -{ - return sqlErrStr(rc); -} - /* * This array defines hard upper bounds on limit values. The * initializer must be kept in sync with the SQL_LIMIT_* @@ -1030,297 +695,6 @@ sql_limit(sql * db, int limitId, int newLimit) return oldLimit; /* IMP: R-53341-35419 */ } -/* - * This function is used to parse both URIs and non-URI filenames passed by the - * user to API functions sql_open() or sql_open_v2(), and for database - * URIs specified as part of ATTACH statements. - * - * The first argument to this function is the name of the VFS to use (or - * a NULL to signify the default VFS) if the URI does not contain a "vfs=xxx" - * query parameter. The second argument contains the URI (or non-URI filename) - * itself. When this function is called the *pFlags variable should contain - * the default flags to open the database handle with. The value stored in - * *pFlags may be updated before returning if the URI filename contains - * "cache=xxx" or "mode=xxx" query parameters. - * - * If successful, SQL_OK is returned. In this case *ppVfs is set to point to - * the VFS that should be used to open the database file. *pzFile is set to - * point to a buffer containing the name of the file to open. It is the - * responsibility of the caller to eventually call sql_free() to release - * this buffer. - * - * If an error occurs, then an sql error code is returned and *pzErrMsg - * may be set to point to a buffer containing an English language error - * message. It is the responsibility of the caller to eventually release - * this buffer by calling sql_free(). - */ -int -sqlParseUri(const char *zDefaultVfs, /* VFS to use if no "vfs=xxx" query option */ - const char *zUri, /* Nul-terminated URI to parse */ - unsigned int *pFlags, /* IN/OUT: SQL_OPEN_XXX flags */ - sql_vfs ** ppVfs, /* OUT: VFS to use */ - char **pzFile, /* OUT: Filename component of URI */ - char **pzErrMsg) /* OUT: Error message (if rc!=SQL_OK) */ -{ - int rc = SQL_OK; - unsigned int flags = *pFlags; - const char *zVfs = zDefaultVfs; - char *zFile; - char c; - int nUri = sqlStrlen30(zUri); - - assert(*pzErrMsg == 0); - - if (((flags & SQL_OPEN_URI) /* IMP: R-48725-32206 */ - ||sqlGlobalConfig.bOpenUri) /* IMP: R-51689-46548 */ - &&nUri >= 5 && memcmp(zUri, "file:", 5) == 0 /* IMP: R-57884-37496 */ - ) { - char *zOpt; - int eState; /* Parser state when parsing URI */ - int iIn; /* Input character index */ - int iOut = 0; /* Output character index */ - u64 nByte = nUri + 2; /* Bytes of space to allocate */ - - /* Make sure the SQL_OPEN_URI flag is set to indicate to the VFS xOpen - * method that there may be extra parameters following the file-name. - */ - flags |= SQL_OPEN_URI; - - for (iIn = 0; iIn < nUri; iIn++) - nByte += (zUri[iIn] == '&'); - zFile = sql_malloc64(nByte); - if (!zFile) - return SQL_NOMEM; - - iIn = 5; -#ifdef SQL_ALLOW_URI_AUTHORITY - if (strncmp(zUri + 5, "///", 3) == 0) { - iIn = 7; - /* The following condition causes URIs with five leading / characters - * like file://///host/path to be converted into UNCs like //host/path. - * The correct URI for that UNC has only two or four leading / characters - * file://host/path or file:////host/path. But 5 leading slashes is a - * common error, we are told, so we handle it as a special case. - */ - if (strncmp(zUri + 7, "///", 3) == 0) { - iIn++; - } - } else if (strncmp(zUri + 5, "//localhost/", 12) == 0) { - iIn = 16; - } -#else - /* Discard the scheme and authority segments of the URI. */ - if (zUri[5] == '/' && zUri[6] == '/') { - iIn = 7; - while (zUri[iIn] && zUri[iIn] != '/') - iIn++; - if (iIn != 7 - && (iIn != 16 - || memcmp("localhost", &zUri[7], 9))) { - *pzErrMsg = - sql_mprintf - ("invalid uri authority: %.*s", iIn - 7, - &zUri[7]); - rc = SQL_ERROR; - goto parse_uri_out; - } - } -#endif - - /* Copy the filename and any query parameters into the zFile buffer. - * Decode %HH escape codes along the way. - * - * Within this loop, variable eState may be set to 0, 1 or 2, depending - * on the parsing context. As follows: - * - * 0: Parsing file-name. - * 1: Parsing name section of a name=value query parameter. - * 2: Parsing value section of a name=value query parameter. - */ - eState = 0; - while ((c = zUri[iIn]) != 0 && c != '#') { - iIn++; - if (c == '%' && sqlIsxdigit(zUri[iIn]) - && sqlIsxdigit(zUri[iIn + 1]) - ) { - int octet = (sqlHexToInt(zUri[iIn++]) << 4); - octet += sqlHexToInt(zUri[iIn++]); - - assert(octet >= 0 && octet < 256); - if (octet == 0) { -#ifndef SQL_ENABLE_URI_00_ERROR - /* This branch is taken when "%00" appears within the URI. In this - * case we ignore all text in the remainder of the path, name or - * value currently being parsed. So ignore the current character - * and skip to the next "?", "=" or "&", as appropriate. - */ - while ((c = zUri[iIn]) != 0 && c != '#' - && (eState != 0 || c != '?') - && (eState != 1 - || (c != '=' && c != '&')) - && (eState != 2 || c != '&') - ) { - iIn++; - } - continue; -#else - /* If ENABLE_URI_00_ERROR is defined, "%00" in a URI is an error. */ - *pzErrMsg = - sql_mprintf - ("unexpected %%00 in uri"); - rc = SQL_ERROR; - goto parse_uri_out; -#endif - } - c = octet; - } else if (eState == 1 && (c == '&' || c == '=')) { - if (zFile[iOut - 1] == 0) { - /* An empty option name. Ignore this option altogether. */ - while (zUri[iIn] && zUri[iIn] != '#' - && zUri[iIn - 1] != '&') - iIn++; - continue; - } - if (c == '&') { - zFile[iOut++] = '\0'; - } else { - eState = 2; - } - c = 0; - } else if ((eState == 0 && c == '?') - || (eState == 2 && c == '&')) { - c = 0; - eState = 1; - } - zFile[iOut++] = c; - } - if (eState == 1) - zFile[iOut++] = '\0'; - zFile[iOut++] = '\0'; - zFile[iOut++] = '\0'; - - /* Check if there were any options specified that should be interpreted - * here. Options that are interpreted here include "vfs" and those that - * correspond to flags that may be passed to the sql_open_v2() - * method. - */ - zOpt = &zFile[sqlStrlen30(zFile) + 1]; - while (zOpt[0]) { - int nOpt = sqlStrlen30(zOpt); - char *zVal = &zOpt[nOpt + 1]; - unsigned int nVal = sqlStrlen30(zVal); - - if (nOpt == 3 && memcmp("vfs", zOpt, 3) == 0) { - zVfs = zVal; - } else { - struct OpenMode { - const char *z; - int mode; - } *aMode = 0; - char *zModeType = 0; - int mask = 0; - int limit = 0; - - if (nOpt == 5 && memcmp("cache", zOpt, 5) == 0) { - static struct OpenMode aCacheMode[] = { - {"shared", - SQL_OPEN_SHAREDCACHE}, - {"private", - SQL_OPEN_PRIVATECACHE}, - {0, 0} - }; - - mask = - SQL_OPEN_SHAREDCACHE | - SQL_OPEN_PRIVATECACHE; - aMode = aCacheMode; - limit = mask; - zModeType = "cache"; - } - if (nOpt == 4 && memcmp("mode", zOpt, 4) == 0) { - static struct OpenMode aOpenMode[] = { - {"ro", SQL_OPEN_READONLY}, - {"rw", SQL_OPEN_READWRITE}, - {"rwc", - SQL_OPEN_READWRITE | - SQL_OPEN_CREATE}, - {"memory", SQL_OPEN_MEMORY}, - {0, 0} - }; - - mask = - SQL_OPEN_READONLY | - SQL_OPEN_READWRITE | - SQL_OPEN_CREATE | - SQL_OPEN_MEMORY; - aMode = aOpenMode; - limit = mask & flags; - zModeType = "access"; - } - - if (aMode) { - int i; - int mode = 0; - for (i = 0; aMode[i].z; i++) { - const char *z = aMode[i].z; - if (nVal == sqlStrlen30(z) - && 0 == memcmp(zVal, z, - nVal)) { - mode = aMode[i].mode; - break; - } - } - if (mode == 0) { - *pzErrMsg = - sql_mprintf - ("no such %s mode: %s", - zModeType, zVal); - rc = SQL_ERROR; - goto parse_uri_out; - } - if ((mode & ~SQL_OPEN_MEMORY) > - limit) { - *pzErrMsg = - sql_mprintf - ("%s mode not allowed: %s", - zModeType, zVal); - rc = SQL_PERM; - goto parse_uri_out; - } - flags = (flags & ~mask) | mode; - } - } - - zOpt = &zVal[nVal + 1]; - } - - } else { - zFile = sql_malloc64(nUri + 2); - if (!zFile) - return SQL_NOMEM; - if (nUri) { - memcpy(zFile, zUri, nUri); - } - zFile[nUri] = '\0'; - zFile[nUri + 1] = '\0'; - flags &= ~SQL_OPEN_URI; - } - - *ppVfs = sql_vfs_find(zVfs); - if (*ppVfs == 0) { - *pzErrMsg = sql_mprintf("no such vfs: %s", zVfs); - rc = SQL_ERROR; - } - parse_uri_out: - if (rc != SQL_OK) { - sql_free(zFile); - zFile = 0; - } - *pFlags = flags; - *pzFile = zFile; - return rc; -} - /** * This routine does the work of initialization of main * SQL connection instance. @@ -1389,308 +763,6 @@ opendb_out: } /* - * Enable or disable the extended result codes. - */ -int -sql_extended_result_codes(sql * db, int onoff) -{ - db->errMask = onoff ? 0xffffffff : 0xff; - return SQL_OK; -} - -/* - * Interface to the testing logic. - */ -int -sql_test_control(int op, ...) -{ - int rc = 0; -#ifdef SQL_UNTESTABLE - UNUSED_PARAMETER(op); -#else - va_list ap; - va_start(ap, op); - switch (op) { - - /* - * Save the current state of the PRNG. - */ - case SQL_TESTCTRL_PRNG_SAVE:{ - sqlPrngSaveState(); - break; - } - - /* - * Restore the state of the PRNG to the last state saved using - * PRNG_SAVE. If PRNG_SAVE has never before been called, then - * this verb acts like PRNG_RESET. - */ - case SQL_TESTCTRL_PRNG_RESTORE:{ - sqlPrngRestoreState(); - break; - } - - /* - * Reset the PRNG back to its uninitialized state. The next call - * to sql_randomness() will reseed the PRNG using a single call - * to the xRandomness method of the default VFS. - */ - case SQL_TESTCTRL_PRNG_RESET:{ - sql_randomness(0, 0); - break; - } - - /* - * sql_test_control(FAULT_INSTALL, xCallback) - * - * Arrange to invoke xCallback() whenever sqlFaultSim() is called, - * if xCallback is not NULL. - * - * As a test of the fault simulator mechanism itself, sqlFaultSim(0) - * is called immediately after installing the new callback and the return - * value from sqlFaultSim(0) becomes the return from - * sql_test_control(). - */ - case SQL_TESTCTRL_FAULT_INSTALL:{ - typedef int (*TESTCALLBACKFUNC_t) (int); - sqlGlobalConfig.xTestCallback = - va_arg(ap, TESTCALLBACKFUNC_t); - rc = sqlFaultSim(0); - break; - } - - /* - * sql_test_control(BENIGN_MALLOC_HOOKS, xBegin, xEnd) - * - * Register hooks to call to indicate which malloc() failures - * are benign. - */ - case SQL_TESTCTRL_BENIGN_MALLOC_HOOKS:{ - typedef void (*void_function) (void); - void_function xBenignBegin; - void_function xBenignEnd; - xBenignBegin = va_arg(ap, void_function); - xBenignEnd = va_arg(ap, void_function); - sqlBenignMallocHooks(xBenignBegin, xBenignEnd); - break; - } - - /* - * sql_test_control(SQL_TESTCTRL_PENDING_BYTE, unsigned int X) - * - * Set the PENDING byte to the value in the argument, if X>0. - * Make no changes if X==0. Return the value of the pending byte - * as it existing before this routine was called. - * - * IMPORTANT: Changing the PENDING byte from 0x40000000 results in - * an incompatible database file format. Changing the PENDING byte - * while any database connection is open results in undefined and - * deleterious behavior. - */ - case SQL_TESTCTRL_PENDING_BYTE:{ - rc = PENDING_BYTE; - { - unsigned int newVal = va_arg(ap, unsigned int); - if (newVal) - sqlPendingByte = newVal; - } - break; - } - - /* - * sql_test_control(SQL_TESTCTRL_ASSERT, int X) - * - * This action provides a run-time test to see whether or not - * assert() was enabled at compile-time. If X is true and assert() - * is enabled, then the return value is true. If X is true and - * assert() is disabled, then the return value is zero. If X is - * false and assert() is enabled, then the assertion fires and the - * process aborts. If X is false and assert() is disabled, then the - * return value is zero. - */ - case SQL_TESTCTRL_ASSERT:{ - volatile int x = 0; - assert( /*side-effects-ok */ (x = va_arg(ap, int)) != - 0); - rc = x; - break; - } - - /* - * sql_test_control(SQL_TESTCTRL_ALWAYS, int X) - * - * This action provides a run-time test to see how the ALWAYS and - * NEVER macros were defined at compile-time. - * - * The return value is ALWAYS(X). - * - * The recommended test is X==2. If the return value is 2, that means - * ALWAYS() and NEVER() are both no-op pass-through macros, which is the - * default setting. If the return value is 1, then ALWAYS() is either - * hard-coded to true or else it asserts if its argument is false. - * The first behavior (hard-coded to true) is the case if - * SQL_TESTCTRL_ASSERT shows that assert() is disabled and the second - * behavior (assert if the argument to ALWAYS() is false) is the case if - * SQL_TESTCTRL_ASSERT shows that assert() is enabled. - * - * The run-time test procedure might look something like this: - * - * if( sql_test_control(SQL_TESTCTRL_ALWAYS, 2)==2 ){ - * // ALWAYS() and NEVER() are no-op pass-through macros - * }else if( sql_test_control(SQL_TESTCTRL_ASSERT, 1) ){ - * // ALWAYS(x) asserts that x is true. NEVER(x) asserts x is false. - * }else{ - * // ALWAYS(x) is a constant 1. NEVER(x) is a constant 0. - * } - */ - case SQL_TESTCTRL_ALWAYS:{ - int x = va_arg(ap, int); - rc = ALWAYS(x); - break; - } - - /* - * sql_test_control(SQL_TESTCTRL_BYTEORDER); - * - * The integer returned reveals the byte-order of the computer on which - * sql is running: - * - * 1 big-endian, determined at run-time - * 10 little-endian, determined at run-time - * 432101 big-endian, determined at compile-time - * 123410 little-endian, determined at compile-time - */ - case SQL_TESTCTRL_BYTEORDER:{ - rc = SQL_BYTEORDER * 100 + SQL_LITTLEENDIAN * 10 + - SQL_BIGENDIAN; - break; - } - - /* sql_test_control(SQL_TESTCTRL_OPTIMIZATIONS, sql *db, int N) - * - * Enable or disable various optimizations for testing purposes. The - * argument N is a bitmask of optimizations to be disabled. For normal - * operation N should be 0. The idea is that a test program (like the - * SQL Logic Test or SLT test module) can run the same SQL multiple times - * with various optimizations disabled to verify that the same answer - * is obtained in every case. - */ - case SQL_TESTCTRL_OPTIMIZATIONS:{ - sql *db = va_arg(ap, sql *); - db->dbOptFlags = (u16) (va_arg(ap, int) & 0xffff); - break; - } - -#ifdef SQL_N_KEYWORD - /* sql_test_control(SQL_TESTCTRL_ISKEYWORD, const char *zWord) - * - * If zWord is a keyword recognized by the parser, then return the - * number of keywords. Or if zWord is not a keyword, return 0. - * - * This test feature is only available in the amalgamation since - * the SQL_N_KEYWORD macro is not defined in this file if sql - * is built using separate source files. - */ - case SQL_TESTCTRL_ISKEYWORD:{ - const char *zWord = va_arg(ap, const char *); - int n = sqlStrlen30(zWord); - rc = (sqlKeywordCode((u8 *) zWord, n) != - TK_ID) ? SQL_N_KEYWORD : 0; - break; - } -#endif - - /* sql_test_control(SQL_TESTCTRL_SCRATCHMALLOC, sz, &pNew, pFree); - * - * Pass pFree into sqlScratchFree(). - * If sz>0 then allocate a scratch buffer into pNew. - */ - case SQL_TESTCTRL_SCRATCHMALLOC:{ - void *pFree, **ppNew; - int sz; - sz = va_arg(ap, int); - ppNew = va_arg(ap, void **); - pFree = va_arg(ap, void *); - if (sz) - *ppNew = sqlScratchMalloc(sz); - sqlScratchFree(pFree); - break; - } - - /* sql_test_control(SQL_TESTCTRL_LOCALTIME_FAULT, int onoff); - * - * If parameter onoff is non-zero, configure the wrappers so that all - * subsequent calls to localtime() and variants fail. If onoff is zero, - * undo this setting. - */ - case SQL_TESTCTRL_LOCALTIME_FAULT:{ - sqlGlobalConfig.bLocaltimeFault = va_arg(ap, int); - break; - } - - /* sql_test_control(SQL_TESTCTRL_NEVER_CORRUPT, int); - * - * Set or clear a flag that indicates that the database file is always well- - * formed and never corrupt. This flag is clear by default, indicating that - * database files might have arbitrary corruption. Setting the flag during - * testing causes certain assert() statements in the code to be activated - * that demonstrat invariants on well-formed database files. - */ - case SQL_TESTCTRL_NEVER_CORRUPT:{ - sqlGlobalConfig.neverCorrupt = va_arg(ap, int); - break; - } - - /* Set the threshold at which OP_Once counters reset back to zero. - * By default this is 0x7ffffffe (over 2 billion), but that value is - * too big to test in a reasonable amount of time, so this control is - * provided to set a small and easily reachable reset value. - */ - case SQL_TESTCTRL_ONCE_RESET_THRESHOLD:{ - sqlGlobalConfig.iOnceResetThreshold = - va_arg(ap, int); - break; - } - - /* sql_test_control(SQL_TESTCTRL_VDBE_COVERAGE, xCallback, ptr); - * - * Set the VDBE coverage callback function to xCallback with context - * pointer ptr. - */ - case SQL_TESTCTRL_VDBE_COVERAGE:{ -#ifdef SQL_VDBE_COVERAGE - typedef void (*branch_callback) (void *, int, u8, u8); - sqlGlobalConfig.xVdbeBranch = - va_arg(ap, branch_callback); - sqlGlobalConfig.pVdbeBranchArg = va_arg(ap, void *); -#endif - break; - } - - /* sql_test_control(SQL_TESTCTRL_SORTER_MMAP, db, nMax); */ - case SQL_TESTCTRL_SORTER_MMAP:{ - sql *db = va_arg(ap, sql *); - db->nMaxSorterMmap = va_arg(ap, int); - break; - } - - /* sql_test_control(SQL_TESTCTRL_ISINIT); - * - * Return SQL_OK if sql has been initialized and SQL_ERROR if - * not. - */ - case SQL_TESTCTRL_ISINIT:{ - if (sqlGlobalConfig.isInit == 0) - rc = SQL_ERROR; - break; - } - } - va_end(ap); -#endif /* SQL_UNTESTABLE */ - return rc; -} - -/* * This is a utility routine, useful to VFS implementations, that checks * to see if a database file was a URI that contained a specific query * parameter, and if so obtains the value of the query parameter. @@ -1716,29 +788,3 @@ sql_uri_parameter(const char *zFilename, const char *zParam) } return 0; } - -/* - * Return a boolean value for a query parameter. - */ -int -sql_uri_boolean(const char *zFilename, const char *zParam, int bDflt) -{ - const char *z = sql_uri_parameter(zFilename, zParam); - bDflt = bDflt != 0; - return z ? sqlGetBoolean(z, bDflt) : bDflt; -} - -/* - * Return a 64-bit integer value for a query parameter. - */ -sql_int64 -sql_uri_int64(const char *zFilename, /* Filename as passed to xOpen */ - const char *zParam, /* URI parameter sought */ - sql_int64 bDflt) /* return if parameter is missing */ -{ - const char *z = sql_uri_parameter(zFilename, zParam); - int64_t v; - if (z != NULL && sql_dec_or_hex_to_i64(z, &v) == 0) - bDflt = v; - return bDflt; -} diff --git a/src/box/sql/random.c b/src/box/sql/random.c index 2de1890..9e1122b 100644 --- a/src/box/sql/random.c +++ b/src/box/sql/random.c @@ -114,9 +114,6 @@ sql_randomness(int N, void *pBuf) * PRNG and restore the PRNG to its saved state at a later time, or * to reset the PRNG to its initial state. These routines accomplish * those tasks. - * - * The sql_test_control() interface calls these routines to - * control the PRNG. */ static SQL_WSD struct sqlPrngType sqlSavedPrng; void diff --git a/src/box/sql/select.c b/src/box/sql/select.c index b1ec8c7..e0ed5db 100644 --- a/src/box/sql/select.c +++ b/src/box/sql/select.c @@ -5659,8 +5659,6 @@ sqlSelect(Parse * pParse, /* The parser context */ * (2) The ALL keyword after SELECT is omitted. (Applications are * allowed to say "SELECT ALL" instead of just "SELECT" to disable * the use of co-routines.) - * (3) Co-routines are not disabled using sql_test_control() - * with SQL_TESTCTRL_OPTIMIZATIONS. * * TODO: Are there other reasons beside (1) to use a co-routine * implementation? diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h index cfeb49c..7579e75 100644 --- a/src/box/sql/sqlInt.h +++ b/src/box/sql/sqlInt.h @@ -675,9 +675,6 @@ sql_column_name(sql_stmt *, int N); const char * sql_column_datatype(sql_stmt *, int N); -const char * -sql_errmsg(sql *); - int sql_initialize(void); @@ -784,9 +781,6 @@ sql_status64(int op, sql_int64 * pCurrent, sql_int64 * pHighwater, int resetFlag); -int -sql_config(int, ...); - typedef struct sql_io_methods sql_io_methods; struct sql_io_methods { @@ -836,10 +830,6 @@ sql_limit(sql *, int id, int newVal); #define SQL_SYNC_FULL 0x00003 #define SQL_SYNC_DATAONLY 0x00010 -int -sql_uri_boolean(const char *zFile, - const char *zParam, int bDefault); - extern char * sql_temp_directory; @@ -876,9 +866,6 @@ sql_vfs_register(sql_vfs *, int makeDflt); #define SQL_STMTSTATUS_AUTOINDEX 3 #define SQL_STMTSTATUS_VM_STEP 4 -void -sql_interrupt(sql *); - int sql_bind_blob(sql_stmt *, int, const void *, int n, void (*)(void *)); @@ -1507,11 +1494,7 @@ struct sql { #define SQL_DeferFKs 0x02000000 /* Defer all FK constraints */ #define SQL_VdbeEQP 0x08000000 /* Debug EXPLAIN QUERY PLAN */ -/* - * Bits of the sql.dbOptFlags field that are used by the - * sql_test_control(sql_TESTCTRL_OPTIMIZATIONS,...) interface to - * selectively disable various optimizations. - */ +/* Bits of the sql.dbOptFlags field. */ #define SQL_QueryFlattener 0x0001 /* Query flattening */ #define SQL_ColumnCache 0x0002 /* Column cache */ #define SQL_GroupByOrder 0x0004 /* GROUPBY cover of ORDERBY */ @@ -2916,24 +2899,6 @@ struct sqlConfig { }; /* - * This macro is used inside of assert() statements to indicate that - * the assert is only valid on a well-formed database. Instead of: - * - * assert( X ); - * - * One writes: - * - * assert( X || CORRUPT_DB ); - * - * CORRUPT_DB is true during normal operation. CORRUPT_DB does not indicate - * that the database is definitely corrupt, only that it might be corrupt. - * For most test cases, CORRUPT_DB is set to false using a special - * sql_test_control(). This enables assert() statements to prove - * things that are always true for well-formed databases. - */ -#define CORRUPT_DB (sqlConfig.neverCorrupt==0) - -/* * Context pointer passed down through the tree-walk. */ struct Walker { @@ -3387,9 +3352,6 @@ int vdbe_emit_open_cursor(struct Parse *parse, int cursor, int index_id, struct space *space); -int sqlParseUri(const char *, const char *, unsigned int *, - sql_vfs **, char **, char **); - #ifdef SQL_UNTESTABLE #define sqlFaultSim(X) SQL_OK #else diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c index f746559..d452892 100644 --- a/src/box/sql/vdbe.c +++ b/src/box/sql/vdbe.c @@ -743,18 +743,6 @@ int sqlVdbeExec(Vdbe *p) #endif - /* Check to see if we need to simulate an interrupt. This only happens - * if we have a special test build. - */ -#ifdef SQL_TEST - if (sql_interrupt_count>0) { - sql_interrupt_count--; - if (sql_interrupt_count==0) { - sql_interrupt(db); - } - } -#endif - /* Sanity checking on other operands */ #ifdef SQL_DEBUG { -- 2.7.4