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

Reply via email to