[patches] [PATCH 2/7] sql: remove SQLITE_ENABLE_COLUMN_METADATA and _OMIT_DECLTYPE
Konstantin Osipov
kostja at tarantool.org
Thu Mar 29 17:30:37 MSK 2018
* Vladislav Shpilevoy <v.shpilevoy at tarantool.org> [18/02/28 22:41]:
> Remove unused definitions, functions, arguments.
I don't understand what this patch is doing in this set.
Predictable it's completely rotten by now. Please push it
separately, with @kyukhin's OK.
>
> Signed-off-by: Vladislav Shpilevoy <v.shpilevoy at tarantool.org>
> ---
> src/box/sql/select.c | 50 +++++--------------------------
> src/box/sql/sqlite3.h | 81 ++++++---------------------------------------------
> src/box/sql/vdbe.h | 18 +++---------
> src/box/sql/vdbeapi.c | 76 +++++++++++------------------------------------
> 4 files changed, 37 insertions(+), 188 deletions(-)
>
> diff --git a/src/box/sql/select.c b/src/box/sql/select.c
> index 041e6ca87..660423d76 100644
> --- a/src/box/sql/select.c
> +++ b/src/box/sql/select.c
> @@ -1588,29 +1588,16 @@ generateSortTail(Parse * pParse, /* Parsing context */
> * SELECT abc FROM (SELECT col AS abc FROM tbl);
> *
> * The declaration type for any expression other than a column is NULL.
> - *
> - * This routine has either 3 or 6 parameters depending on whether or not
> - * the SQLITE_ENABLE_COLUMN_METADATA compile-time option is used.
> */
> -#ifdef SQLITE_ENABLE_COLUMN_METADATA
> -#define columnType(A,B,C,D,E,F) columnTypeImpl(A,B,D,E,F)
> -#else /* if !defined(SQLITE_ENABLE_COLUMN_METADATA) */
> -#define columnType(A,B,C,D,E,F) columnTypeImpl(A,B,F)
> -#endif
> static const char *
> -columnTypeImpl(NameContext * pNC, Expr * pExpr,
> -#ifdef SQLITE_ENABLE_COLUMN_METADATA
> - const char **pzOrigTab, const char **pzOrigCol,
> -#endif
> - u8 * pEstWidth)
> +columnType(NameContext *pNC, Expr *pExpr, const char **pzOrigTab,
> + const char **pzOrigCol, u8 *pEstWidth)
> {
> char const *zType = 0;
> int j;
> u8 estWidth = 1;
> -#ifdef SQLITE_ENABLE_COLUMN_METADATA
> char const *zOrigTab = 0;
> char const *zOrigCol = 0;
> -#endif
>
> assert(pExpr != 0);
> assert(pNC->pSrcList != 0);
> @@ -1680,23 +1667,17 @@ columnTypeImpl(NameContext * pNC, Expr * pExpr,
> sNC.pNext = pNC;
> sNC.pParse = pNC->pParse;
> zType =
> - columnType(&sNC, p, 0,
> - &zOrigTab, &zOrigCol,
> - &estWidth);
> + columnType(&sNC, p, &zOrigTab,
> + &zOrigCol, &estWidth);
> }
> } else if (pTab->pSchema) {
> /* A real table */
> assert(!pS);
> assert(iCol >= 0 && iCol < pTab->nCol);
> -#ifdef SQLITE_ENABLE_COLUMN_METADATA
> zOrigCol = pTab->aCol[iCol].zName;
> zType = sqlite3ColumnType(&pTab->aCol[iCol], 0);
> estWidth = pTab->aCol[iCol].szEst;
> zOrigTab = pTab->zName;
> -#else
> - zType = sqlite3ColumnType(&pTab->aCol[iCol], 0);
> - estWidth = pTab->aCol[iCol].szEst;
> -#endif
> }
> break;
> }
> @@ -1714,20 +1695,18 @@ columnTypeImpl(NameContext * pNC, Expr * pExpr,
> sNC.pNext = pNC;
> sNC.pParse = pNC->pParse;
> zType =
> - columnType(&sNC, p, 0, &zOrigTab, &zOrigCol,
> + columnType(&sNC, p, &zOrigTab, &zOrigCol,
> &estWidth);
> break;
> }
> #endif
> }
>
> -#ifdef SQLITE_ENABLE_COLUMN_METADATA
> if (pzOrigTab) {
> assert(pzOrigTab && pzOrigCol);
> *pzOrigTab = zOrigTab;
> *pzOrigCol = zOrigCol;
> }
> -#endif
> if (pEstWidth)
> *pEstWidth = estWidth;
> return zType;
> @@ -1742,7 +1721,6 @@ generateColumnTypes(Parse * pParse, /* Parser context */
> SrcList * pTabList, /* List of tables */
> ExprList * pEList) /* Expressions defining the result set */
> {
> -#ifndef SQLITE_OMIT_DECLTYPE
> Vdbe *v = pParse->pVdbe;
> int i;
> NameContext sNC;
> @@ -1751,29 +1729,15 @@ generateColumnTypes(Parse * pParse, /* Parser context */
> for (i = 0; i < pEList->nExpr; i++) {
> Expr *p = pEList->a[i].pExpr;
> const char *zType;
> -#ifdef SQLITE_ENABLE_COLUMN_METADATA
> - const char *zOrigDb = 0;
> const char *zOrigTab = 0;
> const char *zOrigCol = 0;
> - zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol, 0);
> + zType = columnType(&sNC, p, &zOrigTab, &zOrigCol, 0);
>
> - /* The vdbe must make its own copy of the column-type and other
> - * column specific strings, in case the schema is reset before this
> - * virtual machine is deleted.
> - */
> - sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb,
> - SQLITE_TRANSIENT);
> sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab,
> SQLITE_TRANSIENT);
> sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol,
> SQLITE_TRANSIENT);
> -#else
> - zType = columnType(&sNC, p, 0, 0, 0, 0);
> -#endif
> - sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType,
> - SQLITE_TRANSIENT);
> }
> -#endif /* !defined(SQLITE_OMIT_DECLTYPE) */
> }
>
> /*
> @@ -2005,7 +1969,7 @@ sqlite3SelectAddColumnTypeAndCollation(Parse * pParse, /* Parsing contexts */
> const char *zType;
> int n, m;
> p = a[i].pExpr;
> - zType = columnType(&sNC, p, 0, 0, 0, &pCol->szEst);
> + zType = columnType(&sNC, p, 0, 0, &pCol->szEst);
> szAll += pCol->szEst;
> pCol->affinity = sqlite3ExprAffinity(p);
> if (zType && (m = sqlite3Strlen30(zType)) > 0) {
> diff --git a/src/box/sql/sqlite3.h b/src/box/sql/sqlite3.h
> index f9821454a..ab0c8761a 100644
> --- a/src/box/sql/sqlite3.h
> +++ b/src/box/sql/sqlite3.h
> @@ -3900,21 +3900,19 @@ sqlite3_column_name(sqlite3_stmt *, int N);
> * CAPI3REF: Source Of Data In A Query Result
> * METHOD: sqlite3_stmt
> *
> - * ^These routines provide a means to determine the database, table, and
> - * table column that is the origin of a particular result column in
> - * [SELECT] statement.
> - * ^The name of the database or table or column can be returned as
> - * either a UTF-8 or UTF-16 string. ^The _database_ routines return
> - * the database name, the _table_ routines return the table name, and
> - * the origin_ routines return the column name.
> - * ^The returned string is valid until the [prepared statement] is destroyed
> - * using [sqlite3_finalize()] or until the statement is automatically
> + * ^These routines provide a means to determine the table and
> + * table column that is the origin of a particular result column
> + * in [SELECT] statement.
> + * The _table_ routines return the table name, and the origin_
> + * routines return the column name. ^The returned string is valid
> + * until the [prepared statement] is destroyed using
> + * [sqlite3_finalize()] or until the statement is automatically
> * reprepared by the first call to [sqlite3_step()] for a particular run
> * or until the same information is requested
> * again in a different encoding.
> *
> * ^The names returned are the original un-aliased names of the
> - * database, table, and column.
> + * table and column.
> *
> * ^The first argument to these interfaces is a [prepared statement].
> * ^These functions return information about the Nth result column returned by
> @@ -3926,64 +3924,13 @@ sqlite3_column_name(sqlite3_stmt *, int N);
> * NULL. ^These routine might also return NULL if a memory allocation error
> * occurs. ^Otherwise, they return the name of the attached database, table,
> * or column that query result column was extracted from.
> - *
> - * ^As with all other SQLite APIs, those whose names end with "16" return
> - * UTF-16 encoded strings and the other functions return UTF-8.
> - *
> - * ^These APIs are only available if the library was compiled with the
> - * [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol.
> - *
> - * If two or more threads call one or more of these routines against the same
> - * prepared statement and column at the same time then the results are
> - * undefined.
> - *
> - * If two or more threads call one or more
> - * [sqlite3_column_database_name | column metadata interfaces]
> - * for the same [prepared statement] and result column
> - * at the same time then the results are undefined.
> -*/
> -SQLITE_API const char *
> -sqlite3_column_database_name(sqlite3_stmt *,
> - int);
> + */
> SQLITE_API const char *
> sqlite3_column_table_name(sqlite3_stmt *, int);
>
> SQLITE_API const char *
> sqlite3_column_origin_name(sqlite3_stmt *, int);
>
> -/*
> - * CAPI3REF: Declared Datatype Of A Query Result
> - * METHOD: sqlite3_stmt
> - *
> - * ^(The first parameter is a [prepared statement].
> - * If this statement is a [SELECT] statement and the Nth column of the
> - * returned result set of that [SELECT] is a table column (not an
> - * expression or subquery) then the declared type of the table
> - * column is returned.)^ ^If the Nth column of the result set is an
> - * expression or subquery, then a NULL pointer is returned.
> - * ^The returned string is always UTF-8 encoded.
> - *
> - * ^(For example, given the database schema:
> - *
> - * CREATE TABLE t1(c1 VARIANT);
> - *
> - * and the following statement to be compiled:
> - *
> - * SELECT c1 + 1, c1 FROM t1;
> - *
> - * this routine would return the string "VARIANT" for the second result
> - * column (i==1), and a NULL pointer for the first result column (i==0).)^
> - *
> - * ^SQLite uses dynamic run-time typing. ^So just because a column
> - * is declared to contain a particular type does not mean that the
> - * data stored in that column is of the declared type. SQLite is
> - * strongly typed, but the typing is dynamic not static. ^Type
> - * is associated with individual values, not with the containers
> - * used to hold those values.
> -*/
> -SQLITE_API const char *
> -sqlite3_column_decltype(sqlite3_stmt *, int);
> -
> /*
> * CAPI3REF: Evaluate An SQL Statement
> * METHOD: sqlite3_stmt
> @@ -5468,16 +5415,6 @@ sqlite3_table_column_metadata(sqlite3 * db, /* Connection handle */
> int *pAutoinc /* OUTPUT: True if column is auto-increment */
> );
>
> -SQLITE_API int
> -sqlite3_table_column_metadata(sqlite3 * db,
> - const char *zTableName,
> - const char *zColumnName,
> - char const **pzDataType,
> - char const **pzCollSeq,
> - int *pNotNull,
> - int *pPrimaryKey,
> - int *pAutoinc);
> -
> /*
> * CAPI3REF: A Handle To An Open BLOB
> * KEYWORDS: {BLOB handle} {BLOB handles}
> diff --git a/src/box/sql/vdbe.h b/src/box/sql/vdbe.h
> index 5c40e3f72..e66e4f9bf 100644
> --- a/src/box/sql/vdbe.h
> +++ b/src/box/sql/vdbe.h
> @@ -155,23 +155,13 @@ typedef struct VdbeOpList VdbeOpList;
> #define P5_ConstraintFK 4
>
> /*
> - * The Vdbe.aColName array contains 5n Mem structures, where n is the
> + * The Vdbe.aColName array contains 3n Mem structures, where n is the
> * number of columns of data returned by the statement.
> */
> #define COLNAME_NAME 0
> -#define COLNAME_DECLTYPE 1
> -#define COLNAME_DATABASE 2
> -#define COLNAME_TABLE 3
> -#define COLNAME_COLUMN 4
> -#ifdef SQLITE_ENABLE_COLUMN_METADATA
> -#define COLNAME_N 5 /* Number of COLNAME_xxx symbols */
> -#else
> -#ifdef SQLITE_OMIT_DECLTYPE
> -#define COLNAME_N 1 /* Store only the name */
> -#else
> -#define COLNAME_N 2 /* Store the name and decltype */
> -#endif
> -#endif
> +#define COLNAME_TABLE 1
> +#define COLNAME_COLUMN 2
> +#define COLNAME_N 3 /* Number of COLNAME_xxx symbols */
>
> /*
> * 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 46622bff3..d995a534b 100644
> --- a/src/box/sql/vdbeapi.c
> +++ b/src/box/sql/vdbeapi.c
> @@ -1134,51 +1134,48 @@ sqlite3_column_type(sqlite3_stmt * pStmt, int i)
> }
>
> /*
> - * Convert the N-th element of pStmt->pColName[] into a string using
> - * xFunc() then return that string. If N is out of range, return 0.
> + * Get the N-th element of pStmt->pColName[]. If N is out of
> + * range, return NULL.
> *
> * There are up to 5 names for each column. useType determines which
> * name is returned. Here are the names:
> *
> * 0 The column name as it should be displayed for output
> - * 1 The datatype name for the column
> - * 2 The name of the database that the column derives from
> - * 3 The name of the table that the column derives from
> - * 4 The name of the table column that the result column derives from
> + * 1 The name of the table that the column derives from
> + * 2 The name of the table column that the result column derives from
> *
> * If the result is not a simple column reference (if it is an expression
> - * or a constant) then useTypes 2, 3, and 4 return NULL.
> + * or a constant) then useTypes 3 and 4 return NULL.
> */
> -static const void *
> -columnName(sqlite3_stmt * pStmt,
> - int N, const void *(*xFunc) (Mem *), int useType)
> +static const char *
> +columnName(sqlite3_stmt *pStmt, int N, int useType)
> {
> - const void *ret;
> + const char *ret;
> Vdbe *p;
> int n;
> sqlite3 *db;
> #ifdef SQLITE_ENABLE_API_ARMOR
> - if (pStmt == 0) {
> + if (pStmt == NULL) {
> (void)SQLITE_MISUSE_BKPT;
> - return 0;
> + return NULL;
> }
> #endif
> - ret = 0;
> + ret = NULL;
> p = (Vdbe *) pStmt;
> db = p->db;
> - assert(db != 0);
> + assert(db != NULL);
> n = sqlite3_column_count(pStmt);
> if (N < n && N >= 0) {
> N += useType * n;
> sqlite3_mutex_enter(db->mutex);
> assert(db->mallocFailed == 0);
> - ret = xFunc(&p->aColName[N]);
> + ret = (const char *) sqlite3_value_text(&p->aColName[N]);
> /* A malloc may have failed inside of the xFunc() call. If this
> * is the case, clear the mallocFailed flag and return NULL.
> */
> if (db->mallocFailed) {
> sqlite3OomClear(db);
> - ret = 0;
> + ret = NULL;
> }
> sqlite3_mutex_leave(db->mutex);
> }
> @@ -1192,43 +1189,7 @@ columnName(sqlite3_stmt * pStmt,
> const char *
> sqlite3_column_name(sqlite3_stmt * pStmt, int N)
> {
> - return columnName(pStmt, N, (const void *(*)(Mem *))sqlite3_value_text,
> - COLNAME_NAME);
> -}
> -
> -/*
> - * Constraint: If you have ENABLE_COLUMN_METADATA then you must
> - * not define OMIT_DECLTYPE.
> - */
> -#if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
> -#error "Must not define both SQLITE_OMIT_DECLTYPE \
> - and SQLITE_ENABLE_COLUMN_METADATA"
> -#endif
> -
> -#ifndef SQLITE_OMIT_DECLTYPE
> -/*
> - * Return the column declaration type (if applicable) of the 'i'th column
> - * of the result set of SQL statement pStmt.
> - */
> -const char *
> -sqlite3_column_decltype(sqlite3_stmt * pStmt, int N)
> -{
> - return columnName(pStmt, N, (const void *(*)(Mem *))sqlite3_value_text,
> - COLNAME_DECLTYPE);
> -}
> -#endif /* SQLITE_OMIT_DECLTYPE */
> -
> -#ifdef SQLITE_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 *
> -sqlite3_column_database_name(sqlite3_stmt * pStmt, int N)
> -{
> - return columnName(pStmt, N, (const void *(*)(Mem *))sqlite3_value_text,
> - COLNAME_DATABASE);
> + return columnName(pStmt, N, COLNAME_NAME);
> }
>
> /*
> @@ -1239,8 +1200,7 @@ sqlite3_column_database_name(sqlite3_stmt * pStmt, int N)
> const char *
> sqlite3_column_table_name(sqlite3_stmt * pStmt, int N)
> {
> - return columnName(pStmt, N, (const void *(*)(Mem *))sqlite3_value_text,
> - COLNAME_TABLE);
> + return columnName(pStmt, N, COLNAME_TABLE);
> }
>
> /*
> @@ -1251,10 +1211,8 @@ sqlite3_column_table_name(sqlite3_stmt * pStmt, int N)
> const char *
> sqlite3_column_origin_name(sqlite3_stmt * pStmt, int N)
> {
> - return columnName(pStmt, N, (const void *(*)(Mem *))sqlite3_value_text,
> - COLNAME_COLUMN);
> + return columnName(pStmt, N, COLNAME_COLUMN);
> }
> -#endif /* SQLITE_ENABLE_COLUMN_METADATA */
>
> /******************************* sqlite3_bind_ **************************
> *
> --
> 2.14.3 (Apple Git-98)
--
Konstantin Osipov, Moscow, Russia, +7 903 626 22 32
http://tarantool.io - www.twitter.com/kostja_osipov
More information about the Tarantool-patches
mailing list