From: Mergen Imeev via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: v.shpilevoy@tarantool.org, tsafin@tarantool.org Cc: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH v5 02/52] sql: disable unused code in sql/analyze.c Date: Fri, 9 Apr 2021 19:51:30 +0300 [thread overview] Message-ID: <5b13ff9c8a9ba5127e6660af564bc03632a63ded.1617984948.git.imeevma@gmail.com> (raw) In-Reply-To: <cover.1617984948.git.imeevma@gmail.com> This patch disables unused code in sql/analyze.c. It will simplify refactoring. Needed for #5818 --- src/box/sql.c | 95 +++++++++++++++++++++++++++++++++++-------- src/box/sql.h | 8 ---- src/box/sql/analyze.c | 81 ++---------------------------------- src/box/sql/vdbe.c | 3 ++ 4 files changed, 84 insertions(+), 103 deletions(-) diff --git a/src/box/sql.c b/src/box/sql.c index 3b53abcdb..aa91f003f 100644 --- a/src/box/sql.c +++ b/src/box/sql.c @@ -78,24 +78,6 @@ sql_init(void) assert(db != NULL); } -void -sql_load_schema(void) -{ - assert(db->init.busy == 0); - struct space *stat = space_by_name("_sql_stat1"); - assert(stat != NULL); - if (stat->def->field_count == 0) - return; - db->init.busy = 1; - if (sql_analysis_load(db) != 0) { - if(!diag_is_empty(&fiber()->diag)) { - diag_log(); - } - panic("failed to initialize SQL subsystem"); - } - db->init.busy = 0; -} - sql * sql_get(void) { @@ -1317,3 +1299,80 @@ vdbe_field_ref_prepare_tuple(struct vdbe_field_ref *field_ref, vdbe_field_ref_create(field_ref, tuple, tuple_data(tuple), tuple->bsize); } + +ssize_t +sql_index_tuple_size(struct space *space, struct index *idx) +{ + assert(space != NULL); + assert(idx != NULL); + assert(idx->def->space_id == space->def->id); + ssize_t tuple_count = index_size(idx); + ssize_t space_size = space_bsize(space); + ssize_t avg_tuple_size = tuple_count != 0 ? + (space_size / tuple_count) : 0; + return avg_tuple_size; +} + +/** + * default_tuple_est[] array contains default information + * which is used when we don't have real space, e.g. temporary + * objects representing result set of nested SELECT or VIEW. + * + * First number is supposed to contain the number of elements + * in the index. Since we do not know, guess 1 million. + * Second one is an estimate of the number of rows in the + * table that match any particular value of the first column of + * the index. Third one is an estimate of the number of + * rows that match any particular combination of the first 2 + * columns of the index. And so on. It must always be true: + * + * default_tuple_est[N] <= default_tuple_est[N-1] + * default_tuple_est[N] >= 1 + * + * Apart from that, we have little to go on besides intuition + * as to how default values should be initialized. The numbers + * generated here are based on typical values found in actual + * indices. + */ +const log_est_t default_tuple_est[] = {DEFAULT_TUPLE_LOG_COUNT, +/** [10*log_{2}(x)]: 10, 9, 8, 7, 6, 5 */ + 33, 32, 30, 28, 26, 23}; + +LogEst +sql_space_tuple_log_count(struct space *space) +{ + if (space == NULL || space->index_map == NULL) + return 0; + + struct index *pk = space_index(space, 0); + assert(sqlLogEst(DEFAULT_TUPLE_COUNT) == DEFAULT_TUPLE_LOG_COUNT); + /* If space represents VIEW, return default number. */ + if (pk == NULL) + return DEFAULT_TUPLE_LOG_COUNT; + return sqlLogEst(pk->vtab->size(pk)); +} + +log_est_t +index_field_tuple_est(const struct index_def *idx_def, uint32_t field) +{ + assert(idx_def != NULL); + struct space *space = space_by_id(idx_def->space_id); + if (space == NULL || strcmp(idx_def->name, "fake_autoindex") == 0) + return idx_def->opts.stat->tuple_log_est[field]; + assert(field <= idx_def->key_def->part_count); + /* Statistics is held only in real indexes. */ + struct index *tnt_idx = space_index(space, idx_def->iid); + assert(tnt_idx != NULL); + if (tnt_idx->def->opts.stat == NULL) { + /* + * Last number for unique index is always 0: + * only one tuple exists with given full key + * in unique index and log(1) == 0. + */ + if (field == idx_def->key_def->part_count && + idx_def->opts.is_unique) + return 0; + return default_tuple_est[field + 1 >= 6 ? 6 : field]; + } + return tnt_idx->def->opts.stat->tuple_log_est[field]; +} diff --git a/src/box/sql.h b/src/box/sql.h index f56f7a1f1..4c364306c 100644 --- a/src/box/sql.h +++ b/src/box/sql.h @@ -41,14 +41,6 @@ extern "C" { void sql_init(void); -/** - * Initialize SQL statistic system. - * - * Currently unused. - */ -void -sql_load_schema(void); - /** * struct sql * * sql_get(); diff --git a/src/box/sql/analyze.c b/src/box/sql/analyze.c index f74f9b358..a015f70cb 100644 --- a/src/box/sql/analyze.c +++ b/src/box/sql/analyze.c @@ -116,6 +116,8 @@ #include "tarantoolInt.h" #include "vdbeInt.h" +#if 0 + /** * This routine generates code that opens the sql_stat1/4 tables. * If the sql_statN tables do not previously exist, they are @@ -1114,19 +1116,6 @@ sqlAnalyze(Parse * pParse, Token * pName) sqlVdbeAddOp0(v, OP_Expire); } -ssize_t -sql_index_tuple_size(struct space *space, struct index *idx) -{ - assert(space != NULL); - assert(idx != NULL); - assert(idx->def->space_id == space->def->id); - ssize_t tuple_count = index_size(idx); - ssize_t space_size = space_bsize(space); - ssize_t avg_tuple_size = tuple_count != 0 ? - (space_size / tuple_count) : 0; - return avg_tuple_size; -} - /** * Used to pass information from the analyzer reader through * to the callback routine. @@ -1538,70 +1527,6 @@ load_stat_to_index(const char *sql_select_load, struct index_stat **stats) return 0; } -/** - * default_tuple_est[] array contains default information - * which is used when we don't have real space, e.g. temporary - * objects representing result set of nested SELECT or VIEW. - * - * First number is supposed to contain the number of elements - * in the index. Since we do not know, guess 1 million. - * Second one is an estimate of the number of rows in the - * table that match any particular value of the first column of - * the index. Third one is an estimate of the number of - * rows that match any particular combination of the first 2 - * columns of the index. And so on. It must always be true: - * - * default_tuple_est[N] <= default_tuple_est[N-1] - * default_tuple_est[N] >= 1 - * - * Apart from that, we have little to go on besides intuition - * as to how default values should be initialized. The numbers - * generated here are based on typical values found in actual - * indices. - */ -const log_est_t default_tuple_est[] = {DEFAULT_TUPLE_LOG_COUNT, -/** [10*log_{2}(x)]: 10, 9, 8, 7, 6, 5 */ - 33, 32, 30, 28, 26, 23}; - -LogEst -sql_space_tuple_log_count(struct space *space) -{ - if (space == NULL || space->index_map == NULL) - return 0; - - struct index *pk = space_index(space, 0); - assert(sqlLogEst(DEFAULT_TUPLE_COUNT) == DEFAULT_TUPLE_LOG_COUNT); - /* If space represents VIEW, return default number. */ - if (pk == NULL) - return DEFAULT_TUPLE_LOG_COUNT; - return sqlLogEst(pk->vtab->size(pk)); -} - -log_est_t -index_field_tuple_est(const struct index_def *idx_def, uint32_t field) -{ - assert(idx_def != NULL); - struct space *space = space_by_id(idx_def->space_id); - if (space == NULL || strcmp(idx_def->name, "fake_autoindex") == 0) - return idx_def->opts.stat->tuple_log_est[field]; - assert(field <= idx_def->key_def->part_count); - /* Statistics is held only in real indexes. */ - struct index *tnt_idx = space_index(space, idx_def->iid); - assert(tnt_idx != NULL); - if (tnt_idx->def->opts.stat == NULL) { - /* - * Last number for unique index is always 0: - * only one tuple exists with given full key - * in unique index and log(1) == 0. - */ - if (field == idx_def->key_def->part_count && - idx_def->opts.is_unique) - return 0; - return default_tuple_est[field + 1 >= 6 ? 6 : field]; - } - return tnt_idx->def->opts.stat->tuple_log_est[field]; -} - /** * This function performs copy of statistics. * In contrast to index_stat_dup(), there is no assumption @@ -1744,3 +1669,5 @@ fail: box_txn_rollback(); return -1; } + +#endif diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c index 9a4f38bb9..4c1cd582b 100644 --- a/src/box/sql/vdbe.c +++ b/src/box/sql/vdbe.c @@ -4825,8 +4825,11 @@ case OP_RenameTable: { */ case OP_LoadAnalysis: { assert(pOp->p1==0 ); + /* TODO: Enable analysis. */ + /* if (sql_analysis_load(db) != 0) goto abort_due_to_error; + */ break; } -- 2.25.1
next prev parent reply other threads:[~2021-04-09 16:52 UTC|newest] Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-09 16:51 [Tarantool-patches] [PATCH v5 00/52] Move mem-related functions to mem.c/mem.h Mergen Imeev via Tarantool-patches 2021-04-09 16:51 ` [Tarantool-patches] [PATCH v5 01/52] sql: enhance vdbe_decode_msgpack_into_mem() Mergen Imeev via Tarantool-patches 2021-04-11 17:42 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 12:01 ` Mergen Imeev via Tarantool-patches 2021-04-13 12:12 ` Mergen Imeev via Tarantool-patches 2021-04-13 23:22 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 23:34 ` Mergen Imeev via Tarantool-patches 2021-04-09 16:51 ` Mergen Imeev via Tarantool-patches [this message] 2021-04-09 16:51 ` [Tarantool-patches] [PATCH v5 03/52] sql: disable unused code in sql/legacy.c Mergen Imeev via Tarantool-patches 2021-04-09 16:51 ` [Tarantool-patches] [PATCH v5 04/52] sql: remove NULL-termination in OP_ResultRow Mergen Imeev via Tarantool-patches 2021-04-14 22:23 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 22:37 ` Mergen Imeev via Tarantool-patches 2021-04-09 16:51 ` [Tarantool-patches] [PATCH v5 05/52] sql: move MEM-related functions to mem.c/mem.h Mergen Imeev via Tarantool-patches 2021-04-09 16:59 ` [Tarantool-patches] [PATCH v5 06/52] sql: refactor port_vdbemem_*() functions Mergen Imeev via Tarantool-patches 2021-04-09 16:59 ` [Tarantool-patches] [PATCH v5 07/52] sql: remove unused MEM-related functions Mergen Imeev via Tarantool-patches 2021-04-09 16:59 ` [Tarantool-patches] [PATCH v5 08/52] sql: disable unused code in sql/vdbemem.c Mergen Imeev via Tarantool-patches 2021-04-09 16:59 ` [Tarantool-patches] [PATCH v5 09/52] sql: introduce mem_str() Mergen Imeev via Tarantool-patches 2021-04-11 17:44 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 12:36 ` Mergen Imeev via Tarantool-patches 2021-04-14 22:23 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 22:42 ` Mergen Imeev via Tarantool-patches 2021-04-09 16:59 ` [Tarantool-patches] [PATCH v5 10/52] sql: introduce mem_create() Mergen Imeev via Tarantool-patches 2021-04-09 17:36 ` [Tarantool-patches] [PATCH v5 11/52] sql: introduce mem_destroy() Mergen Imeev via Tarantool-patches 2021-04-11 17:46 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 12:42 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:36 ` [Tarantool-patches] [PATCH v5 12/52] sql: introduce mem_is_*() functions() Mergen Imeev via Tarantool-patches 2021-04-11 17:59 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 16:09 ` Mergen Imeev via Tarantool-patches 2021-04-14 22:48 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 23:07 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:36 ` [Tarantool-patches] [PATCH v5 13/52] sql: introduce mem_copy() Mergen Imeev via Tarantool-patches 2021-04-11 18:06 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 16:18 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:36 ` [Tarantool-patches] [PATCH v5 14/52] sql: introduce mem_copy_as_ephemeral() Mergen Imeev via Tarantool-patches 2021-04-11 18:10 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 16:31 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:37 ` [Tarantool-patches] [PATCH v5 15/52] sql: rework mem_move() Mergen Imeev via Tarantool-patches 2021-04-11 18:10 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 16:38 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:57 ` [Tarantool-patches] [PATCH v5 16/52] sql: rework vdbe_decode_msgpack_into_mem() Mergen Imeev via Tarantool-patches 2021-04-09 17:57 ` [Tarantool-patches] [PATCH v5 17/52] sql: remove sql_column_to_messagepack() Mergen Imeev via Tarantool-patches 2021-04-14 22:58 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 23:14 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:57 ` [Tarantool-patches] [PATCH v5 18/52] sql: introduce mem_concat() Mergen Imeev via Tarantool-patches 2021-04-11 18:11 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 16:57 ` Mergen Imeev via Tarantool-patches 2021-04-14 23:04 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 23:22 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:57 ` [Tarantool-patches] [PATCH v5 19/52] sql: introduce arithmetic operations for MEM Mergen Imeev via Tarantool-patches 2021-04-11 18:13 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 17:06 ` Mergen Imeev via Tarantool-patches 2021-04-14 23:10 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 23:33 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:57 ` [Tarantool-patches] [PATCH v5 20/52] sql: introduce mem_compare() Mergen Imeev via Tarantool-patches 2021-04-11 18:16 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 18:33 ` Mergen Imeev via Tarantool-patches 2021-04-14 23:20 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 23:40 ` Mergen Imeev via Tarantool-patches 2021-04-09 18:11 ` [Tarantool-patches] [PATCH v5 21/52] sql: introduce bitwise operations for MEM Mergen Imeev via Tarantool-patches 2021-04-12 23:31 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 20:49 ` Mergen Imeev via Tarantool-patches 2021-04-09 18:11 ` [Tarantool-patches] [PATCH v5 22/52] sql: Initialize MEM in sqlVdbeAllocUnpackedRecord() Mergen Imeev via Tarantool-patches 2021-04-09 18:11 ` [Tarantool-patches] [PATCH v5 23/52] sql: introduce mem_set_null() Mergen Imeev via Tarantool-patches 2021-04-09 18:11 ` [Tarantool-patches] [PATCH v5 24/52] sql: introduce mem_set_int() Mergen Imeev via Tarantool-patches 2021-04-12 23:32 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 20:56 ` Mergen Imeev via Tarantool-patches 2021-04-09 18:11 ` [Tarantool-patches] [PATCH v5 25/52] sql: introduce mem_set_uint() Mergen Imeev via Tarantool-patches 2021-04-09 19:45 ` [Tarantool-patches] [PATCH v5 26/52] sql: move mem_set_bool() and mem_set_double() Mergen Imeev via Tarantool-patches 2021-04-09 19:45 ` [Tarantool-patches] [PATCH v5 27/52] sql: introduce mem_set_str_*() functions Mergen Imeev via Tarantool-patches 2021-04-12 23:34 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 21:36 ` Mergen Imeev via Tarantool-patches 2021-04-14 23:49 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-15 1:25 ` Mergen Imeev via Tarantool-patches 2021-04-09 19:45 ` [Tarantool-patches] [PATCH v5 28/52] sql: introduce mem_copy_str() and mem_copy_str0() Mergen Imeev via Tarantool-patches 2021-04-12 23:35 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:00 ` Mergen Imeev via Tarantool-patches 2021-04-14 23:54 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-15 0:30 ` Mergen Imeev via Tarantool-patches 2021-04-09 19:45 ` [Tarantool-patches] [PATCH v5 29/52] sql: introduce mem_set_bin_*() functions Mergen Imeev via Tarantool-patches 2021-04-09 19:45 ` [Tarantool-patches] [PATCH v5 30/52] sql: introduce mem_copy_bin() Mergen Imeev via Tarantool-patches 2021-04-12 23:36 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:06 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:05 ` [Tarantool-patches] [PATCH v5 31/52] sql: introduce mem_set_zerobin() Mergen Imeev via Tarantool-patches 2021-04-09 20:05 ` [Tarantool-patches] [PATCH v5 32/52] sql: introduce mem_set_*() for map and array Mergen Imeev via Tarantool-patches 2021-04-12 23:36 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:08 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:05 ` [Tarantool-patches] [PATCH v5 33/52] sql: introduce mem_set_invalid() Mergen Imeev via Tarantool-patches 2021-04-09 20:05 ` [Tarantool-patches] [PATCH v5 34/52] sql: refactor mem_set_ptr() Mergen Imeev via Tarantool-patches 2021-04-09 20:05 ` [Tarantool-patches] [PATCH v5 35/52] sql: introduce mem_set_frame() Mergen Imeev via Tarantool-patches 2021-04-12 23:37 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:19 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:25 ` [Tarantool-patches] [PATCH v5 36/52] sql: introduce mem_set_agg() Mergen Imeev via Tarantool-patches 2021-04-12 23:37 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:46 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:25 ` [Tarantool-patches] [PATCH v5 37/52] sql: introduce mem_set_null_clear() Mergen Imeev via Tarantool-patches 2021-04-12 23:38 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:50 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:25 ` [Tarantool-patches] [PATCH v5 38/52] sql: move MEM flags to mem.c Mergen Imeev via Tarantool-patches 2021-04-13 20:42 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:25 ` [Tarantool-patches] [PATCH v5 39/52] sql: introduce mem_to_int*() functions Mergen Imeev via Tarantool-patches 2021-04-12 23:39 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:58 ` Mergen Imeev via Tarantool-patches 2021-04-13 23:10 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:26 ` [Tarantool-patches] [PATCH v5 40/52] sql: introduce mem_to_double() Mergen Imeev via Tarantool-patches 2021-04-13 23:21 ` Mergen Imeev via Tarantool-patches 2021-04-15 0:39 ` [Tarantool-patches] [PATCH v5 00/52] Move mem-related functions to mem.c/mem.h Vladislav Shpilevoy via Tarantool-patches 2021-04-15 6:49 ` Kirill Yukhin via Tarantool-patches
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=5b13ff9c8a9ba5127e6660af564bc03632a63ded.1617984948.git.imeevma@gmail.com \ --to=tarantool-patches@dev.tarantool.org \ --cc=imeevma@tarantool.org \ --cc=tsafin@tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v5 02/52] sql: disable unused code in sql/analyze.c' \ /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