Changeset: 772cef5960c2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/772cef5960c2 Modified Files: sql/backends/monet5/sql.c sql/backends/monet5/sql_statistics.c sql/scripts/80_statistics.sql sql/server/rel_psm.c Branch: analyze-fix Log Message:
Removed "minmax" and "sample" parameters from analyze diffs (217 lines): diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -5268,10 +5268,10 @@ static mel_func sql_init_funcs[] = { pattern("sql", "dump_cache", dump_cache, false, "dump the content of the query cache", args(2,2, batarg("query",str),batarg("count",int))), pattern("sql", "dump_opt_stats", dump_opt_stats, false, "dump the optimizer rewrite statistics", args(2,2, batarg("rewrite",str),batarg("count",int))), pattern("sql", "dump_trace", dump_trace, false, "dump the trace statistics", args(3,3, batarg("ticks",lng),batarg("stmt",str),batarg("stmt",str))), - pattern("sql", "analyze", sql_analyze, true, "", args(1,3, arg("",void),arg("minmax",int),arg("sample",lng))), - pattern("sql", "analyze", sql_analyze, true, "", args(1,4, arg("",void),arg("minmax",int),arg("sample",lng),arg("sch",str))), - pattern("sql", "analyze", sql_analyze, true, "", args(1,5, arg("",void),arg("minmax",int),arg("sample",lng),arg("sch",str),arg("tbl",str))), - pattern("sql", "analyze", sql_analyze, true, "Update the database statistics table", args(1,6, arg("",void),arg("minmax",int),arg("sample",lng),arg("sch",str),arg("tbl",str),arg("col",str))), + pattern("sql", "analyze", sql_analyze, true, "Update statistics for every column in the database", args(1,1, arg("",void))), + pattern("sql", "analyze", sql_analyze, true, "Update statistics for schema", args(1,2, arg("",void),arg("sch",str))), + pattern("sql", "analyze", sql_analyze, true, "Update statistics for table", args(1,3, arg("",void),arg("sch",str),arg("tbl",str))), + pattern("sql", "analyze", sql_analyze, true, "Update statistics for column", args(1,4, arg("",void),arg("sch",str),arg("tbl",str),arg("col",str))), pattern("sql", "storage", sql_storage, false, "return a table with storage information ", args(17,17, batarg("schema",str),batarg("table",str),batarg("column",str),batarg("type",str),batarg("mode",str),batarg("location",str),batarg("count",lng),batarg("atomwidth",int),batarg("columnsize",lng),batarg("heap",lng),batarg("hashes",lng),batarg("phash",bit),batarg("imprints",lng),batarg("sorted",bit),batarg("revsorted",bit),batarg("key",bit),batarg("orderidx",lng))), pattern("sql", "storage", sql_storage, false, "return a table with storage information for a particular schema ", args(17,18, batarg("schema",str),batarg("table",str),batarg("column",str),batarg("type",str),batarg("mode",str),batarg("location",str),batarg("count",lng),batarg("atomwidth",int),batarg("columnsize",lng),batarg("heap",lng),batarg("hashes",lng),batarg("phash",bit),batarg("imprints",lng),batarg("sorted",bit),batarg("revsorted",bit),batarg("key",bit),batarg("orderidx",lng),arg("sname",str))), pattern("sql", "storage", sql_storage, false, "return a table with storage information for a particular table", args(17,19, batarg("schema",str),batarg("table",str),batarg("column",str),batarg("type",str),batarg("mode",str),batarg("location",str),batarg("count",lng),batarg("atomwidth",int),batarg("columnsize",lng),batarg("heap",lng),batarg("hashes",lng),batarg("phash",bit),batarg("imprints",lng),batarg("sorted",bit),batarg("revsorted",bit),batarg("key",bit),batarg("orderidx",lng),arg("sname",str),arg("tname",str))), diff --git a/sql/backends/monet5/sql_statistics.c b/sql/backends/monet5/sql_statistics.c --- a/sql/backends/monet5/sql_statistics.c +++ b/sql/backends/monet5/sql_statistics.c @@ -28,9 +28,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb, str msg = getSQLContext(cntxt, mb, &m, NULL); sql_trans *tr = m->session->tr; str sch = 0, tbl = 0, col = 0; - lng samplesize = *getArgReference_lng(stk, pci, 2); int argc = pci->argc, sfnd = 0, tfnd = 0, cfnd = 0; - int minmax = *getArgReference_int(stk, pci, 1); sql_schema *sys; sql_table *sysstats; sql_column *statsid; @@ -49,23 +47,23 @@ sql_analyze(Client cntxt, MalBlkPtr mb, throw(SQL, "sql.analyze", SQLSTATE(3F000) "Internal error: No table sys.statistics"); switch (argc) { - case 6: - col = *getArgReference_str(stk, pci, 5); + case 4: + col = *getArgReference_str(stk, pci, 3); if (strNil(col)) throw(SQL, "sql.analyze", SQLSTATE(42000) "Column name cannot be NULL"); /* fall through */ - case 5: - tbl = *getArgReference_str(stk, pci, 4); + case 3: + tbl = *getArgReference_str(stk, pci, 2); if (strNil(tbl)) throw(SQL, "sql.analyze", SQLSTATE(42000) "Table name cannot be NULL"); /* fall through */ - case 4: - sch = *getArgReference_str(stk, pci, 3); + case 2: + sch = *getArgReference_str(stk, pci, 1); if (strNil(sch)) throw(SQL, "sql.analyze", SQLSTATE(42000) "Schema name cannot be NULL"); } - TRC_DEBUG(SQL_PARSER, "analyze %s.%s.%s sample " LLFMT "%s\n", (sch ? sch : ""), (tbl ? tbl : " "), (col ? col : " "), samplesize, (minmax)?"MinMax":""); + TRC_DEBUG(SQL_PARSER, "analyze %s.%s.%s\n", (sch ? sch : ""), (tbl ? tbl : " "), (col ? col : " ")); /* Do all the validations before doing any analyze */ struct os_iter si; @@ -87,9 +85,9 @@ sql_analyze(Client cntxt, MalBlkPtr mb, continue; tfnd = 1; if (tbl && !isTable(t)) - throw(SQL, "analyze", SQLSTATE(42S02) "%s '%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, t->properties), t->base.name); + throw(SQL, "sql.analyze", SQLSTATE(42S02) "%s '%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, t->properties), t->base.name); if (!table_privs(m, t, PRIV_SELECT)) - throw(SQL, "analyze", SQLSTATE(42000) "ANALYZE: access denied for %s to table '%s.%s'", + throw(SQL, "sql.analyze", SQLSTATE(42000) "ANALYZE: access denied for %s to table '%s.%s'", get_string_global_var(m, "current_user"), t->s->base.name, t->base.name); if (isTable(t) && ol_first_node(t->columns)) { for (node *ncol = ol_first_node((t)->columns); ncol; ncol = ncol->next) { @@ -99,18 +97,18 @@ sql_analyze(Client cntxt, MalBlkPtr mb, continue; cfnd = 1; if (!column_privs(m, c, PRIV_SELECT)) - throw(SQL, "analyze", SQLSTATE(42000) "ANALYZE: access denied for %s to column '%s' on table '%s.%s'", + throw(SQL, "sql.analyze", SQLSTATE(42000) "ANALYZE: access denied for %s to column '%s' on table '%s.%s'", get_string_global_var(m, "current_user"), c->base.name, t->s->base.name, t->base.name); } } } } if (sch && !sfnd) - throw(SQL, "analyze", SQLSTATE(3F000) "Schema '%s' does not exist", sch); + throw(SQL, "sql.analyze", SQLSTATE(3F000) "Schema '%s' does not exist", sch); if (tbl && !tfnd) - throw(SQL, "analyze", SQLSTATE(42S02) "Table '%s' does not exist", tbl); + throw(SQL, "sql.analyze", SQLSTATE(42S02) "Table '%s' does not exist", tbl); if (col && !cfnd) - throw(SQL, "analyze", SQLSTATE(38000) "Column '%s' does not exist", col); + throw(SQL, "sql.analyze", SQLSTATE(38000) "Column '%s' does not exist", col); sqlstore *store = tr->store; os_iterator(&si, tr->cat->schemas, tr, NULL); diff --git a/sql/scripts/80_statistics.sql b/sql/scripts/80_statistics.sql --- a/sql/scripts/80_statistics.sql +++ b/sql/scripts/80_statistics.sql @@ -8,14 +8,14 @@ -- This script gives the database administrator insight in the actual -- value distribution over all tables in the database. -create procedure sys.analyze(minmax int, "sample" bigint) +create procedure sys.analyze() external name sql.analyze; -create procedure sys.analyze(minmax int, "sample" bigint, sch string) +create procedure sys.analyze(sch string) external name sql.analyze; -create procedure sys.analyze(minmax int, "sample" bigint, sch string, tbl string) +create procedure sys.analyze(sch string, tbl string) external name sql.analyze; -create procedure sys.analyze(minmax int, "sample" bigint, sch string, tbl string, col string) +create procedure sys.analyze(sch string, tbl string, col string) external name sql.analyze; diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c --- a/sql/server/rel_psm.c +++ b/sql/server/rel_psm.c @@ -1405,30 +1405,13 @@ drop_trigger(mvc *sql, dlist *qname, int } static sql_rel * -psm_analyze(sql_query *query, char *analyzeType, dlist *qname, dlist *columns, symbol *sample, int minmax ) +psm_analyze(sql_query *query, dlist *qname, dlist *columns) { mvc *sql = query->sql; - exp_kind ek = {type_value, card_value, FALSE}; - sql_exp *sample_exp = NULL, *call, *mm_exp = NULL; const char *sname = qname_schema(qname), *tname = qname_schema_object(qname); - list *tl = sa_list(sql->sa); - list *exps = sa_list(sql->sa), *analyze_calls = sa_list(sql->sa); + list *tl = sa_list(sql->sa), *exps = sa_list(sql->sa), *analyze_calls = sa_list(sql->sa); sql_subfunc *f = NULL; - append(exps, mm_exp = exp_atom_int(sql->sa, minmax)); - append(tl, exp_subtype(mm_exp)); - if (sample) { - sql_rel *rel = NULL; - sample_exp = rel_value_exp(query, &rel, sample, sql_sel | sql_psm, ek); - psm_zero_or_one(sample_exp); - if (!sample_exp || !(sample_exp = exp_check_type(sql, sql_bind_localtype("lng"), NULL, sample_exp, type_cast))) - return NULL; - } else { - sample_exp = exp_atom_lng(sql->sa, 0); - } - append(exps, sample_exp); - append(tl, exp_subtype(sample_exp)); - if (sname && tname) { sql_table *t = NULL; @@ -1438,41 +1421,39 @@ psm_analyze(sql_query *query, char *anal return sql_error(sql, 02, SQLSTATE(42000) "Cannot analyze a declared table"); sname = t->s->base.name; } - /* call analyze( [schema, [ table ]], opt_sample_size, opt_minmax ) */ + /* call analyze( [schema, [ table ]] ) */ if (sname) { sql_exp *sname_exp = exp_atom_clob(sql->sa, sname); - append(exps, sname_exp); - append(tl, exp_subtype(sname_exp)); + list_append(exps, sname_exp); + list_append(tl, exp_subtype(sname_exp)); } if (tname) { sql_exp *tname_exp = exp_atom_clob(sql->sa, tname); - append(exps, tname_exp); - append(tl, exp_subtype(tname_exp)); + list_append(exps, tname_exp); + list_append(tl, exp_subtype(tname_exp)); if (columns) - append(tl, exp_subtype(tname_exp)); + list_append(tl, exp_subtype(tname_exp)); } if (!columns) { - if (!(f = sql_bind_func_(sql, "sys", analyzeType, tl, F_PROC))) + if (!(f = sql_bind_func_(sql, "sys", "analyze", tl, F_PROC))) return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000) "Analyze procedure missing"); - call = exp_op(sql->sa, exps, f); - append(analyze_calls, call); + list_append(analyze_calls, exp_op(sql->sa, exps, f)); } else { if (!sname || !tname) return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000) "Analyze schema or table name missing"); - if (!(f = sql_bind_func_(sql, "sys", analyzeType, tl, F_PROC))) + if (!(f = sql_bind_func_(sql, "sys", "analyze", tl, F_PROC))) return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000) "Analyze procedure missing"); for(dnode *n = columns->h; n; n = n->next) { const char *cname = n->data.sval; list *nexps = list_dup(exps, NULL); sql_exp *cname_exp = exp_atom_clob(sql->sa, cname); - append(nexps, cname_exp); + list_append(nexps, cname_exp); /* call analyze( opt_minmax, opt_sample_size, sname, tname, cname) */ - call = exp_op(sql->sa, nexps, f); - append(analyze_calls, call); + list_append(analyze_calls, exp_op(sql->sa, nexps, f)); } } return rel_psm_block(sql->sa, analyze_calls); @@ -1585,7 +1566,7 @@ rel_psm(sql_query *query, symbol *s) case SQL_ANALYZE: { dlist *l = s->data.lval; - ret = psm_analyze(query, "analyze", l->h->data.lval /* qualified table name */, l->h->next->data.lval /* opt list of column */, l->h->next->next->data.sym /* opt_sample_size */, l->h->next->next->next->data.i_val); + ret = psm_analyze(query, l->h->data.lval /* qualified table name */, l->h->next->data.lval /* opt list of column */); sql->type = Q_UPDATE; } break; default: _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list