[Tarantool-patches] [PATCH v4 02/53] sql: disable unused code in sql/analyze.c
imeevma at tarantool.org
imeevma at tarantool.org
Tue Mar 23 12:34:42 MSK 2021
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
More information about the Tarantool-patches
mailing list