Changeset: 0413783fa268 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/0413783fa268 Added Files: sql/backends/monet5/sql_histogram.c sql/backends/monet5/sql_histogram.h Modified Files: gdk/gdk.h gdk/gdk_histogram.c sql/backends/monet5/CMakeLists.txt sql/backends/monet5/sql.c sql/backends/monet5/sql_strimps.c sql/backends/monet5/sql_strimps.h sql/scripts/25_debug.sql Branch: histograms Log Message:
Adding debugging functions diffs (242 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -1798,6 +1798,7 @@ gdk_export bool BATcheckorderidx(BAT *b) /* Histogram related functions */ gdk_export gdk_return HISTOGRAMcreate(BAT *b); +gdk_export str HISTOGRAMprint(BAT *b); gdk_export void HISTOGRAMdestroy(BAT *b); #include "gdk_delta.h" diff --git a/gdk/gdk_histogram.c b/gdk/gdk_histogram.c --- a/gdk/gdk_histogram.c +++ b/gdk/gdk_histogram.c @@ -292,7 +292,7 @@ HISTOGRAMcreate(BAT *b) BAT *sids, *sam; Histogram *h; bool perfect_histogram = false; - ValRecord min, max, diff, conv = {.vtype = VAR_TPE}, nbuckets, truth; + ValRecord min, max, diff = {.vtype = VAR_TPE}, conv = {.vtype = VAR_TPE}, nbuckets = {.vtype = VAR_TPE}, truth = {.vtype = TYPE_bit}; if (!(sids = BATsample_with_seed(b, SAMPLE_SIZE, (uint64_t) GDKusec() * (uint64_t) b->batCacheid))) goto fail; @@ -357,6 +357,13 @@ fail: return GDK_FAIL; } +str +HISTOGRAMprint(BAT *b) +{ + (void) b; + return GDKstrdup("I am doing this next"); +} + void HISTOGRAMdestroy(BAT *b) { diff --git a/sql/backends/monet5/CMakeLists.txt b/sql/backends/monet5/CMakeLists.txt --- a/sql/backends/monet5/CMakeLists.txt +++ b/sql/backends/monet5/CMakeLists.txt @@ -143,6 +143,7 @@ target_sources(sql sql_fround.c sql_fround_impl.h sql_orderidx.c sql_orderidx.h sql_strimps.c sql_strimps.h + sql_histogram.c sql_histogram.h sql_time.c sql_bincopyfrom.c wlr.c wlr.h 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 @@ -5088,6 +5088,7 @@ SQLstr_column_stop_vacuum(Client cntxt, #include "sql_execute.h" #include "sql_orderidx.h" #include "sql_strimps.h" +#include "sql_histogram.h" #include "sql_subquery.h" #include "sql_statistics.h" #include "sql_transaction.h" @@ -5205,6 +5206,8 @@ static mel_func sql_init_funcs[] = { pattern("sql", "createorderindex", sql_createorderindex, true, "Instantiate the order index on a column", args(0,3, arg("sch",str),arg("tbl",str),arg("col",str))), pattern("sql", "droporderindex", sql_droporderindex, true, "Drop the order index on a column", args(0,3, arg("sch",str),arg("tbl",str),arg("col",str))), pattern("sql", "createstrimps", sql_createstrimps, true, "Instantiate the strimps index on a column", args(0,3, arg("sch",str),arg("tbl",str),arg("col",str))), + pattern("sql", "createhistogram", sql_createhistogram, true, "Create an histogram on a column", args(0,3, arg("sch",str),arg("tbl",str),arg("col",str))), + pattern("sql", "printhistogram", sql_printhistogram, true, "Return a string with a column's histogram", args(1,4, arg("hist",str),arg("sch",str),arg("tbl",str),arg("col",str))), command("calc", "identity", SQLidentity, false, "Returns a unique row identitfier.", args(1,2, arg("",oid),argany("",0))), command("batcalc", "identity", BATSQLidentity, false, "Returns the unique row identitfiers.", args(1,2, batarg("",oid),batargany("b",0))), pattern("batcalc", "identity", PBATSQLidentity, false, "Returns the unique row identitfiers.", args(2,4, batarg("resb",oid),arg("ns",oid),batargany("b",0),arg("s",oid))), diff --git a/sql/backends/monet5/sql_histogram.c b/sql/backends/monet5/sql_histogram.c new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/sql_histogram.c @@ -0,0 +1,56 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Copyright 1997 - July 2008 CWI, August 2008 - 2022 MonetDB B.V. + */ + +#include "monetdb_config.h" +#include "mal_backend.h" +#include "sql_strimps.h" +#include "sql_histogram.h" + +str +sql_createhistogram(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +{ + BAT *b; + gdk_return res; + str msg = MAL_SUCCEED; + + if ((msg = sql_load_bat(cntxt, mb, stk, pci, "sql.createhistogram", &b)) != MAL_SUCCEED) + return msg; + + res = HISTOGRAMcreate(b); + BBPunfix(b->batCacheid); + if (res != GDK_SUCCEED) + throw(SQL, "sql.createhistogram", GDK_EXCEPTION); + + return MAL_SUCCEED; +} + +str +sql_printhistogram(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +{ + BAT *b; + str msg = MAL_SUCCEED; + str *res = getArgReference_str(stk, pci, 0); + const char *sch = *getArgReference_str(stk, pci, 1); + const char *tbl = *getArgReference_str(stk, pci, 2); + const char *col = *getArgReference_str(stk, pci, 3); + + if ((msg = sql_load_bat(cntxt, mb, stk, pci, "sql.printhistogram", &b)) != MAL_SUCCEED) + return msg; + + if (!b->thistogram) { + BBPunfix(b->batCacheid); + throw(SQL, "sql.printhistogram", "%s.%s.%s doesn't have an histogram associated", sch, tbl, col); + } + + *res = HISTOGRAMprint(b); + BBPunfix(b->batCacheid); + if (!*res) + throw(SQL, "sql.printhistogram", GDK_EXCEPTION); + + return MAL_SUCCEED; +} diff --git a/sql/backends/monet5/sql_histogram.h b/sql/backends/monet5/sql_histogram.h new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/sql_histogram.h @@ -0,0 +1,17 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Copyright 1997 - July 2008 CWI, August 2008 - 2022 MonetDB B.V. + */ + +#ifndef _SQL_HISTOGRAM_DEF +#define _SQL_HISTOGRAM_DEF + +#include "sql.h" + +extern str sql_createhistogram(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +extern str sql_printhistogram(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); + +#endif /* _SQL_HISTOGRAM_DEF */ diff --git a/sql/backends/monet5/sql_strimps.c b/sql/backends/monet5/sql_strimps.c --- a/sql/backends/monet5/sql_strimps.c +++ b/sql/backends/monet5/sql_strimps.c @@ -10,8 +10,8 @@ #include "mal_backend.h" #include "sql_strimps.h" -static str -sql_load_bat(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, BAT **b) +str +sql_load_bat(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, const char *op, BAT **b) { mvc *m = NULL; str msg = getSQLContext(cntxt, mb, &m, NULL); @@ -28,33 +28,32 @@ sql_load_bat(Client cntxt, MalBlkPtr mb, col = *getArgReference_str(stk, pci, 3); if (strNil(sch)) - throw(SQL, "sql.createstrimps", SQLSTATE(42000) "Schema name cannot be NULL"); + throw(SQL, op, SQLSTATE(42000) "Schema name cannot be NULL"); if (strNil(tbl)) - throw(SQL, "sql.createstrimps", SQLSTATE(42000) "Table name cannot be NULL"); + throw(SQL, op, SQLSTATE(42000) "Table name cannot be NULL"); if (strNil(col)) - throw(SQL, "sql.createstrimps", SQLSTATE(42000) "Column name cannot be NULL"); + throw(SQL, op, SQLSTATE(42000) "Column name cannot be NULL"); if (!(s = mvc_bind_schema(m, sch))) - throw(SQL, "sql.createstrimps", SQLSTATE(3FOOO) "Unknown schema %s", sch); + throw(SQL, op, SQLSTATE(3FOOO) "Unknown schema %s", sch); if (!mvc_schema_privs(m, s)) - throw(SQL, "sql.createstrimps", SQLSTATE(42000) "Access denied for %s to schema '%s'", + throw(SQL, op, SQLSTATE(42000) "Access denied for %s to schema '%s'", get_string_global_var(m, "current_user"), s->base.name); if (!(t = mvc_bind_table(m, s, tbl))) - throw(SQL, "sql.createstrimps", SQLSTATE(42S02) "Unknown table %s.%s", sch, tbl); + throw(SQL, op, SQLSTATE(42S02) "Unknown table %s.%s", sch, tbl); if (!isTable(t)) - throw(SQL, "sql.createstrimps", SQLSTATE(42000) "%s '%s' is not persistent", + throw(SQL, op, SQLSTATE(42000) "%s '%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, t->properties), t->base.name); if (!(c = mvc_bind_column(m, t, col))) - throw(SQL, "sql.createstrimps", SQLSTATE(38000) "Unknown column %s.%s.%s", sch, tbl, col); + throw(SQL, op, SQLSTATE(38000) "Unknown column %s.%s.%s", sch, tbl, col); sqlstore *store = m->session->tr->store; *b = store->storage_api.bind_col(m->session->tr, c, RDONLY); if (*b == 0) - throw(SQL, "sql.createstrimps", SQLSTATE(HY005) "Cannot access column %s", col); + throw(SQL, op, SQLSTATE(HY005) "Cannot access column %s", col); return msg; - } str @@ -64,7 +63,7 @@ sql_createstrimps(Client cntxt, MalBlkPt gdk_return res; str msg = MAL_SUCCEED; - if ((msg = sql_load_bat(cntxt, mb, stk, pci, &b)) != MAL_SUCCEED) + if ((msg = sql_load_bat(cntxt, mb, stk, pci, "sql.createstrimps", &b)) != MAL_SUCCEED) return msg; if (!(s = BATdense(0, 0, b->batCount))) { diff --git a/sql/backends/monet5/sql_strimps.h b/sql/backends/monet5/sql_strimps.h --- a/sql/backends/monet5/sql_strimps.h +++ b/sql/backends/monet5/sql_strimps.h @@ -12,7 +12,7 @@ #include "sql.h" +extern str sql_load_bat(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, const char *op, BAT **b); extern str sql_createstrimps(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -// extern str sql_droporderindex(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); #endif /* _SQL_STRIMPS_DEF */ diff --git a/sql/scripts/25_debug.sql b/sql/scripts/25_debug.sql --- a/sql/scripts/25_debug.sql +++ b/sql/scripts/25_debug.sql @@ -85,3 +85,9 @@ create function sys.deltas ("schema" str create function sys.deltas ("schema" string, "table" string, "column" string) returns table ("id" int, "segments" bigint, "all" bigint, "inserted" bigint, "updates" bigint, "deletes" bigint, "level" int) external name "sql"."deltas"; + +create procedure sys."createhistogram"("sname" varchar(1024), "tname" varchar(1024), "cname" varchar(1024)) + external name "sql"."createhistogram"; + +create function sys."printhistogram"("sname" varchar(1024), "tname" varchar(1024), "cname" varchar(1024)) returns string + external name "sql"."printhistogram"; _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org