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