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 -- [email protected]
To unsubscribe send an email to [email protected]