Changeset: 8b5dd0884b2a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8b5dd0884b2a
Modified Files:
clients/Tests/MAL-signatures-hge.test
clients/Tests/MAL-signatures.test
sql/backends/monet5/sql.c
sql/backends/monet5/sql_statistics.c
sql/backends/monet5/sql_statistics.h
Branch: default
Log Message:
new statistic functions (sync branches)
diffs (141 lines):
diff --git a/clients/Tests/MAL-signatures-hge.test
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -49734,6 +49734,21 @@ unsafe pattern sql.setVariable(X_0:int,
setVariable;
Set the value of a session variable
sql
+sql
+set_count_distinct
+unsafe pattern sql.set_count_distinct(X_0:str, X_1:str, X_2:str, X_3:lng):void
+sql_set_count_distinct;
+Set count distinct for column
+sql
+set_max
+unsafe pattern sql.set_max(X_0:str, X_1:str, X_2:str, X_3:any_1):void
+sql_set_max;
+Set max for column
+sql
+set_min
+unsafe pattern sql.set_min(X_0:str, X_1:str, X_2:str, X_3:any_1):void
+sql_set_min;
+Set min for column
set_protocol
unsafe pattern sql.set_protocol(X_0:int):int
SQLset_protocol;
diff --git a/clients/Tests/MAL-signatures.test
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -38114,6 +38114,21 @@ unsafe pattern sql.setVariable(X_0:int,
setVariable;
Set the value of a session variable
sql
+set_count_distinct
+unsafe pattern sql.set_count_distinct(X_0:str, X_1:str, X_2:str, X_3:lng):void
+sql_set_count_distinct;
+Set count distinct for column
+sql
+set_max
+unsafe pattern sql.set_max(X_0:str, X_1:str, X_2:str, X_3:any_1):void
+sql_set_max;
+Set max for column
+sql
+set_min
+unsafe pattern sql.set_min(X_0:str, X_1:str, X_2:str, X_3:any_1):void
+sql_set_min;
+Set min for column
+sql
set_protocol
unsafe pattern sql.set_protocol(X_0:int):int
SQLset_protocol;
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
@@ -5153,6 +5153,9 @@ pattern("sql", "decypher", SQLdecypher,
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", "set_count_distinct", sql_set_count_distinct, true, "Set count
distinct for column", args(1,5,
arg("",void),arg("sch",str),arg("tbl",str),arg("col",str),arg("val",lng))),
+ pattern("sql", "set_min", sql_set_min, true, "Set min for column", args(1,5,
arg("",void),arg("sch",str),arg("tbl",str),arg("col",str),argany("val",1))),
+ pattern("sql", "set_max", sql_set_max, true, "Set max for column", args(1,5,
arg("",void),arg("sch",str),arg("tbl",str),arg("col",str),argany("val",1))),
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))),
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
@@ -20,6 +20,61 @@ analysis by optimizers.
#include "monetdb_config.h"
#include "sql_statistics.h"
+static str
+sql_set_stats(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int
type)
+{
+ mvc *m = NULL;
+ str sch = NULL, tbl = NULL, col = NULL, msg = MAL_SUCCEED;
+
+ if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
+ return msg;
+ if ((msg = checkSQLContext(cntxt)) != NULL)
+ return msg;
+
+ sch = *getArgReference_str(stk, pci, 1);
+ tbl = *getArgReference_str(stk, pci, 2);
+ col = *getArgReference_str(stk, pci, 3);
+
+ sql_schema *s = mvc_bind_schema(m, sch);
+ sql_table *t = s?mvc_bind_table(m, s, tbl):NULL;
+ sql_column *c = t?mvc_bind_column(m, t, col):NULL;
+ if (!c || !t || !s)
+ throw(SQL, "sql.set_stats", SQLSTATE(42000) "Cannot not find
Column '%s.%s.%s'", sch, tbl, col);
+ sql_trans *tr = m->session->tr;
+ sqlstore *store = tr->store;
+ if (type > 0) {
+ if (getArgType(mb, pci, 4) != c->type.type->localtype)
+ throw(SQL, "sql.set_stats", SQLSTATE(42000) "Wrong
value type '%s'", BATatoms[getArgType(mb, pci, 4)].name);
+ ptr val = getArgReference(stk, pci, 4);
+ store->storage_api.set_stats_col(tr, c, NULL, type==1?val:NULL,
type==2?val:NULL);
+ } else { /* count lng type */
+ if (getArgType(mb, pci, 4) != TYPE_lng)
+ throw(SQL, "sql.set_stats", SQLSTATE(42000) "Wrong
value type '%s'", BATatoms[getArgType(mb, pci, 4)].name);
+ lng cnt = *getArgReference_lng(stk, pci, 4);
+ double est = cnt;
+ store->storage_api.set_stats_col(tr, c, &est, NULL, NULL);
+ }
+ return msg;
+}
+
+str
+sql_set_count_distinct(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ return sql_set_stats(cntxt, mb, stk, pci, 0);
+}
+
+str
+sql_set_min(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ return sql_set_stats(cntxt, mb, stk, pci, 1);
+}
+
+str
+sql_set_max(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ return sql_set_stats(cntxt, mb, stk, pci, 2);
+}
+
str
sql_analyze(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
diff --git a/sql/backends/monet5/sql_statistics.h
b/sql/backends/monet5/sql_statistics.h
--- a/sql/backends/monet5/sql_statistics.h
+++ b/sql/backends/monet5/sql_statistics.h
@@ -14,6 +14,9 @@
#include "sql.h"
+extern str sql_set_count_distinct(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+extern str sql_set_min(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
+extern str sql_set_max(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
extern str sql_analyze(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
extern str sql_statistics(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]