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

Reply via email to