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",
next prev parent 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