Changeset: cfca19afb8c2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cfca19afb8c2
Modified Files:
sql/server/rel_dump.c
Branch: balanced_union
Log Message:
Merge with default branch.
diffs (239 lines):
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -3610,7 +3610,7 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
pos = binsearch(NULL, 0, bi.type, bi.base,
bi.vh ? bi.vh->base : NULL,
bi.width, 0, bi.count,
- ATOMnilptr(bi.type), -1, 1);
+ ATOMnilptr(bi.type), -1, 0);
if (pos == 0)
pos = oid_nil;
else
diff --git a/sql/backends/monet5/sql_upgrades.c
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -6645,19 +6645,13 @@ sql_update_dec2023_sp4(Client c, mvc *sq
static str
sql_update_default(Client c, mvc *sql, sql_schema *s)
{
- allocator *old_sa = sql->sa;
char *err;
res_table *output;
BAT *b;
- if ((sql->sa = sa_create(sql->pa)) == NULL) {
- sql->sa = old_sa;
- return "sa_create failed";
- }
-
err = SQLstatementIntern(c, "SELECT id FROM sys.functions WHERE
schema_id = 2000 AND name = 'describe_type' AND func LIKE '%sql_datatype%';\n",
"update", true, false, &output);
if (err)
- goto end;
+ return err;
b = BATdescriptor(output->cols[0].b);
if (b) {
if (BATcount(b) == 0) {
@@ -7070,114 +7064,34 @@ sql_update_default(Client c, mvc *sql, s
printf("Running database upgrade commands:\n%s\n",
query);
fflush(stdout);
err = SQLstatementIntern(c, query, "update", true,
false, NULL);
+
+ list *l;
+ if ((l = sa_list(sql->sa)) != NULL) {
+ sql_subtype tp1, tp2;
+ sql_find_subtype(&tp1, "date", 0, 0);
+ list_append(l, &tp1);
+ list_append(l, &tp1);
+ sql_find_subtype(&tp2, "day_interval", 0, 0);
+ list_append(l, &tp2);
+ if (!sql_bind_func_(sql, s->base.name,
"generate_series", l, F_UNION, true, true)) {
+ const char query[] = "create function
sys.generate_series(first date, \"limit\" date, stepsize interval month)\n"
+ "returns table (value date)\n"
+ "external name
generator.series;\n"
+ "create function
sys.generate_series(first date, \"limit\" date, stepsize interval day)\n"
+ "returns table (value date)\n"
+ "external name
generator.series;\n"
+ "update sys.functions set
system = true where system <> true and name = 'generate_series' and schema_id =
2000;\n";
+ sql->session->status = 0;
+ sql->errstr[0] = '\0';
+ printf("Running database upgrade
commands:\n%s\n", query);
+ fflush(stdout);
+ err = SQLstatementIntern(c, query,
"update", true, false, NULL);
+ }
+ }
}
BBPunfix(b->batCacheid);
}
res_table_destroy(output);
- list *l;
- if ((l = sa_list(sql->sa)) != NULL) {
- sql_subtype tp1, tp2;
- sql_find_subtype(&tp1, "date", 0, 0);
- list_append(l, &tp1);
- list_append(l, &tp1);
- sql_find_subtype(&tp2, "day_interval", 0, 0);
- list_append(l, &tp2);
- if (!sql_bind_func_(sql, s->base.name, "generate_series", l,
F_UNION, true, true)) {
- const char query[] = "create function
sys.generate_series(first date, \"limit\" date, stepsize interval month)\n"
- "returns table (value date)\n"
- "external name generator.series;\n"
- "create function sys.generate_series(first
date, \"limit\" date, stepsize interval day)\n"
- "returns table (value date)\n"
- "external name generator.series;\n"
- "update sys.functions set system = true where
system <> true and name = 'generate_series' and schema_id = 2000;\n";
- sql->session->status = 0;
- sql->errstr[0] = '\0';
- printf("Running database upgrade commands:\n%s\n",
query);
- fflush(stdout);
- err = SQLstatementIntern(c, query, "update", true,
false, NULL);
- }
- }
- if (err)
- goto end;
-
- const char *query = "select id from args where func_id = (select id
from functions where schema_id = 2000 and name = 'sessions');\n";
- err = SQLstatementIntern(c, query, "update", true, false, &output);
- if (err)
- goto end;
- b = BATdescriptor(output->cols[0].b);
- if (b && BATcount(b) < 15) {
- query =
- "drop view sys.sessions;\n"
- "drop function sys.sessions();\n"
- "create function sys.sessions()\n"
- " returns table(\n"
- " \"sessionid\" int,\n"
- " \"username\" string,\n"
- " \"login\" timestamp,\n"
- " \"idle\" timestamp,\n"
- " \"optimizer\" string,\n"
- " \"sessiontimeout\" int,\n"
- " \"querytimeout\" int,\n"
- " \"workerlimit\" int,\n"
- " \"memorylimit\" int,\n"
- " \"language\" string,\n"
- " \"peer\" string,\n"
- " \"hostname\" string,\n"
- " \"application\" string,\n"
- " \"client\" string,\n"
- " \"clientpid\" bigint,\n"
- " \"remark\" string\n"
- " )\n"
- " external name sql.sessions;\n"
- "create view sys.sessions as select * from
sys.sessions();\n"
- "create procedure sys.setclientinfo(property string,
value string)\n"
- " external name clients.setinfo;\n"
- "grant execute on procedure sys.setclientinfo(string,
string) to public;\n"
- "create table sys.clientinfo_properties(prop string);\n"
- "insert into sys.clientinfo_properties values\n"
- " ('ClientHostname'),\n"
- " ('ApplicationName'),\n"
- " ('ClientLibrary'),\n"
- " ('ClientRemark'),\n"
- " ('ClientPid');\n"
- "update sys.functions set system = true where schema_id
= 2000 and name in ('setclientinfo', 'sessions');\n"
- "update sys._tables set system = true where schema_id =
2000 and name in ('clientinfo_properties', 'sessions');\n";
- ;
- sql_schema *sys = mvc_bind_schema(sql, "sys");
- sql_table *t = mvc_bind_table(sql, sys, "sessions");
- t->system = 0; /* make it non-system else the drop view will
fail */
- printf("Running database upgrade commands:\n%s\n", query);
- fflush(stdout);
- err = SQLstatementIntern(c, query, "update", true, false, NULL);
- }
- if (b)
- BBPunfix(b->batCacheid);
- res_table_destroy(output);
-
-end:
- sa_destroy(sql->sa);
- sql->sa = old_sa;
-
- if (err)
- return err;
- sql_table *t;
- if ((t = mvc_bind_table(sql, s, "key_types")) != NULL)
- t->system = 0;
- err = SQLstatementIntern(c,
- "DROP TABLE sys.key_types;\n"
- "CREATE TABLE sys.key_types (\n"
- " key_type_id SMALLINT NOT NULL PRIMARY KEY,\n"
- " key_type_name VARCHAR(35) NOT NULL UNIQUE);\n"
- "INSERT INTO sys.key_types VALUES\n"
- "(0, 'Primary Key'),\n"
- "(1, 'Unique Key'),\n"
- "(2, 'Foreign Key'),\n"
- "(3, 'Unique Key With Nulls Not Distinct'),\n"
- "(4, 'Check Constraint');\n"
- "ALTER TABLE sys.key_types SET READ ONLY;\n"
- "GRANT SELECT ON sys.key_types TO PUBLIC;\n"
- "UPDATE sys._tables SET system = true WHERE schema_id = 2000
AND name = 'key_types';\n"
- , "update", true, false, NULL);
return err;
}
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -383,6 +383,34 @@ cleanup:
return fres;
}
+str
+exp2str( mvc *sql, sql_exp *exp)
+{
+ buffer *b = NULL;
+ stream *s = NULL;
+ char *res = NULL;
+
+ b = buffer_create(1024);
+ if(b == NULL)
+ goto cleanup;
+ s = buffer_wastream(b, "exp_dump");
+ if(s == NULL)
+ goto cleanup;
+
+ exp_print(sql, s, exp, 0, NULL, 0, 0, 0);
+ res = buffer_get_buf(b);
+
+cleanup:
+ if(b)
+ buffer_destroy(b);
+ if(s)
+ close_stream(s);
+
+ char* fres = SA_STRDUP(sql->sa, res);
+ free (res);
+ return fres;
+}
+
static void
exps_print(mvc *sql, stream *fout, list *exps, int depth, list *refs, int
alias, int brackets, int decorate)
{
diff --git a/sql/server/rel_dump.h b/sql/server/rel_dump.h
--- a/sql/server/rel_dump.h
+++ b/sql/server/rel_dump.h
@@ -20,6 +20,7 @@ extern void rel_print_(mvc *sql, stream
extern void rel_print_refs(mvc *sql, stream* fout, sql_rel *rel, int depth,
list *refs, int decorate);
extern str rel2str( mvc *sql, sql_rel *rel);
+extern str exp2str( mvc *sql, sql_exp *exp);
extern sql_rel *rel_read(mvc *sql, char *ra, int *pos, list *refs);
extern void exp_print(mvc *sql, stream *fout, sql_exp *e, int depth, list
*refs, int comma, int alias, int decorate);
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -388,8 +388,10 @@ sql_rel* create_check_plan(sql_query *qu
mvc *sql = query->sql;
exp_kind ek = {type_value, card_value, FALSE};
- sql_rel* rel = rel_basetable(sql, t, t->base.name);
+ sql_rel* rel = rel_basetable(sql, t, t->base.name), *orel = rel;
sql_exp *e = rel_logical_value_exp(query, &rel, s->data.sym, sql_sel |
sql_no_subquery, ek);
+ assert(rel == orel);
+ (void)orel;
rel->exps = rel_base_projection(sql, rel, 0);
list *pexps = sa_list(sql->sa);
pexps = append(pexps, e);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]