* [tarantool-patches] [PATCH 0/8] sql: cleanup code from obsolete macros
@ 2019-04-29 17:26 Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 1/8] " Stanislav Zudin
` (7 more replies)
0 siblings, 8 replies; 15+ messages in thread
From: Stanislav Zudin @ 2019-04-29 17:26 UTC (permalink / raw)
To: tarantool-patches, korablev; +Cc: Stanislav Zudin
The patch removes unused constants and macros
Issue: https://github.com/tarantool/tarantool/issues/3978
Branch: https://github.com/tarantool/tarantool/tree/stanztt/gh-3978-obsolete-macros
Stanislav Zudin (8):
sql: cleanup code from obsolete macros
Removes unused functions and commented many years ago code.
Removes unused functions.
Removes unused functions and macros.
Removes the following unused macros: SQL_ENABLE_MEMORY_MANAGEMENT
SQL_ENABLE_UNKNOWN_SQL_FUNCTION SQL_SUBSTR_COMPATIBILITY
SQL_ENABLE_STMT_SCANSTATUS
Removes the following unused macros: SQL_EXPLAIN_ESTIMATED_ROWS
SQL_ENABLE_COLUMN_USED_MASK SQL_DISABLE_DIRSYNC
SQL_OMIT_AUTOMATIC_INDEX SQL_DEBUG_SORTER_THREADS
SQL_DEFAULT_WORKER_THREADS SQL_LIMIT_WORKER_THREADS
SQL_MAX_WORKER_THREADS
Removes unused constants
Removes the following unused macros: SQL_PRINTF_PRECISION_LIMIT
SQL_OMIT_COMPOUND_SELECT SQL_POWERSAFE_OVERWRITE
SQL_OMIT_PROGRESS_CALLBACK SQL_OMIT_AUTORESET SQL_OMIT_DECLTYPE
SQL_ENABLE_COLUMN_METADATA SQL_TRACE_SIZE_LIMIT
SQL_OMIT_LIKE_OPTIMIZATION SQL_OMIT_OR_OPTIMIZATION
SQL_OMIT_BETWEEN_OPTIMIZATION
extra/mkkeywordhash.c | 12 -
src/box/sql/CMakeLists.txt | 3 -
src/box/sql/build.c | 3 -
src/box/sql/cursor.h | 25 --
src/box/sql/date.c | 8 +-
src/box/sql/expr.c | 94 +----
src/box/sql/fault.c | 3 -
src/box/sql/func.c | 30 --
src/box/sql/global.c | 6 -
src/box/sql/hwtime.h | 63 ----
src/box/sql/insert.c | 4 -
src/box/sql/main.c | 79 -----
src/box/sql/malloc.c | 170 ----------
src/box/sql/os_unix.c | 2 -
src/box/sql/parse.y | 12 +-
src/box/sql/printf.c | 10 -
src/box/sql/random.c | 26 --
src/box/sql/resolve.c | 6 +-
src/box/sql/select.c | 33 +-
src/box/sql/sqlInt.h | 273 +--------------
src/box/sql/treeview.c | 4 +-
src/box/sql/trigger.c | 2 -
src/box/sql/util.c | 106 ------
src/box/sql/vdbe.c | 47 +--
src/box/sql/vdbe.h | 15 +-
src/box/sql/vdbeInt.h | 10 -
src/box/sql/vdbeapi.c | 151 +--------
src/box/sql/vdbeaux.c | 83 -----
src/box/sql/vdbesort.c | 679 ++++---------------------------------
src/box/sql/vdbetrace.c | 34 --
src/box/sql/where.c | 324 +-----------------
src/box/sql/whereInt.h | 12 -
src/box/sql/wherecode.c | 65 +---
src/box/sql/whereexpr.c | 11 +-
34 files changed, 103 insertions(+), 2302 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] [PATCH 1/8] sql: cleanup code from obsolete macros
2019-04-29 17:26 [tarantool-patches] [PATCH 0/8] sql: cleanup code from obsolete macros Stanislav Zudin
@ 2019-04-29 17:26 ` Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 2/8] Removes unused functions and commented many years ago code Stanislav Zudin
` (6 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Stanislav Zudin @ 2019-04-29 17:26 UTC (permalink / raw)
To: tarantool-patches, korablev; +Cc: Stanislav Zudin
Removes obsolete and not applicable for the project macros.
Part of #3978
---
src/box/sql/cursor.h | 25 -------------
src/box/sql/date.c | 8 ++---
src/box/sql/expr.c | 4 +--
src/box/sql/fault.c | 3 --
src/box/sql/global.c | 6 ----
src/box/sql/random.c | 2 --
src/box/sql/sqlInt.h | 76 +++------------------------------------
src/box/sql/util.c | 86 --------------------------------------------
src/box/sql/vdbe.c | 2 +-
9 files changed, 11 insertions(+), 201 deletions(-)
diff --git a/src/box/sql/cursor.h b/src/box/sql/cursor.h
index 237411613..e5c49d736 100644
--- a/src/box/sql/cursor.h
+++ b/src/box/sql/cursor.h
@@ -101,29 +101,4 @@ int sqlCursorIsValidNN(BtCursor *);
#define CURSOR_INVALID 0
#define CURSOR_VALID 1
-/*
- * Routines to read or write a two- and four-byte big-endian integer values.
- */
-#define get2byte(x) ((x)[0]<<8 | (x)[1])
-#define put2byte(p,v) ((p)[0] = (u8)((v)>>8), (p)[1] = (u8)(v))
-#define get4byte sqlGet4byte
-#define put4byte sqlPut4byte
-
-/*
- * get2byteAligned(), unlike get2byte(), requires that its argument point to a
- * two-byte aligned address. get2bytea() is only used for accessing the
- * cell addresses in a btree header.
- */
-#if SQL_BYTEORDER==4321
-#define get2byteAligned(x) (*(u16*)(x))
-#elif SQL_BYTEORDER==1234 && !defined(SQL_DISABLE_INTRINSIC) \
- && GCC_VERSION>=4008000
-#define get2byteAligned(x) __builtin_bswap16(*(u16*)(x))
-#elif SQL_BYTEORDER==1234 && !defined(SQL_DISABLE_INTRINSIC) \
- && defined(_MSC_VER) && _MSC_VER>=1300
-#define get2byteAligned(x) _byteswap_ushort(*(u16*)(x))
-#else
-#define get2byteAligned(x) ((x)[0]<<8 | (x)[1])
-#endif
-
#endif /* SQL_CURSOR_H */
diff --git a/src/box/sql/date.c b/src/box/sql/date.c
index 07a57ab2a..26afd18d8 100644
--- a/src/box/sql/date.c
+++ b/src/box/sql/date.c
@@ -550,18 +550,18 @@ osLocaltime(time_t * t, struct tm *pTm)
#if !HAVE_LOCALTIME_R && !HAVE_LOCALTIME_S
struct tm *pX;
pX = localtime(t);
-#ifndef SQL_UNTESTABLE
+
if (sqlGlobalConfig.bLocaltimeFault)
pX = 0;
-#endif
+
if (pX)
*pTm = *pX;
rc = pX == 0;
#else
-#ifndef SQL_UNTESTABLE
+
if (sqlGlobalConfig.bLocaltimeFault)
return 1;
-#endif
+
#if HAVE_LOCALTIME_R
rc = localtime_r(t, pTm) == 0;
#else
diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
index ba7eea59d..00992388c 100644
--- a/src/box/sql/expr.c
+++ b/src/box/sql/expr.c
@@ -3603,7 +3603,7 @@ sqlExprCodeMove(Parse * pParse, int iFrom, int iTo, int nReg)
sqlExprCacheRemove(pParse, iFrom, nReg);
}
-#if defined(SQL_DEBUG) || defined(SQL_COVERAGE_TEST)
+#if defined(SQL_DEBUG)
/*
* Return true if any register in the range iFrom..iTo (inclusive)
* is used as part of the column cache.
@@ -3623,7 +3623,7 @@ usedAsColumnCache(Parse * pParse, int iFrom, int iTo)
}
return 0;
}
-#endif /* SQL_DEBUG || SQL_COVERAGE_TEST */
+#endif /* SQL_DEBUG */
/*
* Convert a scalar expression node to a TK_REGISTER referencing
diff --git a/src/box/sql/fault.c b/src/box/sql/fault.c
index 8ee774e4c..26eeaeedb 100644
--- a/src/box/sql/fault.c
+++ b/src/box/sql/fault.c
@@ -47,8 +47,6 @@
#include "sqlInt.h"
-#ifndef SQL_UNTESTABLE
-
/*
* Global variables.
*/
@@ -104,4 +102,3 @@ sqlEndBenignMalloc(void)
}
}
-#endif /* #ifndef SQL_UNTESTABLE */
diff --git a/src/box/sql/global.c b/src/box/sql/global.c
index 9af671a5e..b6a01731b 100644
--- a/src/box/sql/global.c
+++ b/src/box/sql/global.c
@@ -204,9 +204,7 @@ SQL_WSD struct sqlConfig sqlConfig = {
0, /* xVdbeBranch */
0, /* pVbeBranchArg */
#endif
-#ifndef SQL_UNTESTABLE
0, /* xTestCallback */
-#endif
0, /* bLocaltimeFault */
0x7ffffffe /* iOnceResetThreshold */
};
@@ -246,7 +244,3 @@ int sqlPendingByte = 0x40000000;
*/
const unsigned char sqlOpcodeProperty[] = OPFLG_INITIALIZER;
-/*
- * Name of the default collating sequence
- */
-const char sqlStrBINARY[] = "BINARY";
diff --git a/src/box/sql/random.c b/src/box/sql/random.c
index 9e1122b22..618cb96d6 100644
--- a/src/box/sql/random.c
+++ b/src/box/sql/random.c
@@ -108,7 +108,6 @@ sql_randomness(int N, void *pBuf)
} while (--N);
}
-#ifndef SQL_UNTESTABLE
/*
* For testing purposes, we sometimes want to preserve the state of
* PRNG and restore the PRNG to its saved state at a later time, or
@@ -132,4 +131,3 @@ sqlPrngRestoreState(void)
sizeof(sqlPrng)
);
}
-#endif /* SQL_UNTESTABLE */
diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
index 76ea9fb17..1691d89ca 100644
--- a/src/box/sql/sqlInt.h
+++ b/src/box/sql/sqlInt.h
@@ -228,19 +228,14 @@
* can insure that all cases are evaluated.
*
*/
-#ifdef SQL_COVERAGE_TEST
-void sqlCoverage(int);
-#define testcase(X) if( X ){ sqlCoverage(__LINE__); }
-#else
#define testcase(X)
-#endif
/*
* The TESTONLY macro is used to enclose variable declarations or
* other bits of code that are needed to support the arguments
* within testcase() and assert() macros.
*/
-#if !defined(NDEBUG) || defined(SQL_COVERAGE_TEST)
+#if !defined(NDEBUG)
#define TESTONLY(X) X
#else
#define TESTONLY(X)
@@ -270,15 +265,8 @@ void sqlCoverage(int);
* hint of unplanned behavior.
*
* In other words, ALWAYS and NEVER are added for defensive code.
- *
- * When doing coverage testing ALWAYS and NEVER are hard-coded to
- * be true and false so that the unreachable code they specify will
- * not be counted as untested code.
*/
-#if defined(SQL_COVERAGE_TEST) || defined(SQL_MUTATION_TEST)
-#define ALWAYS(X) (1)
-#define NEVER(X) (0)
-#elif !defined(NDEBUG)
+#if !defined(NDEBUG)
#define ALWAYS(X) ((X)?1:(assert(0),0))
#define NEVER(X) ((X)?(assert(0),1):0)
#else
@@ -1163,41 +1151,6 @@ typedef u64 uptr;
*/
#define SQL_WITHIN(P,S,E) (((uptr)(P)>=(uptr)(S))&&((uptr)(P)<(uptr)(E)))
-/*
- * Macros to determine whether the machine is big or little endian,
- * and whether or not that determination is run-time or compile-time.
- *
- * For best performance, an attempt is made to guess at the byte-order
- * using C-preprocessor macros. If that is unsuccessful, or if
- * -Dsql_RUNTIME_BYTEORDER=1 is set, then byte-order is determined
- * at run-time.
- */
-#if (defined(i386) || defined(__i386__) || defined(_M_IX86) || \
- defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \
- defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \
- defined(__arm__)) && !defined(SQL_RUNTIME_BYTEORDER)
-#define SQL_BYTEORDER 1234
-#define SQL_BIGENDIAN 0
-#define SQL_LITTLEENDIAN 1
-#endif
-#if (defined(sparc) || defined(__ppc__)) \
- && !defined(SQL_RUNTIME_BYTEORDER)
-#define SQL_BYTEORDER 4321
-#define SQL_BIGENDIAN 1
-#define SQL_LITTLEENDIAN 0
-#endif
-#if !defined(SQL_BYTEORDER)
-#ifdef SQL_AMALGAMATION
-const int sqlone = 1;
-#else
-extern const int sqlone;
-#endif
-#define SQL_BYTEORDER 0 /* 0 means "unknown at compile-time" */
-#define SQL_BIGENDIAN (*(char *)(&sqlone)==0)
-#define SQL_LITTLEENDIAN (*(char *)(&sqlone)==1)
-#define SQL_UTF16NATIVE (SQL_BIGENDIAN?SQL_UTF16BE:SQL_UTF16LE)
-#endif
-
/*
* Constants for the largest and smallest possible 64-bit signed integers.
* These macros are designed to work correctly on both 32-bit and 64-bit
@@ -2910,9 +2863,7 @@ struct sqlConfig {
void (*xVdbeBranch) (void *, int iSrcLine, u8 eThis, u8 eMx); /* Callback */
void *pVdbeBranchArg; /* 1st argument */
#endif
-#ifndef SQL_UNTESTABLE
int (*xTestCallback) (int); /* Invoked by sqlFaultSim() */
-#endif
int bLocaltimeFault; /* True to fail localtime() calls */
int iOnceResetThreshold; /* When to reset OP_Once counters */
};
@@ -3032,9 +2983,7 @@ void sqlScratchFree(void *);
void *sqlPageMalloc(int);
void sqlPageFree(void *);
void sqlMemSetDefault(void);
-#ifndef SQL_UNTESTABLE
void sqlBenignMallocHooks(void (*)(void), void (*)(void));
-#endif
int sqlHeapNearlyFull(void);
/*
@@ -3371,11 +3320,7 @@ int
vdbe_emit_open_cursor(struct Parse *parse, int cursor, int index_id,
struct space *space);
-#ifdef SQL_UNTESTABLE
-#define sqlFaultSim(X) SQL_OK
-#else
int sqlFaultSim(int);
-#endif
/**
* The parser calls this routine in order to create a new VIEW.
@@ -3677,10 +3622,8 @@ void sqlExprAnalyzeAggregates(NameContext *, Expr *);
void sqlExprAnalyzeAggList(NameContext *, ExprList *);
int sqlFunctionUsesThisSrc(Expr *, SrcList *);
Vdbe *sqlGetVdbe(Parse *);
-#ifndef SQL_UNTESTABLE
void sqlPrngSaveState(void);
void sqlPrngRestoreState(void);
-#endif
void sqlRollbackAll(Vdbe *);
/**
@@ -4493,16 +4436,14 @@ sql_value *sqlValueNew(sql *);
int sqlValueFromExpr(sql *, Expr *, enum field_type type,
sql_value **);
void sql_value_apply_type(sql_value *val, enum field_type type);
-#ifndef SQL_AMALGAMATION
+
extern const unsigned char sqlOpcodeProperty[];
-extern const char sqlStrBINARY[];
extern const unsigned char sqlUpperToLower[];
extern const unsigned char sqlCtypeMap[];
extern const Token sqlIntTokens[];
extern SQL_WSD struct sqlConfig sqlConfig;
extern FuncDefHash sqlBuiltinFunctions;
extern int sqlPendingByte;
-#endif
/**
* Generate code to implement the "ALTER TABLE xxx RENAME TO yyy"
@@ -4887,16 +4828,10 @@ fk_constraint_is_required(struct space *space, const int *changes);
/*
* The interface to the code in fault.c used for identifying "benign"
- * malloc failures. This is only present if sql_UNTESTABLE
- * is not defined.
+ * malloc failures.
*/
-#ifndef SQL_UNTESTABLE
void sqlBeginBenignMalloc(void);
void sqlEndBenignMalloc(void);
-#else
-#define sqlBeginBenignMalloc()
-#define sqlEndBenignMalloc()
-#endif
/*
* Allowed return values from sqlFindInIndex()
@@ -4922,9 +4857,6 @@ int sqlExprCheckHeight(Parse *, int);
#define sqlExprCheckHeight(x,y)
#endif
-u32 sqlGet4byte(const u8 *);
-void sqlPut4byte(u8 *, u32);
-
#ifdef SQL_DEBUG
void sqlParserTrace(FILE *, char *);
#endif
diff --git a/src/box/sql/util.c b/src/box/sql/util.c
index d5c93f8aa..4a93ddf09 100644
--- a/src/box/sql/util.c
+++ b/src/box/sql/util.c
@@ -38,25 +38,11 @@
*/
#include "sqlInt.h"
#include <stdarg.h>
-#if HAVE_ISNAN || SQL_HAVE_ISNAN
#include <math.h>
-#endif
#include "coll/coll.h"
#include <unicode/ucasemap.h>
#include "errinj.h"
-/*
- * Routine needed to support the testcase() macro.
- */
-#ifdef SQL_COVERAGE_TEST
-void
-sqlCoverage(int x)
-{
- static unsigned dummy = 0;
- dummy += (unsigned)x;
-}
-#endif
-
/*
* Give a callback to the test harness that can be used to simulate faults
* in places where it is difficult or expensive to do so purely by means
@@ -68,14 +54,12 @@ sqlCoverage(int x)
* Return whatever integer value the test callback returns, or return
* SQL_OK if no test callback is installed.
*/
-#ifndef SQL_UNTESTABLE
int
sqlFaultSim(int iTest)
{
int (*xCallback) (int) = sqlGlobalConfig.xTestCallback;
return xCallback ? xCallback(iTest) : SQL_OK;
}
-#endif
/*
* Return true if the floating point value is Not a Number (NaN).
@@ -87,30 +71,7 @@ int
sqlIsNaN(double x)
{
int rc; /* The value return */
-#if !SQL_HAVE_ISNAN && !HAVE_ISNAN
- /*
- * Systems that support the isnan() library function should probably
- * make use
- *
- * This NaN test sometimes fails if compiled on GCC with -ffast-math.
- * On the other hand, the use of -ffast-math comes with the following
- * warning:
- *
- * This option [-ffast-math] should never be turned on by any
- * -O option since it can result in incorrect output for programs
- * which depend on an exact implementation of IEEE or ISO
- * rules/specifications for math functions.
- */
-#ifdef __FAST_MATH__
-#error sql will not work correctly with the -ffast-math option of GCC.
-#endif
- volatile double y = x;
- volatile double z = y;
- rc = (y != z);
-#else /* if HAVE_ISNAN */
rc = isnan(x);
-#endif /* HAVE_ISNAN */
- testcase(rc);
return rc;
}
@@ -1123,53 +1084,6 @@ sqlVarintLen(u64 v)
return i;
}
-/*
- * Read or write a four-byte big-endian integer value.
- */
-u32
-sqlGet4byte(const u8 * p)
-{
-#if SQL_BYTEORDER==4321
- u32 x;
- memcpy(&x, p, 4);
- return x;
-#elif SQL_BYTEORDER==1234 && !defined(SQL_DISABLE_INTRINSIC) \
- && defined(__GNUC__) && GCC_VERSION>=4003000
- u32 x;
- memcpy(&x, p, 4);
- return __builtin_bswap32(x);
-#elif SQL_BYTEORDER==1234 && !defined(SQL_DISABLE_INTRINSIC) \
- && defined(_MSC_VER) && _MSC_VER>=1300
- u32 x;
- memcpy(&x, p, 4);
- return _byteswap_ulong(x);
-#else
- testcase(p[0] & 0x80);
- return ((unsigned)p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
-#endif
-}
-
-void
-sqlPut4byte(unsigned char *p, u32 v)
-{
-#if SQL_BYTEORDER==4321
- memcpy(p, &v, 4);
-#elif SQL_BYTEORDER==1234 && !defined(SQL_DISABLE_INTRINSIC) \
- && defined(__GNUC__) && GCC_VERSION>=4003000
- u32 x = __builtin_bswap32(v);
- memcpy(p, &x, 4);
-#elif SQL_BYTEORDER==1234 && !defined(SQL_DISABLE_INTRINSIC) \
- && defined(_MSC_VER) && _MSC_VER>=1300
- u32 x = _byteswap_ulong(v);
- memcpy(p, &x, 4);
-#else
- p[0] = (u8) (v >> 24);
- p[1] = (u8) (v >> 16);
- p[2] = (u8) (v >> 8);
- p[3] = (u8) v;
-#endif
-}
-
/*
* Translate a single byte of Hex into an integer.
* This routine only works if h really is a valid hexadecimal
diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
index 3bd82234e..ce609a578 100644
--- a/src/box/sql/vdbe.c
+++ b/src/box/sql/vdbe.c
@@ -147,7 +147,7 @@ int sql_found_count = 0;
* Test a register to see if it exceeds the current maximum blob size.
* If it does, record the new maximum blob size.
*/
-#if defined(SQL_TEST) && !defined(SQL_UNTESTABLE)
+#if defined(SQL_TEST)
# define UPDATE_MAX_BLOBSIZE(P) updateMaxBlobsize(P)
#else
# define UPDATE_MAX_BLOBSIZE(P)
--
2.17.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] [PATCH 2/8] Removes unused functions and commented many years ago code.
2019-04-29 17:26 [tarantool-patches] [PATCH 0/8] sql: cleanup code from obsolete macros Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 1/8] " Stanislav Zudin
@ 2019-04-29 17:26 ` Stanislav Zudin
2019-05-19 15:15 ` [tarantool-patches] " n.pettik
2019-04-29 17:26 ` [tarantool-patches] [PATCH 3/8] Removes unused functions Stanislav Zudin
` (5 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Stanislav Zudin @ 2019-04-29 17:26 UTC (permalink / raw)
To: tarantool-patches, korablev; +Cc: Stanislav Zudin
Part of #3978
---
src/box/sql/expr.c | 62 ---------------------------
src/box/sql/malloc.c | 100 -------------------------------------------
src/box/sql/random.c | 24 -----------
src/box/sql/sqlInt.h | 12 ------
src/box/sql/util.c | 14 ------
5 files changed, 212 deletions(-)
diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
index 00992388c..ab6f9f068 100644
--- a/src/box/sql/expr.c
+++ b/src/box/sql/expr.c
@@ -3062,18 +3062,6 @@ sqlExprCodeIN(Parse * pParse, /* Parsing and code generating context */
assert(pParse->is_aborted || nVector == 1 || eType == IN_INDEX_EPH
|| eType == IN_INDEX_INDEX_ASC || eType == IN_INDEX_INDEX_DESC);
-#ifdef SQL_DEBUG
- /* Confirm that aiMap[] contains nVector integer values between 0 and
- * nVector-1.
- */
- /*
- for(i=0; i<nVector; i++){
- int j, cnt;
- for(cnt=j=0; j<nVector; j++) if( aiMap[j]==i ) cnt++;
- assert( cnt==1 );
- }
- */
-#endif
/* Code the LHS, the <expr> from "<expr> IN (...)". If the LHS is a
* vector, then it is stored in an array of nVector registers starting
@@ -3088,17 +3076,6 @@ sqlExprCodeIN(Parse * pParse, /* Parsing and code generating context */
rLhsOrig = exprCodeVector(pParse, pLeft, &iDummy);
/* Tarantoool: Order is always preserved. */
rLhs = rLhsOrig;
- /* for(i=0; i<nVector && aiMap[i]==i; i++){} /\* Are LHS fields reordered? *\/ */
- /* if( i==nVector ){ */
- /* /\* LHS fields are not reordered *\/ */
- /* rLhs = rLhsOrig; */
- /* }else{ */
- /* /\* Need to reorder the LHS fields according to aiMap *\/ */
- /* rLhs = sqlGetTempRange(pParse, nVector); */
- /* for(i=0; i<nVector; i++){ */
- /* sqlVdbeAddOp3(v, OP_Copy, rLhsOrig+i, rLhs+aiMap[i], 0); */
- /* } */
- /* } */
/* If sqlFindInIndex() did not find or create an index that is
* suitable for evaluating the IN operator, then evaluate using a
@@ -4495,21 +4472,6 @@ sqlExprCode(Parse * pParse, Expr * pExpr, int target)
}
}
-/*
- * Make a transient copy of expression pExpr and then code it using
- * sqlExprCode(). This routine works just like sqlExprCode()
- * except that the input expression is guaranteed to be unchanged.
- */
-void
-sqlExprCodeCopy(Parse * pParse, Expr * pExpr, int target)
-{
- sql *db = pParse->db;
- pExpr = sqlExprDup(db, pExpr, 0);
- if (!db->mallocFailed)
- sqlExprCode(pParse, pExpr, target);
- sql_expr_delete(db, pExpr, false);
-}
-
/*
* Generate code that will evaluate expression pExpr and store the
* results in register target. The results are guaranteed to appear
@@ -5623,27 +5585,3 @@ sqlClearTempRegCache(Parse * pParse)
pParse->nRangeReg = 0;
}
-/*
- * Validate that no temporary register falls within the range of
- * iFirst..iLast, inclusive. This routine is only call from within assert()
- * statements.
- */
-#ifdef SQL_DEBUG
-int
-sqlNoTempsInRange(Parse * pParse, int iFirst, int iLast)
-{
- int i;
- if (pParse->nRangeReg > 0
- && pParse->iRangeReg + pParse->nRangeReg < iLast
- && pParse->iRangeReg >= iFirst) {
- return 0;
- }
- for (i = 0; i < pParse->nTempReg; i++) {
- if (pParse->aTempReg[i] >= iFirst
- && pParse->aTempReg[i] <= iLast) {
- return 0;
- }
- }
- return 1;
-}
-#endif /* SQL_DEBUG */
diff --git a/src/box/sql/malloc.c b/src/box/sql/malloc.c
index d6f99b46e..ef10d64ae 100644
--- a/src/box/sql/malloc.c
+++ b/src/box/sql/malloc.c
@@ -376,106 +376,6 @@ sql_malloc64(sql_uint64 n)
return sqlMalloc(n);
}
-/*
- * Each thread may only have a single outstanding allocation from
- * xScratchMalloc(). We verify this constraint in the single-threaded
- * case by setting scratchAllocOut to 1 when an allocation
- * is outstanding clearing it when the allocation is freed.
- */
-#if !defined(NDEBUG)
-static int scratchAllocOut = 0;
-#endif
-
-/*
- * Allocate memory that is to be used and released right away.
- * This routine is similar to alloca() in that it is not intended
- * for situations where the memory might be held long-term. This
- * routine is intended to get memory to old large transient data
- * structures that would not normally fit on the stack of an
- * embedded processor.
- */
-void *
-sqlScratchMalloc(int n)
-{
- void *p;
- assert(n > 0);
-
- sqlStatusHighwater(SQL_STATUS_SCRATCH_SIZE, n);
- if (mem0.nScratchFree && sqlGlobalConfig.szScratch >= n) {
- p = mem0.pScratchFree;
- mem0.pScratchFree = mem0.pScratchFree->pNext;
- mem0.nScratchFree--;
- sqlStatusUp(SQL_STATUS_SCRATCH_USED, 1);
- } else {
- p = sqlMalloc(n);
- if (sqlGlobalConfig.bMemstat && p) {
- sqlStatusUp(SQL_STATUS_SCRATCH_OVERFLOW,
- sqlMallocSize(p));
- }
- sqlMemdebugSetType(p, MEMTYPE_SCRATCH);
- }
-
-#if !defined(NDEBUG)
- /* EVIDENCE-OF: R-12970-05880 sql will not use more than one scratch
- * buffers per thread.
- *
- * This can only be checked in single-threaded mode.
- */
- assert(scratchAllocOut == 0);
- if (p)
- scratchAllocOut++;
-#endif
-
- return p;
-}
-
-void
-sqlScratchFree(void *p)
-{
- if (p) {
-
-#if !defined(NDEBUG)
- /* Verify that no more than two scratch allocation per thread
- * is outstanding at one time. (This is only checked in the
- * single-threaded case since checking in the multi-threaded case
- * would be much more complicated.)
- */
- assert(scratchAllocOut >= 1 && scratchAllocOut <= 2);
- scratchAllocOut--;
-#endif
-
- if (SQL_WITHIN
- (p, sqlGlobalConfig.pScratch, mem0.pScratchEnd)) {
- /* Release memory from the SQL_CONFIG_SCRATCH allocation */
- ScratchFreeslot *pSlot;
- pSlot = (ScratchFreeslot *) p;
- pSlot->pNext = mem0.pScratchFree;
- mem0.pScratchFree = pSlot;
- mem0.nScratchFree++;
- assert(mem0.nScratchFree <=
- (u32) sqlGlobalConfig.nScratch);
- sqlStatusDown(SQL_STATUS_SCRATCH_USED, 1);
- } else {
- /* Release memory back to the heap */
- assert(sqlMemdebugHasType(p, MEMTYPE_SCRATCH));
- assert(sqlMemdebugNoType
- (p, (u8) ~ MEMTYPE_SCRATCH));
- sqlMemdebugSetType(p, MEMTYPE_HEAP);
- if (sqlGlobalConfig.bMemstat) {
- int iSize = sqlMallocSize(p);
- sqlStatusDown
- (SQL_STATUS_SCRATCH_OVERFLOW, iSize);
- sqlStatusDown(SQL_STATUS_MEMORY_USED,
- iSize);
- sqlStatusDown(SQL_STATUS_MALLOC_COUNT,
- 1);
- sql_sized_free(p);
- } else
- sql_sized_free(p);
- }
- }
-}
-
/*
* TRUE if p is a lookaside memory allocation from db
*/
diff --git a/src/box/sql/random.c b/src/box/sql/random.c
index 618cb96d6..78dc27293 100644
--- a/src/box/sql/random.c
+++ b/src/box/sql/random.c
@@ -107,27 +107,3 @@ sql_randomness(int N, void *pBuf)
*(zBuf++) = wsdPrng.s[t];
} while (--N);
}
-
-/*
- * For testing purposes, we sometimes want to preserve the state of
- * 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.
- */
-static SQL_WSD struct sqlPrngType sqlSavedPrng;
-void
-sqlPrngSaveState(void)
-{
- memcpy(&GLOBAL(struct sqlPrngType, sqlSavedPrng),
- &GLOBAL(struct sqlPrngType, sqlPrng), sizeof(sqlPrng)
- );
-}
-
-void
-sqlPrngRestoreState(void)
-{
- memcpy(&GLOBAL(struct sqlPrngType, sqlPrng),
- &GLOBAL(struct sqlPrngType, sqlSavedPrng),
- sizeof(sqlPrng)
- );
-}
diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
index 1691d89ca..3f3658421 100644
--- a/src/box/sql/sqlInt.h
+++ b/src/box/sql/sqlInt.h
@@ -2978,11 +2978,6 @@ void *sqlDbRealloc(sql *, void *, u64);
void sqlDbFree(sql *, void *);
int sqlMallocSize(void *);
int sqlDbMallocSize(sql *, void *);
-void *sqlScratchMalloc(int);
-void sqlScratchFree(void *);
-void *sqlPageMalloc(int);
-void sqlPageFree(void *);
-void sqlMemSetDefault(void);
void sqlBenignMallocHooks(void (*)(void), void (*)(void));
int sqlHeapNearlyFull(void);
@@ -3111,9 +3106,6 @@ void sqlReleaseTempReg(Parse *, int);
int sqlGetTempRange(Parse *, int);
void sqlReleaseTempRange(Parse *, int, int);
void sqlClearTempRegCache(Parse *);
-#ifdef SQL_DEBUG
-int sqlNoTempsInRange(Parse *, int, int);
-#endif
/**
* Construct a new expression. Memory for this node and for the
@@ -3577,7 +3569,6 @@ void sqlExprCacheRemove(Parse *, int, int);
void sqlExprCacheClear(Parse *);
void sql_expr_type_cache_change(Parse *, int, int);
void sqlExprCode(Parse *, Expr *, int);
-void sqlExprCodeCopy(Parse *, Expr *, int);
void sqlExprCodeFactorable(Parse *, Expr *, int);
void sqlExprCodeAtInit(Parse *, Expr *, int, u8);
int sqlExprCodeTemp(Parse *, Expr *, int *);
@@ -3622,8 +3613,6 @@ void sqlExprAnalyzeAggregates(NameContext *, Expr *);
void sqlExprAnalyzeAggList(NameContext *, ExprList *);
int sqlFunctionUsesThisSrc(Expr *, SrcList *);
Vdbe *sqlGetVdbe(Parse *);
-void sqlPrngSaveState(void);
-void sqlPrngRestoreState(void);
void sqlRollbackAll(Vdbe *);
/**
@@ -4423,7 +4412,6 @@ void sqlVdbeSetChanges(sql *, int);
int sqlAddInt64(i64 *, i64);
int sqlSubInt64(i64 *, i64);
int sqlMulInt64(i64 *, i64);
-int sqlAbsInt32(int);
u8 sqlGetBoolean(const char *z, u8);
const void *sqlValueText(sql_value *);
diff --git a/src/box/sql/util.c b/src/box/sql/util.c
index 4a93ddf09..687a0f30f 100644
--- a/src/box/sql/util.c
+++ b/src/box/sql/util.c
@@ -1257,20 +1257,6 @@ sqlMulInt64(i64 * pA, i64 iB)
return 0;
}
-/*
- * Compute the absolute value of a 32-bit signed integer, of possible. Or
- * if the integer has a value of -2147483648, return +2147483647
- */
-int
-sqlAbsInt32(int x)
-{
- if (x >= 0)
- return x;
- if (x == (int)0x80000000)
- return 0x7fffffff;
- return -x;
-}
-
/*
* Find (an approximate) sum of two LogEst values. This computation is
* not a simple "+" operator because LogEst is stored as a logarithmic
--
2.17.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] [PATCH 3/8] Removes unused functions.
2019-04-29 17:26 [tarantool-patches] [PATCH 0/8] sql: cleanup code from obsolete macros Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 1/8] " Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 2/8] Removes unused functions and commented many years ago code Stanislav Zudin
@ 2019-04-29 17:26 ` Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 4/8] Removes unused functions and macros Stanislav Zudin
` (4 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Stanislav Zudin @ 2019-04-29 17:26 UTC (permalink / raw)
To: tarantool-patches, korablev; +Cc: Stanislav Zudin
Part of #3978
---
src/box/sql/hwtime.h | 63 --------------------------------------------
src/box/sql/main.c | 21 ---------------
src/box/sql/malloc.c | 48 ---------------------------------
src/box/sql/sqlInt.h | 8 ------
4 files changed, 140 deletions(-)
diff --git a/src/box/sql/hwtime.h b/src/box/sql/hwtime.h
index 278a1bf1c..f2196360b 100644
--- a/src/box/sql/hwtime.h
+++ b/src/box/sql/hwtime.h
@@ -43,34 +43,6 @@
* processor and returns that value. This can be used for high-res
* profiling.
*/
-#if (defined(__GNUC__) || defined(_MSC_VER)) && \
- (defined(i386) || defined(__i386__) || defined(_M_IX86))
-
-#if defined(__GNUC__)
-
-__inline__ sql_uint64
-sqlHwtime(void)
-{
- unsigned int lo, hi;
- __asm__ __volatile__("rdtsc":"=a"(lo), "=d"(hi));
- return (sql_uint64) hi << 32 | lo;
-}
-
-#elif defined(_MSC_VER)
-
-__declspec(naked)
-__inline sql_uint64 __cdecl
-sqlHwtime(void)
-{
- __asm {
- rdtsc ret;
- return value at EDX:EAX}
-}
-
-#endif
-
-#elif (defined(__GNUC__) && defined(__x86_64__))
-
__inline__ sql_uint64
sqlHwtime(void)
{
@@ -79,39 +51,4 @@ sqlHwtime(void)
return val;
}
-#elif (defined(__GNUC__) && defined(__ppc__))
-
-__inline__ sql_uint64
-sqlHwtime(void)
-{
- unsigned long long retval;
- unsigned long junk;
- __asm__ __volatile__("\n\
- 1: mftbu %1\n\
- mftb %L0\n\
- mftbu %0\n\
- cmpw %0,%1\n\
- bne 1b":"=r"(retval), "=r"(junk));
- return retval;
-}
-
-#else
-
-#error Need implementation of sqlHwtime() for your platform.
-
- /*
- * To compile without implementing sqlHwtime() for your platform,
- * you can remove the above #error and use the following
- * stub function. You will lose timing support for many
- * of the debugging and testing utilities, but it should at
- * least compile and run.
- */
-sql_uint64
-sqlHwtime(void)
-{
- return ((sql_uint64) 0);
-}
-
-#endif
-
#endif /* !defined(SQL_HWTIME_H) */
diff --git a/src/box/sql/main.c b/src/box/sql/main.c
index fe1135a71..a188f2e8a 100644
--- a/src/box/sql/main.c
+++ b/src/box/sql/main.c
@@ -513,27 +513,6 @@ sql_create_function_v2(sql * db,
return rc;
}
-#ifndef SQL_OMIT_TRACE
-/* Register a trace callback using the version-2 interface.
- */
-int
-sql_trace_v2(sql * db, /* Trace this connection */
- unsigned mTrace, /* Mask of events to be traced */
- int (*xTrace) (unsigned, void *, void *, void *), /* Callback to invoke */
- void *pArg) /* Context */
-{
- if (mTrace == 0)
- xTrace = 0;
- if (xTrace == 0)
- mTrace = 0;
- db->mTrace = mTrace;
- db->xTrace = xTrace;
- db->pTraceArg = pArg;
- return SQL_OK;
-}
-
-#endif /* SQL_OMIT_TRACE */
-
/*
* This function returns true if main-memory should be used instead of
* a temporary file for transient pager files and statement journals.
diff --git a/src/box/sql/malloc.c b/src/box/sql/malloc.c
index ef10d64ae..4bb96111f 100644
--- a/src/box/sql/malloc.c
+++ b/src/box/sql/malloc.c
@@ -253,15 +253,6 @@ sqlHeapNearlyFull(void)
return mem0.nearlyFull;
}
-/*
- * Deinitialize the memory allocation subsystem.
- */
-void
-sqlMallocEnd(void)
-{
- memset(&mem0, 0, sizeof(mem0));
-}
-
/*
* Return the amount of memory currently checked out.
*/
@@ -273,19 +264,6 @@ sql_memory_used(void)
return res;
}
-/*
- * Return the maximum amount of memory that has ever been
- * checked out since either the beginning of this process
- * or since the most recent reset.
- */
-sql_int64
-sql_memory_highwater(int resetFlag)
-{
- sql_int64 res, mx;
- sql_status64(SQL_STATUS_MEMORY_USED, &res, &mx, resetFlag);
- return mx;
-}
-
/*
* Trigger the alarm
*/
@@ -421,14 +399,6 @@ sqlDbMallocSize(sql * db, void *p)
return db->lookaside.sz;
}
-sql_uint64
-sql_msize(void *p)
-{
- assert(sqlMemdebugNoType(p, (u8) ~ MEMTYPE_HEAP));
- assert(sqlMemdebugHasType(p, MEMTYPE_HEAP));
- return p ? sql_sized_sizeof(p) : 0;
-}
-
/*
* Free memory previously obtained from sqlMalloc().
*/
@@ -545,14 +515,6 @@ sqlRealloc(void *pOld, u64 nBytes)
* The public interface to sqlRealloc. Make sure that the memory
* subsystem is initialized prior to invoking sqlRealloc.
*/
-void *
-sql_realloc(void *pOld, int n)
-{
- if (n < 0)
- n = 0; /* IMP: R-26507-47431 */
- return sqlRealloc(pOld, n);
-}
-
void *
sql_realloc64(void *pOld, sql_uint64 n)
{
@@ -777,16 +739,6 @@ sqlDbStrNDup(sql * db, const char *z, u64 n)
return zNew;
}
-/*
- * Free any prior content in *pz and replace it with a copy of zNew.
- */
-void
-sqlSetString(char **pz, sql * db, const char *zNew)
-{
- sqlDbFree(db, *pz);
- *pz = sqlDbStrDup(db, zNew);
-}
-
/*
* Call this routine to record the fact that an OOM (out-of-memory) error
* has happened. This routine will set db->mallocFailed, and also
diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
index 3f3658421..6ddc7d486 100644
--- a/src/box/sql/sqlInt.h
+++ b/src/box/sql/sqlInt.h
@@ -398,18 +398,12 @@ sql_malloc(int);
void *
sql_malloc64(sql_uint64);
-void *
-sql_realloc(void *, int);
-
void *
sql_realloc64(void *, sql_uint64);
void
sql_free(void *);
-sql_uint64
-sql_msize(void *);
-
int
sql_stricmp(const char *, const char *);
@@ -2964,7 +2958,6 @@ unsigned sqlStrlen30(const char *);
#define sqlStrNICmp sql_strnicmp
void sqlMallocInit(void);
-void sqlMallocEnd(void);
void *sqlMalloc(u64);
void *sqlMallocZero(u64);
void *sqlDbMallocZero(sql *, u64);
@@ -3035,7 +3028,6 @@ void sqlTreeViewSelect(TreeView *, const Select *, u8);
void sqlTreeViewWith(TreeView *, const With *);
#endif
-void sqlSetString(char **, sql *, const char *);
void sqlDequote(char *);
/**
--
2.17.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] [PATCH 4/8] Removes unused functions and macros.
2019-04-29 17:26 [tarantool-patches] [PATCH 0/8] sql: cleanup code from obsolete macros Stanislav Zudin
` (2 preceding siblings ...)
2019-04-29 17:26 ` [tarantool-patches] [PATCH 3/8] Removes unused functions Stanislav Zudin
@ 2019-04-29 17:26 ` Stanislav Zudin
2019-05-19 15:16 ` [tarantool-patches] " n.pettik
2019-04-29 17:26 ` [tarantool-patches] [PATCH 5/8] Removes the following unused macros: SQL_ENABLE_MEMORY_MANAGEMENT SQL_ENABLE_UNKNOWN_SQL_FUNCTION SQL_SUBSTR_COMPATIBILITY SQL_ENABLE_STMT_SCANSTATUS Stanislav Zudin
` (3 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Stanislav Zudin @ 2019-04-29 17:26 UTC (permalink / raw)
To: tarantool-patches, korablev; +Cc: Stanislav Zudin
Part of #3978
---
| 8 -------
src/box/sql/build.c | 3 ---
src/box/sql/expr.c | 8 ++-----
src/box/sql/insert.c | 4 ----
src/box/sql/main.c | 50 -----------------------------------------
src/box/sql/malloc.c | 12 ----------
src/box/sql/parse.y | 5 +----
src/box/sql/select.c | 20 ++++-------------
src/box/sql/sqlInt.h | 40 ---------------------------------
src/box/sql/treeview.c | 4 ++--
src/box/sql/trigger.c | 2 --
src/box/sql/vdbe.c | 5 -----
src/box/sql/vdbe.h | 2 --
src/box/sql/vdbeInt.h | 2 --
src/box/sql/vdbeapi.c | 12 ----------
src/box/sql/vdbeaux.c | 38 -------------------------------
src/box/sql/vdbesort.c | 44 +++++++++++++++++-------------------
src/box/sql/vdbetrace.c | 3 ---
18 files changed, 30 insertions(+), 232 deletions(-)
--git a/extra/mkkeywordhash.c b/extra/mkkeywordhash.c
index 2ad74eddc..ba4932b49 100644
--- a/extra/mkkeywordhash.c
+++ b/extra/mkkeywordhash.c
@@ -60,11 +60,7 @@ struct Keyword {
#else
# define AUTOINCR 0x00000010
#endif
-#ifdef SQL_OMIT_CAST
-# define CAST 0
-#else
# define CAST 0x00000020
-#endif
#ifdef SQL_OMIT_COMPOUND_SELECT
# define COMPOUND 0
#else
@@ -85,11 +81,7 @@ struct Keyword {
#define SUBQUERY 0x00001000
# define TRIGGER 0x00002000
# define VIEW 0x00008000
-#ifdef SQL_OMIT_CTE
-# define CTE 0
-#else
# define CTE 0x00040000
-#endif
# define RESERVED 0x00000001
/*
** These are the keywords
diff --git a/src/box/sql/build.c b/src/box/sql/build.c
index 6051a2529..0cce60cb5 100644
--- a/src/box/sql/build.c
+++ b/src/box/sql/build.c
@@ -3025,7 +3025,6 @@ sqlHaltConstraint(Parse * pParse, /* Parsing context */
sqlVdbeChangeP5(v, p5Errmsg);
}
-#ifndef SQL_OMIT_CTE
/*
* This routine is invoked once per CTE by the parser while parsing a
* WITH clause.
@@ -3106,8 +3105,6 @@ sqlWithDelete(sql * db, With * pWith)
}
}
-#endif /* !defined(SQL_OMIT_CTE) */
-
int
vdbe_emit_halt_with_presence_test(struct Parse *parser, int space_id,
int index_id, int key_reg, uint32_t key_len,
diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
index ab6f9f068..0f87eba5e 100644
--- a/src/box/sql/expr.c
+++ b/src/box/sql/expr.c
@@ -1502,7 +1502,6 @@ sql_expr_dup(struct sql *db, struct Expr *p, int flags, char **buffer)
* argument. If an OOM condition is encountered, NULL is returned
* and the db->mallocFailed flag set.
*/
-#ifndef SQL_OMIT_CTE
static With *
withDup(sql * db, With * p)
{
@@ -1525,9 +1524,6 @@ withDup(sql * db, With * p)
}
return pRet;
}
-#else
-#define withDup(x,y) 0
-#endif
/*
* The following group of routines make deep copies of expressions,
@@ -3785,7 +3781,7 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target)
case TK_REGISTER:{
return pExpr->iTable;
}
-#ifndef SQL_OMIT_CAST
+
case TK_CAST:{
/* Expressions of the form: CAST(pLeft AS token) */
inReg =
@@ -3799,7 +3795,7 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target)
sql_expr_type_cache_change(pParse, inReg, 1);
return inReg;
}
-#endif /* SQL_OMIT_CAST */
+
case TK_LT:
case TK_LE:
case TK_GT:
diff --git a/src/box/sql/insert.c b/src/box/sql/insert.c
index c2aac553f..8feb8d812 100644
--- a/src/box/sql/insert.c
+++ b/src/box/sql/insert.c
@@ -335,7 +335,6 @@ sqlInsert(Parse * pParse, /* Parser context */
sqlVdbeCountChanges(v);
sql_set_multi_write(pParse, pSelect != NULL || trigger != NULL);
-#ifndef SQL_OMIT_XFER_OPT
/* If the statement is of the form
*
* INSERT INTO <table1> SELECT * FROM <table2>;
@@ -351,7 +350,6 @@ sqlInsert(Parse * pParse, /* Parser context */
assert(pList == 0);
goto insert_end;
}
-#endif /* SQL_OMIT_XFER_OPT */
/*
* Allocate registers for holding the tupleid of the new
@@ -1066,7 +1064,6 @@ vdbe_emit_insertion_completion(struct Vdbe *v, struct space *space,
sqlVdbeChangeP5(v, pik_flags);
}
-#ifndef SQL_OMIT_XFER_OPT
/**
* Check to see if index @src is compatible as a source of data
* for index @dest in an insert transfer optimization. The rules
@@ -1336,4 +1333,3 @@ xferOptimization(Parse * pParse, /* Parser context */
return 1;
}
}
-#endif /* SQL_OMIT_XFER_OPT */
diff --git a/src/box/sql/main.c b/src/box/sql/main.c
index a188f2e8a..c0c334f89 100644
--- a/src/box/sql/main.c
+++ b/src/box/sql/main.c
@@ -40,16 +40,6 @@
#include "version.h"
#include "box/session.h"
-#if !defined(SQL_OMIT_TRACE) && defined(SQL_ENABLE_IOTRACE)
-/*
- * If the following function pointer is not NULL and if
- * SQL_ENABLE_IOTRACE is enabled, then messages describing
- * I/O active are written using this function. These messages
- * are intended for debugging activity only.
- */
-SQL_API void (SQL_CDECL * sqlIoTrace) (const char *, ...) = 0;
-#endif
-
/*
* If the following global variable points to a string which is the
* name of a directory, then that directory will be used to store
@@ -187,7 +177,6 @@ sql_initialize(void)
static int
setupLookaside(sql * db, void *pBuf, int sz, int cnt)
{
-#ifndef SQL_OMIT_LOOKASIDE
void *pStart;
if (db->lookaside.nOut) {
return SQL_BUSY;
@@ -241,7 +230,6 @@ setupLookaside(sql * db, void *pBuf, int sz, int cnt)
db->lookaside.bDisable = 1;
db->lookaside.bMalloced = 0;
}
-#endif /* SQL_OMIT_LOOKASIDE */
return SQL_OK;
}
@@ -513,44 +501,6 @@ sql_create_function_v2(sql * db,
return rc;
}
-/*
- * 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
- * parameter) and the compile time value of SQL_TEMP_STORE. The
- * following table describes the relationship between these two values
- * and this functions return value.
- *
- * SQL_TEMP_STORE db->temp_store Location of temporary database
- * ----------------- -------------- ------------------------------
- * 0 any file (return 0)
- * 1 1 file (return 0)
- * 1 2 memory (return 1)
- * 1 0 file (return 0)
- * 2 1 file (return 0)
- * 2 2 memory (return 1)
- * 2 0 memory (return 1)
- * 3 any memory (return 1)
- */
-int
-sqlTempInMemory(const sql * db)
-{
-#if SQL_TEMP_STORE==1
- return (db->temp_store == 2);
-#endif
-#if SQL_TEMP_STORE==2
- return (db->temp_store != 1);
-#endif
-#if SQL_TEMP_STORE==3
- UNUSED_PARAMETER(db);
- return 1;
-#endif
-#if SQL_TEMP_STORE<1 || SQL_TEMP_STORE>3
- UNUSED_PARAMETER(db);
- return 0;
-#endif
-}
-
/*
* 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().
diff --git a/src/box/sql/malloc.c b/src/box/sql/malloc.c
index 4bb96111f..3bd2e1781 100644
--- a/src/box/sql/malloc.c
+++ b/src/box/sql/malloc.c
@@ -357,15 +357,11 @@ sql_malloc64(sql_uint64 n)
/*
* TRUE if p is a lookaside memory allocation from db
*/
-#ifndef SQL_OMIT_LOOKASIDE
static int
isLookaside(sql * db, void *p)
{
return SQL_WITHIN(p, db->lookaside.pStart, db->lookaside.pEnd);
}
-#else
-#define isLookaside(A,B) 0
-#endif
/*
* Return the size of a memory allocation previously obtained from
@@ -602,7 +598,6 @@ sqlDbMallocRaw(sql * db, u64 n)
void *
sqlDbMallocRawNN(sql * db, u64 n)
{
-#ifndef SQL_OMIT_LOOKASIDE
LookasideSlot *pBuf;
assert(db != 0);
assert(db->pnBytesFreed == 0);
@@ -624,13 +619,6 @@ sqlDbMallocRawNN(sql * db, u64 n)
} else if (db->mallocFailed) {
return 0;
}
-#else
- assert(db != 0);
- assert(db->pnBytesFreed == 0);
- if (db->mallocFailed) {
- return 0;
- }
-#endif
return dbMallocRawFinish(db, n);
}
diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y
index 3a443a068..78b3370f9 100644
--- a/src/box/sql/parse.y
+++ b/src/box/sql/parse.y
@@ -1029,7 +1029,7 @@ expr(A) ::= expr(A) COLLATE id(C). {
A.pExpr = sqlExprAddCollateToken(pParse, A.pExpr, &C, 1);
A.zEnd = &C.z[C.n];
}
-%ifndef SQL_OMIT_CAST
+
expr(A) ::= CAST(X) LP expr(E) AS typedef(T) RP(Y). {
spanSet(&A,&X,&Y); /*A-overwrites-X*/
A.pExpr = sql_expr_new_dequoted(pParse->db, TK_CAST, NULL);
@@ -1040,7 +1040,6 @@ expr(A) ::= CAST(X) LP expr(E) AS typedef(T) RP(Y). {
A.pExpr->type = T.type;
sqlExprAttachSubtrees(pParse->db, A.pExpr, E.pExpr, 0);
}
-%endif SQL_OMIT_CAST
expr(A) ::= TRIM(X) LP trim_operands(Y) RP(E). {
A.pExpr = sqlExprFunction(pParse, Y, &X);
@@ -1714,7 +1713,6 @@ cmd ::= ALTER TABLE fullname(X) DROP CONSTRAINT nm(Z). {
%destructor wqlist {sqlWithDelete(pParse->db, $$);}
with(A) ::= . {A = 0;}
-%ifndef SQL_OMIT_CTE
with(A) ::= WITH wqlist(W). { A = W; }
with(A) ::= WITH RECURSIVE wqlist(W). { A = W; }
@@ -1724,7 +1722,6 @@ wqlist(A) ::= nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
wqlist(A) ::= wqlist(A) COMMA nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
A = sqlWithAdd(pParse, A, &X, Y, Z);
}
-%endif SQL_OMIT_CTE
////////////////////////////// TYPE DECLARATION ///////////////////////////////
%type typedef {struct type_def}
diff --git a/src/box/sql/select.c b/src/box/sql/select.c
index d3472a922..153997cde 100644
--- a/src/box/sql/select.c
+++ b/src/box/sql/select.c
@@ -1176,7 +1176,7 @@ selectInnerLoop(Parse * pParse, /* The parser context */
nResultCol, r1 + nPrefixReg);
/* Set flag to save memory allocating one by malloc. */
sqlVdbeChangeP5(v, 1);
-#ifndef SQL_OMIT_CTE
+
if (eDest == SRT_DistFifo) {
/* If the destination is DistFifo, then cursor (iParm+1) is open
* on an ephemeral index. If the current row is already present
@@ -1192,7 +1192,7 @@ selectInnerLoop(Parse * pParse, /* The parser context */
pDest->reg_eph + 1);
assert(pSort == 0);
}
-#endif
+
if (pSort) {
pushOntoSorter(pParse, pSort, p,
r1 + nPrefixReg, regResult, 1,
@@ -1295,7 +1295,6 @@ selectInnerLoop(Parse * pParse, /* The parser context */
break;
}
-#ifndef SQL_OMIT_CTE
/* Write the results into a priority queue that is order according to
* pDest->pOrderBy (in pSO). pDest->iSDParm (in iParm) is the cursor for an
* index with pSO->nExpr+2 columns. Build a key using pSO for the first
@@ -1346,7 +1345,6 @@ selectInnerLoop(Parse * pParse, /* The parser context */
sqlReleaseTempRange(pParse, r2, nKey + 2);
break;
}
-#endif /* SQL_OMIT_CTE */
/* Discard the results. This is used for SELECT statements inside
* the body of a TRIGGER. The purpose of such selects is to call
@@ -2303,7 +2301,6 @@ sql_multiselect_orderby_to_key_info(struct Parse *parse, struct Select *s,
return key_info;
}
-#ifndef SQL_OMIT_CTE
/*
* This routine generates VDBE code to compute the content of a WITH RECURSIVE
* query of the form:
@@ -2483,7 +2480,6 @@ generateWithRecursiveQuery(Parse * pParse, /* Parsing context */
p->pOffset = pOffset;
return;
}
-#endif /* SQL_OMIT_CTE */
/* Forward references */
static int multiSelectOrderBy(Parse * pParse, /* Parsing context */
@@ -2642,11 +2638,9 @@ multiSelect(Parse * pParse, /* Parsing context */
assert(p->pEList && pPrior->pEList);
assert(p->pEList->nExpr == pPrior->pEList->nExpr);
-#ifndef SQL_OMIT_CTE
if (p->selFlags & SF_Recursive) {
generateWithRecursiveQuery(pParse, p, &dest);
} else
-#endif
/* Compound SELECTs that have an ORDER BY clause are handled separately.
*/
@@ -4534,7 +4528,6 @@ convertCompoundSelectToSubquery(Walker * pWalker, Select * p)
return WRC_Continue;
}
-#ifndef SQL_OMIT_CTE
/*
* Argument pWith (which may be NULL) points to a linked list of nested
* WITH contexts, from inner to outermost. If the table identified by
@@ -4722,9 +4715,7 @@ withExpand(Walker * pWalker, struct SrcList_item *pFrom)
return SQL_OK;
}
-#endif
-#ifndef SQL_OMIT_CTE
/*
* If the SELECT passed as the second argument has an associated WITH
* clause, pop it from the stack stored as part of the Parse object.
@@ -4743,9 +4734,6 @@ selectPopWith(Walker * pWalker, Select * p)
pParse->pWith = pWith->pOuter;
}
}
-#else
-#define selectPopWith 0
-#endif
/*
* This routine is a Walker callback for "expanding" a SELECT statement.
@@ -4811,12 +4799,12 @@ selectExpander(Walker * pWalker, Select * p)
if (pFrom->fg.isRecursive)
continue;
assert(pFrom->space == NULL);
-#ifndef SQL_OMIT_CTE
+
if (withExpand(pWalker, pFrom))
return WRC_Abort;
if (pFrom->space != NULL) {
} else
-#endif
+
if (pFrom->zName == 0) {
Select *pSel = pFrom->pSelect;
/* A sub-query in the FROM clause of a SELECT */
diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
index 6ddc7d486..f019cd291 100644
--- a/src/box/sql/sqlInt.h
+++ b/src/box/sql/sqlInt.h
@@ -945,24 +945,6 @@ sql_bind_parameter_lindex(sql_stmt * pStmt, const char *zName,
#define SQL_DEFAULT_RECURSIVE_TRIGGERS 0
#endif
-/*
- * Provide a default value for sql_TEMP_STORE in case it is not specified
- * on the command-line
- */
-#ifndef SQL_TEMP_STORE
-#define SQL_TEMP_STORE 1
-#define SQL_TEMP_STORE_xc 1 /* Exclude from ctime.c */
-#endif
-
-/*
- * If no value has been provided for sql_MAX_WORKER_THREADS, or if
- * sql_TEMP_STORE is set to 3 (never use temporary files), set it
- * to zero.
- */
-#if SQL_TEMP_STORE==3
-#undef SQL_MAX_WORKER_THREADS
-#define SQL_MAX_WORKER_THREADS 0
-#endif
#ifndef SQL_MAX_WORKER_THREADS
#define SQL_MAX_WORKER_THREADS 8
#endif
@@ -1376,7 +1358,6 @@ struct sql {
int iSysErrno; /* Errno value from last system error */
u16 dbOptFlags; /* Flags to enable/disable optimizations */
u8 enc; /* Text encoding */
- u8 temp_store; /* 1: file 2: memory 0: default */
u8 mallocFailed; /* True if we have seen a malloc failure */
u8 bBenignMalloc; /* Do not require OOMs if true */
u8 dfltLockMode; /* Default locking-mode for attached dbs */
@@ -4728,15 +4709,9 @@ collations_check_compatibility(uint32_t lhs_id, bool is_lhs_forced,
int
sql_binary_compare_coll_seq(Parse *parser, Expr *left, Expr *right,
uint32_t *id);
-int sqlTempInMemory(const sql *);
-#ifndef SQL_OMIT_CTE
With *sqlWithAdd(Parse *, With *, Token *, ExprList *, Select *);
void sqlWithDelete(sql *, With *);
void sqlWithPush(Parse *, With *, u8);
-#else
-#define sqlWithPush(x,y,z)
-#define sqlWithDelete(x,y)
-#endif
/*
* This function is called when inserting, deleting or updating a
@@ -4841,21 +4816,6 @@ int sqlExprCheckHeight(Parse *, int);
void sqlParserTrace(FILE *, char *);
#endif
-/*
- * If the sql_ENABLE IOTRACE exists then the global variable
- * sqlIoTrace is a pointer to a printf-like routine used to
- * print I/O tracing messages.
- */
-#ifdef SQL_ENABLE_IOTRACE
-#define IOTRACE(A) if( sqlIoTrace ){ sqlIoTrace A; }
-void sqlVdbeIOTraceSql(Vdbe *);
- SQL_EXTERN void (SQL_CDECL * sqlIoTrace) (const char *,
- ...);
-#else
-#define IOTRACE(A)
-#define sqlVdbeIOTraceSql(X)
-#endif
-
/*
* These routines are available for the mem2.c debugging memory allocator
* only. They are used to verify that different "types" of memory
diff --git a/src/box/sql/treeview.c b/src/box/sql/treeview.c
index 5acea582a..a04597979 100644
--- a/src/box/sql/treeview.c
+++ b/src/box/sql/treeview.c
@@ -382,14 +382,14 @@ sqlTreeViewExpr(TreeView * pView, const Expr * pExpr, u8 moreToFollow)
pExpr->u.zToken);
break;
}
-#ifndef SQL_OMIT_CAST
+
case TK_CAST:{
/* Expressions of the form: CAST(pLeft AS token) */
sqlTreeViewLine(pView, "CAST %Q", pExpr->u.zToken);
sqlTreeViewExpr(pView, pExpr->pLeft, 0);
break;
}
-#endif /* SQL_OMIT_CAST */
+
case TK_LT:
zBinOp = "LT";
break;
diff --git a/src/box/sql/trigger.c b/src/box/sql/trigger.c
index 14e4198a8..cca2f6079 100644
--- a/src/box/sql/trigger.c
+++ b/src/box/sql/trigger.c
@@ -772,12 +772,10 @@ sql_row_trigger_program(struct Parse *parser, struct sql_trigger *trigger,
(trigger->op == TK_INSERT ? "INSERT" : ""),
(trigger->op == TK_DELETE ? "DELETE" : ""),
space->def->name));
-#ifndef SQL_OMIT_TRACE
sqlVdbeChangeP4(v, -1,
sqlMPrintf(db, "-- TRIGGER %s",
trigger->zName),
P4_DYNAMIC);
-#endif
/*
* If one was specified, code the WHEN clause. If
diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
index ce609a578..197df4bf3 100644
--- a/src/box/sql/vdbe.c
+++ b/src/box/sql/vdbe.c
@@ -659,7 +659,6 @@ int sqlVdbeExec(Vdbe *p)
assert(p->explain==0);
p->pResultSet = 0;
if (db->u1.isInterrupted) goto abort_due_to_interrupt;
- sqlVdbeIOTraceSql(p);
#ifndef SQL_OMIT_PROGRESS_CALLBACK
if (db->xProgress) {
u32 iPrior = p->aCounter[SQL_STMTSTATUS_VM_STEP];
@@ -1976,7 +1975,6 @@ case OP_Realify: { /* in1 */
break;
}
-#ifndef SQL_OMIT_CAST
/* Opcode: Cast P1 P2 * * *
* Synopsis: type(r[P1])
*
@@ -2006,7 +2004,6 @@ case OP_Cast: { /* in1 */
rc = SQL_TARANTOOL_ERROR;
goto abort_due_to_error;
}
-#endif /* SQL_OMIT_CAST */
/* Opcode: Eq P1 P2 P3 P4 P5
* Synopsis: IF r[P3]==r[P1]
@@ -5357,7 +5354,6 @@ case OP_Init: { /* jump */
break;
}
-#ifndef SQL_OMIT_TRACE
if ((db->mTrace & SQL_TRACE_STMT)!=0
&& !p->doingRerun
&& (zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0
@@ -5373,7 +5369,6 @@ case OP_Init: { /* jump */
sqlDebugPrintf("SQL-trace: %s\n", zTrace);
}
#endif /* SQL_DEBUG */
-#endif /* SQL_OMIT_TRACE */
assert(pOp->p2>0);
if (pOp->p1>=sqlGlobalConfig.iOnceResetThreshold) {
for(i=1; i<p->nOp; i++) {
diff --git a/src/box/sql/vdbe.h b/src/box/sql/vdbe.h
index f9bb96f09..5fb9d42ca 100644
--- a/src/box/sql/vdbe.h
+++ b/src/box/sql/vdbe.h
@@ -268,9 +268,7 @@ void sqlVdbeSwap(Vdbe *, Vdbe *);
VdbeOp *sqlVdbeTakeOpArray(Vdbe *, int *, int *);
sql_value *sqlVdbeGetBoundValue(Vdbe *, int, u8);
void sqlVdbeSetVarmask(Vdbe *, int);
-#ifndef SQL_OMIT_TRACE
char *sqlVdbeExpandSql(Vdbe *, const char *);
-#endif
int sqlMemCompare(const Mem *, const Mem *, const struct coll *);
/**
diff --git a/src/box/sql/vdbeInt.h b/src/box/sql/vdbeInt.h
index a3100e513..eabec1519 100644
--- a/src/box/sql/vdbeInt.h
+++ b/src/box/sql/vdbeInt.h
@@ -425,9 +425,7 @@ struct Vdbe {
*/
uint32_t res_var_count;
VList *pVList; /* Name of variables */
-#ifndef SQL_OMIT_TRACE
i64 startTime; /* Time when query started - used for profiling */
-#endif
int nOp; /* Number of instructions in the program */
u16 nResColumn; /* Number of columns in one row of the result set */
u8 errorAction; /* Recovery action to do in case of an error */
diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c
index 4175f7e86..e1d100e04 100644
--- a/src/box/sql/vdbeapi.c
+++ b/src/box/sql/vdbeapi.c
@@ -66,7 +66,6 @@ vdbeSafetyNotNull(Vdbe * p)
}
}
-#ifndef SQL_OMIT_TRACE
/*
* Invoke the profile callback. This routine is only called if we already
* know that the profile callback is defined and needs to be invoked.
@@ -98,9 +97,6 @@ invokeProfileCallback(sql * db, Vdbe * p)
*/
#define checkProfileCallback(DB,P) \
if( ((P)->startTime)>0 ){ invokeProfileCallback(DB,P); }
-#else
-#define checkProfileCallback(DB,P) /*no-op */
-#endif
/*
* The following routine destroys a virtual machine that is created by
@@ -545,14 +541,12 @@ sqlStep(Vdbe * p)
db->u1.isInterrupted = 0;
}
-#ifndef SQL_OMIT_TRACE
if ((db->xProfile || (db->mTrace & SQL_TRACE_PROFILE) != 0)
&& !db->init.busy && p->zSql) {
sqlOsCurrentTimeInt64(db->pVfs, &p->startTime);
} else {
assert(p->startTime == 0);
}
-#endif
db->nVdbeActive++;
p->pc = 0;
@@ -565,11 +559,9 @@ sqlStep(Vdbe * p)
db->nVdbeExec--;
}
-#ifndef SQL_OMIT_TRACE
/* If the statement completed successfully, invoke the profile callback */
if (rc != SQL_ROW)
checkProfileCallback(db, p);
-#endif
db->errCode = rc;
if (SQL_NOMEM == sqlApiExit(p->db, p->rc)) {
@@ -1574,9 +1566,6 @@ sql_sql(sql_stmt * pStmt)
char *
sql_expanded_sql(sql_stmt * pStmt)
{
-#ifdef SQL_OMIT_TRACE
- return 0;
-#else
char *z = 0;
const char *zSql = sql_sql(pStmt);
if (zSql) {
@@ -1584,7 +1573,6 @@ sql_expanded_sql(sql_stmt * pStmt)
z = sqlVdbeExpandSql(p, zSql);
}
return z;
-#endif
}
#ifdef SQL_ENABLE_STMT_SCANSTATUS
diff --git a/src/box/sql/vdbeaux.c b/src/box/sql/vdbeaux.c
index 25d4cd759..2f78e19d8 100644
--- a/src/box/sql/vdbeaux.c
+++ b/src/box/sql/vdbeaux.c
@@ -137,10 +137,6 @@ sqlVdbeSetSql(Vdbe * p, const char *z, int n, int isPrepareV2)
assert(isPrepareV2 == 1 || isPrepareV2 == 0);
if (p == 0)
return;
-#if defined(SQL_OMIT_TRACE)
- if (!isPrepareV2)
- return;
-#endif
assert(p->zSql == 0);
p->zSql = sqlDbStrNDup(p->db, z, n);
p->isPrepareV2 = (u8) isPrepareV2;
@@ -1753,40 +1749,6 @@ sqlVdbePrintSql(Vdbe * p)
}
#endif
-#if !defined(SQL_OMIT_TRACE) && defined(SQL_ENABLE_IOTRACE)
-/*
- * Print an IOTRACE message showing SQL content.
- */
-void
-sqlVdbeIOTraceSql(Vdbe * p)
-{
- int nOp = p->nOp;
- VdbeOp *pOp;
- if (sqlIoTrace == 0)
- return;
- if (nOp < 1)
- return;
- pOp = &p->aOp[0];
- if (pOp->opcode == OP_Init && pOp->p4.z != 0) {
- int i, j;
- char z[1000];
- sql_snprintf(sizeof(z), z, "%s", pOp->p4.z);
- for (i = 0; sqlIsspace(z[i]); i++) {
- }
- for (j = 0; z[i]; i++) {
- if (sqlIsspace(z[i])) {
- if (z[i - 1] != ' ') {
- z[j++] = ' ';
- }
- } else {
- z[j++] = z[i];
- }
- }
- z[j] = 0;
- sqlIoTrace("SQL %s\n", z);
- }
-}
-#endif /* !SQL_OMIT_TRACE && SQL_ENABLE_IOTRACE */
/* An instance of this object describes bulk memory available for use
* by subcomponents of a prepared statement. Space is allocated out
diff --git a/src/box/sql/vdbesort.c b/src/box/sql/vdbesort.c
index 779e83264..ddea6752c 100644
--- a/src/box/sql/vdbesort.c
+++ b/src/box/sql/vdbesort.c
@@ -894,29 +894,27 @@ sqlVdbeSorterInit(sql * db, /* Database connection (for malloc()) */
pTask->pSorter = pSorter;
}
- if (!sqlTempInMemory(db)) {
- i64 mxCache; /* Cache size in bytes */
- u32 szPma = sqlGlobalConfig.szPma;
- pSorter->mnPmaSize = szPma * pgsz;
-
- mxCache = SQL_DEFAULT_CACHE_SIZE;
- mxCache = mxCache * -1024;
- mxCache = MIN(mxCache, SQL_MAX_PMASZ);
- pSorter->mxPmaSize =
- MAX(pSorter->mnPmaSize, (int)mxCache);
-
- /* EVIDENCE-OF: R-26747-61719 When the application provides any amount of
- * scratch memory using SQL_CONFIG_SCRATCH, sql avoids unnecessary
- * large heap allocations.
- */
- if (sqlGlobalConfig.pScratch == 0) {
- assert(pSorter->iMemory == 0);
- pSorter->nMemory = pgsz;
- pSorter->list.aMemory =
- (u8 *) sqlMalloc(pgsz);
- if (!pSorter->list.aMemory)
- rc = SQL_NOMEM;
- }
+ i64 mxCache; /* Cache size in bytes */
+ u32 szPma = sqlGlobalConfig.szPma;
+ pSorter->mnPmaSize = szPma * pgsz;
+
+ mxCache = SQL_DEFAULT_CACHE_SIZE;
+ mxCache = mxCache * -1024;
+ mxCache = MIN(mxCache, SQL_MAX_PMASZ);
+ pSorter->mxPmaSize =
+ MAX(pSorter->mnPmaSize, (int)mxCache);
+
+ /* EVIDENCE-OF: R-26747-61719 When the application provides any amount of
+ * scratch memory using SQL_CONFIG_SCRATCH, sql avoids unnecessary
+ * large heap allocations.
+ */
+ if (sqlGlobalConfig.pScratch == 0) {
+ assert(pSorter->iMemory == 0);
+ pSorter->nMemory = pgsz;
+ pSorter->list.aMemory =
+ (u8 *) sqlMalloc(pgsz);
+ if (!pSorter->list.aMemory)
+ rc = SQL_NOMEM;
}
if (pCsr->key_def->part_count < 13
diff --git a/src/box/sql/vdbetrace.c b/src/box/sql/vdbetrace.c
index cb930538d..b86ad7b8a 100644
--- a/src/box/sql/vdbetrace.c
+++ b/src/box/sql/vdbetrace.c
@@ -39,8 +39,6 @@
#include "sqlInt.h"
#include "vdbeInt.h"
-#ifndef SQL_OMIT_TRACE
-
/*
* zSql is a zero-terminated string of UTF-8 SQL text. Return the number of
* bytes in this text up to but excluding the first character in
@@ -211,4 +209,3 @@ sqlVdbeExpandSql(Vdbe * p, /* The prepared statement being evaluated */
return sqlStrAccumFinish(&out);
}
-#endif /* #ifndef SQL_OMIT_TRACE */
--
2.17.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] [PATCH 5/8] Removes the following unused macros: SQL_ENABLE_MEMORY_MANAGEMENT SQL_ENABLE_UNKNOWN_SQL_FUNCTION SQL_SUBSTR_COMPATIBILITY SQL_ENABLE_STMT_SCANSTATUS
2019-04-29 17:26 [tarantool-patches] [PATCH 0/8] sql: cleanup code from obsolete macros Stanislav Zudin
` (3 preceding siblings ...)
2019-04-29 17:26 ` [tarantool-patches] [PATCH 4/8] Removes unused functions and macros Stanislav Zudin
@ 2019-04-29 17:26 ` Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 6/8] Removes the following unused macros: SQL_EXPLAIN_ESTIMATED_ROWS SQL_ENABLE_COLUMN_USED_MASK SQL_DISABLE_DIRSYNC SQL_OMIT_AUTOMATIC_INDEX SQL_DEBUG_SORTER_THREADS SQL_DEFAULT_WORKER_THREADS SQL_LIMIT_WORKER_THREADS SQL_MAX_WORKER_THREADS Stanislav Zudin
` (2 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Stanislav Zudin @ 2019-04-29 17:26 UTC (permalink / raw)
To: tarantool-patches, korablev; +Cc: Stanislav Zudin
Part of #3978
---
src/box/sql/expr.c | 6 ----
src/box/sql/func.c | 30 -----------------
src/box/sql/malloc.c | 10 ------
src/box/sql/resolve.c | 6 +---
src/box/sql/util.c | 3 +-
src/box/sql/vdbe.c | 9 -----
src/box/sql/vdbe.h | 7 ----
src/box/sql/vdbeInt.h | 5 ---
src/box/sql/vdbeapi.c | 73 -----------------------------------------
src/box/sql/vdbeaux.c | 45 -------------------------
src/box/sql/where.c | 11 +------
src/box/sql/whereInt.h | 12 -------
src/box/sql/wherecode.c | 52 +++++------------------------
13 files changed, 11 insertions(+), 258 deletions(-)
diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
index 0f87eba5e..71d0cbf46 100644
--- a/src/box/sql/expr.c
+++ b/src/box/sql/expr.c
@@ -3965,12 +3965,6 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target)
assert(!ExprHasProperty(pExpr, EP_IntValue));
zId = pExpr->u.zToken;
pDef = sqlFindFunction(db, zId, nFarg, 0);
-#ifdef SQL_ENABLE_UNKNOWN_SQL_FUNCTION
- if (pDef == 0 && pParse->explain) {
- pDef =
- sqlFindFunction(db, "unknown", nFarg, 0);
- }
-#endif
if (pDef == 0 || pDef->xFinalize != 0) {
diag_set(ClientError, ER_NO_SUCH_FUNCTION,
zId);
diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index f3790ba01..a2b5bc0b5 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -429,16 +429,6 @@ substrFunc(sql_context * context, int argc, sql_value ** argv)
if (p1 < 0)
len = sql_utf8_char_count(z, sql_value_bytes(argv[0]));
}
-#ifdef SQL_SUBSTR_COMPATIBILITY
- /* If SUBSTR_COMPATIBILITY is defined then substr(X,0,N) work the same as
- * as substr(X,1,N) - it returns the first N characters of X. This
- * is essentially a back-out of the bug-fix in check-in [5fc125d362df4b8]
- * from 2009-02-02 for compatibility of applications that exploited the
- * old buggy behavior.
- */
- if (p1 == 0)
- p1 = 1; /* <rdar://problem/6778339> */
-#endif
if (argc == 3) {
p2 = sql_value_int(argv[2]);
if (p2 < 0) {
@@ -1491,23 +1481,6 @@ trim_func_three_args(struct sql_context *context, int argc, sql_value **argv)
sql_free(char_len);
}
-#ifdef SQL_ENABLE_UNKNOWN_SQL_FUNCTION
-/*
- * The "unknown" function is automatically substituted in place of
- * any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN
- * when the SQL_ENABLE_UNKNOWN_FUNCTION compile-time option is used.
- * When the "sql" command-line shell is built using this functionality,
- * that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries
- * involving application-defined functions to be examined in a generic
- * sql shell.
- */
-static void
-unknownFunc(sql_context * context, int argc, sql_value ** argv)
-{
- /* no-op */
-}
-#endif /*SQL_ENABLE_UNKNOWN_SQL_FUNCTION */
-
/* IMP: R-25361-16150 This function is omitted from sql by default. It
* is only available if the SQL_SOUNDEX compile-time option is used
* when sql is built.
@@ -1977,9 +1950,6 @@ sqlRegisterBuiltinFunctions(void)
FIELD_TYPE_INTEGER),
LIKEFUNC(like, 3, 1, SQL_FUNC_LIKE,
FIELD_TYPE_INTEGER),
-#ifdef SQL_ENABLE_UNKNOWN_SQL_FUNCTION
- FUNCTION(unknown, -1, 0, 0, unknownFunc, 0),
-#endif
FUNCTION(coalesce, 1, 0, 0, 0, FIELD_TYPE_SCALAR),
FUNCTION(coalesce, 0, 0, 0, 0, FIELD_TYPE_SCALAR),
FUNCTION2(coalesce, -1, 0, 0, noopFunc, SQL_FUNC_COALESCE,
diff --git a/src/box/sql/malloc.c b/src/box/sql/malloc.c
index 3bd2e1781..831be177e 100644
--- a/src/box/sql/malloc.c
+++ b/src/box/sql/malloc.c
@@ -128,16 +128,12 @@ sql_sized_realloc(void *pPrior, int nByte)
int
sql_release_memory(int n)
{
-#ifdef SQL_ENABLE_MEMORY_MANAGEMENT
- return sqlPcacheReleaseMemory(n);
-#else
/* IMPLEMENTATION-OF: R-34391-24921 The sql_release_memory() routine
* is a no-op returning zero if sql is not compiled with
* SQL_ENABLE_MEMORY_MANAGEMENT.
*/
UNUSED_PARAMETER(n);
return 0;
-#endif
}
/*
@@ -297,12 +293,6 @@ mallocWithAlarm(int n, void **pp)
}
}
p = sql_sized_malloc(nFull);
-#ifdef SQL_ENABLE_MEMORY_MANAGEMENT
- if (p == 0 && mem0.alarmThreshold > 0) {
- sqlMallocAlarm(nFull);
- p = sql_sized_malloc(nFull);
- }
-#endif
if (p) {
nFull = sqlMallocSize(p);
sqlStatusUp(SQL_STATUS_MEMORY_USED, nFull);
diff --git a/src/box/sql/resolve.c b/src/box/sql/resolve.c
index 504096e6d..1a021d4d1 100644
--- a/src/box/sql/resolve.c
+++ b/src/box/sql/resolve.c
@@ -674,11 +674,7 @@ resolveExprStep(Walker * pWalker, Expr * pExpr)
pParse->is_aborted = true;
pNC->nErr++;
is_agg = 0;
- } else if (no_such_func && pParse->db->init.busy == 0
-#ifdef SQL_ENABLE_UNKNOWN_SQL_FUNCTION
- && pParse->explain == 0
-#endif
- ) {
+ } else if (no_such_func && pParse->db->init.busy == 0) {
diag_set(ClientError, ER_NO_SUCH_FUNCTION, zId);
pParse->is_aborted = true;
pNC->nErr++;
diff --git a/src/box/sql/util.c b/src/box/sql/util.c
index 687a0f30f..31378041d 100644
--- a/src/box/sql/util.c
+++ b/src/box/sql/util.c
@@ -1337,8 +1337,7 @@ sqlLogEstToInt(LogEst x)
n -= 2;
else if (n >= 1)
n -= 1;
-#if defined(SQL_ENABLE_STMT_SCANSTATUS) || \
- defined(SQL_EXPLAIN_ESTIMATED_ROWS)
+#if defined(SQL_EXPLAIN_ESTIMATED_ROWS)
if (x > 60)
return (u64) LARGEST_INT64;
#else
diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
index 197df4bf3..624df25b8 100644
--- a/src/box/sql/vdbe.c
+++ b/src/box/sql/vdbe.c
@@ -705,9 +705,6 @@ int sqlVdbeExec(Vdbe *p)
start = sqlHwtime();
#endif
nVmStep++;
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
- if (p->anExec) p->anExec[(int)(pOp-aOp)]++;
-#endif
/* Only allow tracing if SQL_DEBUG is defined.
*/
@@ -4954,9 +4951,6 @@ case OP_Program: { /* jump */
pFrame->aOp = p->aOp;
pFrame->nOp = p->nOp;
pFrame->token = pProgram->token;
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
- pFrame->anExec = p->anExec;
-#endif
pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem];
for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++) {
@@ -4986,9 +4980,6 @@ case OP_Program: { /* jump */
p->apCsr = (VdbeCursor **)&aMem[p->nMem];
p->aOp = aOp = pProgram->aOp;
p->nOp = pProgram->nOp;
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
- p->anExec = 0;
-#endif
pOp = &aOp[-1];
break;
diff --git a/src/box/sql/vdbe.h b/src/box/sql/vdbe.h
index 5fb9d42ca..2a1a4402c 100644
--- a/src/box/sql/vdbe.h
+++ b/src/box/sql/vdbe.h
@@ -349,11 +349,4 @@ void sqlVdbeSetLineNumber(Vdbe *, int);
#define VdbeCoverageNeverTaken(v)
#define VDBE_OFFSET_LINENO(x) 0
#endif
-
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
-void sqlVdbeScanStatus(Vdbe *, int, int, int, LogEst, const char *);
-#else
-#define sqlVdbeScanStatus(a,b,c,d,e)
-#endif
-
#endif /* SQL_VDBE_H */
diff --git a/src/box/sql/vdbeInt.h b/src/box/sql/vdbeInt.h
index eabec1519..a5933a5e7 100644
--- a/src/box/sql/vdbeInt.h
+++ b/src/box/sql/vdbeInt.h
@@ -446,11 +446,6 @@ struct Vdbe {
AuxData *pAuxData; /* Linked list of auxdata allocations */
/* Anonymous savepoint for aborts only */
Savepoint *anonymous_savepoint;
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
- i64 *anExec; /* Number of times each op has been executed */
- int nScan; /* Entries in aScan[] */
- ScanStatus *aScan; /* Scan definitions for sql_stmt_scanstatus() */
-#endif
};
/*
diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c
index e1d100e04..9593071f3 100644
--- a/src/box/sql/vdbeapi.c
+++ b/src/box/sql/vdbeapi.c
@@ -1575,76 +1575,3 @@ sql_expanded_sql(sql_stmt * pStmt)
return z;
}
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
-/*
- * Return status data for a single loop within query pStmt.
- */
-int
-sql_stmt_scanstatus(sql_stmt * pStmt, /* Prepared statement being queried */
- int idx, /* Index of loop to report on */
- int iScanStatusOp, /* Which metric to return */
- void *pOut /* OUT: Write the answer here */
- )
-{
- Vdbe *p = (Vdbe *) pStmt;
- ScanStatus *pScan;
- if (idx < 0 || idx >= p->nScan)
- return 1;
- pScan = &p->aScan[idx];
- switch (iScanStatusOp) {
- case SQL_SCANSTAT_NLOOP:{
- *(sql_int64 *) pOut = p->anExec[pScan->addrLoop];
- break;
- }
- case SQL_SCANSTAT_NVISIT:{
- *(sql_int64 *) pOut = p->anExec[pScan->addrVisit];
- break;
- }
- case SQL_SCANSTAT_EST:{
- double r = 1.0;
- LogEst x = pScan->nEst;
- while (x < 100) {
- x += 10;
- r *= 0.5;
- }
- *(double *)pOut = r * sqlLogEstToInt(x);
- break;
- }
- case SQL_SCANSTAT_NAME:{
- *(const char **)pOut = pScan->zName;
- break;
- }
- case SQL_SCANSTAT_EXPLAIN:{
- if (pScan->addrExplain) {
- *(const char **)pOut =
- p->aOp[pScan->addrExplain].p4.z;
- } else {
- *(const char **)pOut = 0;
- }
- break;
- }
- case SQL_SCANSTAT_SELECTID:{
- if (pScan->addrExplain) {
- *(int *)pOut = p->aOp[pScan->addrExplain].p1;
- } else {
- *(int *)pOut = -1;
- }
- break;
- }
- default:{
- return 1;
- }
- }
- return 0;
-}
-
-/*
- * Zero all counters associated with the sql_stmt_scanstatus() data.
- */
-void
-sql_stmt_scanstatus_reset(sql_stmt * pStmt)
-{
- Vdbe *p = (Vdbe *) pStmt;
- memset(p->anExec, 0, p->nOp * sizeof(i64));
-}
-#endif /* SQL_ENABLE_STMT_SCANSTATUS */
diff --git a/src/box/sql/vdbeaux.c b/src/box/sql/vdbeaux.c
index 2f78e19d8..a90c492fe 100644
--- a/src/box/sql/vdbeaux.c
+++ b/src/box/sql/vdbeaux.c
@@ -743,33 +743,6 @@ sqlVdbeTakeOpArray(Vdbe * p, int *pnOp, int *pnMaxArg)
return aOp;
}
-#if defined(SQL_ENABLE_STMT_SCANSTATUS)
-/*
- * Add an entry to the array of counters managed by sql_stmt_scanstatus().
- */
-void
-sqlVdbeScanStatus(Vdbe * p, /* VM to add scanstatus() to */
- int addrExplain, /* Address of OP_Explain (or 0) */
- int addrLoop, /* Address of loop counter */
- int addrVisit, /* Address of rows visited counter */
- LogEst nEst, /* Estimated number of output rows */
- const char *zName) /* Name of table or index being scanned */
-{
- int nByte = (p->nScan + 1) * sizeof(ScanStatus);
- ScanStatus *aNew;
- aNew = (ScanStatus *) sqlDbRealloc(p->db, p->aScan, nByte);
- if (aNew) {
- ScanStatus *pNew = &aNew[p->nScan++];
- pNew->addrExplain = addrExplain;
- pNew->addrLoop = addrLoop;
- pNew->addrVisit = addrVisit;
- pNew->nEst = nEst;
- pNew->zName = sqlDbStrDup(p->db, zName);
- p->aScan = aNew;
- }
-}
-#endif
-
/*
* Change the value of the opcode, or P1, P2, P3, or P5 operands
* for a specific instruction.
@@ -1921,9 +1894,6 @@ sqlVdbeMakeReady(Vdbe * p, /* The VDBE */
p->apArg = allocSpace(&x, p->apArg, nArg * sizeof(Mem *));
p->apCsr =
allocSpace(&x, p->apCsr, nCursor * sizeof(VdbeCursor *));
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
- p->anExec = allocSpace(&x, p->anExec, p->nOp * sizeof(i64));
-#endif
if (x.nNeeded == 0)
break;
x.pSpace = p->pFree = sqlDbMallocRawNN(db, x.nNeeded);
@@ -1944,9 +1914,6 @@ sqlVdbeMakeReady(Vdbe * p, /* The VDBE */
p->nMem = nMem;
initMemArray(p->aMem, nMem, db, MEM_Undefined);
memset(p->apCsr, 0, nCursor * sizeof(VdbeCursor *));
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
- memset(p->anExec, 0, p->nOp * sizeof(i64));
-#endif
}
sqlVdbeRewind(p);
}
@@ -2002,9 +1969,6 @@ sqlVdbeFrameRestore(VdbeFrame * pFrame)
{
Vdbe *v = pFrame->v;
closeCursorsInFrame(v);
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
- v->anExec = pFrame->anExec;
-#endif
v->aOp = pFrame->aOp;
v->nOp = pFrame->nOp;
v->aMem = pFrame->aMem;
@@ -2689,15 +2653,6 @@ sqlVdbeClearObject(sql * db, Vdbe * p)
vdbeFreeOpArray(db, p->aOp, p->nOp);
sqlDbFree(db, p->aColName);
sqlDbFree(db, p->zSql);
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
- {
- int i;
- for (i = 0; i < p->nScan; i++) {
- sqlDbFree(db, p->aScan[i].zName);
- }
- sqlDbFree(db, p->aScan);
- }
-#endif
}
/*
diff --git a/src/box/sql/where.c b/src/box/sql/where.c
index 19ee2d03a..efd4f4f4b 100644
--- a/src/box/sql/where.c
+++ b/src/box/sql/where.c
@@ -4678,10 +4678,7 @@ sqlWhereBegin(Parse * pParse, /* The parser context */
*/
notReady = ~(Bitmask) 0;
for (ii = 0; ii < nTabList; ii++) {
- int addrExplain;
- int wsFlags;
pLevel = &pWInfo->a[ii];
- wsFlags = pLevel->pWLoop->wsFlags;
#ifndef SQL_OMIT_AUTOMATIC_INDEX
if ((pLevel->pWLoop->wsFlags & WHERE_AUTO_INDEX) != 0) {
constructAutomaticIndex(pParse, &pWInfo->sWC,
@@ -4691,17 +4688,11 @@ sqlWhereBegin(Parse * pParse, /* The parser context */
goto whereBeginError;
}
#endif
- addrExplain =
- sqlWhereExplainOneScan(pParse, pTabList, pLevel, ii,
+ sqlWhereExplainOneScan(pParse, pTabList, pLevel, ii,
pLevel->iFrom, wctrlFlags);
pLevel->addrBody = sqlVdbeCurrentAddr(v);
notReady = sqlWhereCodeOneLoopStart(pWInfo, ii, notReady);
pWInfo->iContinue = pLevel->addrCont;
- if ((wsFlags & WHERE_MULTI_OR) == 0
- && (wctrlFlags & WHERE_OR_SUBCLAUSE) == 0) {
- sqlWhereAddScanStatus(v, pTabList, pLevel,
- addrExplain);
- }
}
/* Done. */
diff --git a/src/box/sql/whereInt.h b/src/box/sql/whereInt.h
index 47430aef1..e39e00210 100644
--- a/src/box/sql/whereInt.h
+++ b/src/box/sql/whereInt.h
@@ -102,9 +102,6 @@ struct WhereLevel {
} u;
struct WhereLoop *pWLoop; /* The selected WhereLoop object */
Bitmask notReady; /* FROM entries not usable at this level */
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
- int addrVisit; /* Address at which row is visited */
-#endif
};
/*
@@ -458,15 +455,6 @@ int sqlWhereExplainOneScan(Parse * pParse, /* Parse context */
int iFrom, /* Value for "from" column of output */
u16 wctrlFlags /* Flags passed to sqlWhereBegin() */
);
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
-void sqlWhereAddScanStatus(Vdbe * v, /* Vdbe to add scanstatus entry to */
- SrcList * pSrclist, /* FROM clause pLvl reads data from */
- WhereLevel * pLvl, /* Level to add scanstatus() entry for */
- int addrExplain /* Address of OP_Explain (or 0) */
- );
-#else
-#define sqlWhereAddScanStatus(a, b, c, d) ((void)d)
-#endif
Bitmask sqlWhereCodeOneLoopStart(WhereInfo * pWInfo, /* Complete information about the WHERE clause */
int iLevel, /* Which level of pWInfo->a[] should be coded */
Bitmask notReady /* Which tables are currently available */
diff --git a/src/box/sql/wherecode.c b/src/box/sql/wherecode.c
index a453fe979..4dedb38a7 100644
--- a/src/box/sql/wherecode.c
+++ b/src/box/sql/wherecode.c
@@ -158,7 +158,7 @@ explainIndexRange(StrAccum * pStr, WhereLoop * pLoop)
/*
* This function is a no-op unless currently processing an EXPLAIN QUERY PLAN
- * command, or if either SQL_DEBUG or SQL_ENABLE_STMT_SCANSTATUS was
+ * command, or if SQL_DEBUG was
* defined at compile-time. If it is not a no-op, a single OP_Explain opcode
* is added to the output to describe the table scan strategy in pLevel.
*
@@ -174,7 +174,7 @@ sqlWhereExplainOneScan(Parse * pParse, /* Parse context */
u16 wctrlFlags) /* Flags passed to sqlWhereBegin() */
{
int ret = 0;
-#if !defined(SQL_DEBUG) && !defined(SQL_ENABLE_STMT_SCANSTATUS)
+#if !defined(SQL_DEBUG)
if (pParse->explain == 2)
#endif
{
@@ -269,34 +269,6 @@ sqlWhereExplainOneScan(Parse * pParse, /* Parse context */
return ret;
}
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
-/*
- * Configure the VM passed as the first argument with an
- * sql_stmt_scanstatus() entry corresponding to the scan used to
- * implement level pLvl. Argument pSrclist is a pointer to the FROM
- * clause that the scan reads data from.
- *
- * If argument addrExplain is not 0, it must be the address of an
- * OP_Explain instruction that describes the same loop.
- */
-void
-sqlWhereAddScanStatus(Vdbe * v, /* Vdbe to add scanstatus entry to */
- SrcList * pSrclist, /* FROM clause pLvl reads data from */
- WhereLevel * pLvl, /* Level to add scanstatus() entry for */
- int addrExplain) /* Address of OP_Explain (or 0) */
-{
- const char *zObj = 0;
- WhereLoop *pLoop = pLvl->pWLoop;
- if (pLoop->pIndex != 0) {
- zObj = pLoop->pIndex->zName;
- } else {
- zObj = pSrclist->a[pLvl->iFrom].zName;
- }
- sqlVdbeScanStatus(v, addrExplain, pLvl->addrBody, pLvl->addrVisit,
- pLoop->nOut, zObj);
-}
-#endif
-
/*
* Disable a term in the WHERE clause. Except, do not disable the term
* if it controls a LEFT OUTER JOIN and it did not originate in the ON
@@ -1415,16 +1387,12 @@ sqlWhereCodeOneLoopStart(WhereInfo * pWInfo, /* Complete information about the W
|| db->mallocFailed);
if (pSubWInfo) {
WhereLoop *pSubLoop;
- int addrExplain =
- sqlWhereExplainOneScan(pParse,
- pOrTab,
- &pSubWInfo->a[0],
- iLevel,
- pLevel->iFrom,
- 0);
- sqlWhereAddScanStatus(v, pOrTab,
- &pSubWInfo->a[0],
- addrExplain);
+ sqlWhereExplainOneScan(pParse,
+ pOrTab,
+ &pSubWInfo->a[0],
+ iLevel,
+ pLevel->iFrom,
+ 0);
/* This is the sub-WHERE clause body. First skip over
* duplicate rows from prior sub-WHERE clauses, and record the
@@ -1578,10 +1546,6 @@ sqlWhereCodeOneLoopStart(WhereInfo * pWInfo, /* Complete information about the W
}
}
-#ifdef SQL_ENABLE_STMT_SCANSTATUS
- pLevel->addrVisit = sqlVdbeCurrentAddr(v);
-#endif
-
/* Insert code to test every subexpression that can be completely
* computed using the current set of tables.
*/
--
2.17.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] [PATCH 6/8] Removes the following unused macros: SQL_EXPLAIN_ESTIMATED_ROWS SQL_ENABLE_COLUMN_USED_MASK SQL_DISABLE_DIRSYNC SQL_OMIT_AUTOMATIC_INDEX SQL_DEBUG_SORTER_THREADS SQL_DEFAULT_WORKER_THREADS SQL_LIMIT_WORKER_THREADS SQL_MAX_WORKER_THREADS
2019-04-29 17:26 [tarantool-patches] [PATCH 0/8] sql: cleanup code from obsolete macros Stanislav Zudin
` (4 preceding siblings ...)
2019-04-29 17:26 ` [tarantool-patches] [PATCH 5/8] Removes the following unused macros: SQL_ENABLE_MEMORY_MANAGEMENT SQL_ENABLE_UNKNOWN_SQL_FUNCTION SQL_SUBSTR_COMPATIBILITY SQL_ENABLE_STMT_SCANSTATUS Stanislav Zudin
@ 2019-04-29 17:26 ` Stanislav Zudin
2019-05-19 15:16 ` [tarantool-patches] " n.pettik
2019-04-29 17:26 ` [tarantool-patches] [PATCH 7/8] Removes unused constants Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 8/8] Removes the following unused macros: SQL_PRINTF_PRECISION_LIMIT SQL_OMIT_COMPOUND_SELECT SQL_POWERSAFE_OVERWRITE SQL_OMIT_PROGRESS_CALLBACK SQL_OMIT_AUTORESET SQL_OMIT_DECLTYPE SQL_ENABLE_COLUMN_METADATA SQL_TRACE_SIZE_LIMIT SQL_OMIT_LIKE_OPTIMIZATION SQL_OMIT_OR_OPTIMIZATION SQL_OMIT_BETWEEN_OPTIMIZATION Stanislav Zudin
7 siblings, 1 reply; 15+ messages in thread
From: Stanislav Zudin @ 2019-04-29 17:26 UTC (permalink / raw)
To: tarantool-patches, korablev; +Cc: Stanislav Zudin
Part of #3978
---
src/box/sql/CMakeLists.txt | 3 -
src/box/sql/expr.c | 14 -
src/box/sql/main.c | 8 -
src/box/sql/os_unix.c | 2 -
src/box/sql/sqlInt.h | 21 +-
src/box/sql/util.c | 5 -
src/box/sql/vdbe.c | 20 --
src/box/sql/vdbeInt.h | 3 -
src/box/sql/vdbesort.c | 639 +++----------------------------------
src/box/sql/where.c | 313 ------------------
src/box/sql/wherecode.c | 8 -
11 files changed, 45 insertions(+), 991 deletions(-)
diff --git a/src/box/sql/CMakeLists.txt b/src/box/sql/CMakeLists.txt
index b9dbe141a..f988dc3e7 100644
--- a/src/box/sql/CMakeLists.txt
+++ b/src/box/sql/CMakeLists.txt
@@ -10,9 +10,6 @@ set(SQL_BIN_DIR ${CMAKE_BINARY_DIR}/src/box/sql)
include_directories(${SQL_SRC_DIR})
include_directories(${SQL_BIN_DIR})
-add_definitions(-DSQL_MAX_WORKER_THREADS=0)
-add_definitions(-DSQL_OMIT_AUTOMATIC_INDEX)
-
set(TEST_DEFINITIONS
SQL_NO_SYNC=1
SQL_TEST=1
diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
index 71d0cbf46..48d7185f3 100644
--- a/src/box/sql/expr.c
+++ b/src/box/sql/expr.c
@@ -2570,20 +2570,6 @@ sqlFindInIndex(Parse * pParse, /* Parsing context */
parts[0].sort_order;
if (prRhsHasNull) {
-#ifdef SQL_ENABLE_COLUMN_USED_MASK
- i64 mask =
- (1 << nExpr) - 1;
- sqlVdbeAddOp4Dup8(v,
- OP_ColumnsUsed,
- iTab,
- 0,
- 0,
- (u8
- *)
- &
- mask,
- P4_INT64);
-#endif
*prRhsHasNull = ++pParse->nMem;
if (nExpr == 1) {
/* Tarantool: Check for null is performed on first key of the index. */
diff --git a/src/box/sql/main.c b/src/box/sql/main.c
index c0c334f89..339b456df 100644
--- a/src/box/sql/main.c
+++ b/src/box/sql/main.c
@@ -533,7 +533,6 @@ static const int aHardLimit[] = {
SQL_MAX_ATTACHED,
SQL_MAX_LIKE_PATTERN_LENGTH,
SQL_MAX_TRIGGER_DEPTH,
- SQL_MAX_WORKER_THREADS,
};
/*
@@ -569,9 +568,6 @@ static const int aHardLimit[] = {
#if SQL_MAX_TRIGGER_DEPTH<1
#error SQL_MAX_TRIGGER_DEPTH must be at least 1
#endif
-#if SQL_MAX_WORKER_THREADS<0 || SQL_MAX_WORKER_THREADS>50
-#error SQL_MAX_WORKER_THREADS must be between 0 and 50
-#endif
/*
* Change the value of a limit. Report the old value.
@@ -607,9 +603,6 @@ sql_limit(sql * db, int limitId, int newLimit)
SQL_MAX_LIKE_PATTERN_LENGTH);
assert(aHardLimit[SQL_LIMIT_TRIGGER_DEPTH] ==
SQL_MAX_TRIGGER_DEPTH);
- assert(aHardLimit[SQL_LIMIT_WORKER_THREADS] ==
- SQL_MAX_WORKER_THREADS);
- assert(SQL_LIMIT_WORKER_THREADS == (SQL_N_LIMIT - 1));
if (limitId < 0 || limitId >= SQL_N_LIMIT) {
return -1;
@@ -652,7 +645,6 @@ sql_init_db(sql **out_db)
assert(sizeof(db->aLimit) == sizeof(aHardLimit));
memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit));
- db->aLimit[SQL_LIMIT_WORKER_THREADS] = SQL_DEFAULT_WORKER_THREADS;
db->aLimit[SQL_LIMIT_COMPOUND_SELECT] = SQL_DEFAULT_COMPOUND_SELECT;
db->szMmap = sqlGlobalConfig.szMmap;
db->nMaxSorterMmap = 0x7FFFFFFF;
diff --git a/src/box/sql/os_unix.c b/src/box/sql/os_unix.c
index 615d539b5..f9969b447 100644
--- a/src/box/sql/os_unix.c
+++ b/src/box/sql/os_unix.c
@@ -1937,7 +1937,6 @@ unixDelete(sql_vfs * NotUsed, /* VFS containing this as the xDelete method */
}
return rc;
}
-#ifndef SQL_DISABLE_DIRSYNC
if ((dirSync & 1) != 0) {
int fd;
rc = openDirectory(zPath, &fd);
@@ -1953,7 +1952,6 @@ unixDelete(sql_vfs * NotUsed, /* VFS containing this as the xDelete method */
rc = SQL_OK;
}
}
-#endif
return rc;
}
diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
index f019cd291..4bf94fad2 100644
--- a/src/box/sql/sqlInt.h
+++ b/src/box/sql/sqlInt.h
@@ -341,7 +341,6 @@ struct sql_vfs {
#define SQL_LIMIT_ATTACHED 7
#define SQL_LIMIT_LIKE_PATTERN_LENGTH 8
#define SQL_LIMIT_TRIGGER_DEPTH 9
-#define SQL_LIMIT_WORKER_THREADS 10
enum sql_ret_code {
/** Result of a routine is ok. */
@@ -945,17 +944,6 @@ sql_bind_parameter_lindex(sql_stmt * pStmt, const char *zName,
#define SQL_DEFAULT_RECURSIVE_TRIGGERS 0
#endif
-#ifndef SQL_MAX_WORKER_THREADS
-#define SQL_MAX_WORKER_THREADS 8
-#endif
-#ifndef SQL_DEFAULT_WORKER_THREADS
-#define SQL_DEFAULT_WORKER_THREADS 0
-#endif
-#if SQL_DEFAULT_WORKER_THREADS>SQL_MAX_WORKER_THREADS
-#undef SQL_MAX_WORKER_THREADS
-#define SQL_MAX_WORKER_THREADS SQL_DEFAULT_WORKER_THREADS
-#endif
-
/**
* Default count of allowed compound selects.
*
@@ -1296,7 +1284,7 @@ typedef int VList;
* The number of different kinds of things that can be limited
* using the sql_limit() interface.
*/
-#define SQL_N_LIMIT (SQL_LIMIT_WORKER_THREADS+1)
+#define SQL_N_LIMIT (SQL_LIMIT_TRIGGER_DEPTH+1)
/*
* Lookaside malloc is a set of fixed-size buffers that can be used
@@ -4858,13 +4846,6 @@ int sqlMemdebugNoType(void *, u8);
#define MEMTYPE_SCRATCH 0x04 /* Scratch allocations */
#define MEMTYPE_PCACHE 0x08 /* Page cache allocations */
-/*
- * Threading interface
- */
-#if SQL_MAX_WORKER_THREADS>0
-int sqlThreadCreate(sqlThread **, void *(*)(void *), void *);
-int sqlThreadJoin(sqlThread *, void **);
-#endif
int sqlExprVectorSize(Expr * pExpr);
int sqlExprIsVector(Expr * pExpr);
diff --git a/src/box/sql/util.c b/src/box/sql/util.c
index 31378041d..39632e38d 100644
--- a/src/box/sql/util.c
+++ b/src/box/sql/util.c
@@ -1337,15 +1337,10 @@ sqlLogEstToInt(LogEst x)
n -= 2;
else if (n >= 1)
n -= 1;
-#if defined(SQL_EXPLAIN_ESTIMATED_ROWS)
- if (x > 60)
- return (u64) LARGEST_INT64;
-#else
/* The largest input possible to this routine is 310,
* resulting in a maximum x of 31
*/
assert(x <= 60);
-#endif
return x >= 3 ? (n + 8) << (x - 3) : (n + 8) >> (3 - x);
}
diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
index 624df25b8..738a0701b 100644
--- a/src/box/sql/vdbe.c
+++ b/src/box/sql/vdbe.c
@@ -3346,26 +3346,6 @@ case OP_Close: {
break;
}
-#ifdef SQL_ENABLE_COLUMN_USED_MASK
-/* Opcode: ColumnsUsed P1 * * P4 *
- *
- * This opcode (which only exists if sql was compiled with
- * SQL_ENABLE_COLUMN_USED_MASK) identifies which columns of the
- * table or index for cursor P1 are used. P4 is a 64-bit integer
- * (P4_INT64) in which the first 63 bits are one for each of the
- * first 63 columns of the table or index that are actually used
- * by the cursor. The high-order bit is set if any column after
- * the 64th is used.
- */
-case OP_ColumnsUsed: {
- VdbeCursor *pC;
- pC = p->apCsr[pOp->p1];
- assert(pC->eCurType==CURTYPE_TARANTOOL);
- pC->maskUsed = *(u64*)pOp->p4.pI64;
- break;
-}
-#endif
-
/* Opcode: SeekGE P1 P2 P3 P4 P5
* Synopsis: key=r[P3@P4]
*
diff --git a/src/box/sql/vdbeInt.h b/src/box/sql/vdbeInt.h
index a5933a5e7..a070e87f8 100644
--- a/src/box/sql/vdbeInt.h
+++ b/src/box/sql/vdbeInt.h
@@ -116,9 +116,6 @@ struct VdbeCursor {
const u8 *aRow; /* Data for the current row, if all on one page */
u32 payloadSize; /* Total number of bytes in the record */
u32 szRow; /* Byte available in aRow */
-#ifdef SQL_ENABLE_COLUMN_USED_MASK
- u64 maskUsed; /* Mask of columns used by this cursor */
-#endif
u32 nRowField; /* Number of fields in the current row */
/* Offsets for all fields in the record [nField+1]
* Order of fields is the same as it was passes to create table statement
diff --git a/src/box/sql/vdbesort.c b/src/box/sql/vdbesort.c
index ddea6752c..a37fbd911 100644
--- a/src/box/sql/vdbesort.c
+++ b/src/box/sql/vdbesort.c
@@ -118,11 +118,6 @@
* there are already N worker threads running, the main thread does the work
* itself.
*
- * The sorter is running in multi-threaded mode if (a) the library was built
- * with pre-processor symbol SQL_MAX_WORKER_THREADS set to a value greater
- * than zero, and (b) worker threads have been enabled at runtime by calling
- * "PRAGMA threads=N" with some value of N greater than 0.
- *
* When Rewind() is called, any data remaining in memory is flushed to a
* final PMA. So at this point the data is stored in some number of sorted
* PMAs within temporary files on disk.
@@ -159,15 +154,6 @@
#include "sqlInt.h"
#include "vdbeInt.h"
-/*
- * If SQL_DEBUG_SORTER_THREADS is defined, this module outputs various
- * messages to stderr that may be helpful in understanding the performance
- * characteristics of the sorter in multi-threaded mode.
- */
-#if 0
-#define SQL_DEBUG_SORTER_THREADS 1
-#endif
-
/*
* Hard-coded maximum amount of data to accumulate in memory before flushing
* to a level 0 PMA. The purpose of this limit is to prevent various integer
@@ -297,18 +283,14 @@ struct MergeEngine {
*
* Before a background thread is launched, variable bDone is set to 0. Then,
* right before it exits, the thread itself sets bDone to 1. This is used for
- * two purposes:
+ * the following purpose:
*
- * 1. When flushing the contents of memory to a level-0 PMA on disk, to
+ * When flushing the contents of memory to a level-0 PMA on disk, to
* attempt to select a SortSubtask for which there is not already an
* active background thread (since doing so causes the main thread
* to block until it finishes).
*
- * 2. If SQL_DEBUG_SORTER_THREADS is defined, to determine if a call
- * to sqlThreadJoin() is likely to block. Cases that are likely to
- * block provoke debugging output.
- *
- * In both cases, the effects of the main thread seeing (bDone==0) even
+ * The effects of the main thread seeing (bDone==0) even
* after the thread has finished are not dire. So we don't worry about
* memory barriers and such here.
*/
@@ -855,25 +837,6 @@ sqlVdbeSorterInit(sql * db, /* Database connection (for malloc()) */
int i; /* Used to iterate through aTask[] */
VdbeSorter *pSorter; /* The new sorter */
int rc = SQL_OK;
-#if SQL_MAX_WORKER_THREADS==0
-#define nWorker 0
-#else
- int nWorker;
-#endif
-
- /* Initialize the upper limit on the number of worker threads */
-#if SQL_MAX_WORKER_THREADS>0
- nWorker = db->aLimit[SQL_LIMIT_WORKER_THREADS];
-#endif
-
- /* Do not allow the total number of threads (main thread + all workers)
- * to exceed the maximum merge count
- */
-#if SQL_MAX_WORKER_THREADS>=SORTER_MAX_MERGE_COUNT
- if (nWorker >= SORTER_MAX_MERGE_COUNT) {
- nWorker = SORTER_MAX_MERGE_COUNT - 1;
- }
-#endif
assert(pCsr->key_def != NULL);
assert(pCsr->eCurType == CURTYPE_SORTER);
@@ -885,8 +848,8 @@ sqlVdbeSorterInit(sql * db, /* Database connection (for malloc()) */
} else {
pSorter->key_def = pCsr->key_def;
pSorter->pgsz = pgsz = 1024;
- pSorter->nTask = nWorker + 1;
- pSorter->iPrev = (u8) (nWorker - 1);
+ pSorter->nTask = 1;
+ pSorter->iPrev = (u8) (-1);
pSorter->bUseThreads = (pSorter->nTask > 1);
pSorter->db = db;
for (i = 0; i < pSorter->nTask; i++) {
@@ -927,8 +890,6 @@ sqlVdbeSorterInit(sql * db, /* Database connection (for malloc()) */
return rc;
}
-#undef nWorker /* Defined at the top of this function */
-
/*
* Free the list of sorted records starting at pRecord.
*/
@@ -951,18 +912,10 @@ static void
vdbeSortSubtaskCleanup(sql * db, SortSubtask * pTask)
{
sqlDbFree(db, pTask->pUnpacked);
-#if SQL_MAX_WORKER_THREADS>0
- /* pTask->list.aMemory can only be non-zero if it was handed memory
- * from the main thread. That only occurs SQL_MAX_WORKER_THREADS>0
- */
- if (pTask->list.aMemory) {
- sql_free(pTask->list.aMemory);
- } else
-#endif
- {
- assert(pTask->list.aMemory == 0);
- vdbeSorterRecordFree(0, pTask->list.pList);
- }
+
+ assert(pTask->list.aMemory == 0);
+ vdbeSorterRecordFree(0, pTask->list.pList);
+
if (pTask->file.pFd) {
sqlOsCloseFree(pTask->file.pFd);
}
@@ -972,116 +925,7 @@ vdbeSortSubtaskCleanup(sql * db, SortSubtask * pTask)
memset(pTask, 0, sizeof(SortSubtask));
}
-#ifdef SQL_DEBUG_SORTER_THREADS
-static void
-vdbeSorterWorkDebug(SortSubtask * pTask, const char *zEvent)
-{
- i64 t;
- int iTask = (pTask - pTask->pSorter->aTask);
- sqlOsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t);
- fprintf(stderr, "%lld:%d %s\n", t, iTask, zEvent);
-}
-
-static void
-vdbeSorterRewindDebug(const char *zEvent)
-{
- i64 t;
- sqlOsCurrentTimeInt64(sql_vfs_find(0), &t);
- fprintf(stderr, "%lld:X %s\n", t, zEvent);
-}
-
-static void
-vdbeSorterPopulateDebug(SortSubtask * pTask, const char *zEvent)
-{
- i64 t;
- int iTask = (pTask - pTask->pSorter->aTask);
- sqlOsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t);
- fprintf(stderr, "%lld:bg%d %s\n", t, iTask, zEvent);
-}
-
-static void
-vdbeSorterBlockDebug(SortSubtask * pTask, int bBlocked, const char *zEvent)
-{
- if (bBlocked) {
- i64 t;
- sqlOsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t);
- fprintf(stderr, "%lld:main %s\n", t, zEvent);
- }
-}
-#else
-#define vdbeSorterWorkDebug(x,y)
-#define vdbeSorterRewindDebug(y)
-#define vdbeSorterPopulateDebug(x,y)
-#define vdbeSorterBlockDebug(x,y,z)
-#endif
-
-#if SQL_MAX_WORKER_THREADS>0
-/*
- * Join thread pTask->thread.
- */
-static int
-vdbeSorterJoinThread(SortSubtask * pTask)
-{
- int rc = SQL_OK;
- if (pTask->pThread) {
-#ifdef SQL_DEBUG_SORTER_THREADS
- int bDone = pTask->bDone;
-#endif
- void *pRet = SQL_INT_TO_PTR(SQL_ERROR);
- vdbeSorterBlockDebug(pTask, !bDone, "enter");
- (void)sqlThreadJoin(pTask->pThread, &pRet);
- vdbeSorterBlockDebug(pTask, !bDone, "exit");
- rc = SQL_PTR_TO_INT(pRet);
- assert(pTask->bDone == 1);
- pTask->bDone = 0;
- pTask->pThread = 0;
- }
- return rc;
-}
-
-/*
- * Launch a background thread to run xTask(pIn).
- */
-static int
-vdbeSorterCreateThread(SortSubtask * pTask, /* Thread will use this task object */
- void *(*xTask) (void *), /* Routine to run in a separate thread */
- void *pIn /* Argument passed into xTask() */
- )
-{
- assert(pTask->pThread == 0 && pTask->bDone == 0);
- return sqlThreadCreate(&pTask->pThread, xTask, pIn);
-}
-
-/*
- * Join all outstanding threads launched by SorterWrite() to create
- * level-0 PMAs.
- */
-static int
-vdbeSorterJoinAll(VdbeSorter * pSorter, int rcin)
-{
- int rc = rcin;
- int i;
-
- /* This function is always called by the main user thread.
- *
- * If this function is being called after SorterRewind() has been called,
- * it is possible that thread pSorter->aTask[pSorter->nTask-1].pThread
- * is currently attempt to join one of the other threads. To avoid a race
- * condition where this thread also attempts to join the same object, join
- * thread pSorter->aTask[pSorter->nTask-1].pThread first.
- */
- for (i = pSorter->nTask - 1; i >= 0; i--) {
- SortSubtask *pTask = &pSorter->aTask[i];
- int rc2 = vdbeSorterJoinThread(pTask);
- if (rc == SQL_OK)
- rc = rc2;
- }
- return rc;
-}
-#else
#define vdbeSorterJoinAll(x,rcin) (rcin)
-#define vdbeSorterJoinThread(pTask) SQL_OK
-#endif
/*
* Allocate a new MergeEngine object capable of handling up to
@@ -1137,15 +981,6 @@ static void
vdbeIncrFree(IncrMerger * pIncr)
{
if (pIncr) {
-#if SQL_MAX_WORKER_THREADS>0
- if (pIncr->bUseThread) {
- vdbeSorterJoinThread(pIncr->pTask);
- if (pIncr->aFile[0].pFd)
- sqlOsCloseFree(pIncr->aFile[0].pFd);
- if (pIncr->aFile[1].pFd)
- sqlOsCloseFree(pIncr->aFile[1].pFd);
- }
-#endif
vdbeMergeEngineFree(pIncr->pMerger);
sql_free(pIncr);
}
@@ -1160,13 +995,6 @@ sqlVdbeSorterReset(sql * db, VdbeSorter * pSorter)
int i;
(void)vdbeSorterJoinAll(pSorter, SQL_OK);
assert(pSorter->bUseThreads || pSorter->pReader == 0);
-#if SQL_MAX_WORKER_THREADS>0
- if (pSorter->pReader) {
- vdbePmaReaderClear(pSorter->pReader);
- sqlDbFree(db, pSorter->pReader);
- pSorter->pReader = 0;
- }
-#endif
vdbeMergeEngineFree(pSorter->pMerger);
pSorter->pMerger = 0;
for (i = 0; i < pSorter->nTask; i++) {
@@ -1516,7 +1344,6 @@ vdbeSorterListToPMA(SortSubtask * pTask, SorterList * pList)
pList->szPMA + sqlVarintLen(pList->szPMA) + pTask->file.iEof;
#endif
- vdbeSorterWorkDebug(pTask, "enter");
memset(&writer, 0, sizeof(PmaWriter));
assert(pList->szPMA > 0);
@@ -1558,7 +1385,6 @@ vdbeSorterListToPMA(SortSubtask * pTask, SorterList * pList)
rc = vdbePmaWriterFinish(&writer, &pTask->file.iEof);
}
- vdbeSorterWorkDebug(pTask, "exit");
assert(rc != SQL_OK || pList->pList == 0);
assert(rc != SQL_OK || pTask->file.iEof == iSz);
return rc;
@@ -1648,22 +1474,6 @@ vdbeMergeEngineStep(MergeEngine * pMerger, /* The merge engine to advance to the
return (rc == SQL_OK ? pTask->pUnpacked->errCode : rc);
}
-#if SQL_MAX_WORKER_THREADS>0
-/*
- * The main routine for background threads that write level-0 PMAs.
- */
-static void *
-vdbeSorterFlushThread(void *pCtx)
-{
- SortSubtask *pTask = (SortSubtask *) pCtx;
- int rc; /* Return code */
- assert(pTask->bDone == 0);
- rc = vdbeSorterListToPMA(pTask, &pTask->list);
- pTask->bDone = 1;
- return SQL_INT_TO_PTR(rc);
-}
-#endif /* SQL_MAX_WORKER_THREADS>0 */
-
/*
* Flush the current contents of VdbeSorter.list to a new PMA, possibly
* using a background thread.
@@ -1671,76 +1481,8 @@ vdbeSorterFlushThread(void *pCtx)
static int
vdbeSorterFlushPMA(VdbeSorter * pSorter)
{
-#if SQL_MAX_WORKER_THREADS==0
pSorter->bUsePMA = 1;
return vdbeSorterListToPMA(&pSorter->aTask[0], &pSorter->list);
-#else
- int rc = SQL_OK;
- int i;
- SortSubtask *pTask = 0; /* Thread context used to create new PMA */
- int nWorker = (pSorter->nTask - 1);
-
- /* Set the flag to indicate that at least one PMA has been written.
- * Or will be, anyhow.
- */
- pSorter->bUsePMA = 1;
-
- /* Select a sub-task to sort and flush the current list of in-memory
- * records to disk. If the sorter is running in multi-threaded mode,
- * round-robin between the first (pSorter->nTask-1) tasks. Except, if
- * the background thread from a sub-tasks previous turn is still running,
- * skip it. If the first (pSorter->nTask-1) sub-tasks are all still busy,
- * fall back to using the final sub-task. The first (pSorter->nTask-1)
- * sub-tasks are prefered as they use background threads - the final
- * sub-task uses the main thread.
- */
- for (i = 0; i < nWorker; i++) {
- int iTest = (pSorter->iPrev + i + 1) % nWorker;
- pTask = &pSorter->aTask[iTest];
- if (pTask->bDone) {
- rc = vdbeSorterJoinThread(pTask);
- }
- if (rc != SQL_OK || pTask->pThread == 0)
- break;
- }
-
- if (rc == SQL_OK) {
- if (i == nWorker) {
- /* Use the foreground thread for this operation */
- rc = vdbeSorterListToPMA(&pSorter->aTask[nWorker],
- &pSorter->list);
- } else {
- /* Launch a background thread for this operation */
- u8 *aMem = pTask->list.aMemory;
- void *pCtx = (void *)pTask;
-
- assert(pTask->pThread == 0 && pTask->bDone == 0);
- assert(pTask->list.pList == 0);
- assert(pTask->list.aMemory == 0
- || pSorter->list.aMemory != 0);
-
- pSorter->iPrev = (u8) (pTask - pSorter->aTask);
- pTask->list = pSorter->list;
- pSorter->list.pList = 0;
- pSorter->list.szPMA = 0;
- if (aMem) {
- pSorter->list.aMemory = aMem;
- pSorter->nMemory = sqlMallocSize(aMem);
- } else if (pSorter->list.aMemory) {
- pSorter->list.aMemory =
- sqlMalloc(pSorter->nMemory);
- if (!pSorter->list.aMemory)
- return SQL_NOMEM;
- }
-
- rc = vdbeSorterCreateThread(pTask,
- vdbeSorterFlushThread,
- pCtx);
- }
- }
-
- return rc;
-#endif /* SQL_MAX_WORKER_THREADS!=0 */
}
/*
@@ -1876,8 +1618,6 @@ vdbeIncrPopulate(IncrMerger * pIncr)
PmaWriter writer;
assert(pIncr->bEof == 0);
- vdbeSorterPopulateDebug(pTask, "enter");
-
vdbePmaWriterInit(pOut->pFd, &writer, pTask->pSorter->pgsz, iStart);
while (rc == SQL_OK) {
int dummy;
@@ -1904,36 +1644,9 @@ vdbeIncrPopulate(IncrMerger * pIncr)
rc2 = vdbePmaWriterFinish(&writer, &pOut->iEof);
if (rc == SQL_OK)
rc = rc2;
- vdbeSorterPopulateDebug(pTask, "exit");
return rc;
}
-#if SQL_MAX_WORKER_THREADS>0
-/*
- * The main routine for background threads that populate aFile[1] of
- * multi-threaded IncrMerger objects.
- */
-static void *
-vdbeIncrPopulateThread(void *pCtx)
-{
- IncrMerger *pIncr = (IncrMerger *) pCtx;
- void *pRet = SQL_INT_TO_PTR(vdbeIncrPopulate(pIncr));
- pIncr->pTask->bDone = 1;
- return pRet;
-}
-
-/*
- * Launch a background thread to populate aFile[1] of pIncr.
- */
-static int
-vdbeIncrBgPopulate(IncrMerger * pIncr)
-{
- void *p = (void *)pIncr;
- assert(pIncr->bUseThread);
- return vdbeSorterCreateThread(pIncr->pTask, vdbeIncrPopulateThread, p);
-}
-#endif
-
/*
* This function is called when the PmaReader corresponding to pIncr has
* finished reading the contents of aFile[0]. Its purpose is to "refill"
@@ -1954,33 +1667,10 @@ vdbeIncrBgPopulate(IncrMerger * pIncr)
static int
vdbeIncrSwap(IncrMerger * pIncr)
{
- int rc = SQL_OK;
-
-#if SQL_MAX_WORKER_THREADS>0
- if (pIncr->bUseThread) {
- rc = vdbeSorterJoinThread(pIncr->pTask);
-
- if (rc == SQL_OK) {
- SorterFile f0 = pIncr->aFile[0];
- pIncr->aFile[0] = pIncr->aFile[1];
- pIncr->aFile[1] = f0;
- }
-
- if (rc == SQL_OK) {
- if (pIncr->aFile[0].iEof == pIncr->iStartOff) {
- pIncr->bEof = 1;
- } else {
- rc = vdbeIncrBgPopulate(pIncr);
- }
- }
- } else
-#endif
- {
- rc = vdbeIncrPopulate(pIncr);
- pIncr->aFile[0] = pIncr->aFile[1];
- if (pIncr->aFile[0].iEof == pIncr->iStartOff) {
- pIncr->bEof = 1;
- }
+ int rc = vdbeIncrPopulate(pIncr);
+ pIncr->aFile[0] = pIncr->aFile[1];
+ if (pIncr->aFile[0].iEof == pIncr->iStartOff) {
+ pIncr->bEof = 1;
}
return rc;
@@ -2015,18 +1705,6 @@ vdbeIncrMergerNew(SortSubtask * pTask, /* The thread that will be using the new
return rc;
}
-#if SQL_MAX_WORKER_THREADS>0
-/*
- * Set the "use-threads" flag on object pIncr.
- */
-static void
-vdbeIncrMergerSetThreads(IncrMerger * pIncr)
-{
- pIncr->bUseThread = 1;
- pIncr->pTask->file2.iEof -= pIncr->mxSz;
-}
-#endif /* SQL_MAX_WORKER_THREADS>0 */
-
/*
* Recompute pMerger->aTree[iOut] by comparing the next keys on the
* two PmaReaders that feed that entry. Neither of the PmaReaders
@@ -2077,38 +1755,20 @@ vdbeMergeEngineCompare(MergeEngine * pMerger, /* Merge engine containing PmaRead
pMerger->aTree[iOut] = iRes;
}
-/*
- * Allowed values for the eMode parameter to vdbeMergeEngineInit()
- * and vdbePmaReaderIncrMergeInit().
- *
- * Only INCRINIT_NORMAL is valid in single-threaded builds (when
- * SQL_MAX_WORKER_THREADS==0). The other values are only used
- * when there exists one or more separate worker threads.
- */
-#define INCRINIT_NORMAL 0
-#define INCRINIT_TASK 1
-#define INCRINIT_ROOT 2
-
/*
* Forward reference required as the vdbeIncrMergeInit() and
* vdbePmaReaderIncrInit() routines are called mutually recursively when
* building a merge tree.
*/
-static int vdbePmaReaderIncrInit(PmaReader * pReadr, int eMode);
+static int vdbePmaReaderIncrInit(PmaReader * pReader);
/*
* Initialize the MergeEngine object passed as the second argument. Once this
* function returns, the first key of merged data may be read from the
* MergeEngine object in the usual fashion.
*
- * If argument eMode is INCRINIT_ROOT, then it is assumed that any IncrMerge
- * objects attached to the PmaReader objects that the merger reads from have
- * already been populated, but that they have not yet populated aFile[0] and
- * set the PmaReader objects up to read from it. In this case all that is
- * required is to call vdbePmaReaderNext() on each PmaReader to point it at
- * its first key.
*
- * Otherwise, if eMode is any value other than INCRINIT_ROOT, then use
+ * Use
* vdbePmaReaderIncrMergeInit() to initialize each PmaReader that feeds data
* to pMerger.
*
@@ -2116,36 +1776,19 @@ static int vdbePmaReaderIncrInit(PmaReader * pReadr, int eMode);
*/
static int
vdbeMergeEngineInit(SortSubtask * pTask, /* Thread that will run pMerger */
- MergeEngine * pMerger, /* MergeEngine to initialize */
- int eMode /* One of the INCRINIT_XXX constants */
+ MergeEngine * pMerger /* MergeEngine to initialize */
)
{
int rc = SQL_OK; /* Return code */
int i; /* For looping over PmaReader objects */
int nTree = pMerger->nTree;
- /* eMode is always INCRINIT_NORMAL in single-threaded mode */
- assert(SQL_MAX_WORKER_THREADS > 0 || eMode == INCRINIT_NORMAL);
-
/* Verify that the MergeEngine is assigned to a single thread */
assert(pMerger->pTask == 0);
pMerger->pTask = pTask;
for (i = 0; i < nTree; i++) {
- if (SQL_MAX_WORKER_THREADS > 0 && eMode == INCRINIT_ROOT) {
- /* PmaReaders should be normally initialized in order, as if they are
- * reading from the same temp file this makes for more linear file IO.
- * However, in the INCRINIT_ROOT case, if PmaReader aReadr[nTask-1] is
- * in use it will block the vdbePmaReaderNext() call while it uses
- * the main thread to fill its buffer. So calling PmaReaderNext()
- * on this PmaReader before any of the multi-threaded PmaReaders takes
- * better advantage of multi-processor hardware.
- */
- rc = vdbePmaReaderNext(&pMerger->aReadr[nTree - i - 1]);
- } else {
- rc = vdbePmaReaderIncrInit(&pMerger->aReadr[i],
- INCRINIT_NORMAL);
- }
+ rc = vdbePmaReaderIncrInit(&pMerger->aReadr[i]);
if (rc != SQL_OK)
return rc;
}
@@ -2157,50 +1800,27 @@ vdbeMergeEngineInit(SortSubtask * pTask, /* Thread that will run pMerger */
}
/*
- * The PmaReader passed as the first argument is guaranteed to be an
+ * The PmaReader is guaranteed to be an
* incremental-reader (pReadr->pIncr!=0). This function serves to open
* and/or initialize the temp file related fields of the IncrMerge
* object at (pReadr->pIncr).
*
- * If argument eMode is set to INCRINIT_NORMAL, then all PmaReaders
- * in the sub-tree headed by pReadr are also initialized. Data is then
+ * All PmaReaders
+ * in the sub-tree headed by pReadr are also initialized. Data is
* loaded into the buffers belonging to pReadr and it is set to point to
* the first key in its range.
*
- * If argument eMode is set to INCRINIT_TASK, then pReadr is guaranteed
- * to be a multi-threaded PmaReader and this function is being called in a
- * background thread. In this case all PmaReaders in the sub-tree are
- * initialized as for INCRINIT_NORMAL and the aFile[1] buffer belonging to
- * pReadr is populated. However, pReadr itself is not set up to point
- * to its first key. A call to vdbePmaReaderNext() is still required to do
- * that.
- *
- * The reason this function does not call vdbePmaReaderNext() immediately
- * in the INCRINIT_TASK case is that vdbePmaReaderNext() assumes that it has
- * to block on thread (pTask->thread) before accessing aFile[1]. But, since
- * this entire function is being run by thread (pTask->thread), that will
- * lead to the current background thread attempting to join itself.
- *
- * Finally, if argument eMode is set to INCRINIT_ROOT, it may be assumed
- * that pReadr->pIncr is a multi-threaded IncrMerge objects, and that all
- * child-trees have already been initialized using IncrInit(INCRINIT_TASK).
- * In this case vdbePmaReaderNext() is called on all child PmaReaders and
- * the current PmaReader set to point to the first key in its range.
- *
* SQL_OK is returned if successful, or an sql error code otherwise.
*/
static int
-vdbePmaReaderIncrMergeInit(PmaReader * pReadr, int eMode)
+vdbePmaReaderIncrMergeInit(PmaReader * pReadr)
{
int rc = SQL_OK;
IncrMerger *pIncr = pReadr->pIncr;
SortSubtask *pTask = pIncr->pTask;
sql *db = pTask->pSorter->db;
- /* eMode is always INCRINIT_NORMAL in single-threaded mode */
- assert(SQL_MAX_WORKER_THREADS > 0 || eMode == INCRINIT_NORMAL);
-
- rc = vdbeMergeEngineInit(pTask, pIncr->pMerger, eMode);
+ rc = vdbeMergeEngineInit(pTask, pIncr->pMerger);
/* Set up the required files for pIncr. A multi-theaded IncrMerge object
* requires two temp files to itself, whereas a single-threaded object
@@ -2208,74 +1828,27 @@ vdbePmaReaderIncrMergeInit(PmaReader * pReadr, int eMode)
*/
if (rc == SQL_OK) {
int mxSz = pIncr->mxSz;
-#if SQL_MAX_WORKER_THREADS>0
- if (pIncr->bUseThread) {
- rc = vdbeSorterOpenTempFile(db, mxSz,
- &pIncr->aFile[0].pFd);
- if (rc == SQL_OK) {
- rc = vdbeSorterOpenTempFile(db, mxSz,
- &pIncr->aFile[1].
- pFd);
- }
- } else
-#endif
- /*if( !pIncr->bUseThread ) */ {
- if (pTask->file2.pFd == 0) {
- assert(pTask->file2.iEof > 0);
- rc = vdbeSorterOpenTempFile(db,
- pTask->file2.iEof,
- &pTask->file2.pFd);
- pTask->file2.iEof = 0;
- }
- if (rc == SQL_OK) {
- pIncr->aFile[1].pFd = pTask->file2.pFd;
- pIncr->iStartOff = pTask->file2.iEof;
- pTask->file2.iEof += mxSz;
- }
- }
- }
-#if SQL_MAX_WORKER_THREADS>0
- if (rc == SQL_OK && pIncr->bUseThread) {
- /* Use the current thread to populate aFile[1], even though this
- * PmaReader is multi-threaded. If this is an INCRINIT_TASK object,
- * then this function is already running in background thread
- * pIncr->pTask->thread.
- *
- * If this is the INCRINIT_ROOT object, then it is running in the
- * main VDBE thread. But that is Ok, as that thread cannot return
- * control to the VDBE or proceed with anything useful until the
- * first results are ready from this merger object anyway.
- */
- assert(eMode == INCRINIT_ROOT || eMode == INCRINIT_TASK);
- rc = vdbeIncrPopulate(pIncr);
+ if (pTask->file2.pFd == 0) {
+ assert(pTask->file2.iEof > 0);
+ rc = vdbeSorterOpenTempFile(db,
+ pTask->file2.iEof,
+ &pTask->file2.pFd);
+ pTask->file2.iEof = 0;
+ }
+ if (rc == SQL_OK) {
+ pIncr->aFile[1].pFd = pTask->file2.pFd;
+ pIncr->iStartOff = pTask->file2.iEof;
+ pTask->file2.iEof += mxSz;
+ }
}
-#endif
- if (rc == SQL_OK
- && (SQL_MAX_WORKER_THREADS == 0 || eMode != INCRINIT_TASK)) {
+ if (rc == SQL_OK) {
rc = vdbePmaReaderNext(pReadr);
}
return rc;
}
-#if SQL_MAX_WORKER_THREADS>0
-/*
- * The main routine for vdbePmaReaderIncrMergeInit() operations run in
- * background threads.
- */
-static void *
-vdbePmaReaderBgIncrInit(void *pCtx)
-{
- PmaReader *pReader = (PmaReader *) pCtx;
- void *pRet =
- SQL_INT_TO_PTR(vdbePmaReaderIncrMergeInit(pReader, INCRINIT_TASK)
- );
- pReader->pIncr->pTask->bDone = 1;
- return pRet;
-}
-#endif
-
/*
* If the PmaReader passed as the first argument is not an incremental-reader
* (if pReadr->pIncr==0), then this function is a no-op. Otherwise, it invokes
@@ -2288,23 +1861,12 @@ vdbePmaReaderBgIncrInit(void *pCtx)
* using the current thread.
*/
static int
-vdbePmaReaderIncrInit(PmaReader * pReadr, int eMode)
+vdbePmaReaderIncrInit(PmaReader * pReadr)
{
IncrMerger *pIncr = pReadr->pIncr; /* Incremental merger */
int rc = SQL_OK; /* Return code */
if (pIncr) {
-#if SQL_MAX_WORKER_THREADS>0
- assert(pIncr->bUseThread == 0 || eMode == INCRINIT_TASK);
- if (pIncr->bUseThread) {
- void *pCtx = (void *)pReadr;
- rc = vdbeSorterCreateThread(pIncr->pTask,
- vdbePmaReaderBgIncrInit,
- pCtx);
- } else
-#endif
- {
- rc = vdbePmaReaderIncrMergeInit(pReadr, eMode);
- }
+ rc = vdbePmaReaderIncrMergeInit(pReadr);
}
return rc;
}
@@ -2451,23 +2013,10 @@ vdbeSorterMergeTreeBuild(VdbeSorter * pSorter, /* The VDBE cursor that implement
int rc = SQL_OK;
int iTask;
-#if SQL_MAX_WORKER_THREADS>0
- /* If the sorter uses more than one task, then create the top-level
- * MergeEngine here. This MergeEngine will read data from exactly
- * one PmaReader per sub-task.
- */
- assert(pSorter->bUseThreads || pSorter->nTask == 1);
- if (pSorter->nTask > 1) {
- pMain = vdbeMergeEngineNew(pSorter->nTask);
- if (pMain == 0)
- rc = SQL_NOMEM;
- }
-#endif
-
for (iTask = 0; rc == SQL_OK && iTask < pSorter->nTask; iTask++) {
SortSubtask *pTask = &pSorter->aTask[iTask];
- assert(pTask->nPMA > 0 || SQL_MAX_WORKER_THREADS > 0);
- if (SQL_MAX_WORKER_THREADS == 0 || pTask->nPMA) {
+ assert(pTask->nPMA > 0);
+ if (pTask->nPMA) {
MergeEngine *pRoot = 0; /* Root node of tree for this task */
int nDepth = vdbeSorterTreeDepth(pTask->nPMA);
i64 iReadOff = 0;
@@ -2505,18 +2054,8 @@ vdbeSorterMergeTreeBuild(VdbeSorter * pSorter, /* The VDBE cursor that implement
}
if (rc == SQL_OK) {
-#if SQL_MAX_WORKER_THREADS>0
- if (pMain != 0) {
- rc = vdbeIncrMergerNew(pTask, pRoot,
- &pMain->
- aReadr[iTask].
- pIncr);
- } else
-#endif
- {
- assert(pMain == 0);
- pMain = pRoot;
- }
+ assert(pMain == 0);
+ pMain = pRoot;
} else {
vdbeMergeEngineFree(pRoot);
}
@@ -2546,88 +2085,12 @@ vdbeSorterSetupMerge(VdbeSorter * pSorter)
int rc; /* Return code */
SortSubtask *pTask0 = &pSorter->aTask[0];
MergeEngine *pMain = 0;
-#if SQL_MAX_WORKER_THREADS
- sql *db = pTask0->pSorter->db;
- int i;
- SorterCompare xCompare = vdbeSorterGetCompare(pSorter);
- for (i = 0; i < pSorter->nTask; i++) {
- pSorter->aTask[i].xCompare = xCompare;
- }
-#endif
rc = vdbeSorterMergeTreeBuild(pSorter, &pMain);
if (rc == SQL_OK) {
-#if SQL_MAX_WORKER_THREADS
- assert(pSorter->bUseThreads == 0 || pSorter->nTask > 1);
- if (pSorter->bUseThreads) {
- int iTask;
- PmaReader *pReadr = 0;
- SortSubtask *pLast =
- &pSorter->aTask[pSorter->nTask - 1];
- rc = vdbeSortAllocUnpacked(pLast);
- if (rc == SQL_OK) {
- pReadr =
- (PmaReader *) sqlDbMallocZero(db,
- sizeof
- (PmaReader));
- pSorter->pReader = pReadr;
- if (pReadr == 0)
- rc = SQL_NOMEM;
- }
- if (rc == SQL_OK) {
- rc = vdbeIncrMergerNew(pLast, pMain,
- &pReadr->pIncr);
- if (rc == SQL_OK) {
- vdbeIncrMergerSetThreads(pReadr->pIncr);
- for (iTask = 0;
- iTask < (pSorter->nTask - 1);
- iTask++) {
- IncrMerger *pIncr;
- if ((pIncr =
- pMain->aReadr[iTask].
- pIncr)) {
- vdbeIncrMergerSetThreads
- (pIncr);
- assert(pIncr->pTask !=
- pLast);
- }
- }
- for (iTask = 0;
- rc == SQL_OK
- && iTask < pSorter->nTask;
- iTask++) {
- /* Check that:
- *
- * a) The incremental merge object is configured to use the
- * right task, and
- * b) If it is using task (nTask-1), it is configured to run
- * in single-threaded mode. This is important, as the
- * root merge (INCRINIT_ROOT) will be using the same task
- * object.
- */
- PmaReader *p =
- &pMain->aReadr[iTask];
- assert(p->pIncr == 0 || ((p->pIncr->pTask == &pSorter->aTask[iTask]) /* a */
- &&(iTask != pSorter->nTask - 1 || p->pIncr->bUseThread == 0) /* b */
- ));
- rc = vdbePmaReaderIncrInit(p,
- INCRINIT_TASK);
- }
- }
- pMain = 0;
- }
- if (rc == SQL_OK) {
- rc = vdbePmaReaderIncrMergeInit(pReadr,
- INCRINIT_ROOT);
- }
- } else
-#endif
- {
- rc = vdbeMergeEngineInit(pTask0, pMain,
- INCRINIT_NORMAL);
- pSorter->pMerger = pMain;
- pMain = 0;
- }
+ rc = vdbeMergeEngineInit(pTask0, pMain);
+ pSorter->pMerger = pMain;
+ pMain = 0;
}
if (rc != SQL_OK) {
@@ -2676,8 +2139,6 @@ sqlVdbeSorterRewind(const VdbeCursor * pCsr, int *pbEof)
/* Join all threads */
rc = vdbeSorterJoinAll(pSorter, rc);
- vdbeSorterRewindDebug("rewind");
-
/* Assuming no errors have occurred, set up a merger structure to
* incrementally read and merge all remaining PMAs.
*/
@@ -2687,7 +2148,6 @@ sqlVdbeSorterRewind(const VdbeCursor * pCsr, int *pbEof)
*pbEof = 0;
}
- vdbeSorterRewindDebug("rewinddone");
return rc;
}
@@ -2708,12 +2168,6 @@ sqlVdbeSorterNext(sql * db, const VdbeCursor * pCsr, int *pbEof)
assert(pSorter->pReader == 0 || pSorter->pMerger == 0);
assert(pSorter->bUseThreads == 0 || pSorter->pReader);
assert(pSorter->bUseThreads == 1 || pSorter->pMerger);
-#if SQL_MAX_WORKER_THREADS>0
- if (pSorter->bUseThreads) {
- rc = vdbePmaReaderNext(pSorter->pReader);
- *pbEof = (pSorter->pReader->pFd == 0);
- } else
-#endif
/*if( !pSorter->bUseThreads ) */ {
assert(pSorter->pMerger != 0);
assert(pSorter->pMerger->pTask == (&pSorter->aTask[0]));
@@ -2743,11 +2197,6 @@ vdbeSorterRowkey(const VdbeSorter * pSorter, /* Sorter object */
void *pKey;
if (pSorter->bUsePMA) {
PmaReader *pReader;
-#if SQL_MAX_WORKER_THREADS>0
- if (pSorter->bUseThreads) {
- pReader = pSorter->pReader;
- } else
-#endif
/*if( !pSorter->bUseThreads ) */ {
pReader =
&pSorter->pMerger->aReadr[pSorter->pMerger->
diff --git a/src/box/sql/where.c b/src/box/sql/where.c
index efd4f4f4b..c38b60b0f 100644
--- a/src/box/sql/where.c
+++ b/src/box/sql/where.c
@@ -684,225 +684,6 @@ translateColumnToCopy(Vdbe * v, /* The VDBE containing code to translate */
}
}
-#ifndef SQL_OMIT_AUTOMATIC_INDEX
-/*
- * Return TRUE if the WHERE clause term pTerm is of a form where it
- * could be used with an index to access pSrc, assuming an appropriate
- * index existed.
- */
-static int
-termCanDriveIndex(WhereTerm * pTerm, /* WHERE clause term to check */
- struct SrcList_item *pSrc, /* Table we are trying to access */
- Bitmask notReady /* Tables in outer loops of the join */
- )
-{
- if (pTerm->leftCursor != pSrc->iCursor)
- return 0;
- if ((pTerm->eOperator & WO_EQ) == 0)
- return 0;
- if ((pTerm->prereqRight & notReady) != 0)
- return 0;
- if (pTerm->u.leftColumn < 0)
- return 0;
- enum field_type type = pSrc->pTab->def->fields[pTerm->u.leftColumn].type;
- enum field_type expr_type = expr_cmp_mutual_type(pTerm->pExpr);
- if (!field_type1_contains_type2(expr_type, type))
- return 0;
- return 1;
-}
-#endif
-
-#ifndef SQL_OMIT_AUTOMATIC_INDEX
-/*
- * Generate code to construct the Index object for an automatic index
- * and to set up the WhereLevel object pLevel so that the code generator
- * makes use of the automatic index.
- */
-static void
-constructAutomaticIndex(Parse * pParse, /* The parsing context */
- WhereClause * pWC, /* The WHERE clause */
- struct SrcList_item *pSrc, /* The FROM clause term to get the next index */
- Bitmask notReady, /* Mask of cursors that are not available */
- WhereLevel * pLevel) /* Write new index here */
-{
- int nKeyCol; /* Number of columns in the constructed index */
- WhereTerm *pTerm; /* A single term of the WHERE clause */
- WhereTerm *pWCEnd; /* End of pWC->a[] */
- Index *pIdx; /* Object describing the transient index */
- Vdbe *v; /* Prepared statement under construction */
- int addrInit; /* Address of the initialization bypass jump */
- Table *pTable; /* The table being indexed */
- int addrTop; /* Top of the index fill loop */
- int regRecord; /* Register holding an index record */
- int n; /* Column counter */
- int i; /* Loop counter */
- int mxBitCol; /* Maximum column in pSrc->colUsed */
- struct coll *pColl; /* Collating sequence to on a column */
- WhereLoop *pLoop; /* The Loop object */
- char *zNotUsed; /* Extra space on the end of pIdx */
- Bitmask idxCols; /* Bitmap of columns used for indexing */
- Bitmask extraCols; /* Bitmap of additional columns */
- u8 sentWarning = 0; /* True if a warnning has been issued */
- int iContinue = 0; /* Jump here to skip excluded rows */
- struct SrcList_item *pTabItem; /* FROM clause term being indexed */
- int addrCounter = 0; /* Address where integer counter is initialized */
- int regBase; /* Array of registers where record is assembled */
-
- /* Generate code to skip over the creation and initialization of the
- * transient index on 2nd and subsequent iterations of the loop.
- */
- v = pParse->pVdbe;
- assert(v != 0);
- addrInit = sqlVdbeAddOp0(v, OP_Once);
- VdbeCoverage(v);
-
- /* Count the number of columns that will be added to the index
- * and used to match WHERE clause constraints
- */
- nKeyCol = 0;
- pTable = pSrc->pTab;
- pWCEnd = &pWC->a[pWC->nTerm];
- pLoop = pLevel->pWLoop;
- idxCols = 0;
- for (pTerm = pWC->a; pTerm < pWCEnd; pTerm++) {
- if (termCanDriveIndex(pTerm, pSrc, notReady)) {
- int iCol = pTerm->u.leftColumn;
- Bitmask cMask =
- iCol >= BMS ? MASKBIT(BMS - 1) : MASKBIT(iCol);
- testcase(iCol == BMS);
- testcase(iCol == BMS - 1);
- if (!sentWarning) {
- sql_log(SQL_WARNING_AUTOINDEX,
- "automatic index on %s(%s)",
- pTable->def->name,
- pTable->aCol[iCol].zName);
- sentWarning = 1;
- }
- if ((idxCols & cMask) == 0) {
- if (whereLoopResize
- (pParse->db, pLoop, nKeyCol + 1)) {
- goto end_auto_index_create;
- }
- pLoop->aLTerm[nKeyCol++] = pTerm;
- idxCols |= cMask;
- }
- }
- }
- assert(nKeyCol > 0);
- pLoop->nEq = pLoop->nLTerm = nKeyCol;
- pLoop->wsFlags = WHERE_COLUMN_EQ | WHERE_IDX_ONLY | WHERE_INDEXED
- | WHERE_AUTO_INDEX;
-
- /* Count the number of additional columns needed to create a
- * covering index. A "covering index" is an index that contains all
- * columns that are needed by the query. With a covering index, the
- * original table never needs to be accessed. Automatic indices must
- * be a covering index because the index will not be updated if the
- * original table changes and the index and table cannot both be used
- * if they go out of sync.
- */
- extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS - 1));
- mxBitCol = MIN(BMS - 1, pTable->def->field_count);
- testcase(pTable->def->field_count == BMS - 1);
- testcase(pTable->def->field_count == BMS - 2);
- for (i = 0; i < mxBitCol; i++) {
- if (extraCols & MASKBIT(i))
- nKeyCol++;
- }
- if (pSrc->colUsed & MASKBIT(BMS - 1)) {
- nKeyCol += pTable->def->field_count - BMS + 1;
- }
-
- /* Construct the Index object to describe this index */
- pIdx = sqlDbMallocZero(pParse->db, sizeof(*pIdx));
- if (pIdx == 0)
- goto end_auto_index_create;
- pLoop->pIndex = pIdx;
- pIdx->zName = "auto-index";
- pIdx->pTable = pTable;
- n = 0;
- idxCols = 0;
- for (pTerm = pWC->a; pTerm < pWCEnd; pTerm++) {
- if (termCanDriveIndex(pTerm, pSrc, notReady)) {
- int iCol = pTerm->u.leftColumn;
- Bitmask cMask =
- iCol >= BMS ? MASKBIT(BMS - 1) : MASKBIT(iCol);
- testcase(iCol == BMS - 1);
- testcase(iCol == BMS);
- if ((idxCols & cMask) == 0) {
- Expr *pX = pTerm->pExpr;
- idxCols |= cMask;
- pIdx->aiColumn[n] = pTerm->u.leftColumn;
- n++;
- }
- }
- }
- assert((u32) n == pLoop->nEq);
-
- /* Add additional columns needed to make the automatic index into
- * a covering index
- */
- for (i = 0; i < mxBitCol; i++) {
- if (extraCols & MASKBIT(i)) {
- pIdx->aiColumn[n] = i;
- n++;
- }
- }
- if (pSrc->colUsed & MASKBIT(BMS - 1)) {
- for (i = BMS - 1; i < (int)pTable->def->field_count; i++) {
- pIdx->aiColumn[n] = i;
- n++;
- }
- }
- assert(n == nKeyCol);
- pIdx->aiColumn[n] = XN_ROWID;
-
- /* Create the automatic index */
- assert(pLevel->iIdxCur >= 0);
- pLevel->iIdxCur = pParse->nTab++;
- sqlVdbeAddOp2(v, OP_OpenAutoindex, pLevel->iIdxCur, nKeyCol + 1);
- sql_vdbe_set_p4_key_def(pParse, pIdx->key_def);
- VdbeComment((v, "for %s", pTable->def->name));
-
- /* Fill the automatic index with content */
- sqlExprCachePush(pParse);
- pTabItem = &pWC->pWInfo->pTabList->a[pLevel->iFrom];
- if (pTabItem->fg.viaCoroutine) {
- int regYield = pTabItem->regReturn;
- addrCounter = sqlVdbeAddOp2(v, OP_Integer, 0, 0);
- sqlVdbeAddOp3(v, OP_InitCoroutine, regYield, 0,
- pTabItem->addrFillSub);
- addrTop = sqlVdbeAddOp1(v, OP_Yield, regYield);
- VdbeCoverage(v);
- VdbeComment((v, "next row of \"%s\"", pTabItem->pTab->zName));
- } else {
- addrTop = sqlVdbeAddOp1(v, OP_Rewind, pLevel->iTabCur);
- VdbeCoverage(v);
- }
- regRecord = sqlGetTempReg(pParse);
- regBase = sql_generate_index_key(pParse, pIdx, pLevel->iTabCur,
- regRecord, NULL, 0);
- sqlVdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
- if (pTabItem->fg.viaCoroutine) {
- sqlVdbeChangeP2(v, addrCounter, regBase + n);
- translateColumnToCopy(v, addrTop, pLevel->iTabCur,
- pTabItem->regResult, 1);
- sqlVdbeGoto(v, addrTop);
- pTabItem->fg.viaCoroutine = 0;
- } else {
- sqlVdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop + 1);
- VdbeCoverage(v);
- }
- sqlVdbeChangeP5(v, SQL_STMTSTATUS_AUTOINDEX);
- sqlVdbeJumpHere(v, addrTop);
- sqlReleaseTempReg(pParse, regRecord);
- sqlExprCachePop(pParse);
-
- /* Jump here when skipping the initialization */
- sqlVdbeJumpHere(v, addrInit);
-}
-#endif /* SQL_OMIT_AUTOMATIC_INDEX */
-
/*
* Estimate the location of a particular key among all keys in an
* index. Store the results in aStat as follows:
@@ -2828,61 +2609,6 @@ tnt_error:
probe = fake_index;
}
-#ifndef SQL_OMIT_AUTOMATIC_INDEX
- /* Automatic indexes */
- LogEst rSize = pTab->nRowLogEst;
- LogEst rLogSize = estLog(rSize);
- struct session *user_session = current_session();
- if (!pBuilder->pOrSet /* Not part of an OR optimization */
- && (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE) == 0 && (user_session->sql_flags & SQL_AutoIndex) != 0 && pSrc->pIBIndex == 0 /* Has no INDEXED BY clause */
- && !pSrc->fg.notIndexed /* Has no NOT INDEXED clause */
- && HasRowid(pTab) /* Not WITHOUT ROWID table. (FIXME: Why not?) */
- &&!pSrc->fg.isCorrelated /* Not a correlated subquery */
- && !pSrc->fg.isRecursive /* Not a recursive common table expression. */
- ) {
- /* Generate auto-index WhereLoops */
- WhereTerm *pTerm;
- WhereTerm *pWCEnd = pWC->a + pWC->nTerm;
- for (pTerm = pWC->a; rc == SQL_OK && pTerm < pWCEnd; pTerm++) {
- if (pTerm->prereqRight & pNew->maskSelf)
- continue;
- if (termCanDriveIndex(pTerm, pSrc, 0)) {
- pNew->nEq = 1;
- pNew->nSkip = 0;
- pNew->pIndex = 0;
- pNew->nLTerm = 1;
- pNew->aLTerm[0] = pTerm;
- /* TUNING: One-time cost for computing the automatic index is
- * estimated to be X*N*log2(N) where N is the number of rows in
- * the table being indexed and where X is 7 (LogEst=28) for normal
- * tables or 1.375 (LogEst=4) for views and subqueries. The value
- * of X is smaller for views and subqueries so that the query planner
- * will be more aggressive about generating automatic indexes for
- * those objects, since there is no opportunity to add schema
- * indexes on subqueries and views.
- */
- pNew->rSetup = rLogSize + rSize + 4;
- if (!pTab->def->opts.is_view &&
- pTab->def->id == 0)
- pNew->rSetup += 24;
- if (pNew->rSetup < 0)
- pNew->rSetup = 0;
- /* TUNING: Each index lookup yields 20 rows in the table. This
- * is more than the usual guess of 10 rows, since we have no way
- * of knowing how selective the index will ultimately be. It would
- * not be unreasonable to make this value much larger.
- */
- pNew->nOut = 43;
- assert(43 == sqlLogEst(20));
- pNew->rRun =
- sqlLogEstAdd(rLogSize, pNew->nOut);
- pNew->wsFlags = WHERE_AUTO_INDEX;
- pNew->prereq = mPrereq | pTerm->prereqRight;
- rc = whereLoopInsert(pBuilder, pNew);
- }
- }
- }
-#endif /* SQL_OMIT_AUTOMATIC_INDEX */
/*
* If there was an INDEXED BY clause, then only that one
* index is considered.
@@ -4561,12 +4287,6 @@ sqlWhereBegin(Parse * pParse, /* The parser context */
VdbeComment((v, "%s", space->def->name));
assert(pTabItem->iCursor == pLevel->iTabCur);
sqlVdbeChangeP5(v, bFordelete);
-#ifdef SQL_ENABLE_COLUMN_USED_MASK
- sqlVdbeAddOp4Dup8(v, OP_ColumnsUsed,
- pTabItem->iCursor, 0, 0,
- (const u8 *)&pTabItem->colUsed,
- P4_INT64);
-#endif
}
if (pLoop->wsFlags & WHERE_INDEXED) {
struct index_def *idx_def = pLoop->index_def;
@@ -4641,30 +4361,6 @@ sqlWhereBegin(Parse * pParse, /* The parser context */
sqlVdbeChangeP5(v, OPFLAG_SEEKEQ); /* Hint to COMDB2 */
}
VdbeComment((v, "%s", idx_def->name));
-#ifdef SQL_ENABLE_COLUMN_USED_MASK
- {
- u64 colUsed = 0;
- int ii, jj;
- for (ii = 0; ii < pIx->nColumn; ii++) {
- jj = pIx->aiColumn[ii];
- if (jj < 0)
- continue;
- if (jj > 63)
- jj = 63;
- if ((pTabItem->
- colUsed & MASKBIT(jj)) ==
- 0)
- continue;
- colUsed |=
- ((u64) 1) << (ii <
- 63 ? ii : 63);
- }
- sqlVdbeAddOp4Dup8(v, OP_ColumnsUsed,
- iIndexCur, 0, 0,
- (u8 *) & colUsed,
- P4_INT64);
- }
-#endif /* SQL_ENABLE_COLUMN_USED_MASK */
}
}
}
@@ -4679,15 +4375,6 @@ sqlWhereBegin(Parse * pParse, /* The parser context */
notReady = ~(Bitmask) 0;
for (ii = 0; ii < nTabList; ii++) {
pLevel = &pWInfo->a[ii];
-#ifndef SQL_OMIT_AUTOMATIC_INDEX
- if ((pLevel->pWLoop->wsFlags & WHERE_AUTO_INDEX) != 0) {
- constructAutomaticIndex(pParse, &pWInfo->sWC,
- &pTabList->a[pLevel->iFrom],
- notReady, pLevel);
- if (db->mallocFailed)
- goto whereBeginError;
- }
-#endif
sqlWhereExplainOneScan(pParse, pTabList, pLevel, ii,
pLevel->iFrom, wctrlFlags);
pLevel->addrBody = sqlVdbeCurrentAddr(v);
diff --git a/src/box/sql/wherecode.c b/src/box/sql/wherecode.c
index 4dedb38a7..01fa138f6 100644
--- a/src/box/sql/wherecode.c
+++ b/src/box/sql/wherecode.c
@@ -253,14 +253,6 @@ sqlWhereExplainOneScan(Parse * pParse, /* Parse context */
" USING INTEGER PRIMARY KEY (rowid%s?)",
zRangeOp);
}
-#ifdef SQL_EXPLAIN_ESTIMATED_ROWS
- if (pLoop->nOut >= 10) {
- sqlXPrintf(&str, " (~%llu rows)",
- sqlLogEstToInt(pLoop->nOut));
- } else {
- sqlStrAccumAppend(&str, " (~1 row)", 9);
- }
-#endif
zMsg = sqlStrAccumFinish(&str);
ret =
sqlVdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg,
--
2.17.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] [PATCH 7/8] Removes unused constants
2019-04-29 17:26 [tarantool-patches] [PATCH 0/8] sql: cleanup code from obsolete macros Stanislav Zudin
` (5 preceding siblings ...)
2019-04-29 17:26 ` [tarantool-patches] [PATCH 6/8] Removes the following unused macros: SQL_EXPLAIN_ESTIMATED_ROWS SQL_ENABLE_COLUMN_USED_MASK SQL_DISABLE_DIRSYNC SQL_OMIT_AUTOMATIC_INDEX SQL_DEBUG_SORTER_THREADS SQL_DEFAULT_WORKER_THREADS SQL_LIMIT_WORKER_THREADS SQL_MAX_WORKER_THREADS Stanislav Zudin
@ 2019-04-29 17:26 ` Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 8/8] Removes the following unused macros: SQL_PRINTF_PRECISION_LIMIT SQL_OMIT_COMPOUND_SELECT SQL_POWERSAFE_OVERWRITE SQL_OMIT_PROGRESS_CALLBACK SQL_OMIT_AUTORESET SQL_OMIT_DECLTYPE SQL_ENABLE_COLUMN_METADATA SQL_TRACE_SIZE_LIMIT SQL_OMIT_LIKE_OPTIMIZATION SQL_OMIT_OR_OPTIMIZATION SQL_OMIT_BETWEEN_OPTIMIZATION Stanislav Zudin
7 siblings, 0 replies; 15+ messages in thread
From: Stanislav Zudin @ 2019-04-29 17:26 UTC (permalink / raw)
To: tarantool-patches, korablev; +Cc: Stanislav Zudin
Part of #3978
---
src/box/sql/sqlInt.h | 106 -------------------------------------------
1 file changed, 106 deletions(-)
diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
index 4bf94fad2..4bb35ae73 100644
--- a/src/box/sql/sqlInt.h
+++ b/src/box/sql/sqlInt.h
@@ -274,12 +274,6 @@
#define NEVER(X) (X)
#endif
-/*
- * Return true (non-zero) if the input is an integer that is too large
- * to fit in 32-bits. This macro is used inside of various testcase()
- * macros to verify that we have tested sql for large-file support.
- */
-#define IS_BIG_INT(X) (((X)&~(i64)0xffffffff)!=0)
#include "hash.h"
#include "parse.h"
@@ -596,37 +590,21 @@ sql_exec(sql *, /* An open database */
#define SQL_IOERR_READ (SQL_IOERR | (1<<8))
#define SQL_IOERR_SHORT_READ (SQL_IOERR | (2<<8))
#define SQL_IOERR_WRITE (SQL_IOERR | (3<<8))
-#define SQL_IOERR_FSYNC (SQL_IOERR | (4<<8))
#define SQL_IOERR_DIR_FSYNC (SQL_IOERR | (5<<8))
#define SQL_IOERR_TRUNCATE (SQL_IOERR | (6<<8))
#define SQL_IOERR_FSTAT (SQL_IOERR | (7<<8))
#define SQL_IOERR_UNLOCK (SQL_IOERR | (8<<8))
#define SQL_IOERR_RDLOCK (SQL_IOERR | (9<<8))
#define SQL_IOERR_DELETE (SQL_IOERR | (10<<8))
-#define SQL_IOERR_BLOCKED (SQL_IOERR | (11<<8))
#define SQL_IOERR_NOMEM (SQL_IOERR | (12<<8))
#define SQL_IOERR_ACCESS (SQL_IOERR | (13<<8))
-#define SQL_IOERR_CHECKRESERVEDLOCK (SQL_IOERR | (14<<8))
-#define SQL_IOERR_LOCK (SQL_IOERR | (15<<8))
#define SQL_IOERR_CLOSE (SQL_IOERR | (16<<8))
-#define SQL_IOERR_DIR_CLOSE (SQL_IOERR | (17<<8))
-#define SQL_IOERR_SHMOPEN (SQL_IOERR | (18<<8))
-#define SQL_IOERR_SHMSIZE (SQL_IOERR | (19<<8))
-#define SQL_IOERR_SHMLOCK (SQL_IOERR | (20<<8))
-#define SQL_IOERR_SHMMAP (SQL_IOERR | (21<<8))
-#define SQL_IOERR_SEEK (SQL_IOERR | (22<<8))
#define SQL_IOERR_DELETE_NOENT (SQL_IOERR | (23<<8))
-#define SQL_IOERR_MMAP (SQL_IOERR | (24<<8))
#define SQL_IOERR_GETTEMPPATH (SQL_IOERR | (25<<8))
-#define SQL_IOERR_CONVPATH (SQL_IOERR | (26<<8))
-#define SQL_IOERR_VNODE (SQL_IOERR | (27<<8))
#define SQL_CONSTRAINT_CHECK (SQL_CONSTRAINT | (1<<8))
#define SQL_CONSTRAINT_FOREIGNKEY (SQL_CONSTRAINT | (3<<8))
-#define SQL_CONSTRAINT_FUNCTION (SQL_CONSTRAINT | (4<<8))
#define SQL_CONSTRAINT_NOTNULL (SQL_CONSTRAINT | (5<<8))
-#define SQL_CONSTRAINT_PRIMARYKEY (SQL_CONSTRAINT | (6<<8))
#define SQL_CONSTRAINT_TRIGGER (SQL_CONSTRAINT | (7<<8))
-#define SQL_CONSTRAINT_UNIQUE (SQL_CONSTRAINT | (8<<8))
/**
* Subtype of a main type. Allows to do some subtype specific
@@ -673,22 +651,6 @@ sql_initialize(void);
int
sql_os_end(void);
-#define SQL_CONFIG_SCRATCH 6 /* void*, int sz, int N */
-#define SQL_CONFIG_MEMSTATUS 9 /* boolean */
-#define SQL_CONFIG_LOOKASIDE 13 /* int int */
-#define SQL_CONFIG_LOG 16 /* xFunc, void* */
-#define SQL_CONFIG_URI 17 /* int */
-#define SQL_CONFIG_COVERING_INDEX_SCAN 20 /* int */
-#define SQL_CONFIG_SQLLOG 21 /* xSqllog, void* */
-#define SQL_CONFIG_MMAP_SIZE 22 /* sql_int64, sql_int64 */
-#define SQL_CONFIG_PMASZ 24 /* unsigned int szPma */
-#define SQL_CONFIG_STMTJRNL_SPILL 25 /* int nByte */
-
-#define SQL_DBCONFIG_LOOKASIDE 1001 /* void* int int */
-#define SQL_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
-#define SQL_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */
-#define SQL_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */
-
#define SQL_TRACE_STMT 0x01
#define SQL_TRACE_PROFILE 0x02
#define SQL_TRACE_ROW 0x04
@@ -697,10 +659,6 @@ sql_os_end(void);
#define SQL_DETERMINISTIC 0x800
#define SQL_STATUS_MEMORY_USED 0
-#define SQL_STATUS_PAGECACHE_USED 1
-#define SQL_STATUS_PAGECACHE_OVERFLOW 2
-#define SQL_STATUS_SCRATCH_USED 3
-#define SQL_STATUS_SCRATCH_OVERFLOW 4
#define SQL_STATUS_MALLOC_SIZE 5
#define SQL_STATUS_PARSER_STACK 6
#define SQL_STATUS_PAGECACHE_SIZE 7
@@ -733,41 +691,12 @@ sql_create_function_v2(sql * db,
#define SQL_OPEN_CREATE 0x00000004 /* Ok for sql_open_v2() */
#define SQL_OPEN_DELETEONCLOSE 0x00000008 /* VFS only */
#define SQL_OPEN_EXCLUSIVE 0x00000010 /* VFS only */
-#define SQL_OPEN_AUTOPROXY 0x00000020 /* VFS only */
#define SQL_OPEN_URI 0x00000040 /* Ok for sql_open_v2() */
-#define SQL_OPEN_MEMORY 0x00000080 /* Ok for sql_open_v2() */
#define SQL_OPEN_MAIN_DB 0x00000100 /* VFS only */
-#define SQL_OPEN_TEMP_DB 0x00000200 /* VFS only */
-#define SQL_OPEN_SHAREDCACHE 0x00020000 /* Ok for sql_open_v2() */
-#define SQL_OPEN_PRIVATECACHE 0x00040000 /* Ok for sql_open_v2() */
sql_vfs *
sql_vfs_find(const char *zVfsName);
-#define SQL_TESTCTRL_FIRST 5
-#define SQL_TESTCTRL_PRNG_SAVE 5
-#define SQL_TESTCTRL_PRNG_RESTORE 6
-#define SQL_TESTCTRL_PRNG_RESET 7
-#define SQL_TESTCTRL_BITVEC_TEST 8
-#define SQL_TESTCTRL_FAULT_INSTALL 9
-#define SQL_TESTCTRL_BENIGN_MALLOC_HOOKS 10
-#define SQL_TESTCTRL_PENDING_BYTE 11
-#define SQL_TESTCTRL_ASSERT 12
-#define SQL_TESTCTRL_ALWAYS 13
-#define SQL_TESTCTRL_RESERVE 14
-#define SQL_TESTCTRL_OPTIMIZATIONS 15
-#define SQL_TESTCTRL_ISKEYWORD 16
-#define SQL_TESTCTRL_SCRATCHMALLOC 17
-#define SQL_TESTCTRL_LOCALTIME_FAULT 18
-#define SQL_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
-#define SQL_TESTCTRL_ONCE_RESET_THRESHOLD 19
-#define SQL_TESTCTRL_NEVER_CORRUPT 20
-#define SQL_TESTCTRL_VDBE_COVERAGE 21
-#define SQL_TESTCTRL_BYTEORDER 22
-#define SQL_TESTCTRL_ISINIT 23
-#define SQL_TESTCTRL_SORTER_MMAP 24
-#define SQL_TESTCTRL_LAST 24
-
int
sql_status64(int op, sql_int64 * pCurrent,
sql_int64 * pHighwater,
@@ -792,22 +721,13 @@ struct sql_io_methods {
};
#define SQL_FCNTL_LOCKSTATE 1
-#define SQL_FCNTL_GET_LOCKPROXYFILE 2
-#define SQL_FCNTL_SET_LOCKPROXYFILE 3
#define SQL_FCNTL_LAST_ERRNO 4
#define SQL_FCNTL_SIZE_HINT 5
#define SQL_FCNTL_CHUNK_SIZE 6
-#define SQL_FCNTL_FILE_POINTER 7
-#define SQL_FCNTL_SYNC_OMITTED 8
-#define SQL_FCNTL_OVERWRITE 10
#define SQL_FCNTL_VFSNAME 11
-#define SQL_FCNTL_POWERSAFE_OVERWRITE 12
-#define SQL_FCNTL_PRAGMA 13
#define SQL_FCNTL_TEMPFILENAME 15
#define SQL_FCNTL_MMAP_SIZE 16
-#define SQL_FCNTL_TRACE 17
#define SQL_FCNTL_HAS_MOVED 18
-#define SQL_FCNTL_SYNC 19
int
sql_os_init(void);
@@ -818,10 +738,6 @@ sql_soft_heap_limit64(sql_int64 N);
int
sql_limit(sql *, int id, int newVal);
-#define SQL_SYNC_NORMAL 0x00002
-#define SQL_SYNC_FULL 0x00003
-#define SQL_SYNC_DATAONLY 0x00010
-
extern char *
sql_temp_directory;
@@ -829,10 +745,6 @@ const char *
sql_uri_parameter(const char *zFilename,
const char *zParam);
-#define SQL_ACCESS_EXISTS 0
-#define SQL_ACCESS_READWRITE 1 /* Used by PRAGMA temp_store_directory */
-#define SQL_ACCESS_READ 2 /* Unused */
-
#define SQL_DBSTATUS_LOOKASIDE_USED 0
#define SQL_DBSTATUS_CACHE_USED 1
#define SQL_DBSTATUS_SCHEMA_USED 2
@@ -2895,16 +2807,6 @@ struct TreeView {
};
#endif /* SQL_DEBUG */
-/*
- * Assuming zIn points to the first byte of a UTF-8 character,
- * advance zIn to point to the first byte of the next UTF-8 character.
- */
-#define SQL_SKIP_UTF8(zIn) { \
- if( (*(zIn++))>=0xc0 ){ \
- while( (*zIn & 0xc0)==0x80 ){ zIn++; } \
- } \
-}
-
/*
* The following macros mimic the standard library functions toupper(),
* isspace(), isalnum(), isdigit() and isxdigit(), respectively. The
@@ -4763,12 +4665,6 @@ fk_constraint_emit_actions(struct Parse *parser, struct space *space, int reg_ol
bool
fk_constraint_is_required(struct space *space, const int *changes);
-/*
- * Available fault injectors. Should be numbered beginning with 0.
- */
-#define SQL_FAULTINJECTOR_MALLOC 0
-#define SQL_FAULTINJECTOR_COUNT 1
-
/*
* The interface to the code in fault.c used for identifying "benign"
* malloc failures.
@@ -4843,8 +4739,6 @@ int sqlMemdebugNoType(void *, u8);
#endif
#define MEMTYPE_HEAP 0x01 /* General heap allocations */
#define MEMTYPE_LOOKASIDE 0x02 /* Heap that might have been lookaside */
-#define MEMTYPE_SCRATCH 0x04 /* Scratch allocations */
-#define MEMTYPE_PCACHE 0x08 /* Page cache allocations */
int sqlExprVectorSize(Expr * pExpr);
--
2.17.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] [PATCH 8/8] Removes the following unused macros: SQL_PRINTF_PRECISION_LIMIT SQL_OMIT_COMPOUND_SELECT SQL_POWERSAFE_OVERWRITE SQL_OMIT_PROGRESS_CALLBACK SQL_OMIT_AUTORESET SQL_OMIT_DECLTYPE SQL_ENABLE_COLUMN_METADATA SQL_TRACE_SIZE_LIMIT SQL_OMIT_LIKE_OPTIMIZATION SQL_OMIT_OR_OPTIMIZATION SQL_OMIT_BETWEEN_OPTIMIZATION
2019-04-29 17:26 [tarantool-patches] [PATCH 0/8] sql: cleanup code from obsolete macros Stanislav Zudin
` (6 preceding siblings ...)
2019-04-29 17:26 ` [tarantool-patches] [PATCH 7/8] Removes unused constants Stanislav Zudin
@ 2019-04-29 17:26 ` Stanislav Zudin
7 siblings, 0 replies; 15+ messages in thread
From: Stanislav Zudin @ 2019-04-29 17:26 UTC (permalink / raw)
To: tarantool-patches, korablev; +Cc: Stanislav Zudin
Closes #3978
---
| 4 ---
src/box/sql/parse.y | 7 ++---
src/box/sql/printf.c | 10 -------
src/box/sql/select.c | 13 --------
src/box/sql/sqlInt.h | 10 -------
src/box/sql/vdbe.c | 11 ++-----
src/box/sql/vdbe.h | 6 +---
src/box/sql/vdbeapi.c | 66 +----------------------------------------
src/box/sql/vdbetrace.c | 31 -------------------
src/box/sql/wherecode.c | 5 +---
src/box/sql/whereexpr.c | 11 +------
11 files changed, 9 insertions(+), 165 deletions(-)
--git a/extra/mkkeywordhash.c b/extra/mkkeywordhash.c
index ba4932b49..5fbb82471 100644
--- a/extra/mkkeywordhash.c
+++ b/extra/mkkeywordhash.c
@@ -61,11 +61,7 @@ struct Keyword {
# define AUTOINCR 0x00000010
#endif
# define CAST 0x00000020
-#ifdef SQL_OMIT_COMPOUND_SELECT
-# define COMPOUND 0
-#else
# define COMPOUND 0x00000040
-#endif
#ifdef SQL_OMIT_CONFLICT_CLAUSE
# define CONFLICT 0
#else
diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y
index 78b3370f9..3e7ffd33a 100644
--- a/src/box/sql/parse.y
+++ b/src/box/sql/parse.y
@@ -222,9 +222,6 @@ columnname(A) ::= nm(A) typedef(Y). {sqlAddColumn(pParse,&A,&Y);}
CONFLICT DEFERRED END FAIL
IGNORE INITIALLY INSTEAD NO MATCH PLAN
QUERY KEY OFFSET RAISE RELEASE REPLACE RESTRICT
-%ifdef SQL_OMIT_COMPOUND_SELECT
- INTERSECT
-%endif SQL_OMIT_COMPOUND_SELECT
RENAME CTIME_KW IF
.
%wildcard ANY.
@@ -468,7 +465,7 @@ select(A) ::= with(W) selectnowith(X). {
}
selectnowith(A) ::= oneselect(A).
-%ifndef SQL_OMIT_COMPOUND_SELECT
+
selectnowith(A) ::= selectnowith(A) multiselect_op(Y) oneselect(Z). {
Select *pRhs = Z;
Select *pLhs = A;
@@ -495,7 +492,7 @@ selectnowith(A) ::= selectnowith(A) multiselect_op(Y) oneselect(Z). {
multiselect_op(A) ::= UNION(OP). {A = @OP; /*A-overwrites-OP*/}
multiselect_op(A) ::= UNION ALL. {A = TK_ALL;}
multiselect_op(A) ::= EXCEPT|INTERSECT(OP). {A = @OP; /*A-overwrites-OP*/}
-%endif SQL_OMIT_COMPOUND_SELECT
+
oneselect(A) ::= SELECT(S) distinct(D) selcollist(W) from(X) where_opt(Y)
groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). {
#ifdef SQL_DEBUG
diff --git a/src/box/sql/printf.c b/src/box/sql/printf.c
index 31d21dbb0..a397b90d8 100644
--- a/src/box/sql/printf.c
+++ b/src/box/sql/printf.c
@@ -293,11 +293,6 @@ sqlVXPrintf(StrAccum * pAccum, /* Accumulate results here */
width = wx & 0x7fffffff;
}
assert(width >= 0);
-#ifdef SQL_PRINTF_PRECISION_LIMIT
- if (width > SQL_PRINTF_PRECISION_LIMIT) {
- width = SQL_PRINTF_PRECISION_LIMIT;
- }
-#endif
/* Get the precision */
if (c == '.') {
@@ -327,11 +322,6 @@ sqlVXPrintf(StrAccum * pAccum, /* Accumulate results here */
precision = -1;
}
assert(precision >= (-1));
-#ifdef SQL_PRINTF_PRECISION_LIMIT
- if (precision > SQL_PRINTF_PRECISION_LIMIT) {
- precision = SQL_PRINTF_PRECISION_LIMIT;
- }
-#endif
/* Get the conversion type modifier */
if (c == 'l') {
diff --git a/src/box/sql/select.c b/src/box/sql/select.c
index 153997cde..556574e10 100644
--- a/src/box/sql/select.c
+++ b/src/box/sql/select.c
@@ -1139,7 +1139,6 @@ selectInnerLoop(Parse * pParse, /* The parser context */
/* In this mode, write each query result to the key of the temporary
* table iParm.
*/
-#ifndef SQL_OMIT_COMPOUND_SELECT
case SRT_Union:{
int r1;
r1 = sqlGetTempReg(pParse);
@@ -1159,7 +1158,6 @@ selectInnerLoop(Parse * pParse, /* The parser context */
nResultCol);
break;
}
-#endif /* SQL_OMIT_COMPOUND_SELECT */
/* Store the result as data using a unique key.
*/
@@ -1517,7 +1515,6 @@ explainTempTable(Parse * pParse, const char *zUsage)
}
}
-#if !defined(SQL_OMIT_COMPOUND_SELECT)
/*
* Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
* is a no-op. Otherwise, it adds a single row of output to the EQP result,
@@ -1555,10 +1552,6 @@ explainComposite(Parse * pParse, /* Parse context */
P4_DYNAMIC);
}
}
-#else
-/* No-op versions of the explainXXX() functions and macros. */
-#define explainComposite(v,w,x,y,z)
-#endif
/*
* If the inner loop was generated using a non-null pOrderBy argument,
@@ -2188,7 +2181,6 @@ computeLimitRegisters(Parse * pParse, Select * p, int iBreak)
}
}
-#ifndef SQL_OMIT_COMPOUND_SELECT
/**
* This function determines resulting collation sequence for
* @n-th column of the result set for the compound SELECT
@@ -2981,7 +2973,6 @@ multiSelect(Parse * pParse, /* Parsing context */
sql_select_delete(db, pDelete);
return rc;
}
-#endif /* SQL_OMIT_COMPOUND_SELECT */
/**
* Code an output subroutine for a coroutine implementation of a
@@ -3237,7 +3228,6 @@ generateOutputSubroutine(struct Parse *parse, struct Select *p,
* until all data is exhausted then jump to the "end" labe. AltB, AeqB,
* and AgtB jump to either L2 or to one of EofA or EofB.
*/
-#ifndef SQL_OMIT_COMPOUND_SELECT
static int
multiSelectOrderBy(Parse * pParse, /* Parsing context */
Select * p, /* The right-most of SELECTs to be coded */
@@ -3573,7 +3563,6 @@ multiSelectOrderBy(Parse * pParse, /* Parsing context */
explainComposite(pParse, p->op, iSub1, iSub2, 0);
return pParse->is_aborted;
}
-#endif
/* Forward Declarations */
static void substExprList(Parse *, ExprList *, int, ExprList *);
@@ -5570,7 +5559,6 @@ sqlSelect(Parse * pParse, /* The parser context */
if (v == 0)
goto select_end;
-#ifndef SQL_OMIT_COMPOUND_SELECT
/* Handle compound SELECT statements using the separate multiSelect()
* procedure.
*/
@@ -5591,7 +5579,6 @@ sqlSelect(Parse * pParse, /* The parser context */
#endif
return rc;
}
-#endif
/* Generate code for all sub-queries in the FROM clause
*/
diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
index 4bb35ae73..14d1fca82 100644
--- a/src/box/sql/sqlInt.h
+++ b/src/box/sql/sqlInt.h
@@ -168,14 +168,6 @@
#define SQL_NOINLINE
#endif
-/*
- * Powersafe overwrite is on by default. But can be turned off using
- * the -Dsql_POWERSAFE_OVERWRITE=0 command-line option.
- */
-#ifndef SQL_POWERSAFE_OVERWRITE
-#define SQL_POWERSAFE_OVERWRITE 1
-#endif
-
/*
* EVIDENCE-OF: R-25715-37072 Memory allocation statistics are enabled by
* default unless sql is compiled with sql_DEFAULT_MEMSTATUS=0 in
@@ -1293,11 +1285,9 @@ struct sql {
double notUsed1; /* Spacer */
} u1;
Lookaside lookaside; /* Lookaside malloc configuration */
-#ifndef SQL_OMIT_PROGRESS_CALLBACK
int (*xProgress) (void *); /* The progress callback */
void *pProgressArg; /* Argument to the progress callback */
unsigned nProgressOps; /* Number of opcodes for progress callback */
-#endif
Hash aFunc; /* Hash table of connection functions */
int *pnBytesFreed; /* If not NULL, increment this in DbFree() */
};
diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
index 738a0701b..50f97d684 100644
--- a/src/box/sql/vdbe.c
+++ b/src/box/sql/vdbe.c
@@ -631,9 +631,7 @@ int sqlVdbeExec(Vdbe *p)
sql *db = p->db; /* The database */
int iCompare = 0; /* Result of last comparison */
unsigned nVmStep = 0; /* Number of virtual machine steps */
-#ifndef SQL_OMIT_PROGRESS_CALLBACK
unsigned nProgressLimit = 0;/* Invoke xProgress() when nVmStep reaches this */
-#endif
Mem *aMem = p->aMem; /* Copy of p->aMem */
Mem *pIn1 = 0; /* 1st input operand */
Mem *pIn2 = 0; /* 2nd input operand */
@@ -659,13 +657,13 @@ int sqlVdbeExec(Vdbe *p)
assert(p->explain==0);
p->pResultSet = 0;
if (db->u1.isInterrupted) goto abort_due_to_interrupt;
-#ifndef SQL_OMIT_PROGRESS_CALLBACK
+
if (db->xProgress) {
u32 iPrior = p->aCounter[SQL_STMTSTATUS_VM_STEP];
assert(0 < db->nProgressOps);
nProgressLimit = db->nProgressOps - (iPrior % db->nProgressOps);
}
-#endif
+
#ifdef SQL_DEBUG
sqlBeginBenignMalloc();
if (p->pc==0
@@ -822,7 +820,7 @@ case OP_Goto: { /* jump */
*/
check_for_interrupt:
if (db->u1.isInterrupted) goto abort_due_to_interrupt;
-#ifndef SQL_OMIT_PROGRESS_CALLBACK
+
/* Call the progress callback if it is configured and the required number
* of VDBE ops have been executed (either since this invocation of
* sqlVdbeExec() or since last time the progress callback was called).
@@ -837,7 +835,6 @@ case OP_Goto: { /* jump */
goto abort_due_to_error;
}
}
-#endif
break;
}
@@ -1401,7 +1398,6 @@ case OP_ResultRow: {
assert(pOp->p1>0);
assert(pOp->p1+pOp->p2<=(p->nMem+1 - p->nCursor)+1);
-#ifndef SQL_OMIT_PROGRESS_CALLBACK
/* Run the progress counter just before returning.
*/
if (db->xProgress!=0
@@ -1411,7 +1407,6 @@ case OP_ResultRow: {
rc = SQL_INTERRUPT;
goto abort_due_to_error;
}
-#endif
/* If this statement has violated immediate foreign key constraints, do
* not return the number of rows modified. And do not RELEASE the statement
diff --git a/src/box/sql/vdbe.h b/src/box/sql/vdbe.h
index 2a1a4402c..acbe255b7 100644
--- a/src/box/sql/vdbe.h
+++ b/src/box/sql/vdbe.h
@@ -152,11 +152,7 @@ struct SubProgram {
#define COLNAME_DATABASE 2
#define COLNAME_TABLE 3
#define COLNAME_COLUMN 4
-#ifdef SQL_ENABLE_COLUMN_METADATA
-#define COLNAME_N 5 /* Number of COLNAME_xxx symbols */
-#else
-#define COLNAME_N 2 /* Store the name and decltype */
-#endif
+#define COLNAME_N 2 /* Store the name and decltype */
/*
* The following macro converts a relative address in the p2 field
diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c
index 9593071f3..562441a1d 100644
--- a/src/box/sql/vdbeapi.c
+++ b/src/box/sql/vdbeapi.c
@@ -503,21 +503,9 @@ sqlStep(Vdbe * p)
*
* Nevertheless, some published applications that were originally written
* for version 3.6.23 or earlier do in fact depend on SQL_MISUSE
- * returns, and those were broken by the automatic-reset change. As a
- * a work-around, the SQL_OMIT_AUTORESET compile-time restores the
- * legacy behavior of returning SQL_MISUSE for cases where the
- * previous sql_step() returned something other than a SQL_LOCKED
- * or SQL_BUSY error.
+ * returns, and those were broken by the automatic-reset change.
*/
-#ifdef SQL_OMIT_AUTORESET
- if ((rc = p->rc & 0xff) == SQL_BUSY || rc == SQL_LOCKED) {
- sql_reset((sql_stmt *) p);
- } else {
- return SQL_MISUSE;
- }
-#else
sql_reset((sql_stmt *) p);
-#endif
}
/* Check that malloc() has not failed. If it has, return early. */
@@ -1100,16 +1088,6 @@ sql_column_datatype(sql_stmt *pStmt, int N)
COLNAME_DECLTYPE);
}
-/*
- * Constraint: If you have ENABLE_COLUMN_METADATA then you must
- * not define OMIT_DECLTYPE.
- */
-#if defined(SQL_OMIT_DECLTYPE) && defined(SQL_ENABLE_COLUMN_METADATA)
-#error "Must not define both SQL_OMIT_DECLTYPE \
- and SQL_ENABLE_COLUMN_METADATA"
-#endif
-
-#ifndef SQL_OMIT_DECLTYPE
/*
* Return the column declaration type (if applicable) of the 'i'th column
* of the result set of SQL statement pStmt.
@@ -1120,45 +1098,6 @@ sql_column_decltype(sql_stmt * pStmt, int N)
return columnName(pStmt, N, (const void *(*)(Mem *))sql_value_text,
COLNAME_DECLTYPE);
}
-#endif /* SQL_OMIT_DECLTYPE */
-
-#ifdef SQL_ENABLE_COLUMN_METADATA
-/*
- * Return the name of the database from which a result column derives.
- * NULL is returned if the result column is an expression or constant or
- * anything else which is not an unambiguous reference to a database column.
- */
-const char *
-sql_column_database_name(sql_stmt * pStmt, int N)
-{
- return columnName(pStmt, N, (const void *(*)(Mem *))sql_value_text,
- COLNAME_DATABASE);
-}
-
-/*
- * Return the name of the table from which a result column derives.
- * NULL is returned if the result column is an expression or constant or
- * anything else which is not an unambiguous reference to a database column.
- */
-const char *
-sql_column_table_name(sql_stmt * pStmt, int N)
-{
- return columnName(pStmt, N, (const void *(*)(Mem *))sql_value_text,
- COLNAME_TABLE);
-}
-
-/*
- * Return the name of the table column from which a result column derives.
- * NULL is returned if the result column is an expression or constant or
- * anything else which is not an unambiguous reference to a database column.
- */
-const char *
-sql_column_origin_name(sql_stmt * pStmt, int N)
-{
- return columnName(pStmt, N, (const void *(*)(Mem *))sql_value_text,
- COLNAME_COLUMN);
-}
-#endif /* SQL_ENABLE_COLUMN_METADATA */
/******************************* sql_bind_ **************************
*
@@ -1559,9 +1498,6 @@ sql_sql(sql_stmt * pStmt)
* bound parameters expanded. Space to hold the returned string is
* obtained from sql_malloc(). The caller is responsible for
* freeing the returned string by passing it to sql_free().
- *
- * The SQL_TRACE_SIZE_LIMIT puts an upper bound on the size of
- * expanded bound parameters.
*/
char *
sql_expanded_sql(sql_stmt * pStmt)
diff --git a/src/box/sql/vdbetrace.c b/src/box/sql/vdbetrace.c
index b86ad7b8a..f78d5b093 100644
--- a/src/box/sql/vdbetrace.c
+++ b/src/box/sql/vdbetrace.c
@@ -75,11 +75,6 @@ findNextHostParameter(const char *zSql, int *pnToken)
* then the returned string holds a copy of zRawSql with "-- " prepended
* to each line of text.
*
- * If the SQL_TRACE_SIZE_LIMIT macro is defined to an integer, then
- * then long strings and blobs are truncated to that many bytes. This
- * can be used to prevent unreasonably large trace strings when dealing
- * with large (multi-megabyte) strings and blobs.
- *
* The calling function is responsible for making sure the memory returned
* is eventually freed.
*
@@ -161,23 +156,7 @@ sqlVdbeExpandSql(Vdbe * p, /* The prepared statement being evaluated */
} else if (pVar->flags & MEM_Str) {
int nOut; /* Number of bytes of the string text to include in output */
nOut = pVar->n;
-#ifdef SQL_TRACE_SIZE_LIMIT
- if (nOut > SQL_TRACE_SIZE_LIMIT) {
- nOut = SQL_TRACE_SIZE_LIMIT;
- while (nOut < pVar->n
- && (pVar->z[nOut] & 0xc0) ==
- 0x80) {
- nOut++;
- }
- }
-#endif
sqlXPrintf(&out, "'%.*q'", nOut, pVar->z);
-#ifdef SQL_TRACE_SIZE_LIMIT
- if (nOut < pVar->n) {
- sqlXPrintf(&out, "/*+%d bytes*/",
- pVar->n - nOut);
- }
-#endif
} else if (pVar->flags & MEM_Zero) {
sqlXPrintf(&out, "zeroblob(%d)",
pVar->u.nZero);
@@ -186,21 +165,11 @@ sqlVdbeExpandSql(Vdbe * p, /* The prepared statement being evaluated */
assert(pVar->flags & MEM_Blob);
sqlStrAccumAppend(&out, "x'", 2);
nOut = pVar->n;
-#ifdef SQL_TRACE_SIZE_LIMIT
- if (nOut > SQL_TRACE_SIZE_LIMIT)
- nOut = SQL_TRACE_SIZE_LIMIT;
-#endif
for (i = 0; i < nOut; i++) {
sqlXPrintf(&out, "%02x",
pVar->z[i] & 0xff);
}
sqlStrAccumAppend(&out, "'", 1);
-#ifdef SQL_TRACE_SIZE_LIMIT
- if (nOut < pVar->n) {
- sqlXPrintf(&out, "/*+%d bytes*/",
- pVar->n - nOut);
- }
-#endif
}
}
}
diff --git a/src/box/sql/wherecode.c b/src/box/sql/wherecode.c
index 01fa138f6..0317ffd92 100644
--- a/src/box/sql/wherecode.c
+++ b/src/box/sql/wherecode.c
@@ -1211,9 +1211,7 @@ sqlWhereCodeOneLoopStart(WhereInfo * pWInfo, /* Complete information about the W
} else {
assert(pLevel->p5 == 0);
}
- } else
-#ifndef SQL_OMIT_OR_OPTIMIZATION
- if (pLoop->wsFlags & WHERE_MULTI_OR) {
+ } else if (pLoop->wsFlags & WHERE_MULTI_OR) {
/* Case 5: Two or more separately indexed terms connected by OR
*
* Example:
@@ -1512,7 +1510,6 @@ sqlWhereCodeOneLoopStart(WhereInfo * pWInfo, /* Complete information about the W
if (!untestedTerms)
disableTerm(pLevel, pTerm);
} else
-#endif /* SQL_OMIT_OR_OPTIMIZATION */
{
/* Case 6: There is no usable index. We must do a complete
diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c
index 30017b080..d30a710bb 100644
--- a/src/box/sql/whereexpr.c
+++ b/src/box/sql/whereexpr.c
@@ -222,7 +222,6 @@ operatorMask(int op)
return c;
}
-#ifndef SQL_OMIT_LIKE_OPTIMIZATION
/**
* Check to see if the given expression is a LIKE operator that
* can be optimized using inequality constraints.
@@ -341,7 +340,6 @@ like_optimization_is_valid(Parse *pParse, Expr *pExpr, Expr **ppPrefix,
sqlValueFree(pVal);
return rc;
}
-#endif /* SQL_OMIT_LIKE_OPTIMIZATION */
/*
* If the pBase expression originated in the ON or USING clause of
@@ -451,7 +449,6 @@ whereCombineDisjuncts(SrcList * pSrc, /* the FROM clause */
exprAnalyze(pSrc, pWC, idxNew);
}
-#if !defined(SQL_OMIT_OR_OPTIMIZATION)
/*
* Analyze a term that consists of two or more OR-connected
* subterms. So in:
@@ -822,7 +819,6 @@ exprAnalyzeOrTerm(SrcList * pSrc, /* the FROM clause */
}
}
}
-#endif /* !SQL_OMIT_OR_OPTIMIZATION */
/*
* We already know that pExpr is a binary operator where both operands are
@@ -1092,7 +1088,7 @@ exprAnalyze(SrcList * pSrc, /* the FROM clause */
(operatorMask(pDup->op) + eExtraOp) & opMask;
}
}
-#ifndef SQL_OMIT_BETWEEN_OPTIMIZATION
+
/* If a term is the BETWEEN operator, create two new virtual terms
* that define the range that the BETWEEN implements. For example:
*
@@ -1133,9 +1129,7 @@ exprAnalyze(SrcList * pSrc, /* the FROM clause */
markTermAsChild(pWC, idxNew, idxTerm);
}
}
-#endif /* SQL_OMIT_BETWEEN_OPTIMIZATION */
-#if !defined(SQL_OMIT_OR_OPTIMIZATION)
/* Analyze a term that is composed of two or more subterms connected by
* an OR operator.
*/
@@ -1144,9 +1138,7 @@ exprAnalyze(SrcList * pSrc, /* the FROM clause */
exprAnalyzeOrTerm(pSrc, pWC, idxTerm);
pTerm = &pWC->a[idxTerm];
}
-#endif /* SQL_OMIT_OR_OPTIMIZATION */
-#ifndef SQL_OMIT_LIKE_OPTIMIZATION
/*
* Add constraints to reduce the search space on a LIKE
* operator.
@@ -1240,7 +1232,6 @@ exprAnalyze(SrcList * pSrc, /* the FROM clause */
markTermAsChild(pWC, idxNew2, idxTerm);
}
}
-#endif /* SQL_OMIT_LIKE_OPTIMIZATION */
/* If there is a vector == or IS term - e.g. "(a, b) == (?, ?)" - create
* new terms for each component comparison - "a = ?" and "b = ?". The
--
2.17.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] Re: [PATCH 2/8] Removes unused functions and commented many years ago code.
2019-04-29 17:26 ` [tarantool-patches] [PATCH 2/8] Removes unused functions and commented many years ago code Stanislav Zudin
@ 2019-05-19 15:15 ` n.pettik
2019-05-29 8:21 ` Stanislav Zudin
0 siblings, 1 reply; 15+ messages in thread
From: n.pettik @ 2019-05-19 15:15 UTC (permalink / raw)
To: tarantool-patches; +Cc: szudin
> diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
> index 00992388c..ab6f9f068 100644
> --- a/src/box/sql/expr.c
> +++ b/src/box/sql/expr.c
> @@ -3062,18 +3062,6 @@ sqlExprCodeIN(Parse * pParse, /* Parsing and code generating context */
>
> assert(pParse->is_aborted || nVector == 1 || eType == IN_INDEX_EPH
> || eType == IN_INDEX_INDEX_ASC || eType == IN_INDEX_INDEX_DESC);
> -#ifdef SQL_DEBUG
SQL_DEBUG is a valid macro, why did you delete this chunk?
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] Re: [PATCH 4/8] Removes unused functions and macros.
2019-04-29 17:26 ` [tarantool-patches] [PATCH 4/8] Removes unused functions and macros Stanislav Zudin
@ 2019-05-19 15:16 ` n.pettik
2019-05-29 14:01 ` Stanislav Zudin
0 siblings, 1 reply; 15+ messages in thread
From: n.pettik @ 2019-05-19 15:16 UTC (permalink / raw)
To: tarantool-patches; +Cc: szudin
>
> diff --git a/extra/mkkeywordhash.c b/extra/mkkeywordhash.c
> index 2ad74eddc..ba4932b49 100644
> --- a/extra/mkkeywordhash.c
> +++ b/extra/mkkeywordhash.c
> @@ -60,11 +60,7 @@ struct Keyword {
> #else
> # define AUTOINCR 0x00000010
> #endif
> -#ifdef SQL_OMIT_CAST
> -# define CAST 0
> -#else
> # define CAST 0x00000020
> -#endif
> #ifdef SQL_OMIT_COMPOUND_SELECT
> # define COMPOUND 0
> #else
> @@ -85,11 +81,7 @@ struct Keyword {
> #define SUBQUERY 0x00001000
> # define TRIGGER 0x00002000
> # define VIEW 0x00008000
> -#ifdef SQL_OMIT_CTE
> -# define CTE 0
> -#else
> # define CTE 0x00040000
> -#endif
> # define RESERVED 0x00000001
What about other if-def macros used in mkkeywordhash.c?
SQL_OMIT_AUTOINCREMENT - we always build with autoincement
SQL_OMIT_CONFLICT_CLAUSE - we always build with conflict clauses
SQL_OMIT_PRAGMA - pragmas are always enabled
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] Re: [PATCH 6/8] Removes the following unused macros: SQL_EXPLAIN_ESTIMATED_ROWS SQL_ENABLE_COLUMN_USED_MASK SQL_DISABLE_DIRSYNC SQL_OMIT_AUTOMATIC_INDEX SQL_DEBUG_SORTER_THREADS SQL_DEFAULT_WORKER_THREADS SQL_LIMIT_WORKER_THREADS SQL_MAX_WORKER_THREADS
2019-04-29 17:26 ` [tarantool-patches] [PATCH 6/8] Removes the following unused macros: SQL_EXPLAIN_ESTIMATED_ROWS SQL_ENABLE_COLUMN_USED_MASK SQL_DISABLE_DIRSYNC SQL_OMIT_AUTOMATIC_INDEX SQL_DEBUG_SORTER_THREADS SQL_DEFAULT_WORKER_THREADS SQL_LIMIT_WORKER_THREADS SQL_MAX_WORKER_THREADS Stanislav Zudin
@ 2019-05-19 15:16 ` n.pettik
2019-05-29 14:02 ` Stanislav Zudin
0 siblings, 1 reply; 15+ messages in thread
From: n.pettik @ 2019-05-19 15:16 UTC (permalink / raw)
To: tarantool-patches; +Cc: szudin
[-- Attachment #1: Type: text/plain, Size: 3552 bytes --]
> diff --git a/src/box/sql/CMakeLists.txt b/src/box/sql/CMakeLists.txt
> index b9dbe141a..f988dc3e7 100644
> --- a/src/box/sql/CMakeLists.txt
> +++ b/src/box/sql/CMakeLists.txt
> @@ -10,9 +10,6 @@ set(SQL_BIN_DIR ${CMAKE_BINARY_DIR}/src/box/sql)
> include_directories(${SQL_SRC_DIR})
> include_directories(${SQL_BIN_DIR})
>
> -add_definitions(-DSQL_MAX_WORKER_THREADS=0)
> -add_definitions(-DSQL_OMIT_AUTOMATIC_INDEX)
Let’s keep routines connected with automatic indexes:
we are going to re-enable it in scope of https://github.com/tarantool/tarantool/issues/2583 <https://github.com/tarantool/tarantool/issues/2583>
This code is a good point to start with reincarnation.
> -
> set(TEST_DEFINITIONS
> SQL_NO_SYNC=1
> SQL_TEST=1
>
> diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
> index f019cd291..4bf94fad2 100644
> --- a/src/box/sql/sqlInt.h
> +++ b/src/box/sql/sqlInt.h
>
> @@ -4858,13 +4846,6 @@ int sqlMemdebugNoType(void *, u8);
>
> -/*
> - * Threading interface
> - */
> -#if SQL_MAX_WORKER_THREADS>0
> -int sqlThreadCreate(sqlThread **, void *(*)(void *), void *);
> -int sqlThreadJoin(sqlThread *, void **);
> -#endif
Now we can remove struct sqlThread.
> diff --git a/src/box/sql/vdbesort.c b/src/box/sql/vdbesort.c
> index ddea6752c..a37fbd911 100644
> --- a/src/box/sql/vdbesort.c
> +++ b/src/box/sql/vdbesort.c
> @@ -118,11 +118,6 @@
> * there are already N worker threads running, the main thread does the work
> * itself.
> *
> - * The sorter is running in multi-threaded mode if (a) the library was built
> - * with pre-processor symbol SQL_MAX_WORKER_THREADS set to a value greater
> - * than zero, and (b) worker threads have been enabled at runtime by calling
> - * "PRAGMA threads=N" with some value of N greater than 0.
> - *
> * When Rewind() is called, any data remaining in memory is flushed to a
> * final PMA. So at this point the data is stored in some number of sorted
> * PMAs within temporary files on disk.
> @@ -159,15 +154,6 @@
> #include "sqlInt.h"
> #include "vdbeInt.h"
>
>
> /*
> * Hard-coded maximum amount of data to accumulate in memory before flushing
> * to a level 0 PMA. The purpose of this limit is to prevent various integer
> @@ -297,18 +283,14 @@ struct MergeEngine {
> *
> * Before a background thread is launched, variable bDone is set to 0. Then,
> * right before it exits, the thread itself sets bDone to 1. This is used for
> - * two purposes:
bDone member is unused now.
> @@ -885,8 +848,8 @@ sqlVdbeSorterInit(sql * db, /* Database connection (for malloc()) */
> } else {
> pSorter->key_def = pCsr->key_def;
> pSorter->pgsz = pgsz = 1024;
> - pSorter->nTask = nWorker + 1;
> - pSorter->iPrev = (u8) (nWorker - 1);
> + pSorter->nTask = 1;
nTask now always equals to 1, you can refactor code using it.
The same concerns member iPrev.
> diff --git a/src/box/sql/wherecode.c b/src/box/sql/wherecode.c
> index 4dedb38a7..01fa138f6 100644
> --- a/src/box/sql/wherecode.c
> +++ b/src/box/sql/wherecode.c
> @@ -253,14 +253,6 @@ sqlWhereExplainOneScan(Parse * pParse, /* Parse context */
> " USING INTEGER PRIMARY KEY (rowid%s?)",
> zRangeOp);
> }
> -#ifdef SQL_EXPLAIN_ESTIMATED_ROWS
> - if (pLoop->nOut >= 10) {
> - sqlXPrintf(&str, " (~%llu rows)",
> - sqlLogEstToInt(pLoop->nOut));
> - } else {
> - sqlStrAccumAppend(&str, " (~1 row)", 9);
> - }
> -#endif
We can enable this code, instead of removing it.
[-- Attachment #2: Type: text/html, Size: 7798 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] Re: [PATCH 2/8] Removes unused functions and commented many years ago code.
2019-05-19 15:15 ` [tarantool-patches] " n.pettik
@ 2019-05-29 8:21 ` Stanislav Zudin
0 siblings, 0 replies; 15+ messages in thread
From: Stanislav Zudin @ 2019-05-29 8:21 UTC (permalink / raw)
To: n.pettik, tarantool-patches
On 19.05.2019 18:15, n.pettik wrote:
>
>> diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
>> index 00992388c..ab6f9f068 100644
>> --- a/src/box/sql/expr.c
>> +++ b/src/box/sql/expr.c
>> @@ -3062,18 +3062,6 @@ sqlExprCodeIN(Parse * pParse, /* Parsing and code generating context */
>>
>> assert(pParse->is_aborted || nVector == 1 || eType == IN_INDEX_EPH
>> || eType == IN_INDEX_INDEX_ASC || eType == IN_INDEX_INDEX_DESC);
>> -#ifdef SQL_DEBUG
>
> SQL_DEBUG is a valid macro, why did you delete this chunk?
>
>
The SQL_DEBUG block contains code commented 24-04-2017
(commit id: c521545d70b24e8d22b06258f77865b96f80ff45).
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] Re: [PATCH 4/8] Removes unused functions and macros.
2019-05-19 15:16 ` [tarantool-patches] " n.pettik
@ 2019-05-29 14:01 ` Stanislav Zudin
0 siblings, 0 replies; 15+ messages in thread
From: Stanislav Zudin @ 2019-05-29 14:01 UTC (permalink / raw)
To: n.pettik, tarantool-patches
On 19.05.2019 18:16, n.pettik wrote:
>
>>
>> diff --git a/extra/mkkeywordhash.c b/extra/mkkeywordhash.c
>> index 2ad74eddc..ba4932b49 100644
>> --- a/extra/mkkeywordhash.c
>> +++ b/extra/mkkeywordhash.c
>> @@ -60,11 +60,7 @@ struct Keyword {
>> #else
>> # define AUTOINCR 0x00000010
>> #endif
>> -#ifdef SQL_OMIT_CAST
>> -# define CAST 0
>> -#else
>> # define CAST 0x00000020
>> -#endif
>> #ifdef SQL_OMIT_COMPOUND_SELECT
>> # define COMPOUND 0
>> #else
>> @@ -85,11 +81,7 @@ struct Keyword {
>> #define SUBQUERY 0x00001000
>> # define TRIGGER 0x00002000
>> # define VIEW 0x00008000
>> -#ifdef SQL_OMIT_CTE
>> -# define CTE 0
>> -#else
>> # define CTE 0x00040000
>> -#endif
>> # define RESERVED 0x00000001
>
> What about other if-def macros used in mkkeywordhash.c?
> SQL_OMIT_AUTOINCREMENT - we always build with autoincement
> SQL_OMIT_CONFLICT_CLAUSE - we always build with conflict clauses
> SQL_OMIT_PRAGMA - pragmas are always enabled
>
Thanks, fixed.
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tarantool-patches] Re: [PATCH 6/8] Removes the following unused macros: SQL_EXPLAIN_ESTIMATED_ROWS SQL_ENABLE_COLUMN_USED_MASK SQL_DISABLE_DIRSYNC SQL_OMIT_AUTOMATIC_INDEX SQL_DEBUG_SORTER_THREADS SQL_DEFAULT_WORKER_THREADS SQL_LIMIT_WORKER_THREADS SQL_MAX_WORKER_THREADS
2019-05-19 15:16 ` [tarantool-patches] " n.pettik
@ 2019-05-29 14:02 ` Stanislav Zudin
0 siblings, 0 replies; 15+ messages in thread
From: Stanislav Zudin @ 2019-05-29 14:02 UTC (permalink / raw)
To: tarantool-patches, n.pettik
On 19.05.2019 18:16, n.pettik wrote:
>
>> diff --git a/src/box/sql/CMakeLists.txt b/src/box/sql/CMakeLists.txt
>> index b9dbe141a..f988dc3e7 100644
>> --- a/src/box/sql/CMakeLists.txt
>> +++ b/src/box/sql/CMakeLists.txt
>> @@ -10,9 +10,6 @@ set(SQL_BIN_DIR ${CMAKE_BINARY_DIR}/src/box/sql)
>> include_directories(${SQL_SRC_DIR})
>> include_directories(${SQL_BIN_DIR})
>>
>> -add_definitions(-DSQL_MAX_WORKER_THREADS=0)
>> -add_definitions(-DSQL_OMIT_AUTOMATIC_INDEX)
>
> Let’s keep routines connected with automatic indexes:
> we are going to re-enable it in scope of
> https://github.com/tarantool/tarantool/issues/2583
> This code is a good point to start with reincarnation.
The macro SQL_OMIT_AUTOMATIC_INDEX and the code enabled by this
macro returned back.
>
>> -
>> set(TEST_DEFINITIONS
>> SQL_NO_SYNC=1
>> SQL_TEST=1
>>
>> diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
>> index f019cd291..4bf94fad2 100644
>> --- a/src/box/sql/sqlInt.h
>> +++ b/src/box/sql/sqlInt.h
>>
>> @@ -4858,13 +4846,6 @@ int sqlMemdebugNoType(void *, u8);
>>
>> -/*
>> - * Threading interface
>> - */
>> -#if SQL_MAX_WORKER_THREADS>0
>> -int sqlThreadCreate(sqlThread **, void *(*)(void *), void *);
>> -int sqlThreadJoin(sqlThread *, void **);
>> -#endif
>
> Now we can remove struct sqlThread.
Done.
>
>> diff --git a/src/box/sql/vdbesort.c b/src/box/sql/vdbesort.c
>> index ddea6752c..a37fbd911 100644
>> --- a/src/box/sql/vdbesort.c
>> +++ b/src/box/sql/vdbesort.c
>> @@ -118,11 +118,6 @@
>> * there are already N worker threads running, the main thread does
>> the work
>> * itself.
>> *
>> - * The sorter is running in multi-threaded mode if (a) the library
>> was built
>> - * with pre-processor symbol SQL_MAX_WORKER_THREADS set to a value
>> greater
>> - * than zero, and (b) worker threads have been enabled at runtime by
>> calling
>> - * "PRAGMA threads=N" with some value of N greater than 0.
>> - *
>> * When Rewind() is called, any data remaining in memory is flushed to a
>> * final PMA. So at this point the data is stored in some number of sorted
>> * PMAs within temporary files on disk.
>> @@ -159,15 +154,6 @@
>> #include "sqlInt.h"
>> #include "vdbeInt.h"
>>
>>
>> /*
>> * Hard-coded maximum amount of data to accumulate in memory before
>> flushing
>> * to a level 0 PMA. The purpose of this limit is to prevent various
>> integer
>> @@ -297,18 +283,14 @@ struct MergeEngine {
>> *
>> * Before a background thread is launched, variable bDone is set to 0.
>> Then,
>> * right before it exits, the thread itself sets bDone to 1. This is
>> used for
>> - * two purposes:
>
> bDone member is unused now.
Done
>
>> @@ -885,8 +848,8 @@ sqlVdbeSorterInit(sql * db,/* Database connection
>> (for malloc()) */
>> } else {
>> pSorter->key_def = pCsr->key_def;
>> pSorter->pgsz = pgsz = 1024;
>> -pSorter->nTask = nWorker + 1;
>> -pSorter->iPrev = (u8) (nWorker - 1);
>> +pSorter->nTask = 1;
>
> nTask now always equals to 1, you can refactor code using it.
> The same concerns member iPrev.
>
>> diff --git a/src/box/sql/wherecode.c b/src/box/sql/wherecode.c
>> index 4dedb38a7..01fa138f6 100644
>> --- a/src/box/sql/wherecode.c
>> +++ b/src/box/sql/wherecode.c
>> @@ -253,14 +253,6 @@ sqlWhereExplainOneScan(Parse * pParse,/* Parse
>> context */
>> " USING INTEGER PRIMARY KEY (rowid%s?)",
>> zRangeOp);
>> }
>> -#ifdef SQL_EXPLAIN_ESTIMATED_ROWS
>> -if (pLoop->nOut >= 10) {
>> -sqlXPrintf(&str, " (~%llu rows)",
>> - sqlLogEstToInt(pLoop->nOut));
>> -} else {
>> -sqlStrAccumAppend(&str, " (~1 row)", 9);
>> -}
>> -#endif
>
> We can enable this code, instead of removing it.
>
Done.
See the PATCH v2 for changes.
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2019-05-29 14:02 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-29 17:26 [tarantool-patches] [PATCH 0/8] sql: cleanup code from obsolete macros Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 1/8] " Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 2/8] Removes unused functions and commented many years ago code Stanislav Zudin
2019-05-19 15:15 ` [tarantool-patches] " n.pettik
2019-05-29 8:21 ` Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 3/8] Removes unused functions Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 4/8] Removes unused functions and macros Stanislav Zudin
2019-05-19 15:16 ` [tarantool-patches] " n.pettik
2019-05-29 14:01 ` Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 5/8] Removes the following unused macros: SQL_ENABLE_MEMORY_MANAGEMENT SQL_ENABLE_UNKNOWN_SQL_FUNCTION SQL_SUBSTR_COMPATIBILITY SQL_ENABLE_STMT_SCANSTATUS Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 6/8] Removes the following unused macros: SQL_EXPLAIN_ESTIMATED_ROWS SQL_ENABLE_COLUMN_USED_MASK SQL_DISABLE_DIRSYNC SQL_OMIT_AUTOMATIC_INDEX SQL_DEBUG_SORTER_THREADS SQL_DEFAULT_WORKER_THREADS SQL_LIMIT_WORKER_THREADS SQL_MAX_WORKER_THREADS Stanislav Zudin
2019-05-19 15:16 ` [tarantool-patches] " n.pettik
2019-05-29 14:02 ` Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 7/8] Removes unused constants Stanislav Zudin
2019-04-29 17:26 ` [tarantool-patches] [PATCH 8/8] Removes the following unused macros: SQL_PRINTF_PRECISION_LIMIT SQL_OMIT_COMPOUND_SELECT SQL_POWERSAFE_OVERWRITE SQL_OMIT_PROGRESS_CALLBACK SQL_OMIT_AUTORESET SQL_OMIT_DECLTYPE SQL_ENABLE_COLUMN_METADATA SQL_TRACE_SIZE_LIMIT SQL_OMIT_LIKE_OPTIMIZATION SQL_OMIT_OR_OPTIMIZATION SQL_OMIT_BETWEEN_OPTIMIZATION Stanislav Zudin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox