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 445622C6BF for ; Fri, 12 Apr 2019 09:08:32 -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 XYz86nA1uAin for ; Fri, 12 Apr 2019 09:08:32 -0400 (EDT) Received: from smtp48.i.mail.ru (smtp48.i.mail.ru [94.100.177.108]) (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 780A22C69B for ; Fri, 12 Apr 2019 09:08:31 -0400 (EDT) Date: Fri, 12 Apr 2019 16:08:28 +0300 From: Mergen Imeev Subject: [tarantool-patches] Re: [PATCH v1 2/3] sql: remove unused macros in SQL Message-ID: <20190412130827.GA1146@tarantool.org> References: <7654181f806322478e4de2b4c9c800fd5fa33077.1554830037.git.imeevma@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: 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: "n.pettik" Cc: tarantool-patches@freelists.org Hi! Thank you for review. I dropped first and squashed second and third patches. New patch below. On Thu, Apr 11, 2019 at 03:08:23AM +0300, n.pettik wrote: > > > > On 9 Apr 2019, at 20:17, imeevma@tarantool.org wrote: > > > > Thise macros unused and should be removed. > > Nit: these. > > Nit: are unused. > Rewrote commit-message. > Are you sure that you’ve removed *all* unused macros? > Otherwise, which attribute are you used to spot this group > of macros? > These macros were in main.c. New patch: >From f5b2bf849249cf395149083a6c50767a9d375a06 Mon Sep 17 00:00:00 2001 From: Mergen Imeev Date: Sat, 6 Apr 2019 12:50:45 +0300 Subject: [PATCH] sql: remove unused code from main.c This patch removes part of unused functions and macros from main.c. This will facilitate the work of removing SQL error/status codes. Needed for #4074 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/expr.c b/src/box/sql/expr.c index 6ff41a5..a95d576 100644 --- a/src/box/sql/expr.c +++ b/src/box/sql/expr.c @@ -3287,7 +3287,6 @@ sqlExprCodeIN(Parse * pParse, /* Parsing and code generating context */ sqlDbFree(pParse->db, zAff); } -#ifndef SQL_OMIT_FLOATING_POINT /* * Generate an instruction that will put the floating point * value described by z[0..n-1] into register iMem. @@ -3309,7 +3308,6 @@ codeReal(Vdbe * v, const char *z, int negateFlag, int iMem) P4_REAL); } } -#endif /** * Generate an instruction that will put the integer describe by @@ -3760,13 +3758,11 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target) expr_code_int(pParse, pExpr, false, target); return target; } -#ifndef SQL_OMIT_FLOATING_POINT case TK_FLOAT:{ assert(!ExprHasProperty(pExpr, EP_IntValue)); codeReal(v, pExpr->u.zToken, 0, target); return target; } -#endif case TK_STRING:{ assert(!ExprHasProperty(pExpr, EP_IntValue)); sqlVdbeLoadString(v, target, pExpr->u.zToken); @@ -3923,12 +3919,10 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target) if (pLeft->op == TK_INTEGER) { expr_code_int(pParse, pLeft, true, target); return target; -#ifndef SQL_OMIT_FLOATING_POINT } else if (pLeft->op == TK_FLOAT) { assert(!ExprHasProperty(pExpr, EP_IntValue)); codeReal(v, pLeft->u.zToken, 1, target); return target; -#endif } else { tempX.op = TK_INTEGER; tempX.flags = EP_IntValue | EP_TokenOnly; @@ -4283,7 +4277,6 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target) pExpr->space_def->fields[ pExpr->iColumn].name, target)); -#ifndef SQL_OMIT_FLOATING_POINT /* If the column has type NUMBER, it may currently be stored as an * integer. Use OP_Realify to make sure it is really real. */ @@ -4291,7 +4284,6 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target) pExpr->iColumn].type == FIELD_TYPE_NUMBER) { sqlVdbeAddOp1(v, OP_Realify, target); } -#endif break; } diff --git a/src/box/sql/fault.c b/src/box/sql/fault.c index d83af36..8ee774e 100644 --- a/src/box/sql/fault.c +++ b/src/box/sql/fault.c @@ -65,14 +65,8 @@ static SQL_WSD struct BenignMallocHooks { * case where writable static data is supported, wsdHooks can refer directly * to the "sqlHooks" state vector declared above. */ -#ifdef SQL_OMIT_WSD -#define wsdHooksInit \ - BenignMallocHooks *x = &GLOBAL(BenignMallocHooks,sqlHooks) -#define wsdHooks x[0] -#else #define wsdHooksInit #define wsdHooks sqlHooks -#endif /* * Register hooks to call when sqlBeginBenignMalloc() and diff --git a/src/box/sql/func.c b/src/box/sql/func.c index abeecef..34b6c79 100644 --- a/src/box/sql/func.c +++ b/src/box/sql/func.c @@ -498,7 +498,6 @@ substrFunc(sql_context * context, int argc, sql_value ** argv) /* * Implementation of the round() function */ -#ifndef SQL_OMIT_FLOATING_POINT static void roundFunc(sql_context * context, int argc, sql_value ** argv) { @@ -535,7 +534,6 @@ roundFunc(sql_context * context, int argc, sql_value ** argv) } sql_result_double(context, r); } -#endif /* * Allocate nByte bytes of space using sqlMalloc(). If the @@ -1547,7 +1545,6 @@ totalFinalize(sql_context * context) { SumCtx *p; p = sql_aggregate_context(context, 0); - /* (double)0 In case of SQL_OMIT_FLOATING_POINT... */ sql_result_double(context, p ? p->rSum : (double)0); } @@ -1703,11 +1700,6 @@ sql_overload_function(sql * db, const char *zName, { int rc = SQL_OK; -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(db) || zName == 0 || nArg < -2) { - return SQL_MISUSE; - } -#endif if (sqlFindFunction(db, zName, nArg, 0) == 0) { rc = sqlCreateFunc(db, zName, type, nArg, 0, 0, sqlInvalidFunction, 0, 0, 0); @@ -1841,10 +1833,8 @@ sqlRegisterBuiltinFunctions(void) FUNCTION(unicode, 1, 0, 0, unicodeFunc, FIELD_TYPE_STRING), FUNCTION(char, -1, 0, 0, charFunc, FIELD_TYPE_STRING), FUNCTION(abs, 1, 0, 0, absFunc, FIELD_TYPE_NUMBER), -#ifndef SQL_OMIT_FLOATING_POINT FUNCTION(round, 1, 0, 0, roundFunc, FIELD_TYPE_INTEGER), FUNCTION(round, 2, 0, 0, roundFunc, FIELD_TYPE_INTEGER), -#endif FUNCTION_COLL(upper, 1, 0, 1, UpperICUFunc), FUNCTION_COLL(lower, 1, 0, 1, LowerICUFunc), FUNCTION(hex, 1, 0, 0, hexFunc, FIELD_TYPE_STRING), diff --git a/src/box/sql/global.c b/src/box/sql/global.c index 159b35e..9af671a 100644 --- a/src/box/sql/global.c +++ b/src/box/sql/global.c @@ -200,10 +200,6 @@ SQL_WSD struct sqlConfig sqlConfig = { 0, /* isMallocInit */ 0, /* xLog */ 0, /* pLogArg */ -#ifdef SQL_ENABLE_SQLLOG - 0, /* xSqllog */ - 0, /* pSqllogArg */ -#endif #ifdef SQL_VDBE_COVERAGE 0, /* xVdbeBranch */ 0, /* pVbeBranchArg */ @@ -232,17 +228,14 @@ 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! * Changing the pending byte during operation will result in undefined * and incorrect behavior. */ -#ifndef SQL_OMIT_WSD int sqlPendingByte = 0x40000000; -#endif #include "opcodes.h" /* diff --git a/src/box/sql/legacy.c b/src/box/sql/legacy.c index 599fba0..fb6891b 100644 --- a/src/box/sql/legacy.c +++ b/src/box/sql/legacy.c @@ -57,6 +57,7 @@ sql_exec(sql * db, /* The database on which the SQL executes */ char **pzErrMsg /* Write error messages here */ ) { + (void)pzErrMsg; int rc = SQL_OK; /* Return code */ const char *zLeftover; /* Tail of unprocessed SQL */ sql_stmt *pStmt = 0; /* The current SQL statement */ @@ -169,19 +170,7 @@ sql_exec(sql * db, /* The database on which the SQL executes */ sqlDbFree(db, azCols); rc = sqlApiExit(db, rc); - if (rc != SQL_OK && pzErrMsg) { - int nErrMsg = 1 + sqlStrlen30(sql_errmsg(db)); - *pzErrMsg = sqlMalloc(nErrMsg); - if (*pzErrMsg) { - memcpy(*pzErrMsg, sql_errmsg(db), nErrMsg); - } else { - rc = SQL_NOMEM; - sqlError(db, SQL_NOMEM); - } - } else if (pzErrMsg) { - *pzErrMsg = 0; - } - + assert(rc == SQL_OK); assert((rc & db->errMask) == rc); return rc; } diff --git a/src/box/sql/main.c b/src/box/sql/main.c index 0b3bd20..fe1135a 100644 --- a/src/box/sql/main.c +++ b/src/box/sql/main.c @@ -40,22 +40,6 @@ #include "version.h" #include "box/session.h" -#ifdef SQL_ENABLE_FTS3 -#include "fts3.h" -#endif -#ifdef SQL_ENABLE_RTREE -#include "rtree.h" -#endif -#ifdef SQL_ENABLE_ICU -#include "sqlicu.h" -#endif -#ifdef SQL_ENABLE_JSON1 -int sqlJson1Init(sql *); -#endif -#ifdef SQL_ENABLE_FTS5 -int sqlFts5Init(sql *); -#endif - #if !defined(SQL_OMIT_TRACE) && defined(SQL_ENABLE_IOTRACE) /* * If the following function pointer is not NULL and if @@ -89,12 +73,9 @@ char *sql_data_directory = 0; * * This routine must be called to initialize the memory allocation, * and VFS subsystems prior to doing any serious work with - * sql. But as long as you do not compile with SQL_OMIT_AUTOINIT - * this routine will be called automatically by key routines such as - * sql_open(). + * 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 @@ -119,16 +100,6 @@ int sql_initialize(void) { int rc = SQL_OK; -#ifdef SQL_EXTRA_INIT - int bRunExtraInit = 0; /* Extra initialization needed */ -#endif - -#ifdef SQL_OMIT_WSD - rc = sql_wsd_init(4096, 24); - if (rc != SQL_OK) { - return rc; - } -#endif /* If the following assert() fails on some obscure processor/compiler * combination, the work-around is to set the correct pointer @@ -170,12 +141,6 @@ sql_initialize(void) if (sqlGlobalConfig.isInit == 0 && sqlGlobalConfig.inProgress == 0) { sqlGlobalConfig.inProgress = 1; -#ifdef SQL_ENABLE_SQLLOG - { - extern void sql_init_sqllog(void); - sql_init_sqllog(); - } -#endif memset(&sqlBuiltinFunctions, 0, sizeof(sqlBuiltinFunctions)); sqlRegisterBuiltinFunctions(); @@ -184,9 +149,6 @@ sql_initialize(void) } if (rc == SQL_OK) { sqlGlobalConfig.isInit = 1; -#ifdef SQL_EXTRA_INIT - bRunExtraInit = 1; -#endif } sqlGlobalConfig.inProgress = 0; } @@ -197,7 +159,6 @@ sql_initialize(void) * reason. So we run it once during initialization. */ #ifndef NDEBUG -#ifndef SQL_OMIT_FLOATING_POINT /* This section of code's only "output" is via assert() statements. */ if (rc == SQL_OK) { u64 x = (((u64) 1) << 63) - 1; @@ -208,206 +169,7 @@ sql_initialize(void) assert(sqlIsNaN(y)); } #endif -#endif - - /* Do extra initialization steps requested by the SQL_EXTRA_INIT - * compile-time option. - */ -#ifdef SQL_EXTRA_INIT - if (bRunExtraInit) { - int SQL_EXTRA_INIT(const char *); - rc = SQL_EXTRA_INIT(0); - } -#endif - - return rc; -} - -/* - * 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) -{ -#ifdef SQL_OMIT_WSD - int rc = sql_wsd_init(4096, 24); - if (rc != SQL_OK) { - return rc; - } -#endif - - 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; - } - -#ifdef SQL_ENABLE_SQLLOG - case SQL_CONFIG_SQLLOG:{ - typedef void (*SQLLOGFUNC_t) (void *, sql *, - const char *, int); - sqlGlobalConfig.xSqllog = va_arg(ap, SQLLOGFUNC_t); - sqlGlobalConfig.pSqllogArg = va_arg(ap, void *); - break; - } -#endif - - 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; } @@ -556,13 +318,6 @@ sqlClose(sql * db, int forceZombie) "statements"); return SQL_BUSY; } -#ifdef SQL_ENABLE_SQLLOG - if (sqlGlobalConfig.xSqllog) { - /* Closing the handle. Fourth parameter is passed the value 2. */ - sqlGlobalConfig.xSqllog(sqlGlobalConfig.pSqllogArg, db, - 0, 2); - } -#endif /* Convert the connection into a zombie and then close it. */ @@ -640,48 +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) -{ -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(db)) { - return; - } -#endif - 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) -{ -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(db) - && (db == 0 || db->magic != SQL_MAGIC_ZOMBIE)) { - return; - } -#endif - 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 @@ -775,11 +488,6 @@ sql_create_function_v2(sql * db, int rc = SQL_ERROR; FuncDestructor *pArg = 0; -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(db)) { - return SQL_MISUSE; - } -#endif if (xDestroy) { pArg = (FuncDestructor *) sqlDbMallocZero(db, @@ -814,11 +522,6 @@ sql_trace_v2(sql * db, /* Trace this connection */ int (*xTrace) (unsigned, void *, void *, void *), /* Callback to invoke */ void *pArg) /* Context */ { -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(db)) { - return SQL_MISUSE; - } -#endif if (mTrace == 0) xTrace = 0; if (xTrace == 0) @@ -832,93 +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; - -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(db)) { - return 0; - } -#endif - 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; - -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(db)) { - return 0; - } -#endif - 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; - -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(db)) { - return 0; - } -#endif - 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 @@ -957,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(). */ @@ -1003,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_* @@ -1103,12 +659,6 @@ sql_limit(sql * db, int limitId, int newLimit) { int oldLimit; -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(db)) { - return -1; - } -#endif - /* EVIDENCE-OF: R-30189-54097 For each limit category SQL_LIMIT_NAME * there is a hard upper bound set at compile-time by a C preprocessor * macro called SQL_MAX_NAME. (The "_LIMIT_" in the name is changed to @@ -1145,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. @@ -1449,15 +708,9 @@ sql_init_db(sql **out_db) sql *db; int rc; /* Return code */ -#ifdef SQL_ENABLE_API_ARMOR - if (ppDb == 0) - return SQL_MISUSE; -#endif -#ifndef SQL_OMIT_AUTOINIT rc = sql_initialize(); if (rc) return rc; -#endif /* Allocate the sql data structure */ db = sqlMallocZero(sizeof(sql)); @@ -1488,54 +741,6 @@ sql_init_db(sql **out_db) sqlRegisterPerConnectionBuiltinFunctions(db); rc = sql_errcode(db); -#ifdef SQL_ENABLE_FTS5 - /* Register any built-in FTS5 module before loading the automatic - * extensions. This allows automatic extensions to register FTS5 - * tokenizers and auxiliary functions. - */ - if (!db->mallocFailed && rc == SQL_OK) { - rc = sqlFts5Init(db); - } -#endif - -#ifdef SQL_ENABLE_FTS1 - if (!db->mallocFailed) { - extern int sqlFts1Init(sql *); - rc = sqlFts1Init(db); - } -#endif - -#ifdef SQL_ENABLE_FTS2 - if (!db->mallocFailed && rc == SQL_OK) { - extern int sqlFts2Init(sql *); - rc = sqlFts2Init(db); - } -#endif - -#ifdef SQL_ENABLE_FTS3 /* automatically defined by SQL_ENABLE_FTS4 */ - if (!db->mallocFailed && rc == SQL_OK) { - rc = sqlFts3Init(db); - } -#endif - -#ifdef SQL_ENABLE_ICU - if (!db->mallocFailed && rc == SQL_OK) { - rc = sqlIcuInit(db); - } -#endif - -#ifdef SQL_ENABLE_RTREE - if (!db->mallocFailed && rc == SQL_OK) { - rc = sqlRtreeInit(db); - } -#endif - -#ifdef SQL_ENABLE_JSON1 - if (!db->mallocFailed && rc == SQL_OK) { - rc = sqlJson1Init(db); - } -#endif - if (rc) sqlError(db, rc); @@ -1553,322 +758,7 @@ opendb_out: db->magic = SQL_MAGIC_SICK; *out_db = db; -#ifdef SQL_ENABLE_SQLLOG - if (sqlGlobalConfig.xSqllog) { - /* Opening a db handle. Fourth parameter is passed 0. */ - void *pArg = sqlGlobalConfig.pSqllogArg; - sqlGlobalConfig.xSqllog(pArg, db, zFilename, 0); - } -#endif - - return rc; -} - -/* - * Enable or disable the extended result codes. - */ -int -sql_extended_result_codes(sql * db, int onoff) -{ -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(db)) - return SQL_MISUSE; -#endif - 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; -#ifndef SQL_OMIT_WSD - { - unsigned int newVal = va_arg(ap, unsigned int); - if (newVal) - sqlPendingByte = newVal; - } -#endif - 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; } @@ -1898,75 +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; -} - - -#ifdef SQL_ENABLE_SNAPSHOT -/* - * Obtain a snapshot handle for the snapshot of database zDb currently - * being read by handle db. - */ -int -sql_snapshot_get(sql * db, - const char *zDb, sql_snapshot ** ppSnapshot) -{ - int rc = SQL_ERROR; - return rc; -} - -/* - * Open a read-transaction on the snapshot idendified by pSnapshot. - */ -int -sql_snapshot_open(sql * db, - const char *zDb, sql_snapshot * pSnapshot) -{ - int rc = SQL_ERROR; - return rc; -} - -/* - * Recover as many snapshots as possible from the wal file associated with - * schema zDb of database db. - */ -int -sql_snapshot_recover(sql * db, const char *zDb) -{ - int rc = SQL_ERROR; - return rc; -} - -/* - * Free a snapshot handle obtained from sql_snapshot_get(). - */ -void -sql_snapshot_free(sql_snapshot * pSnapshot) -{ - sql_free(pSnapshot); -} -#endif /* SQL_ENABLE_SNAPSHOT */ diff --git a/src/box/sql/malloc.c b/src/box/sql/malloc.c index dc018fc..d6f99b4 100644 --- a/src/box/sql/malloc.c +++ b/src/box/sql/malloc.c @@ -185,11 +185,6 @@ sql_soft_heap_limit64(sql_int64 n) sql_int64 priorLimit; sql_int64 excess; sql_int64 nUsed; -#ifndef SQL_OMIT_AUTOINIT - int rc = sql_initialize(); - if (rc) - return -1; -#endif priorLimit = mem0.alarmThreshold; if (n < 0) { return priorLimit; @@ -372,20 +367,12 @@ sqlMalloc(u64 n) void * sql_malloc(int n) { -#ifndef SQL_OMIT_AUTOINIT - if (sql_initialize()) - return 0; -#endif return n <= 0 ? 0 : sqlMalloc(n); } void * sql_malloc64(sql_uint64 n) { -#ifndef SQL_OMIT_AUTOINIT - if (sql_initialize()) - return 0; -#endif return sqlMalloc(n); } @@ -661,10 +648,6 @@ sqlRealloc(void *pOld, u64 nBytes) void * sql_realloc(void *pOld, int n) { -#ifndef SQL_OMIT_AUTOINIT - if (sql_initialize()) - return 0; -#endif if (n < 0) n = 0; /* IMP: R-26507-47431 */ return sqlRealloc(pOld, n); @@ -673,10 +656,6 @@ sql_realloc(void *pOld, int n) void * sql_realloc64(void *pOld, sql_uint64 n) { -#ifndef SQL_OMIT_AUTOINIT - if (sql_initialize()) - return 0; -#endif return sqlRealloc(pOld, n); } diff --git a/src/box/sql/os.c b/src/box/sql/os.c index 76a15ed..eb7450b 100644 --- a/src/box/sql/os.c +++ b/src/box/sql/os.c @@ -213,11 +213,6 @@ sql_vfs * sql_vfs_find(const char *zVfs) { sql_vfs *pVfs = 0; -#ifndef SQL_OMIT_AUTOINIT - int rc = sql_initialize(); - if (rc) - return 0; -#endif for (pVfs = vfsList; pVfs; pVfs = pVfs->pNext) { if (zVfs == 0) break; @@ -256,15 +251,6 @@ vfsUnlink(sql_vfs * pVfs) int sql_vfs_register(sql_vfs * pVfs, int makeDflt) { -#ifndef SQL_OMIT_AUTOINIT - int rc = sql_initialize(); - if (rc) - return rc; -#endif -#ifdef SQL_ENABLE_API_ARMOR - if (pVfs == 0) - return SQL_MISUSE; -#endif vfsUnlink(pVfs); if (makeDflt || vfsList == 0) { diff --git a/src/box/sql/os_unix.c b/src/box/sql/os_unix.c index b659985..615d539 100644 --- a/src/box/sql/os_unix.c +++ b/src/box/sql/os_unix.c @@ -1693,11 +1693,6 @@ getFileMode(const char *zFile, /* File name */ * corresponding database file and sets *pMode to this value. Whenever * possible, journal files are created using the same permissions * as the associated database file. - * - * If the SQL_ENABLE_8_3_NAMES option is enabled, then the - * original filename is unavailable. But 8_3_NAMES is only used for - * FAT filesystems and permissions do not matter there, so just use - * the default permissions. */ static int findCreateFileMode(const char *zPath, /* Path of file (possibly) being created */ diff --git a/src/box/sql/prepare.c b/src/box/sql/prepare.c index 4ae6c13..3df6b5c 100644 --- a/src/box/sql/prepare.c +++ b/src/box/sql/prepare.c @@ -194,10 +194,6 @@ sqlLockAndPrepare(sql * db, /* Database handle. */ { int rc; -#ifdef SQL_ENABLE_API_ARMOR - if (ppStmt == 0) - return SQL_MISUSE; -#endif *ppStmt = 0; if (!sqlSafetyCheckOk(db) || zSql == 0) { return SQL_MISUSE; diff --git a/src/box/sql/printf.c b/src/box/sql/printf.c index 592f906..31d21db 100644 --- a/src/box/sql/printf.c +++ b/src/box/sql/printf.c @@ -80,12 +80,10 @@ static const et_info fmtinfo[] = { {'u', 10, 0, etRADIX, 0, 0}, {'x', 16, 0, etRADIX, 16, 1}, {'X', 16, 0, etRADIX, 0, 4}, -#ifndef SQL_OMIT_FLOATING_POINT {'f', 0, 1, etFLOAT, 0, 0}, {'e', 0, 1, etEXP, 30, 0}, {'E', 0, 1, etEXP, 14, 0}, {'G', 0, 1, etGENERIC, 14, 0}, -#endif {'i', 10, 1, etRADIX, 0, 0}, {'n', 0, 0, etSIZE, 0, 0}, {'%', 0, 0, etPERCENT, 0, 0}, @@ -99,11 +97,6 @@ static const et_info fmtinfo[] = { }; /* - * If SQL_OMIT_FLOATING_POINT is defined, then none of the floating point - * conversions will work. - */ -#ifndef SQL_OMIT_FLOATING_POINT -/* * "*val" is a double such that 0.1 <= *val < 10.0 * Return the ascii code for the leading digit of *val, then * multiply "*val" by 10.0 to renormalize. @@ -130,7 +123,6 @@ et_getdigit(LONGDOUBLE_TYPE * val, int *cnt) *val = (*val - d) * 10.0; return (char)digit; } -#endif /* SQL_OMIT_FLOATING_POINT */ /* * Set the StrAccum object to an error mode. @@ -213,13 +205,11 @@ sqlVXPrintf(StrAccum * pAccum, /* Accumulate results here */ char *zOut; /* Rendering buffer */ int nOut; /* Size of the rendering buffer */ char *zExtra = 0; /* Malloced memory used by some conversion */ -#ifndef SQL_OMIT_FLOATING_POINT int exp, e2; /* exponent of real numbers */ int nsd; /* Number of significant digits returned */ double rounder; /* Used for rounding floating point values */ etByte flag_dp; /* True if decimal point should be shown */ etByte flag_rtz; /* True if trailing zeros should be removed */ -#endif PrintfArguments *pArgList = 0; /* Arguments for SQL_PRINTF_SQLFUNC */ char buf[etBUFSIZE]; /* Conversion buffer */ @@ -499,9 +489,6 @@ sqlVXPrintf(StrAccum * pAccum, /* Accumulate results here */ } else { realvalue = va_arg(ap, double); } -#ifdef SQL_OMIT_FLOATING_POINT - length = 0; -#else if (precision < 0) precision = 6; /* Set default precision */ if (realvalue < 0.0) { @@ -682,7 +669,6 @@ sqlVXPrintf(StrAccum * pAccum, /* Accumulate results here */ bufpt[i++] = '0'; length = width; } -#endif /* !defined(SQL_OMIT_FLOATING_POINT) */ break; case etSIZE: if (!bArgList) { @@ -1082,16 +1068,6 @@ sql_vmprintf(const char *zFormat, va_list ap) char *z; char zBase[SQL_PRINT_BUF_SIZE]; StrAccum acc; - -#ifdef SQL_ENABLE_API_ARMOR - if (zFormat == 0) { - return 0; - } -#endif -#ifndef SQL_OMIT_AUTOINIT - if (sql_initialize()) - return 0; -#endif sqlStrAccumInit(&acc, 0, zBase, sizeof(zBase), SQL_MAX_LENGTH); sqlVXPrintf(&acc, zFormat, ap); z = sqlStrAccumFinish(&acc); @@ -1107,10 +1083,6 @@ sql_mprintf(const char *zFormat, ...) { va_list ap; char *z; -#ifndef SQL_OMIT_AUTOINIT - if (sql_initialize()) - return 0; -#endif va_start(ap, zFormat); z = sql_vmprintf(zFormat, ap); va_end(ap); @@ -1136,13 +1108,6 @@ sql_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap) StrAccum acc; if (n <= 0) return zBuf; -#ifdef SQL_ENABLE_API_ARMOR - if (zBuf == 0 || zFormat == 0) { - if (zBuf) - zBuf[0] = 0; - return zBuf; - } -#endif sqlStrAccumInit(&acc, 0, zBuf, n, 0); sqlVXPrintf(&acc, zFormat, ap); zBuf[acc.nChar] = 0; diff --git a/src/box/sql/random.c b/src/box/sql/random.c index fe98e55..9e1122b 100644 --- a/src/box/sql/random.c +++ b/src/box/sql/random.c @@ -62,18 +62,7 @@ sql_randomness(int N, void *pBuf) * case where writable static data is supported, wsdPrng can refer directly * to the "sqlPrng" state vector declared above. */ -#ifdef SQL_OMIT_WSD - struct sqlPrngType *p = - &GLOBAL(struct sqlPrngType, sqlPrng); -#define wsdPrng p[0] -#else #define wsdPrng sqlPrng -#endif - -#ifndef SQL_OMIT_AUTOINIT - if (sql_initialize()) - return; -#endif if (N <= 0 || pBuf == 0) { wsdPrng.isInit = 0; @@ -125,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 b322602..828ab83 100644 --- a/src/box/sql/sqlInt.h +++ b/src/box/sql/sqlInt.h @@ -682,9 +682,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); @@ -791,9 +788,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 { @@ -843,10 +837,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; @@ -883,9 +873,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 *)); @@ -952,18 +939,6 @@ sql_bind_parameter_lindex(sql_stmt * pStmt, const char *zName, * If compiling for a processor that lacks floating point support, * substitute integer for floating-point */ -#ifdef SQL_OMIT_FLOATING_POINT -#define double sql_int64 -#define float sql_int64 -#define LONGDOUBLE_TYPE sql_int64 -#ifndef SQL_BIG_DBL -#define SQL_BIG_DBL (((sql_int64)1)<<50) -#endif -#define SQL_OMIT_DATETIME_FUNCS 1 -#define SQL_OMIT_TRACE 1 -#undef SQL_MIXED_ENDIAN_64BIT_FLOAT -#undef SQL_HAVE_ISNAN -#endif #ifndef SQL_BIG_DBL #define SQL_BIG_DBL (1e99) #endif @@ -1308,30 +1283,13 @@ extern const int sqlone; #define SQL_DYNAMIC ((sql_destructor_type)sqlMallocSize) /* - * When sql_OMIT_WSD is defined, it means that the target platform does - * not support Writable Static Data (WSD) such as global and static variables. - * All variables must either be on the stack or dynamically allocated from - * the heap. When WSD is unsupported, the variable declarations scattered - * throughout the sql code must become constants instead. The sql_WSD - * macro is used for this purpose. And instead of referencing the variable - * directly, we use its constant as a key to lookup the run-time allocated - * buffer that holds real variable. The constant is also the initializer - * for the run-time allocated buffer. - * - * In the usual case where WSD is supported, the sql_WSD and GLOBAL - * macros become no-ops and have zero performance impact. - */ -#ifdef SQL_OMIT_WSD -#define SQL_WSD const -#define GLOBAL(t,v) (*(t*)sql_wsd_find((void*)&(v), sizeof(v))) -#define sqlGlobalConfig GLOBAL(struct sqlConfig, sqlConfig) -int sql_wsd_init(int N, int J); -void *sql_wsd_find(void *K, int L); -#else + * The usual case where Writable Static Data (WSD) is supported, + * the sql_WSD and GLOBAL macros become no-ops and have zero + * performance impact. + */ #define SQL_WSD #define GLOBAL(t,v) v #define sqlGlobalConfig sqlConfig -#endif /* * The following macros are used to suppress compiler warnings and to @@ -1543,11 +1501,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 */ @@ -2937,10 +2891,6 @@ struct sqlConfig { int isMallocInit; /* True after malloc is initialized */ void (*xLog) (void *, int, const char *); /* Function for logging */ void *pLogArg; /* First argument to xLog() */ -#ifdef SQL_ENABLE_SQLLOG - void (*xSqllog) (void *, sql *, const char *, int); - void *pSqllogArg; -#endif #ifdef SQL_VDBE_COVERAGE /* The following callback (if not NULL) is invoked on every VDBE branch * operation. Set the callback using sql_TESTCTRL_VDBE_COVERAGE. @@ -2956,24 +2906,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 { @@ -3048,15 +2980,6 @@ struct TreeView { } /* - * FTS4 is really an extension for FTS3. It is enabled using the - * sql_ENABLE_FTS3 macro. But to avoid confusion we also call - * the sql_ENABLE_FTS4 macro to serve as an alias for sql_ENABLE_FTS3. - */ -#if defined(SQL_ENABLE_FTS4) && !defined(SQL_ENABLE_FTS3) -#define SQL_ENABLE_FTS3 1 -#endif - -/* * The following macros mimic the standard library functions toupper(), * isspace(), isalnum(), isdigit() and isxdigit(), respectively. The * sql versions only work for ASCII characters, regardless of locale. @@ -3125,11 +3048,7 @@ void sqlStatusUp(int, int); void sqlStatusDown(int, int); void sqlStatusHighwater(int, int); -#ifndef SQL_OMIT_FLOATING_POINT int sqlIsNaN(double); -#else -#define sqlIsNaN(X) 0 -#endif /* * An instance of the following structure holds information about SQL @@ -3440,9 +3359,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 @@ -4553,11 +4469,6 @@ int sqlAddInt64(i64 *, i64); int sqlSubInt64(i64 *, i64); int sqlMulInt64(i64 *, i64); int sqlAbsInt32(int); -#ifdef SQL_ENABLE_8_3_NAMES -void sqlFileSuffix3(const char *, char *); -#else -#define sqlFileSuffix3(X,Y) -#endif u8 sqlGetBoolean(const char *z, u8); const void *sqlValueText(sql_value *); @@ -4578,10 +4489,8 @@ extern const unsigned char sqlCtypeMap[]; extern const Token sqlIntTokens[]; extern SQL_WSD struct sqlConfig sqlConfig; extern FuncDefHash sqlBuiltinFunctions; -#ifndef SQL_OMIT_WSD extern int sqlPendingByte; #endif -#endif /** * Generate code to implement the "ALTER TABLE xxx RENAME TO yyy" diff --git a/src/box/sql/status.c b/src/box/sql/status.c index 2abf7a5..bc170c8 100644 --- a/src/box/sql/status.c +++ b/src/box/sql/status.c @@ -54,18 +54,12 @@ static SQL_WSD struct sqlStatType { /* The "wsdStat" macro will resolve to the status information - * state vector. If writable static data is unsupported on the target, - * we have to locate the state vector at run-time. In the more common - * case where writable static data is supported, wsdStat can refer directly - * to the "sqlStat" state vector declared above. + * state vector. In the common case where writable static data is + * supported, wsdStat can refer directly to the "sqlStat" state + * vector declared above. */ -#ifdef SQL_OMIT_WSD -#define wsdStatInit sqlStatType *x = &GLOBAL(sqlStatType,sqlStat) -#define wsdStat x[0] -#else #define wsdStatInit #define wsdStat sqlStat -#endif /* * Return the current value of a status parameter. @@ -144,10 +138,6 @@ sql_status64(int op, if (op < 0 || op >= ArraySize(wsdStat.nowValue)) { return SQL_MISUSE; } -#ifdef SQL_ENABLE_API_ARMOR - if (pCurrent == 0 || pHighwater == 0) - return SQL_MISUSE; -#endif *pCurrent = wsdStat.nowValue[op]; *pHighwater = wsdStat.mxValue[op]; if (resetFlag) { @@ -161,10 +151,6 @@ sql_status(int op, int *pCurrent, int *pHighwater, int resetFlag) { sql_int64 iCur = 0, iHwtr = 0; int rc; -#ifdef SQL_ENABLE_API_ARMOR - if (pCurrent == 0 || pHighwater == 0) - return SQL_MISUSE; -#endif rc = sql_status64(op, &iCur, &iHwtr, resetFlag); if (rc == 0) { *pCurrent = (int)iCur; @@ -185,11 +171,6 @@ sql_db_status(sql * db, /* The database connection whose status is desired */ ) { int rc = SQL_OK; /* Return code */ -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(db) || pCurrent == 0 || pHighwater == 0) { - return SQL_MISUSE; - } -#endif switch (op) { case SQL_DBSTATUS_LOOKASIDE_USED:{ *pCurrent = db->lookaside.nOut; diff --git a/src/box/sql/treeview.c b/src/box/sql/treeview.c index 1fd8668..5acea58 100644 --- a/src/box/sql/treeview.c +++ b/src/box/sql/treeview.c @@ -349,12 +349,10 @@ sqlTreeViewExpr(TreeView * pView, const Expr * pExpr, u8 moreToFollow) } break; } -#ifndef SQL_OMIT_FLOATING_POINT case TK_FLOAT:{ sqlTreeViewLine(pView, "%s", pExpr->u.zToken); break; } -#endif case TK_STRING:{ sqlTreeViewLine(pView, "%Q", pExpr->u.zToken); break; diff --git a/src/box/sql/update.c b/src/box/sql/update.c index aeaa863..35c0019 100644 --- a/src/box/sql/update.c +++ b/src/box/sql/update.c @@ -58,11 +58,9 @@ sqlColumnDefault(Vdbe *v, struct space_def *def, int i, int ireg) if (pValue) { sqlVdbeAppendP4(v, pValue, P4_MEM); } -#ifndef SQL_OMIT_FLOATING_POINT if (type == FIELD_TYPE_NUMBER) { sqlVdbeAddOp1(v, OP_Realify, ireg); } -#endif } } diff --git a/src/box/sql/util.c b/src/box/sql/util.c index 52a8663..d5c93f8 100644 --- a/src/box/sql/util.c +++ b/src/box/sql/util.c @@ -77,7 +77,6 @@ int } #endif -#ifndef SQL_OMIT_FLOATING_POINT /* * Return true if the floating point value is Not a Number (NaN). * @@ -114,7 +113,6 @@ sqlIsNaN(double x) testcase(rc); return rc; } -#endif /* SQL_OMIT_FLOATING_POINT */ /* * Compute a string length that is limited to what can be stored in @@ -413,7 +411,6 @@ sql_strnicmp(const char *zLeft, const char *zRight, int N) int sqlAtoF(const char *z, double *pResult, int length) { -#ifndef SQL_OMIT_FLOATING_POINT int incr = 1; // UTF-8 const char *zEnd = z + length; /* sign * significand * (10 ^ (esign * exponent)) */ @@ -594,9 +591,6 @@ sqlAtoF(const char *z, double *pResult, int length) /* return true if number and no extra non-whitespace chracters after */ return z == zEnd && nDigits > 0 && eValid && nonNum == 0; -#else - return !sqlAtoi64(z, pResult, length); -#endif /* SQL_OMIT_FLOATING_POINT */ } /* @@ -1363,41 +1357,6 @@ sqlAbsInt32(int x) return -x; } -#ifdef SQL_ENABLE_8_3_NAMES -/* - * If SQL_ENABLE_8_3_NAMES is set at compile-time and if the database - * filename in zBaseFilename is a URI with the "8_3_names=1" parameter and - * if filename in z[] has a suffix (a.k.a. "extension") that is longer than - * three characters, then shorten the suffix on z[] to be the last three - * characters of the original suffix. - * - * If SQL_ENABLE_8_3_NAMES is set to 2 at compile-time, then always - * do the suffix shortening regardless of URI parameter. - * - * Examples: - * - * test.db-journal => test.nal - * test.db-wal => test.wal - * test.db-shm => test.shm - * test.db-mj7f3319fa => test.9fa - */ -void -sqlFileSuffix3(const char *zBaseFilename, char *z) -{ -#if SQL_ENABLE_8_3_NAMES<2 - if (sql_uri_boolean(zBaseFilename, "8_3_names", 0)) -#endif - { - int i, sz; - sz = sqlStrlen30(z); - for (i = sz - 1; i > 0 && z[i] != '/' && z[i] != '.'; i--) { - } - if (z[i] == '.' && ALWAYS(sz > i + 4)) - memmove(&z[i + 1], &z[sz - 3], 4); - } -} -#endif - /* * Find (an approximate) sum of two LogEst values. This computation is * not a simple "+" operator because LogEst is stored as a logarithmic diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c index ed7bf88..d452892 100644 --- a/src/box/sql/vdbe.c +++ b/src/box/sql/vdbe.c @@ -530,10 +530,8 @@ memTracePrint(Mem *p) printf(" si:%lld", p->u.i); } else if (p->flags & MEM_Int) { printf(" i:%lld", p->u.i); -#ifndef SQL_OMIT_FLOATING_POINT } else if (p->flags & MEM_Real) { printf(" r:%g", p->u.r); -#endif } else { char zBuf[200]; sqlVdbeMemPrettyPrint(p, zBuf); @@ -745,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 { @@ -1140,7 +1126,6 @@ case OP_Int64: { /* out2 */ break; } -#ifndef SQL_OMIT_FLOATING_POINT /* Opcode: Real * P2 * P4 * * Synopsis: r[P2]=P4 * @@ -1154,7 +1139,6 @@ case OP_Real: { /* same as TK_FLOAT, out2 */ pOut->u.r = *pOp->p4.pReal; break; } -#endif /* Opcode: String8 * P2 * P4 * * Synopsis: r[P2]='P4' @@ -1692,7 +1676,6 @@ case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ case OP_Subtract: rB -= rA; break; case OP_Multiply: rB *= rA; break; case OP_Divide: { - /* (double)0 In case of SQL_OMIT_FLOATING_POINT... */ if (rA == (double)0) goto division_by_zero; rB /= rA; @@ -1708,10 +1691,6 @@ case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ break; } } -#ifdef SQL_OMIT_FLOATING_POINT - pOut->u.i = rB; - MemSetTypeFlag(pOut, MEM_Int); -#else if (sqlIsNaN(rB)) { goto arithmetic_result_is_null; } @@ -1720,7 +1699,6 @@ case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ if (((type1|type2)&MEM_Real)==0 && !bIntint) { mem_apply_integer_type(pOut); } -#endif } break; @@ -2006,7 +1984,6 @@ case OP_MustBeInt: { /* jump, in1 */ break; } -#ifndef SQL_OMIT_FLOATING_POINT /* Opcode: Realify P1 * * * * * * If register P1 holds an integer convert it to a real value. @@ -2023,7 +2000,6 @@ case OP_Realify: { /* in1 */ } break; } -#endif #ifndef SQL_OMIT_CAST /* Opcode: Cast P1 P2 * * * diff --git a/src/box/sql/vdbeInt.h b/src/box/sql/vdbeInt.h index c84f22c..577b022 100644 --- a/src/box/sql/vdbeInt.h +++ b/src/box/sql/vdbeInt.h @@ -481,11 +481,7 @@ void sqlVdbeMemMove(Mem *, Mem *); int sqlVdbeMemNulTerminate(Mem *); int sqlVdbeMemSetStr(Mem *, const char *, int, u8, void (*)(void *)); void sqlVdbeMemSetInt64(Mem *, i64); -#ifdef SQL_OMIT_FLOATING_POINT -#define sqlVdbeMemSetDouble sqlVdbeMemSetInt64 -#else void sqlVdbeMemSetDouble(Mem *, double); -#endif void sqlVdbeMemInit(Mem *, sql *, u32); void sqlVdbeMemSetNull(Mem *); void sqlVdbeMemSetZeroBlob(Mem *, int); diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c index be5c9df..e6219e2 100644 --- a/src/box/sql/vdbeapi.c +++ b/src/box/sql/vdbeapi.c @@ -1074,11 +1074,6 @@ columnName(sql_stmt * pStmt, Vdbe *p; int n; sql *db; -#ifdef SQL_ENABLE_API_ARMOR - if (pStmt == 0) { - return 0; - } -#endif ret = 0; p = (Vdbe *) pStmt; db = p->db; @@ -1576,11 +1571,6 @@ sql_stmt * sql_next_stmt(sql * pDb, sql_stmt * pStmt) { sql_stmt *pNext; -#ifdef SQL_ENABLE_API_ARMOR - if (!sqlSafetyCheckOk(pDb)) { - return 0; - } -#endif if (pStmt == 0) { pNext = (sql_stmt *) pDb->pVdbe; } else { @@ -1597,11 +1587,6 @@ sql_stmt_status(sql_stmt * pStmt, int op, int resetFlag) { Vdbe *pVdbe = (Vdbe *) pStmt; u32 v; -#ifdef SQL_ENABLE_API_ARMOR - if (!pStmt) { - return 0; - } -#endif v = pVdbe->aCounter[op]; if (resetFlag) pVdbe->aCounter[op] = 0; diff --git a/src/box/sql/vdbeaux.c b/src/box/sql/vdbeaux.c index 0cc3c14..136c14e 100644 --- a/src/box/sql/vdbeaux.c +++ b/src/box/sql/vdbeaux.c @@ -136,7 +136,7 @@ sqlVdbeSetSql(Vdbe * p, const char *z, int n, int isPrepareV2) assert(isPrepareV2 == 1 || isPrepareV2 == 0); if (p == 0) return; -#if defined(SQL_OMIT_TRACE) && !defined(SQL_ENABLE_SQLLOG) +#if defined(SQL_OMIT_TRACE) if (!isPrepareV2) return; #endif @@ -2552,30 +2552,6 @@ sqlVdbeTransferError(Vdbe * p) return rc; } -#ifdef SQL_ENABLE_SQLLOG -/* - * If an SQL_CONFIG_SQLLOG hook is registered and the VM has been run, - * invoke it. - */ -static void -vdbeInvokeSqllog(Vdbe * v) -{ - if (sqlGlobalConfig.xSqllog && v->rc == SQL_OK && v->zSql - && v->pc >= 0) { - char *zExpanded = sqlVdbeExpandSql(v, v->zSql); - assert(v->db->init.busy == 0); - if (zExpanded) { - sqlGlobalConfig.xSqllog(sqlGlobalConfig. - pSqllogArg, v->db, - zExpanded, 1); - sqlDbFree(v->db, zExpanded); - } - } -} -#else -#define vdbeInvokeSqllog(x) -#endif - /* * Clean up a VDBE after execution but do not delete the VDBE just yet. * Write any error messages into *pzErrMsg. Return the result code. @@ -2605,7 +2581,6 @@ sqlVdbeReset(Vdbe * p) * instructions yet, leave the main database error information unchanged. */ if (p->pc >= 0) { - vdbeInvokeSqllog(p); sqlVdbeTransferError(p); sqlDbFree(db, p->zErrMsg); p->zErrMsg = 0; @@ -3084,7 +3059,7 @@ serialGet(const unsigned char *buf, /* Buffer to deserialize from */ /* EVIDENCE-OF: R-57343-49114 Value is a big-endian IEEE 754-2008 64-bit * floating point number. */ -#if !defined(NDEBUG) && !defined(SQL_OMIT_FLOATING_POINT) +#if !defined(NDEBUG) /* Verify that integers and floating point values use the same * byte order. Or, that if SQL_MIXED_ENDIAN_64BIT_FLOAT is * defined that 64-bit floating point values really are mixed diff --git a/src/box/sql/vdbemem.c b/src/box/sql/vdbemem.c index 15a2f55..85fc08c 100644 --- a/src/box/sql/vdbemem.c +++ b/src/box/sql/vdbemem.c @@ -418,11 +418,6 @@ sqlVdbeMemRelease(Mem * p) static int doubleToInt64(double r, int64_t *i) { -#ifdef SQL_OMIT_FLOATING_POINT - /* When floating-point is omitted, double and int64 are the same thing */ - *i = r; - return 0; -#else /* * Many compilers we encounter do not define constants for the * minimum and maximum 64-bit integers, or they define them @@ -443,7 +438,6 @@ doubleToInt64(double r, int64_t *i) *i = (int64_t) r; return *i != r; } -#endif } /* @@ -726,7 +720,6 @@ sqlVdbeMemSetInt64(Mem * pMem, i64 val) } } -#ifndef SQL_OMIT_FLOATING_POINT /* * Delete any previous value and set the value stored in *pMem to val, * manifest type REAL. @@ -740,7 +733,6 @@ sqlVdbeMemSetDouble(Mem * pMem, double val) pMem->flags = MEM_Real; } } -#endif /* * Return true if the Mem object contains a TEXT or BLOB that is