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

Reply via email to