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