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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list