Changeset: cacdfc6f0caa for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cacdfc6f0caa
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
Branch: Jan2022
Log Message:

Merged analyze-fix branch into Jan2022.


diffs (truncated from 7691 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -9252,10 +9252,10 @@
 [ "sql",       "affectedRows", "unsafe pattern sql.affectedRows(X_0:int, 
X_1:lng):int ",       "mvc_affected_rows_wrap;",      "export the number of 
affected rows by the current query"       ]
 [ "sql",       "all",  "pattern sql.all(X_0:bit, X_1:bit, X_2:bit):bit ",      
"SQLall_cmp;",  "if !cmp then false, (nl or nr) then nil, else true"    ]
 [ "sql",       "alpha",        "command sql.alpha(X_0:dbl, X_1:dbl):dbl ",     
"SQLcst_alpha_cst;",    "Implementation of astronomy alpha function: expands 
the radius theta depending on the declination"     ]
-[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, 
X_1:lng):void ",   "sql_analyze;", ""      ]
-[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, X_1:lng, 
X_2:str):void ",  "sql_analyze;", ""      ]
-[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, X_1:lng, 
X_2:str, X_3:str):void ", "sql_analyze;", ""      ]
-[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, X_1:lng, 
X_2:str, X_3:str, X_4:str):void ",        "sql_analyze;", "Update the database 
statistics table"  ]
+[ "sql",       "analyze",      "unsafe pattern sql.analyze():void ",   
"sql_analyze;", "Update statistics for every column in the database"    ]
+[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:str):void ",    
"sql_analyze;", "Update statistics for schema"  ]
+[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:str, 
X_1:str):void ",   "sql_analyze;", "Update statistics for table"   ]
+[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:str, X_1:str, 
X_2:str):void ",  "sql_analyze;", "Update statistics for column"  ]
 [ "sql",       "any",  "pattern sql.any(X_0:bit, X_1:bit, X_2:bit):bit ",      
"SQLany_cmp;",  "if cmp then true, (nl or nr) nil then nil, else false" ]
 [ "sql",       "append",       "pattern sql.append(X_0:int, X_1:str, X_2:str, 
X_3:str, X_4:oid, X_5:bat[:oid], X_6:any):int ", "mvc_append_wrap;",     
"Append to the column tname.cname (possibly optimized to replace the insert bat 
of tname.cname. Returns sequence number for order dependence."  ]
 [ "sql",       "argRecord",    "pattern sql.argRecord():str ", 
"SQLargRecord;",        "Glue together the calling sequence"    ]
@@ -9418,6 +9418,10 @@
 [ "sql",       "shutdown",     "unsafe pattern sql.shutdown(X_0:sht):str ",    
"SQLshutdown_wrap;",    ""      ]
 [ "sql",       "shutdown",     "unsafe pattern sql.shutdown(X_0:sht, 
X_1:bit):str ",   "SQLshutdown_wrap;",    ""      ]
 [ "sql",       "sql_variables",        "pattern sql.sql_variables() 
(X_0:bat[:str], X_1:bat[:str], X_2:bat[:str], X_3:bat[:str]) ",    
"sql_variables;",       "return the table with session variables"       ]
+[ "sql",       "statistics",   "pattern sql.statistics() (X_0:bat[:int], 
X_1:bat[:str], X_2:bat[:str], X_3:bat[:str], X_4:bat[:str], X_5:bat[:int], 
X_6:bat[:lng], X_7:bat[:bit], X_8:bat[:bit], X_9:bat[:str], X_10:bat[:str], 
X_11:bat[:bit], X_12:bat[:bit]) ",     "sql_statistics;",      "return a table 
with statistics information"    ]
+[ "sql",       "statistics",   "pattern sql.statistics(X_0:str) 
(X_1:bat[:int], X_2:bat[:str], X_3:bat[:str], X_4:bat[:str], X_5:bat[:str], 
X_6:bat[:int], X_7:bat[:lng], X_8:bat[:bit], X_9:bat[:bit], X_10:bat[:str], 
X_11:bat[:str], X_12:bat[:bit], X_13:bat[:bit]) ",     "sql_statistics;",      
"return a table with statistics information for a particular schema"    ]
+[ "sql",       "statistics",   "pattern sql.statistics(X_0:str, X_1:str) 
(X_2:bat[:int], X_3:bat[:str], X_4:bat[:str], X_5:bat[:str], X_6:bat[:str], 
X_7:bat[:int], X_8:bat[:lng], X_9:bat[:bit], X_10:bat[:bit], X_11:bat[:str], 
X_12:bat[:str], X_13:bat[:bit], X_14:bat[:bit]) ",   "sql_statistics;",      
"return a table with statistics information for a particular table"     ]
+[ "sql",       "statistics",   "pattern sql.statistics(X_0:str, X_1:str, 
X_2:str) (X_3:bat[:int], X_4:bat[:str], X_5:bat[:str], X_6:bat[:str], 
X_7:bat[:str], X_8:bat[:int], X_9:bat[:lng], X_10:bat[:bit], X_11:bat[:bit], 
X_12:bat[:str], X_13:bat[:str], X_14:bat[:bit], X_15:bat[:bit]) ", 
"sql_statistics;",      "return a table with statistics information for a 
particular column"    ]
 [ "sql",       "stdev",        "pattern sql.stdev(X_0:bte, X_1:bit, X_2:bit, 
X_3:int, X_4:oid, X_5:oid):dbl ", "SQLstddev_samp;",      "return the standard 
deviation sample of groups"        ]
 [ "sql",       "stdev",        "pattern sql.stdev(X_0:dbl, X_1:bit, X_2:bit, 
X_3:int, X_4:oid, X_5:oid):dbl ", "SQLstddev_samp;",      "return the standard 
deviation sample of groups"        ]
 [ "sql",       "stdev",        "pattern sql.stdev(X_0:flt, X_1:bit, X_2:bit, 
X_3:int, X_4:oid, X_5:oid):dbl ", "SQLstddev_samp;",      "return the standard 
deviation sample of groups"        ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -12552,10 +12552,10 @@
 [ "sql",       "affectedRows", "unsafe pattern sql.affectedRows(X_0:int, 
X_1:lng):int ",       "mvc_affected_rows_wrap;",      "export the number of 
affected rows by the current query"       ]
 [ "sql",       "all",  "pattern sql.all(X_0:bit, X_1:bit, X_2:bit):bit ",      
"SQLall_cmp;",  "if !cmp then false, (nl or nr) then nil, else true"    ]
 [ "sql",       "alpha",        "command sql.alpha(X_0:dbl, X_1:dbl):dbl ",     
"SQLcst_alpha_cst;",    "Implementation of astronomy alpha function: expands 
the radius theta depending on the declination"     ]
-[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, 
X_1:lng):void ",   "sql_analyze;", ""      ]
-[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, X_1:lng, 
X_2:str):void ",  "sql_analyze;", ""      ]
-[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, X_1:lng, 
X_2:str, X_3:str):void ", "sql_analyze;", ""      ]
-[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, X_1:lng, 
X_2:str, X_3:str, X_4:str):void ",        "sql_analyze;", "Update the database 
statistics table"  ]
+[ "sql",       "analyze",      "unsafe pattern sql.analyze():void ",   
"sql_analyze;", "Update statistics for every column in the database"    ]
+[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:str):void ",    
"sql_analyze;", "Update statistics for schema"  ]
+[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:str, 
X_1:str):void ",   "sql_analyze;", "Update statistics for table"   ]
+[ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:str, X_1:str, 
X_2:str):void ",  "sql_analyze;", "Update statistics for column"  ]
 [ "sql",       "any",  "pattern sql.any(X_0:bit, X_1:bit, X_2:bit):bit ",      
"SQLany_cmp;",  "if cmp then true, (nl or nr) nil then nil, else false" ]
 [ "sql",       "append",       "pattern sql.append(X_0:int, X_1:str, X_2:str, 
X_3:str, X_4:oid, X_5:bat[:oid], X_6:any):int ", "mvc_append_wrap;",     
"Append to the column tname.cname (possibly optimized to replace the insert bat 
of tname.cname. Returns sequence number for order dependence."  ]
 [ "sql",       "argRecord",    "pattern sql.argRecord():str ", 
"SQLargRecord;",        "Glue together the calling sequence"    ]
@@ -12728,6 +12728,10 @@
 [ "sql",       "shutdown",     "unsafe pattern sql.shutdown(X_0:sht):str ",    
"SQLshutdown_wrap;",    ""      ]
 [ "sql",       "shutdown",     "unsafe pattern sql.shutdown(X_0:sht, 
X_1:bit):str ",   "SQLshutdown_wrap;",    ""      ]
 [ "sql",       "sql_variables",        "pattern sql.sql_variables() 
(X_0:bat[:str], X_1:bat[:str], X_2:bat[:str], X_3:bat[:str]) ",    
"sql_variables;",       "return the table with session variables"       ]
+[ "sql",       "statistics",   "pattern sql.statistics() (X_0:bat[:int], 
X_1:bat[:str], X_2:bat[:str], X_3:bat[:str], X_4:bat[:str], X_5:bat[:int], 
X_6:bat[:lng], X_7:bat[:bit], X_8:bat[:bit], X_9:bat[:str], X_10:bat[:str], 
X_11:bat[:bit], X_12:bat[:bit]) ",     "sql_statistics;",      "return a table 
with statistics information"    ]
+[ "sql",       "statistics",   "pattern sql.statistics(X_0:str) 
(X_1:bat[:int], X_2:bat[:str], X_3:bat[:str], X_4:bat[:str], X_5:bat[:str], 
X_6:bat[:int], X_7:bat[:lng], X_8:bat[:bit], X_9:bat[:bit], X_10:bat[:str], 
X_11:bat[:str], X_12:bat[:bit], X_13:bat[:bit]) ",     "sql_statistics;",      
"return a table with statistics information for a particular schema"    ]
+[ "sql",       "statistics",   "pattern sql.statistics(X_0:str, X_1:str) 
(X_2:bat[:int], X_3:bat[:str], X_4:bat[:str], X_5:bat[:str], X_6:bat[:str], 
X_7:bat[:int], X_8:bat[:lng], X_9:bat[:bit], X_10:bat[:bit], X_11:bat[:str], 
X_12:bat[:str], X_13:bat[:bit], X_14:bat[:bit]) ",   "sql_statistics;",      
"return a table with statistics information for a particular table"     ]
+[ "sql",       "statistics",   "pattern sql.statistics(X_0:str, X_1:str, 
X_2:str) (X_3:bat[:int], X_4:bat[:str], X_5:bat[:str], X_6:bat[:str], 
X_7:bat[:str], X_8:bat[:int], X_9:bat[:lng], X_10:bat[:bit], X_11:bat[:bit], 
X_12:bat[:str], X_13:bat[:str], X_14:bat[:bit], X_15:bat[:bit]) ", 
"sql_statistics;",      "return a table with statistics information for a 
particular column"    ]
 [ "sql",       "stdev",        "pattern sql.stdev(X_0:bte, X_1:bit, X_2:bit, 
X_3:int, X_4:oid, X_5:oid):dbl ", "SQLstddev_samp;",      "return the standard 
deviation sample of groups"        ]
 [ "sql",       "stdev",        "pattern sql.stdev(X_0:dbl, X_1:bit, X_2:bit, 
X_3:int, X_4:oid, X_5:oid):dbl ", "SQLstddev_samp;",      "return the standard 
deviation sample of groups"        ]
 [ "sql",       "stdev",        "pattern sql.stdev(X_0:flt, X_1:bit, X_2:bit, 
X_3:int, X_4:oid, X_5:oid):dbl ", "SQLstddev_samp;",      "return the standard 
deviation sample of groups"        ]
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -2852,7 +2852,6 @@ BATrmprop(BAT *b, enum prop_t idx)
        MT_lock_unset(&b->theaplock);
 }
 
-
 /*
  * The BATcount_no_nil function counts all BUN in a BAT that have a
  * non-nil tail value.
diff --git a/monetdb5/modules/kernel/algebra.c 
b/monetdb5/modules/kernel/algebra.c
--- a/monetdb5/modules/kernel/algebra.c
+++ b/monetdb5/modules/kernel/algebra.c
@@ -991,13 +991,12 @@ ALGcountCND_nil(lng *result, const bat *
        }
        if (b->ttype == TYPE_msk || mask_cand(b)) {
                BATsum(result, TYPE_lng, b, s, *ignore_nils, false, false);
-       } else
-        if (*ignore_nils) {
-                       *result = (lng) BATcount_no_nil(b, s);
-        } else {
-                       struct canditer ci;
-                       *result = (lng) canditer_init(&ci, b, s);
-        }
+       } else if (*ignore_nils) {
+               *result = (lng) BATcount_no_nil(b, s);
+       } else {
+               struct canditer ci;
+               *result = (lng) canditer_init(&ci, b, s);
+       }
        if (s)
                BBPunfix(s->batCacheid);
        BBPunfix(b->batCacheid);
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
@@ -5243,10 +5243,14 @@ 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", "statistics", sql_statistics, false, "return a table with 
statistics information", args(13,13, 
batarg("columnid",int),batarg("schema",str),batarg("table",str),batarg("column",str),batarg("type",str),batarg("with",int),batarg("count",lng),batarg("unique",bit),batarg("nils",bit),batarg("minval",str),batarg("maxval",str),batarg("sorted",bit),batarg("revsorted",bit))),
+ pattern("sql", "statistics", sql_statistics, false, "return a table with 
statistics information for a particular schema", args(13,14, 
batarg("columnid",int),batarg("schema",str),batarg("table",str),batarg("column",str),batarg("type",str),batarg("with",int),batarg("count",lng),batarg("unique",bit),batarg("nils",bit),batarg("minval",str),batarg("maxval",str),batarg("sorted",bit),batarg("revsorted",bit),arg("sname",str))),
+ pattern("sql", "statistics", sql_statistics, false, "return a table with 
statistics information for a particular table", args(13,15, 
batarg("columnid",int),batarg("schema",str),batarg("table",str),batarg("column",str),batarg("type",str),batarg("with",int),batarg("count",lng),batarg("unique",bit),batarg("nils",bit),batarg("minval",str),batarg("maxval",str),batarg("sorted",bit),batarg("revsorted",bit),arg("sname",str),arg("tname",str))),
+ pattern("sql", "statistics", sql_statistics, false, "return a table with 
statistics information for a particular column", args(13,16, 
batarg("columnid",int),batarg("schema",str),batarg("table",str),batarg("column",str),batarg("type",str),batarg("with",int),batarg("count",lng),batarg("unique",bit),batarg("nils",bit),batarg("minval",str),batarg("maxval",str),batarg("sorted",bit),batarg("revsorted",bit),arg("sname",str),arg("tname",str),arg("cname",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_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -491,7 +491,6 @@ alter_table_set_access(mvc *sql, char *s
 {
        sql_schema *s = NULL;
        sql_table *t = NULL;
-       str msg = MAL_SUCCEED;
 
        if (!(s = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.alter_table_set_access",SQLSTATE(3F000) "ALTER 
TABLE: no such schema '%s'", sname);
@@ -514,8 +513,6 @@ alter_table_set_access(mvc *sql, char *s
                        default:
                                break;
                }
-               if (access == 0 && (msg = sql_drop_statistics(sql, t)))
-                       return msg;
        }
        return MAL_SUCCEED;
 }
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
@@ -11,122 +11,45 @@ Most optimizers need easy access to key 
 for proper plan generation. Amongst others, this
 information consists of the tuple count, size,
 min- and max-value, and the null-density.
-They are kept around as persistent tables, modeled
-directly as a collection of BATs.
 
 We made need an directly accessible structure to speedup
 analysis by optimizers.
 */
 #include "monetdb_config.h"
 #include "sql_statistics.h"
-#include "sql_execute.h"
-
-str
-sql_drop_statistics(mvc *m, sql_table *t)
-{
-       node *ncol;
-       sql_trans *tr;
-       sql_schema *sys;
-       sql_table *sysstats;
-       sql_column *statsid;
-       oid rid;
-       int log_res = LOG_OK;
-
-       tr = m->session->tr;
-       sys = mvc_bind_schema(m, "sys");
-       if (sys == NULL)
-               throw(SQL, "sql_drop_statistics", SQLSTATE(3F000) "Internal 
error: No schema sys");
-       sysstats = mvc_bind_table(m, sys, "statistics");
-       if (sysstats == NULL)
-               throw(SQL, "sql_drop_statistics", SQLSTATE(3F000) "No table 
sys.statistics");
-       statsid = mvc_bind_column(m, sysstats, "column_id");
-       if (statsid == NULL)
-               throw(SQL, "sql_drop_statistics", SQLSTATE(3F000) "No table 
sys.statistics");
-
-       /* Do all the validations before any drop */
-       if (!isTable(t))
-               throw(SQL, "sql_drop_statistics", SQLSTATE(42S02) "DROP 
STATISTICS: %s '%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, 
t->properties), t->base.name);
-       if (!table_privs(m, t, PRIV_SELECT))
-               throw(SQL, "sql_drop_statistics", SQLSTATE(42000) "DROP 
STATISTICS: 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 (ncol = ol_first_node((t)->columns); ncol; ncol = 
ncol->next) {
-                       sql_column *c = (sql_column *) ncol->data;
-
-                       if (!column_privs(m, c, PRIV_SELECT))
-                               throw(SQL, "sql_drop_statistics", 
SQLSTATE(42000) "DROP STATISTICS: 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);
-               }
-       }
-
-       sqlstore *store = tr->store;
-       if (isTable(t) && ol_first_node(t->columns)) {
-               for (ncol = ol_first_node((t)->columns); ncol; ncol = 
ncol->next) {
-                       sql_column *c = ncol->data;
-
-                       rid = store->table_api.column_find_row(tr, statsid, 
&c->base.id, NULL);
-                       if (!is_oid_nil(rid) && (log_res = 
store->table_api.table_delete(tr, sysstats, rid)) != LOG_OK)
-                               throw(SQL, "sql.sql_drop_statistics", 
SQLSTATE(42000) "DROP STATISTICS: failed%s", log_res == LOG_CONFLICT ? " due to 
conflict with another transaction" : "");
-               }
-       }
-       return MAL_SUCCEED;
-}
 
 str
 sql_analyze(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        mvc *m = NULL;
-       str msg = getSQLContext(cntxt, mb, &m, NULL);
-       sql_trans *tr = m->session->tr;
-       node *ncol;
-       char *maxval = NULL, *minval = NULL;
-       size_t minlen = 0, maxlen = 0;
-       str sch = 0, tbl = 0, col = 0;
-       bit sorted, revsorted;  /* not bool since address is taken */
-       lng nils = 0;
-       lng uniq = 0;
-       lng samplesize = *getArgReference_lng(stk, pci, 2);
-       int argc = pci->argc;
-       int width = 0;
-       int minmax = *getArgReference_int(stk, pci, 1);
-       int sfnd = 0, tfnd = 0, cfnd = 0, log_res = LOG_OK;
-       sql_schema *sys;
-       sql_table *sysstats;
-       sql_column *statsid;
-       oid rid;
-       timestamp ts;
+       sql_trans *tr = NULL;
+       str sch = NULL, tbl = NULL, col = NULL, msg = MAL_SUCCEED;
+       int argc = pci->argc, sfnd = 0, tfnd = 0, cfnd = 0;
 
-       if (msg != MAL_SUCCEED || (msg = checkSQLContext(cntxt)) != NULL)
+       if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
+               return msg;
+       if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
 
-       sys = mvc_bind_schema(m, "sys");
-       if (sys == NULL)
-               throw(SQL, "sql.analyze", SQLSTATE(3F000) "Internal error: No 
schema sys");
-       sysstats = mvc_bind_table(m, sys, "statistics");
-       if (sysstats == NULL)
-               throw(SQL, "sql.analyze", SQLSTATE(3F000) "Internal error: No 
table sys.statistics");
-       statsid = mvc_bind_column(m, sysstats, "column_id");
-       if (statsid == NULL)
-               throw(SQL, "sql.analyze", SQLSTATE(3F000) "Internal error: No 
table sys.statistics");
-
+       tr = m->session->tr;
        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;
@@ -148,30 +71,30 @@ 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 (ncol = ol_first_node((t)->columns); ncol; 
ncol = ncol->next) {
+                               for (node *ncol = ol_first_node((t)->columns); 
ncol; ncol = ncol->next) {
                                        sql_column *c = (sql_column *) 
ncol->data;
 
                                        if (col && strcmp(c->base.name, col))
                                                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);
                                }
                        }
                }
        }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to