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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list