From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> To: Kirill Shcherbatov <kshcherbatov@tarantool.org>, tarantool-patches@freelists.org Subject: [tarantool-patches] Re: [PATCH v5 2/3] sql: remove SQL fields from Table and Column Date: Mon, 14 May 2018 16:39:22 +0300 [thread overview] Message-ID: <f3eda3b5-5f77-42be-1853-6730faed1b95@tarantool.org> (raw) In-Reply-To: <7204bccd-3e12-f063-6717-3bbb95e2d570@tarantool.org> Hello. Thanks for fixes. See below 11 comments. > > /** > - * Create and initialize a new ephemeric space_def object. > + * Create and initialize a new ephemeral space_def object. > >> 8. In the function body: "/* All allocations are on region. */". >> Please, fix the comment. > > @@ -1742,8 +1743,6 @@ int > sql_table_def_rebuild(struct sqlite3 *db, struct Table *pTable) > { > assert(pTable->def->opts.temporary); > - > - /* All allocations are on region. */ 1. Wrong fix. As I can see sql_table_def_rebuild does not depend on allocation way of its arguments. So the function declaration comment must be fixed too. And please, do not skip my comments (you skipped 9, 13, ...). > >> 16. Out of 80 symbols. >> 17. Missed diag_set + pParse->nErr + pParse->rc. > @@ -667,12 +654,18 @@ sqlite3AddColumn(Parse * pParse, Token * pName, Token * pType) > return; > } > #endif > - if (sql_field_retrieve(pParse, p, (uint32_t) p->def->field_count) == NULL) > + if (sql_field_retrieve(pParse, p, > + (uint32_t) p->def->field_count) == NULL) > return; > struct region *region = &fiber()->gc; > z = region_alloc(region, pName->n + 1); > - if (z == 0) > + if (z == NULL) { > + diag_set(OutOfMemory, pName->n + 1, > + "region_alloc", "sqlite3AddColumn"); 2. OutOfMemory takes variable name in the last argument. Not caller function name. >> 19. Lets use diag + SQL_TARANTOOL_ERROR. >> 20. Why do you case to char*? zStart is already const char* and strncpy takes it ok > @@ -876,11 +869,14 @@ sqlite3AddDefaultValue(Parse * pParse, ExprSpan * pSpan) > field->default_value = region_alloc(region, > default_length + 1); > if (field->default_value == NULL) { > - pParse->rc = SQLITE_NOMEM_BKPT; > + diag_set(OutOfMemory, default_length + 1, > + "region_alloc", > + "sqlite3AddDefaultValue"); 3. Same. > >> 21. It is simpler and shorter to return coll_by_id() with no saving >> into the variable. 4. Looks like you removed sql_column_collation. It would be good to see the diff under the comment. >> 22. On error pTable->def is not reset, so here you would delete actually >> old pTable->def, that is on a region. Do this space_def_delete in 'else' branch. > @@ -2142,13 +2136,16 @@ sqlite3ViewGetColumnNames(Parse * pParse, Table * pTable) > * normally holds CHECK constraints on an ordinary table, but for > * a VIEW it holds the list of column names. > */ > - sqlite3ColumnsFromExprList(pParse, pTable->pCheck, pTable); > struct space_def *old_def = pTable->def; > - /* Delete it manually. */ > + /* Manage def memory manually. */ > old_def->opts.temporary = true; > - if (sql_table_def_rebuild(db, pTable) != 0) > + sqlite3ColumnsFromExprList(pParse, pTable->pCheck, pTable); 5. Out of 80 symbols. Please, do self-review of a patch before sending. 6. I looked at sqlite3ColumnsFromExprList, and looks like it does not use opts.temporary flag. So you can remove this opts.temporary flag manipulation, it is not? Below you skipped 5 comments in row(( >> + struct space_def *old_def = pTable->def; >> + struct space_def *new_def = NULL; > 23. Useless initialization - you reset this variable on the next line. Here I meant this: diff --git a/src/box/sql/build.c b/src/box/sql/build.c index 33815b8a6..8c7e9d646 100644 --- a/src/box/sql/build.c +++ b/src/box/sql/build.c @@ -2133,8 +2133,7 @@ sqlite3ViewGetColumnNames(Parse * pParse, Table * pTable) assert(pSelTab->def->opts.temporary); struct space_def *old_def = pTable->def; - struct space_def *new_def; - new_def = + struct space_def *new_def = sql_ephemeral_space_def_new(pParse, old_def->name); if (new_def == NULL) { >> 29. Please, do not wrap '->'. And it is out of 80 symbols anyway. > @@ -2997,8 +3001,8 @@ sqlite3CreateIndex(Parse * pParse, /* All information about this parse */ > if (pList == 0) { > Token prevCol; > sqlite3TokenInit(&prevCol, > - pTab->def-> > - fields[pTab->def->field_count - 1].name); > + pTab->def->fields[ > + pTab->def->field_count - 1].name); 7. Apply this: @@ -2971,10 +2970,9 @@ sqlite3CreateIndex(Parse * pParse, /* All information about this parse */ */ if (pList == 0) { Token prevCol; - sqlite3TokenInit(&prevCol, - pTab->def->fields[ - pTab->def->field_count - 1]. - name); + struct field_def *field = + &pTab->def->fields[pTab->def->field_count - 1]; + sqlite3TokenInit(&prevCol, field->name); pList = sqlite3ExprListAppend(pParse, 0, sqlite3ExprAlloc(db, TK_ID, &prevCol, 0)); > >> 38. region_alloc can fail - set >> sqlite3OomFault(). > struct region *region = &fiber()->gc; > pTable->def->fields = > region_alloc(region, nCol * sizeof(pTable->def->fields[0])); > + if (pTable->def->fields == NULL) { > + sqlite3OomFault(db); > + goto cleanup; > + } > memset(pTable->def->fields, 0, nCol * sizeof(pTable->def->fields[0])); > /* NULL nullable_action should math is_nullable flag. */ > for (int i = 0; i < nCol; i++) > @@ -1899,6 +1903,7 @@ sqlite3ColumnsFromExprList(Parse * pParse, /* Parsing context */ > pTable->def->fields[i].name[name_len] = '\0'; > } > } > +cleanup: 8. When you added cleanup label, you can reuse it for another OOM on line 1904. 9. Please, do not ignore comments. >> - *pnCol = 0; >> - return SQLITE_NOMEM_BKPT; >> + pTable->def->fields = NULL; >> + pTable->def->field_count = 0; >39. pTable->def is on region and is not deleted together with table. You >can skip this cleaning. Looks like it can be on malloc sometimes, so you should write a comment about it - why do you need this cleaning. >> 40. Out of 66. >> 41. Will *be* overwritten. >> 42. Same in the previous review - please, start a sentence from a capital >> letter, and finish with dot. > - /* Will overwritten with pointer as unique identifier. */ > + /* > + * Will be overwritten with pointer as unique > + * identifier. > + * */ 10. Still out of 66. And wrong end: '* */' must be '*/'. > const char *name = "sqlite_sq_DEADBEAFDEADBEAF"; > pFrom->pTab = pTab = > sql_ephemeral_table_new(pParse, name); > if (pTab == NULL) > return WRC_Abort; > - /* rewrite old name with correct pointer */ > + /* Rewrite old name with correct pointer. */ 11. Out of 66.
next prev parent reply other threads:[~2018-05-14 13:39 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-05-11 8:49 [tarantool-patches] [PATCH v5 0/3] sql: refactor SQL Parser structures Kirill Shcherbatov 2018-05-11 8:49 ` [tarantool-patches] [PATCH v5 1/3] sql: fix code style in sqlite3Pragma Kirill Shcherbatov 2018-05-11 20:59 ` [tarantool-patches] " Vladislav Shpilevoy 2018-05-11 8:49 ` [tarantool-patches] [PATCH v5 2/3] sql: remove SQL fields from Table and Column Kirill Shcherbatov 2018-05-11 20:59 ` [tarantool-patches] " Vladislav Shpilevoy 2018-05-14 11:20 ` Kirill Shcherbatov 2018-05-14 13:39 ` Vladislav Shpilevoy [this message] 2018-05-15 15:56 ` Kirill Shcherbatov 2018-05-11 8:49 ` [tarantool-patches] [PATCH v5 3/3] sql: space_def* instead of Table* in Expr Kirill Shcherbatov 2018-05-11 20:59 ` [tarantool-patches] " Vladislav Shpilevoy 2018-05-14 11:20 ` Kirill Shcherbatov 2018-05-11 8:58 ` [tarantool-patches] Re: [PATCH v5 0/3] sql: refactor SQL Parser structures Vladislav Shpilevoy 2018-05-11 19:40 ` [tarantool-patches] Re[2]: [tarantool-patches] " Kirill Shcherbatov
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=f3eda3b5-5f77-42be-1853-6730faed1b95@tarantool.org \ --to=v.shpilevoy@tarantool.org \ --cc=kshcherbatov@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='[tarantool-patches] Re: [PATCH v5 2/3] sql: remove SQL fields from Table and Column' \ /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