Changeset: 16cfe2758381 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=16cfe2758381
Modified Files:
        sql/backends/monet5/sql_upgrades.c
        sql/scripts/97_comments.sql
        sql/server/rel_schema.c
        sql/server/sql_mvc.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: comment-on
Log Message:

Return a proper plan when commenting on an object

This fixes the failing tests.


diffs (139 lines):

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
@@ -827,7 +827,7 @@ sql_create_comments_table(Client c)
                return err;
 
        q3 = ""
-               "CREATE PROCEDURE sys.comment_on(obj_id OID, obj_remark 
VARCHAR(65000))\n"
+               "CREATE PROCEDURE sys.comment_on(obj_id INTEGER, obj_remark 
VARCHAR(65000))\n"
                "BEGIN\n"
                "        IF obj_remark IS NULL OR obj_remark = '' THEN\n"
                "                DELETE FROM sys.comments WHERE id = obj_id;\n"
diff --git a/sql/scripts/97_comments.sql b/sql/scripts/97_comments.sql
--- a/sql/scripts/97_comments.sql
+++ b/sql/scripts/97_comments.sql
@@ -9,7 +9,7 @@ CREATE TABLE sys.comments (
         remark VARCHAR(65000) NOT NULL
 );
 
-CREATE PROCEDURE sys.comment_on(obj_id OID, obj_remark VARCHAR(65000))
+CREATE PROCEDURE sys.comment_on(obj_id INTEGER, obj_remark VARCHAR(65000))
 BEGIN
         IF obj_remark IS NULL OR obj_remark = '' THEN
                 DELETE FROM sys.comments WHERE id = obj_id;
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
@@ -2034,8 +2034,33 @@ rel_commentable_object(mvc *sql, symbol 
 
 static sql_rel *
 rel_comment_on(mvc *sql, sqlid obj_id, char *remark) {
-       mvc_comment_on(sql, obj_id, remark); // wonder how errors are handled.
-       return NULL;
+       // Impersonate EXEC sys.comment_on(obj_id, remark);
+
+       sql_rel *rel;
+       list *exps;
+       sql_exp *exp, *left, *right;
+       sql_subtype *tpe;
+
+       // Imitate rel_psm_call()
+       tpe = sql_bind_localtype("str");
+       left = exp_atom_int(sql->sa, obj_id);
+       right = exp_atom_str(sql->sa, remark, tpe);
+       exp = rel_binop_(sql, left, right, mvc_bind_schema(sql, "sys"), 
"comment_on", card_none);
+
+       // Imitate rel_psm_stmt()
+       exps = new_exp_list(sql->sa);
+       list_append(exps, exp);
+
+       // Imitate rel_psm_block()
+       rel = rel_create(sql->sa);
+       rel->op = op_ddl;
+       rel->exps = exps;
+       rel->flag = DDL_PSM;
+
+       // Imitate rel_psm()
+       sql->type = Q_UPDATE;
+
+       return rel;
 }
 
 sql_rel *
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -1321,14 +1321,6 @@ mvc_is_sorted(mvc *m, sql_column *col)
        return sql_trans_is_sorted(m->session->tr, col);
 }
 
-void
-mvc_comment_on(mvc *m, int id, const char *remark)
-{
-       sql_trans_comment(m->session->tr, id, remark);
-}
-
-
-
 /* variable management */
 static void
 stack_set(mvc *sql, int var, const char *name, sql_subtype *type, sql_rel 
*rel, sql_table *t, int view, int frame)
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -429,7 +429,6 @@ extern sql_column *sql_trans_copy_column
 extern sql_key *sql_trans_copy_key(sql_trans *tr, sql_table *t, sql_key *k);
 extern sql_idx *sql_trans_copy_idx(sql_trans *tr, sql_table *t, sql_idx *i);
 
-extern void sql_trans_comment(sql_trans *tr, int id, const char *remark);
 extern void sql_trans_drop_any_comment(sql_trans *tr, int id);
 
 #endif /*SQL_STORAGE_H */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -5455,42 +5455,7 @@ sql_trans_end(sql_session *s)
 }
 
 void
-sql_trans_comment(sql_trans *tr, int id, const char *remark) {
-       sql_schema *sys;
-       sql_table *comments;
-       sql_column *id_col;
-       oid row;
-
-       sys = find_sql_schema(tr, "sys");
-       assert(sys);
-
-       comments = find_sql_table(sys, "comments");
-       assert(comments);
-
-       id_col = find_sql_column(comments, "id");
-       assert(id_col);
-
-       row = table_funcs.column_find_row(tr, id_col, &id, NULL);
-       if (remark && strlen(remark) > 0) {
-               if (row == oid_nil) {
-                       /* insert comment */
-                       table_funcs.table_insert(tr, comments, &id, remark);
-               } else {
-                       /* update comment */
-                       sql_column *remark_col = find_sql_column(comments, 
"remark");
-                       table_funcs.column_update_value(tr, remark_col, row, 
(void*)remark);
-               }
-       } else {
-               if (row == oid_nil) {
-                       /* nothing to be done */
-               } else {
-                       /* drop comment */
-                       table_funcs.table_delete(tr, comments, row);
-               }
-       }
-}
-
-void sql_trans_drop_any_comment(sql_trans *tr, int id) {
+sql_trans_drop_any_comment(sql_trans *tr, int id) {
        sql_schema *sys;
        sql_column *id_col;
        sql_table *comments;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to