Changeset: 7754f9ed570e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7754f9ed570e
Modified Files:
sql/server/rel_dump.c
sql/server/rel_updates.c
sql/server/rel_updates.h
sql/test/BugTracker-2015/Tests/local-remotetable-crash.Bug-3754.stable.err
Branch: linear-hashing
Log Message:
Merged with Nov2019
diffs (172 lines):
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
@@ -1352,6 +1352,8 @@ rel_read(mvc *sql, char *r, int *pos, li
}
if (r[*pos] == 'i' && r[*pos+1] == 'n' && r[*pos+2] == 's') {
+ sql_table *t;
+
*pos += (int) strlen("insert");
skipWS(r, pos);
(*pos)++; /* ( */
@@ -1363,10 +1365,15 @@ rel_read(mvc *sql, char *r, int *pos, li
skipWS(r,pos);
(*pos)++; /* ) */
+ t = get_table(lrel);
+ if (!insert_allowed(sql, t, t->base.name, "INSERT", "insert"))
+ return NULL;
return rel_insert(sql, lrel, rrel);
}
if (r[*pos] == 'd' && r[*pos+1] == 'e' && r[*pos+2] == 'l') {
+ sql_table *t;
+
*pos += (int) strlen("delete");
skipWS(r, pos);
(*pos)++; /* ( */
@@ -1378,11 +1385,17 @@ rel_read(mvc *sql, char *r, int *pos, li
skipWS(r,pos);
(*pos)++; /* ) */
+ t = get_table(lrel);
+ if (!update_allowed(sql, t, t->base.name, "DELETE", "delete",
1))
+ return NULL;
+
return rel_delete(sql->sa, lrel, rrel);
}
if (r[*pos] == 't' && r[*pos+1] == 'r' && r[*pos+2] == 'u') {
+ sql_table *t;
int restart_sequences = 0, drop_action = 0;
+
*pos += (int) strlen("truncate ");
if (r[*pos] == 'r') {
restart_sequences = 1;
@@ -1403,10 +1416,16 @@ rel_read(mvc *sql, char *r, int *pos, li
skipWS(r,pos);
(*pos)++; /* ) */
+ t = get_table(lrel);
+ if (!update_allowed(sql, t, t->base.name, "TRUNCATE",
"truncate", 2))
+ return NULL;
+
return rel_truncate(sql->sa, lrel, drop_action,
restart_sequences);
}
if (r[*pos] == 'u' && r[*pos+1] == 'p' && r[*pos+2] == 'd') {
+ sql_table *t;
+
*pos += (int) strlen("update");
skipWS(r, pos);
(*pos)++; /* ( */
@@ -1418,6 +1437,10 @@ rel_read(mvc *sql, char *r, int *pos, li
skipWS(r,pos);
(*pos)++; /* ) */
+ t = get_table(lrel);
+ if (!update_allowed(sql, t, t->base.name, "UPDATE", "update",
0) )
+ return NULL;
+
if (!(exps = read_exps(sql, lrel, rrel, NULL, r, pos, '[', 0)))
/* columns to be updated */
return NULL;
return rel_update(sql, lrel, rrel, NULL, exps);
@@ -1461,6 +1484,12 @@ rel_read(mvc *sql, char *r, int *pos, li
t = mvc_bind_table(sql, s, tname);
if (!s || !t)
return sql_error(sql, -1, SQLSTATE(42000)
"Table: missing '%s.%s'\n", sname, tname);
+ if (isMergeTable(t))
+ return sql_error(sql, -1, SQLSTATE(42000)
"Merge tables not supported under remote connections\n");
+ if (isRemote(t))
+ return sql_error(sql, -1, SQLSTATE(42000)
"Remote tables not supported under remote connections\n");
+ if (isReplicaTable(t))
+ return sql_error(sql, -1, SQLSTATE(42000)
"Replica tables not supported under remote connections\n");
rel = rel_basetable(sql, t, tname);
if (!r[*pos])
@@ -1737,7 +1766,7 @@ rel_read(mvc *sql, char *r, int *pos, li
return NULL;
}
/* sometimes the properties are send */
- while (strncmp(r+*pos, "REMOTE", strlen("REMOTE")) == 0) {
+ while (strncmp(r+*pos, "REMOTE", strlen("REMOTE")) == 0) { /* Remote
tables under remote tables not supported, so remove REMOTE property */
(*pos)+= (int) strlen("REMOTE");
skipWS(r, pos);
skipUntilWS(r, pos);
@@ -1745,10 +1774,20 @@ rel_read(mvc *sql, char *r, int *pos, li
}
while (strncmp(r+*pos, "USED", strlen("USED")) == 0) {
(*pos)+= (int) strlen("USED");
+ if (!find_prop(rel->p, PROP_USED))
+ rel->p = prop_create(sql->sa, PROP_USED, rel->p);
skipWS(r, pos);
}
while (strncmp(r+*pos, "DISTRIBUTE", strlen("DISTRIBUTE")) == 0) {
(*pos)+= (int) strlen("DISTRIBUTE");
+ if (!find_prop(rel->p, PROP_DISTRIBUTE))
+ rel->p = prop_create(sql->sa, PROP_DISTRIBUTE, rel->p);
+ skipWS(r, pos);
+ }
+ while (strncmp(r+*pos, "GROUPINGS", strlen("GROUPINGS")) == 0) {
+ (*pos)+= (int) strlen("GROUPINGS");
+ if (!find_prop(rel->p, PROP_GROUPINGS))
+ rel->p = prop_create(sql->sa, PROP_GROUPINGS, rel->p);
skipWS(r, pos);
}
return rel;
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -58,16 +58,14 @@ insert_exp_array(mvc *sql, sql_table *t,
return SA_ZNEW_ARRAY(sql->sa, sql_exp*, *Len);
}
-#define get_basetable(rel) rel->l
-
-static sql_table *
-get_table( sql_rel *t)
+sql_table *
+get_table(sql_rel *t)
{
sql_table *tab = NULL;
assert(is_updateble(t));
if (t->op == op_basetable) { /* existing base table */
- tab = get_basetable(t);
+ tab = t->l;
} else if (t->op == op_ddl &&
(t->flag == ddl_alter_table || t->flag ==
ddl_create_table || t->flag == ddl_create_view)) {
return rel_ddl_table_get(t);
diff --git a/sql/server/rel_updates.h b/sql/server/rel_updates.h
--- a/sql/server/rel_updates.h
+++ b/sql/server/rel_updates.h
@@ -15,13 +15,14 @@
#include "sql_relation.h"
#include "sql_query.h"
+extern sql_table *get_table(sql_rel *t); /* needed for rel_read at rel_dump */
extern sql_rel *rel_update(mvc *sql, sql_rel *t, sql_rel *uprel, sql_exp
**updates, list *exps);
extern sql_rel *rel_insert(mvc *sql, sql_rel *t, sql_rel *inserts);
extern sql_rel *rel_delete(sql_allocator *sa, sql_rel *t, sql_rel *deletes);
extern sql_rel *rel_truncate(sql_allocator *sa, sql_rel *t, int drop_action,
int check_identity);
-extern sql_exp * rel_parse_val(mvc *m, char *query, char emode, sql_rel *from);
+extern sql_exp *rel_parse_val(mvc *m, char *query, char emode, sql_rel *from);
extern sql_rel *rel_updates(sql_query *query, symbol *sym);
diff --git
a/sql/test/BugTracker-2015/Tests/local-remotetable-crash.Bug-3754.stable.err
b/sql/test/BugTracker-2015/Tests/local-remotetable-crash.Bug-3754.stable.err
--- a/sql/test/BugTracker-2015/Tests/local-remotetable-crash.Bug-3754.stable.err
+++ b/sql/test/BugTracker-2015/Tests/local-remotetable-crash.Bug-3754.stable.err
@@ -32,8 +32,7 @@ stderr of test 'local-remotetable-crash.
MAPI = (monetdb) /var/tmp/mtest-5803/.s.monetdb.31110
QUERY = SELECT * FROM rt;
-ERROR = !(mapi:monetdb://monetdb@localhost/mTests_sql_test_BugTracker-2015)
unable to find sys.rt(i)
-
+ERROR = !(mapi:monetdb://monetdb@localhost/mTests_sql_test_BugTracker-2015)
Remote tables not supported under remote connections
# 18:16:20 >
# 18:16:20 > "Done."
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list