From 32b057dd6c897bebae4f636f6040d1f10531eda1 Mon Sep 17 00:00:00 2001 From: beyondykk Date: Thu, 17 Aug 2023 16:51:07 +0900 Subject: [PATCH] [CBRD-24938] add comment to dblink query for statement type checking in gateway --- src/parser/name_resolution.c | 8 ++++---- src/parser/parser_support.c | 26 +++++++++++++++++++++++++- src/parser/xasl_generation.c | 4 ++-- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/parser/name_resolution.c b/src/parser/name_resolution.c index f6c6b05c9f1..50cc4f09c2a 100644 --- a/src/parser/name_resolution.c +++ b/src/parser/name_resolution.c @@ -5193,14 +5193,14 @@ pt_dblink_table_get_column_defs (PARSER_CONTEXT * parser, PT_NODE * dblink, S_RE rmt_tbl_cols->set_select_star (); /* preparing the query to get the column info */ - var_buf = pt_append_nulstring (parser, var_buf, "SELECT * FROM "); - var_buf = pt_append_nulstring (parser, var_buf, table_name); - sql = (char *) var_buf->bytes; + sql = pt_append_string (parser, "/* DBLINK SELECT */ SELECT * FROM ", table_name); } else { /* for collecting column info from "SELECT sel-list form dblink(server, 'SELECT ...') */ - sql = (char *) dblink_table->qstr->info.value.data_value.str->bytes; + sql = + pt_append_string (parser, "/* DBLINK SELECT */ ", + (char *) dblink_table->qstr->info.value.data_value.str->bytes); } find = strstr (url, ":?"); diff --git a/src/parser/parser_support.c b/src/parser/parser_support.c index ab91919f15e..40048a8d7c7 100644 --- a/src/parser/parser_support.c +++ b/src/parser/parser_support.c @@ -11607,6 +11607,8 @@ pt_convert_dblink_dml_query (PARSER_CONTEXT * parser, PT_NODE * node, PT_NODE *list = NULL; /* for insert select list */ PT_NODE *spec, *into_spec = NULL, *upd_spec = NULL, *server; + PARSER_VARCHAR *comment, *dml; + switch (node->node_type) { case PT_INSERT: @@ -11721,10 +11723,32 @@ pt_convert_dblink_dml_query (PARSER_CONTEXT * parser, PT_NODE * node, save_custom_print = parser->custom_print; + switch (node->node_type) + { + case PT_INSERT: + comment = pt_append_bytes (parser, NULL, "/* DBLINK INSERT */ ", 20); + break; + case PT_UPDATE: + comment = pt_append_bytes (parser, NULL, "/* DBLINK UPDATE */ ", 20); + break; + case PT_DELETE: + comment = pt_append_bytes (parser, NULL, "/* DBLINK DELETE */ ", 20); + break; + case PT_MERGE: + comment = pt_append_bytes (parser, NULL, "/* DBLINK MERGE */ ", 19); + break; + default: + /* must not reach here */ + assert (false); + } + parser->custom_print |= PT_PRINT_SUPPRESS_SERVER_NAME | PT_PRINT_SUPPRESS_SERIAL_CONV | PT_PRINT_NO_HOST_VAR_INDEX | PT_PRINT_SUPPRESS_FOR_DBLINK; - val->info.value.data_value.str = pt_print_bytes (parser, node); + + dml = pt_print_bytes (parser, node); + + val->info.value.data_value.str = pt_append_bytes (parser, comment, (const char *) dml->bytes, dml->length); parser->custom_print = save_custom_print; diff --git a/src/parser/xasl_generation.c b/src/parser/xasl_generation.c index fa3259cf045..72cf58ee936 100644 --- a/src/parser/xasl_generation.c +++ b/src/parser/xasl_generation.c @@ -12983,11 +12983,11 @@ pt_to_dblink_table_spec_list (PARSER_CONTEXT * parser, PT_NODE * spec, PT_NODE * if (pdblink->rewritten) { - sql = (char *) pdblink->rewritten->bytes; + sql = pt_append_string (parser, "/* DBLINK SELECT */ ", (char *) pdblink->rewritten->bytes); } else { - sql = (char *) pdblink->qstr->info.value.data_value.str->bytes; + sql = pt_append_string (parser, "/* DBLINK SELECT */ ", (char *) pdblink->qstr->info.value.data_value.str->bytes); } if (pdblink->pushed_pred)