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