Tarantool development patches archive
 help / color / mirror / Atom feed
From: "n.pettik" <korablev@tarantool.org>
To: tarantool-patches@freelists.org
Cc: Ivan Koptelov <ivan.koptelov@tarantool.org>
Subject: [tarantool-patches] Re: [PATCH] sql: remove struct Table
Date: Mon, 11 Feb 2019 20:58:13 +0300	[thread overview]
Message-ID: <7CB3BC6E-B4CF-4EE0-BFB7-F5E7CFF89947@tarantool.org> (raw)
In-Reply-To: <F34DA29F-8660-46AB-BFE6-820CCF14DD78@tarantool.org>


> On 6 Feb 2019, at 20:17, i.koptelov <ivan.koptelov@tarantool.org> wrote:
> 
>>> On 1 Feb 2019, at 14:05, Ivan Koptelov<ivan.koptelov@tarantool.org>  wrote:
>>> 
>>> Thank you for the review! Sorry for all these code style errors.
>>> I consider review changes minor, so I put diff b/w first and
>>> second version of patch at the end of the letter.
>>> (second commit on the branch 'review fixes' would be squashed)
>> Don’t do it next time, pls. Instead, inline fixes as an answers to comments,
>> especially when it comes for huge diff ( 209 insertions(+), 259 deletions(-))
>> Otherwise, it takes a while to track fixed chunks of code in a whole diff.
> Sorry for this. All review fixes below is inlined.

Well, thank you. But don’t put fixes in a separate commit, at least when
you push your branch to the remote repository. You may *accidentally*
fail during final commit squashing and no-one will notice that.

Travis status was entirely negative: It can’t be compiled. 
You forgot to add forward declaration of space_def.
I fixed that and a couple of minor issues more. Here is a diff
(I’ve squashed your commits and pushed on top of your branch).

Please, check it out. If it is OK, squash them and then patch LGTM.
 
diff --git a/src/box/sql.h b/src/box/sql.h
index e7b3933b9..aef4cd3b0 100644
--- a/src/box/sql.h
+++ b/src/box/sql.h
@@ -67,6 +67,7 @@ struct Parse;
 struct Select;
 struct Table;
 struct sql_trigger;
+struct space_def;
 
 /**
  * Perform parsing of provided expression. This is done by
@@ -278,8 +279,9 @@ sql_expr_list_append(struct sqlite3 *db, struct ExprList *expr_list,
  * @param expr_list Expression list to resolve.  May be NUL.
  */
 void
-sql_resolve_self_reference(struct Parse *parser, struct space_def *def, int type,
-                          struct Expr *expr, struct ExprList *expr_list);
+sql_resolve_self_reference(struct Parse *parser, struct space_def *def,
+                          int type, struct Expr *expr,
+                          struct ExprList *expr_list);
 
 /**
  * Initialize check_list_item.
diff --git a/src/box/sql/build.c b/src/box/sql/build.c
index 4b055529c..7f9e5f6e6 100644
--- a/src/box/sql/build.c
+++ b/src/box/sql/build.c
@@ -282,6 +282,17 @@ sqlite3CheckIdentifierName(Parse *pParse, char *zName)
 
 /**
  * Return the PRIMARY KEY index of a table.
+ *
+ * Note that during parsing routines this function is not equal
+ * to space_index(space, 0); call since primary key can be added
+ * after seconary keys:
+ *
+ * CREATE TABLE t (a INT UNIQUE, b PRIMARY KEY);
+ *
+ * In this particular case, after secondary index processing
+ * space still lacks PK, but index[0] != NULL since index array
+ * is filled in a straightforward way. Hence, function must
+ * return NULL.
  */
 static struct index *
 sql_space_primary_key(const struct space *space)
@@ -447,8 +458,7 @@ sqlite3AddColumn(Parse * pParse, Token * pName, struct type_def *type_def)
 #endif
        /*
         * As sql_field_retrieve will allocate memory on region
-        * ensure that p->space->def is also temporal and would be
-        * dropped.
+        * ensure that def is also temporal and would be dropped.
         */
        assert(def->opts.is_temporary);
        if (sql_field_retrieve(pParse, def, def->field_count) == NULL)
@@ -598,9 +608,9 @@ sqlite3AddPrimaryKey(Parse * pParse,        /* Parsing context */
 {
        int iCol = -1, i;
        int nTerm;
-       if (pParse->updated_space == NULL)
-               goto primary_key_exit;
        struct space *space = pParse->updated_space;
+       if (space == NULL)
+               goto primary_key_exit;
        if (sql_space_primary_key(space) != NULL) {
                sqlite3ErrorMsg(pParse,
                                "table \"%s\" has more than one primary key",
@@ -742,17 +752,14 @@ sql_column_collation(struct space_def *def, uint32_t column, uint32_t *coll_id)
        struct space *space = space_by_id(def->id);
        /*
         * It is not always possible to fetch collation directly
-        * from struct space. To be more precise when:
-        * 1. space is ephemeral. Thus, its id is zero and
-        *    it can't be found in space cache.
-        * 2. space is a view. Hence, it lacks any functional
-        *    parts such as indexes or fields.
-        * 3. space is under construction. So, the same as p.1
-        *    it can't be found in space cache.
-        * In cases mentioned above collation is fetched from
-        * SQL specific structures.
+        * from struct space due to its absence in space cache.
+        * To be more precise when space is ephemeral or it is
+        * under construction.
+        *
+        * In cases mentioned above collation is fetched by id.
         */
-       if (space == NULL || space_index(space, 0) == NULL) {
+       if (space == NULL) {
+               assert(def->opts.is_temporary);
                assert(column < (uint32_t)def->field_count);
                *coll_id = def->fields[column].coll_id;
                struct coll_id *collation = coll_by_id(*coll_id);
@@ -1157,10 +1164,9 @@ sqlite3EndTable(Parse * pParse,  /* Parse context */
                return;
        }
        assert(!db->mallocFailed);
-       if (pParse->updated_space == NULL)
-               return;
-
        struct space *new_space = pParse->updated_space;
+       if (new_space == NULL)
+               return;
        assert(!db->init.busy);
 
        if (!new_space->def->opts.is_view) {
@@ -1290,9 +1296,9 @@ sql_create_view(struct Parse *parse_context, struct Token *begin,
                goto create_view_fail;
        }
        sqlite3StartTable(parse_context, name, if_exists);
-       if (parse_context->updated_space == NULL || parse_context->nErr != 0)
-               goto create_view_fail;
        struct space *space = parse_context->updated_space;
+       if (space == NULL || parse_context->nErr != 0)
+               goto create_view_fail;
 
        struct space *select_res_space =
                sqlite3ResultSetOfSelect(parse_context, select);
@@ -2047,7 +2053,6 @@ index_fill_def(struct Parse *parse, struct index *index,
                         "region", "key parts");
                goto tnt_error;
        }
-
        for (int i = 0; i < expr_list->nExpr; i++) {
                struct Expr *expr = expr_list->a[i].pExpr;
                sql_resolve_self_reference(parse, space_def, NC_IdxExpr,
diff --git a/src/box/sql/delete.c b/src/box/sql/delete.c
index 143803f9d..8c4ad3146 100644
--- a/src/box/sql/delete.c
+++ b/src/box/sql/delete.c
@@ -146,10 +146,8 @@ sql_table_delete_from(struct Parse *parse, struct SrcList *tab_list,
        struct space *space = sql_lookup_space(parse, tab_list->a);
        if (space == NULL)
                goto delete_from_cleanup;
-       assert(space != NULL);
        trigger_list = sql_triggers_exist(space->def, TK_DELETE, NULL, NULL);
-       bool is_complex = trigger_list != NULL ||
-                         fkey_is_required(space, NULL);
+       bool is_complex = trigger_list != NULL || fkey_is_required(space, NULL);
        bool is_view = space->def->opts.is_view;
 
        /* If table is really a view, make sure it has been
diff --git a/src/box/sql/insert.c b/src/box/sql/insert.c
index 6bd716767..d630524b3 100644
--- a/src/box/sql/insert.c
+++ b/src/box/sql/insert.c
@@ -114,7 +114,7 @@ sql_space_autoinc_fieldno(struct space *space)
 /**
  * This routine is used to see if a statement of the form
  * "INSERT INTO <table> SELECT ..." can run for the results of the
- * SELECT.
+ * SELECT. Otherwise, it may fall into infinite loop.
  *
  * @param parser Parse context.
  * @param space_def Space definition.
@@ -124,7 +124,7 @@ sql_space_autoinc_fieldno(struct space *space)
  * @retval  false else.
  */
 static bool
-vdbe_has_table_read(struct Parse *parser, const struct space_def *space_def)
+vdbe_has_space_read(struct Parse *parser, const struct space_def *space_def)
 {
        struct Vdbe *v = sqlite3GetVdbe(parser);
        int last_instr = sqlite3VdbeCurrentAddr(v);
@@ -456,7 +456,7 @@ sqlite3Insert(Parse * pParse,       /* Parser context */
                 * the SELECT statement. Also use a temp table in
                 * the case of row triggers.
                 */
-               if (trigger != NULL || vdbe_has_table_read(pParse, space_def))
+               if (trigger != NULL || vdbe_has_space_read(pParse, space_def))
                        useTempTable = 1;
 
                if (useTempTable) {
@@ -1210,9 +1210,7 @@ xferOptimization(Parse * pParse,  /* Parser context */
                /* Affinity must be the same on all columns. */
                if (dest_affinity != src_affinity)
                        return 0;
-               uint32_t id;
-               if (sql_column_collation(dest->def, i, &id) !=
-                   sql_column_collation(src->def, i, &id))
+               if (dest->def->fields[i].coll_id != src->def->fields[i].coll_id)
                        return 0;
                if (!dest->def->fields[i].is_nullable &&
                    src->def->fields[i].is_nullable)
diff --git a/src/box/sql/resolve.c b/src/box/sql/resolve.c
index 86d51280d..d3618d207 100644
--- a/src/box/sql/resolve.c
+++ b/src/box/sql/resolve.c
@@ -218,7 +218,6 @@ lookupName(Parse * pParse,  /* The parsing context */
        struct SrcList_item *pMatch = 0;        /* The matching pSrcList item */
        NameContext *pTopNC = pNC;      /* First namecontext in the list */
        int isTrigger = 0;      /* True if resolved to a trigger column */
-       struct space_def *space_def;
 
        assert(pNC);            /* the name context cannot be NULL. */
        assert(zCol);           /* The Z in X.Y.Z cannot be NULL */
@@ -311,11 +310,12 @@ lookupName(Parse * pParse,        /* The parsing context */
                /* If we have not already resolved the name, then maybe
                 * it is a new.* or old.* trigger argument reference
                 */
-               if (zTab != NULL && cntTab == 0
-                   && pParse->updated_space != NULL) {
+               if (zTab != NULL && cntTab == 0 &&
+                   pParse->updated_space != NULL) {
                        int op = pParse->eTriggerOp;
                        assert(op == TK_DELETE || op == TK_UPDATE
                               || op == TK_INSERT);
+                       struct space_def *space_def = NULL;
                        if (op != TK_DELETE && sqlite3StrICmp("new", zTab) == 0) {
                                pExpr->iTable = 1;
                                space_def = pParse->updated_space->def;
@@ -323,8 +323,6 @@ lookupName(Parse * pParse,  /* The parsing context */
                                   && sqlite3StrICmp("old", zTab) == 0) {
                                pExpr->iTable = 0;
                                space_def = pParse->updated_space->def;
-                       } else {
-                               space_def = NULL;
                        }
 
                        if (space_def != NULL) {
@@ -1614,8 +1612,9 @@ sqlite3ResolveSelectNames(Parse * pParse, /* The parser context */
 }
 
 void
-sql_resolve_self_reference(struct Parse *parser, struct space_def *def, int type,
-                          struct Expr *expr, struct ExprList *expr_list)
+sql_resolve_self_reference(struct Parse *parser, struct space_def *def,
+                          int type, struct Expr *expr,
+                          struct ExprList *expr_list)
 {
        /* Fake SrcList for parser->updated_space */
        SrcList sSrc;
diff --git a/src/box/sql/select.c b/src/box/sql/select.c
index b30aa6200..da602a9c0 100644
--- a/src/box/sql/select.c
+++ b/src/box/sql/select.c
@@ -421,8 +421,7 @@ sqlite3JoinType(Parse * pParse, Token * pA, Token * pB, Token * pC)
 static int
 columnIndex(struct space_def *def, const char *zCol)
 {
-       int i;
-       for (i = 0; i < (int)def->field_count; i++) {
+       for (uint32_t i = 0; i < def->field_count; i++) {
                if (strcmp(def->fields[i].name, zCol) == 0)
                        return i;
        }
@@ -1943,8 +1942,9 @@ cleanup:
  * statement be resolved.
  */
 void
-sqlite3SelectAddColumnTypeAndCollation(Parse *pParse, struct space_def *def,
-                                      Select *pSelect)
+sqlite3SelectAddColumnTypeAndCollation(struct Parse *pParse,
+                                      struct space_def *def,
+                                      struct Select *pSelect)
 {
        sqlite3 *db = pParse->db;
        NameContext sNC;
@@ -4021,7 +4021,8 @@ flattenSubquery(Parse * pParse,           /* Parsing context */
                        return 1;
        }
 
-       /* Begin flattening the iFrom-th entry of the FROM clause
+       /*
+        * Begin flattening the iFrom-th entry of the FROM clause
         * in the outer query.
         */
        pSub = pSub1 = pSubitem->pSelect;
@@ -4599,7 +4600,7 @@ withExpand(Walker * pWalker, struct SrcList_item *pFrom)
                /* Check if this is a recursive CTE. */
                pSel = pFrom->pSelect;
                bMayRecursive = (pSel->op == TK_ALL || pSel->op == TK_UNION);
-               int ref_counter = 0;
+               uint32_t ref_counter = 0;
                if (bMayRecursive) {
                        int i;
                        SrcList *pSrc = pFrom->pSelect->pSrc;
@@ -4770,13 +4771,12 @@ selectExpander(Walker * pWalker, Select * p)
                         * unique identifier.
                         */
                        const char *name = "sqlite_sq_DEADBEAFDEADBEAF";
-                       pFrom->space =
-                           sql_ephemeral_space_new(sqlite3ParseToplevel(pParse),
-                                                   name);
-                       struct space *space = pFrom->space;
-
+                       struct space *space =
+                               sql_ephemeral_space_new(sqlite3ParseToplevel(pParse),
+                                                       name);
                        if (space == NULL)
                                return WRC_Abort;
+                       pFrom->space = space;
                        /*
                         * Rewrite old name with correct pointer.
                         */
@@ -4786,7 +4786,7 @@ selectExpander(Walker * pWalker, Select * p)
                                pSel = pSel->pPrior;
                        }
                        sqlite3ColumnsFromExprList(pParse, pSel->pEList,
-                                                  space->def);
+                                                  space->def);
                } else {
                        /*
                         * An ordinary table or view name in the
@@ -4808,10 +4808,7 @@ selectExpander(Walker * pWalker, Select * p)
                                pFrom->pSelect = select;
                                sqlite3SelectSetName(pFrom->pSelect,
                                                     space->def->name);
-                               int columns = space->def->field_count;
-                               space->def->field_count = -1;
                                sqlite3WalkSelect(pWalker, pFrom->pSelect);
-                               space->def->field_count = columns;
                        }
                }
                /* Locate the index named by the INDEXED BY clause, if any. */
diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
index 874fd682f..1352f6efe 100644
--- a/src/box/sql/sqliteInt.h
+++ b/src/box/sql/sqliteInt.h
@@ -2313,7 +2313,8 @@ struct SrcList {
        struct SrcList_item {
                char *zName;    /* Name of the table */
                char *zAlias;   /* The "B" part of a "A AS B" phrase.  zName is the "A" */
-               struct space *space;    /* A space corresponding to zName */
+               /** A space corresponding to zName */
+               struct space *space;
                Select *pSelect;        /* A SELECT statement used in place of a table name */
                int addrFillSub;        /* Address of subroutine to manifest a subquery */
                int regReturn;  /* Register holding return address of addrFillSub */
@@ -2759,6 +2760,9 @@ struct Parse {
        TriggerPrg *pTriggerPrg;        /* Linked list of coded triggers */
        With *pWith;            /* Current WITH clause, or NULL */
        With *pWithToFree;      /* Free this WITH object at the end of the parse */
+       /** Space triggers are being coded for. */
+       struct space *triggered_space;
+       /** A space being constructed by CREATE TABLE */
        /**
         * Number of FK constraints declared within
         * CREATE TABLE statement.
@@ -3480,7 +3484,7 @@ void sqlite3IdListDelete(sqlite3 *, IdList *);
  *
  * @param parse All information about this parse.
  * @param token Index name. May be NULL.
- * @param tbl_name Table to index. Use pParse->updated_space ifNULL.
+ * @param tbl_name Table to index. Use pParse->updated_space if NULL.
  * @param col_list A list of columns to be indexed.
  * @param start The CREATE token that begins this statement.
  * @param sort_order Sort order of primary key when pList==NULL.
@@ -3510,7 +3514,7 @@ Select *sqlite3SelectNew(Parse *, ExprList *, SrcList *, Expr *, ExprList *,
                         Expr *, ExprList *, u32, Expr *, Expr *);
 
 /**
- * While a SrcList can in general represent multiple tables and
+ * While a SrcList can in general represent multiple spaces and
  * subqueries (as in the FROM clause of a SELECT statement) in
  * this case it contains the name of a single table, as one might
  * find in an INSERT, DELETE, or UPDATE statement. Look up that


What is more, I returned back separation into new_space and trigger_space.
The reason is that I am working on another patch where I replace new_space
with struct create_table_def - structure assembling all required arguments for
parsing routines. So, we won’t be able to store new_space and trigger_space
in one struct. Here is diff:

diff --git a/src/box/sql/build.c b/src/box/sql/build.c
index 7f9e5f6e6..1cae2bb2c 100644
--- a/src/box/sql/build.c
+++ b/src/box/sql/build.c
@@ -312,7 +312,7 @@ sql_space_primary_key(const struct space *space)
  * when the "TEMP" or "TEMPORARY" keyword occurs in between
  * CREATE and TABLE.
  *
- * The new table record is initialized and put in pParse->updated_space.
+ * The new table record is initialized and put in pParse->new_space.
  * As more of the CREATE TABLE statement is parsed, additional action
  * routines will be called to add more information to this record.
  * At the end of the CREATE TABLE statement, the sqlite3EndTable() routine
@@ -358,8 +358,8 @@ sqlite3StartTable(Parse *pParse, Token *pName, int noErr)
        strcpy(new_space->def->engine_name,
               sql_storage_engine_strs[current_session()->sql_default_engine]);
 
-       assert(pParse->updated_space == NULL);
-       pParse->updated_space = new_space;
+       assert(pParse->new_space == NULL);
+       pParse->new_space = new_space;
 
        if (!db->init.busy && (v = sqlite3GetVdbe(pParse)) != 0)
                sql_set_multi_write(pParse, true);
@@ -446,9 +446,9 @@ sqlite3AddColumn(Parse * pParse, Token * pName, struct type_def *type_def)
        assert(type_def != NULL);
        char *z;
        sqlite3 *db = pParse->db;
-       if (pParse->updated_space == NULL)
+       if (pParse->new_space == NULL)
                return;
-       struct space_def *def = pParse->updated_space->def;
+       struct space_def *def = pParse->new_space->def;
 
 #if SQLITE_MAX_COLUMN
        if ((int)def->field_count + 1 > db->aLimit[SQLITE_LIMIT_COLUMN]) {
@@ -501,10 +501,10 @@ void
 sql_column_add_nullable_action(struct Parse *parser,
                               enum on_conflict_action nullable_action)
 {
-       if (parser->updated_space == NULL ||
-           NEVER(parser->updated_space->def->field_count < 1))
+       if (parser->new_space == NULL ||
+           NEVER(parser->new_space->def->field_count < 1))
                return;
-       struct space_def *def = parser->updated_space->def;
+       struct space_def *def = parser->new_space->def;
        struct field_def *field = &def->fields[def->field_count - 1];
        if (field->nullable_action != ON_CONFLICT_ACTION_DEFAULT &&
            nullable_action != field->nullable_action) {
@@ -538,9 +538,9 @@ void
 sqlite3AddDefaultValue(Parse * pParse, ExprSpan * pSpan)
 {
        sqlite3 *db = pParse->db;
-       assert(pParse->updated_space->def->opts.is_temporary);
-       if (pParse->updated_space != NULL) {
-               struct space_def *def = pParse->updated_space->def;
+       assert(pParse->new_space->def->opts.is_temporary);
+       if (pParse->new_space != NULL) {
+               struct space_def *def = pParse->new_space->def;
                if (!sqlite3ExprIsConstantOrFunction
                    (pSpan->pExpr, db->init.busy)) {
                        sqlite3ErrorMsg(pParse,
@@ -608,7 +608,7 @@ sqlite3AddPrimaryKey(Parse * pParse,        /* Parsing context */
 {
        int iCol = -1, i;
        int nTerm;
-       struct space *space = pParse->updated_space;
+       struct space *space = pParse->new_space;
        if (space == NULL)
                goto primary_key_exit;
        if (sql_space_primary_key(space) != NULL) {
@@ -688,8 +688,8 @@ void
 sql_add_check_constraint(struct Parse *parser, struct ExprSpan *span)
 {
        struct Expr *expr = span->pExpr;
-       if (parser->updated_space != NULL) {
-               struct space *space = parser->updated_space;
+       if (parser->new_space != NULL) {
+               struct space *space = parser->new_space;
                expr->u.zToken =
                        sqlite3DbStrNDup(parser->db, (char *)span->zStart,
                                         (int)(span->zEnd - span->zStart));
@@ -719,9 +719,9 @@ release_expr:
 void
 sqlite3AddCollateType(Parse * pParse, Token * pToken)
 {
-       if (pParse->updated_space == NULL)
+       if (pParse->new_space == NULL)
                return;
-       struct space *space = pParse->updated_space;
+       struct space *space = pParse->new_space;
        uint32_t i = space->def->field_count - 1;
        sqlite3 *db = pParse->db;
        char *zColl = sqlite3NameFromToken(db, pToken);
@@ -839,7 +839,7 @@ vdbe_emit_create_index(struct Parse *parse, struct space_def *def,
        memcpy(raw, index_parts, index_parts_sz);
        index_parts = raw;
 
-       if (parse->updated_space != NULL) {
+       if (parse->new_space != NULL) {
                sqlite3VdbeAddOp2(v, OP_SCopy, space_id_reg, entry_reg);
                sqlite3VdbeAddOp2(v, OP_Integer, idx_def->iid, entry_reg + 1);
        } else {
@@ -884,7 +884,7 @@ createSpace(Parse * pParse, int iSpaceId, char *zStmt)
        int iRecord = (pParse->nMem += 7);
        struct region *region = &pParse->region;
        uint32_t table_opts_stmt_sz = 0;
-       struct space *space = pParse->updated_space;
+       struct space *space = pParse->new_space;
        char *table_opts_stmt = sql_encode_table_opts(region, space->def, zStmt,
                                                      &table_opts_stmt_sz);
        if (table_opts_stmt == NULL)
@@ -1029,14 +1029,14 @@ vdbe_emit_fkey_create(struct Parse *parse_context, const struct fkey_def *fk)
         * of <CREATE TABLE ...> statement, we don't have child
         * id, but we know register where it will be stored.
         */
-       if (parse_context->updated_space != NULL) {
+       if (parse_context->new_space != NULL) {
                sqlite3VdbeAddOp2(vdbe, OP_SCopy, fk->child_id,
                                  constr_tuple_reg + 1);
        } else {
                sqlite3VdbeAddOp2(vdbe, OP_Integer, fk->child_id,
                                  constr_tuple_reg + 1);
        }
-       if (parse_context->updated_space != NULL && fkey_is_self_referenced(fk)) {
+       if (parse_context->new_space != NULL && fkey_is_self_referenced(fk)) {
                sqlite3VdbeAddOp2(vdbe, OP_SCopy, fk->parent_id,
                                  constr_tuple_reg + 2);
        } else {
@@ -1099,7 +1099,7 @@ vdbe_emit_fkey_create(struct Parse *parse_context, const struct fkey_def *fk)
                          constr_tuple_reg + 9);
        sqlite3VdbeAddOp3(vdbe, OP_SInsert, BOX_FK_CONSTRAINT_ID, 0,
                          constr_tuple_reg + 9);
-       if (parse_context->updated_space == NULL)
+       if (parse_context->new_space == NULL)
                sqlite3VdbeChangeP5(vdbe, OPFLAG_NCHANGE);
        save_record(parse_context, BOX_FK_CONSTRAINT_ID, constr_tuple_reg, 2,
                    vdbe->nOp - 1);
@@ -1164,7 +1164,7 @@ sqlite3EndTable(Parse * pParse,   /* Parse context */
                return;
        }
        assert(!db->mallocFailed);
-       struct space *new_space = pParse->updated_space;
+       struct space *new_space = pParse->new_space;
        if (new_space == NULL)
                return;
        assert(!db->init.busy);
@@ -1296,7 +1296,7 @@ sql_create_view(struct Parse *parse_context, struct Token *begin,
                goto create_view_fail;
        }
        sqlite3StartTable(parse_context, name, if_exists);
-       struct space *space = parse_context->updated_space;
+       struct space *space = parse_context->new_space;
        if (space == NULL || parse_context->nErr != 0)
                goto create_view_fail;
 
@@ -1729,7 +1729,7 @@ sql_create_foreign_key(struct Parse *parse_context, struct SrcList *child,
         * Space under construction during CREATE TABLE
         * processing. NULL for ALTER TABLE statement handling.
         */
-       struct space *space = parse_context->updated_space;
+       struct space *space = parse_context->new_space;
        bool is_alter = space == NULL;
 
        uint32_t child_cols_count;
@@ -2164,11 +2164,11 @@ sql_create_index(struct Parse *parse, struct Token *token,
                        goto exit_create_index;
                }
        } else {
-               if (parse->updated_space == NULL)
+               if (parse->new_space == NULL)
                        goto exit_create_index;
                assert(token == NULL);
                assert(start == NULL);
-               space = parse->updated_space;
+               space = parse->new_space;
        }
        struct space_def *def = space->def;
 
@@ -2354,7 +2354,7 @@ sql_create_index(struct Parse *parse, struct Token *token,
         * constraint, but has different onError (behavior on
         * constraint violation), then an error is raised.
         */
-       if (parse->updated_space != NULL) {
+       if (parse->new_space != NULL) {
                for (uint32_t i = 0; i < space->index_count; ++i) {
                        struct index *existing_idx = space->index[i];
                        uint32_t iid = existing_idx->def->iid;
diff --git a/src/box/sql/delete.c b/src/box/sql/delete.c
index 8c4ad3146..d7070b70b 100644
--- a/src/box/sql/delete.c
+++ b/src/box/sql/delete.c
@@ -413,7 +413,7 @@ sql_table_delete_from(struct Parse *parse, struct SrcList *tab_list,
 
        /* Return the number of rows that were deleted. */
        if ((user_session->sql_flags & SQLITE_CountRows) != 0 &&
-           parse->updated_space != NULL) {
+           parse->triggered_space != NULL) {
                sqlite3VdbeAddOp2(v, OP_ResultRow, reg_count, 1);
                sqlite3VdbeSetNumCols(v, 1);
                sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows deleted",
diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
index b23f36731..d0ac87f14 100644
--- a/src/box/sql/expr.c
+++ b/src/box/sql/expr.c
@@ -4335,7 +4335,7 @@ sqlite3ExprCodeTarget(Parse * pParse, Expr * pExpr, int target)
                        break;
                }
        case TK_RAISE:
-               if (pParse->updated_space == NULL) {
+               if (pParse->triggered_space == NULL) {
                        sqlite3ErrorMsg(pParse, "RAISE() may only be used "
                                        "within a trigger-program");
                        return 0;
diff --git a/src/box/sql/insert.c b/src/box/sql/insert.c
index d630524b3..50204da4a 100644
--- a/src/box/sql/insert.c
+++ b/src/box/sql/insert.c
@@ -793,7 +793,7 @@ sqlite3Insert(Parse * pParse,       /* Parser context */
 
        /* Return the number of rows inserted. */
        if ((user_session->sql_flags & SQLITE_CountRows) != 0 &&
-           pParse->updated_space == NULL) {
+           pParse->triggered_space == NULL) {
                sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
                sqlite3VdbeSetNumCols(v, 1);
                sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows inserted",
diff --git a/src/box/sql/resolve.c b/src/box/sql/resolve.c
index d3618d207..6e13151e6 100644
--- a/src/box/sql/resolve.c
+++ b/src/box/sql/resolve.c
@@ -311,18 +311,18 @@ lookupName(Parse * pParse,        /* The parsing context */
                 * it is a new.* or old.* trigger argument reference
                 */
                if (zTab != NULL && cntTab == 0 &&
-                   pParse->updated_space != NULL) {
+                   pParse->triggered_space != NULL) {
                        int op = pParse->eTriggerOp;
                        assert(op == TK_DELETE || op == TK_UPDATE
                               || op == TK_INSERT);
                        struct space_def *space_def = NULL;
                        if (op != TK_DELETE && sqlite3StrICmp("new", zTab) == 0) {
                                pExpr->iTable = 1;
-                               space_def = pParse->updated_space->def;
+                               space_def = pParse->triggered_space->def;
                        } else if (op != TK_INSERT
                                   && sqlite3StrICmp("old", zTab) == 0) {
                                pExpr->iTable = 0;
-                               space_def = pParse->updated_space->def;
+                               space_def = pParse->triggered_space->def;
                        }
 
                        if (space_def != NULL) {
@@ -1616,9 +1616,9 @@ sql_resolve_self_reference(struct Parse *parser, struct space_def *def,
                           int type, struct Expr *expr,
                           struct ExprList *expr_list)
 {
-       /* Fake SrcList for parser->updated_space */
+       /* Fake SrcList for parser->new_space */
        SrcList sSrc;
-       /* Name context for parser->updated_space */
+       /* Name context for parser->new_space */
        NameContext sNC;
 
        assert(type == NC_IsCheck || type == NC_IdxExpr);
diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
index 1352f6efe..5d01b91b2 100644
--- a/src/box/sql/sqliteInt.h
+++ b/src/box/sql/sqliteInt.h
@@ -2755,7 +2755,7 @@ struct Parse {
        VList *pVList;          /* Mapping between variable names and numbers */
        Vdbe *pReprepare;       /* VM being reprepared (sqlite3Reprepare()) */
        const char *zTail;      /* All SQL text past the last semicolon parsed */
-       struct space *updated_space;    /* A space being constructed by CREATE TABLE
+       struct space *new_space;        /* A space being constructed by CREATE TABLE
                                           or space we are coding triggers for */
        TriggerPrg *pTriggerPrg;        /* Linked list of coded triggers */
        With *pWith;            /* Current WITH clause, or NULL */
@@ -3474,8 +3474,8 @@ void sqlite3IdListDelete(sqlite3 *, IdList *);
  * index and tbl_name is the name of the table that is to be
  * indexed.  Both will be NULL for a primary key or an index that
  * is created to satisfy a UNIQUE constraint.  If tbl_name and
- * name are NULL, use parse->updated_space as the table to be indexed.
- * parse->updated_space is a space that is currently being
+ * name are NULL, use parse->new_space as the table to be indexed.
+ * parse->new_space is a space that is currently being
  * constructed by a CREATE TABLE statement.
  *
  * col_list is a list of columns to be indexed.  col_list will be
@@ -3484,7 +3484,7 @@ void sqlite3IdListDelete(sqlite3 *, IdList *);
  *
  * @param parse All information about this parse.
  * @param token Index name. May be NULL.
- * @param tbl_name Table to index. Use pParse->updated_space if NULL.
+ * @param tbl_name Table to index. Use pParse->new_space if NULL.
  * @param col_list A list of columns to be indexed.
  * @param start The CREATE token that begins this statement.
  * @param sort_order Sort order of primary key when pList==NULL.
diff --git a/src/box/sql/tokenize.c b/src/box/sql/tokenize.c
index 9b0f2cf49..fd45413b9 100644
--- a/src/box/sql/tokenize.c
+++ b/src/box/sql/tokenize.c
@@ -421,7 +421,7 @@ sql_token(const char *z, int *type, bool *is_reserved)
  * during table creation. The only objects allocated using
  * malloc are index defs and check constraints.
  * Note that this functions can't be called on ordinary
- * space object. It's purpose is to clean-up parser->updated_space.
+ * space object. It's purpose is to clean-up parser->new_space.
  *
  * @param db Database handler.
  * @param space Space to be deleted.
@@ -470,7 +470,7 @@ sqlite3RunParser(Parse * pParse, const char *zSql, char **pzErrMsg)
                sqlite3OomFault(db);
                return SQLITE_NOMEM_BKPT;
        }
-       assert(pParse->updated_space == NULL);
+       assert(pParse->new_space == NULL);
        assert(pParse->parsed_ast.trigger == NULL);
        assert(pParse->nVar == 0);
        assert(pParse->pVList == 0);
@@ -550,7 +550,7 @@ sqlite3RunParser(Parse * pParse, const char *zSql, char **pzErrMsg)
                sqlite3VdbeDelete(pParse->pVdbe);
                pParse->pVdbe = 0;
        }
-       parser_space_delete(db, pParse->updated_space);
+       parser_space_delete(db, pParse->new_space);
        if (pParse->pWithToFree)
                sqlite3WithDelete(db, pParse->pWithToFree);
        sqlite3DbFree(db, pParse->pVList);
diff --git a/src/box/sql/trigger.c b/src/box/sql/trigger.c
index e3c87c422..46523edd9 100644
--- a/src/box/sql/trigger.c
+++ b/src/box/sql/trigger.c
@@ -614,7 +614,7 @@ codeTriggerProgram(Parse * pParse,  /* The parser context */
        Vdbe *v = pParse->pVdbe;
        sqlite3 *db = pParse->db;
 
-       assert(pParse->updated_space != NULL && pParse->pToplevel != NULL);
+       assert(pParse->triggered_space != NULL && pParse->pToplevel != NULL);
        assert(pStepList);
        assert(v != 0);
 
@@ -799,7 +799,7 @@ sql_row_trigger_program(struct Parse *parser, struct sql_trigger *trigger,
        sql_parser_create(pSubParse, db);
        memset(&sNC, 0, sizeof(sNC));
        sNC.pParse = pSubParse;
-       pSubParse->updated_space = space;
+       pSubParse->triggered_space = space;
        pSubParse->pToplevel = pTop;
        pSubParse->eTriggerOp = trigger->op;
        pSubParse->nQueryLoop = parser->nQueryLoop;
diff --git a/src/box/sql/update.c b/src/box/sql/update.c
index a7affa954..5eb1437ab 100644
--- a/src/box/sql/update.c
+++ b/src/box/sql/update.c
@@ -295,7 +295,7 @@ sqlite3Update(Parse * pParse,               /* The parser context */
        /* Initialize the count of updated rows
         */
        if ((user_session->sql_flags & SQLITE_CountRows)
-           && pParse->updated_space == NULL) {
+           && pParse->triggered_space == NULL) {
                regRowCount = ++pParse->nMem;
                sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount);
        }
@@ -503,7 +503,7 @@ sqlite3Update(Parse * pParse,               /* The parser context */
        /* Increment the row counter
         */
        if ((user_session->sql_flags & SQLITE_CountRows)
-           && pParse->updated_space == NULL) {
+           && pParse->triggered_space == NULL) {
                sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1);
        }
 
@@ -525,7 +525,7 @@ sqlite3Update(Parse * pParse,               /* The parser context */
 
        /* Return the number of rows that were changed. */
        if (user_session->sql_flags & SQLITE_CountRows &&
-           pParse->updated_space == NULL) {
+           pParse->triggered_space == NULL) {
                sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
                sqlite3VdbeSetNumCols(v, 1);
                sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows updated",

  reply	other threads:[~2019-02-11 17:58 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-28  9:54 [tarantool-patches] " Ivan Koptelov
2019-01-29 14:59 ` [tarantool-patches] " n.pettik
2019-02-01 11:05   ` Ivan Koptelov
2019-02-04 19:22     ` n.pettik
2019-02-06 17:17       ` [tarantool-patches] " i.koptelov
2019-02-11 17:58         ` n.pettik [this message]
2019-02-12 13:55           ` [tarantool-patches] " i.koptelov
2019-02-12 14:56             ` n.pettik
2019-02-12 15:07               ` i.koptelov
2019-02-15 14:47 ` Kirill Yukhin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7CB3BC6E-B4CF-4EE0-BFB7-F5E7CFF89947@tarantool.org \
    --to=korablev@tarantool.org \
    --cc=ivan.koptelov@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --subject='[tarantool-patches] Re: [PATCH] sql: remove struct Table' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox