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 -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to