[tarantool-patches] Re: [PATCH v1 2/3] sql: remove unused macros in SQL
Mergen Imeev
imeevma at tarantool.org
Fri Apr 12 16:08:28 MSK 2019
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 at 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 <imeevma at gmail.com>
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
More information about the Tarantool-patches
mailing list