mirror of https://github.com/citusdata/citus.git
Show 'AS "?column?"' explicitly when it's important in ruleutils_15.c
Relevant PG commit: c7461fc25558832dd347a9c8150b0f1ed85e36e8naisila/failure_pg15
parent
e21e976d64
commit
c41ed5946c
|
@ -352,30 +352,34 @@ static void push_ancestor_plan(deparse_namespace *dpns, ListCell *ancestor_cell,
|
|||
static void pop_ancestor_plan(deparse_namespace *dpns,
|
||||
deparse_namespace *save_dpns);
|
||||
static void get_query_def(Query *query, StringInfo buf, List *parentnamespace,
|
||||
TupleDesc resultDesc,
|
||||
TupleDesc resultDesc, bool colNamesVisible,
|
||||
int prettyFlags, int wrapColumn, int startIndent);
|
||||
static void get_query_def_extended(Query *query, StringInfo buf,
|
||||
List *parentnamespace, Oid distrelid, int64 shardid,
|
||||
TupleDesc resultDesc, int prettyFlags, int wrapColumn,
|
||||
TupleDesc resultDesc, bool colNamesVisible,
|
||||
int prettyFlags, int wrapColumn,
|
||||
int startIndent);
|
||||
static void get_values_def(List *values_lists, deparse_context *context);
|
||||
static void get_with_clause(Query *query, deparse_context *context);
|
||||
static void get_select_query_def(Query *query, deparse_context *context,
|
||||
TupleDesc resultDesc);
|
||||
static void get_insert_query_def(Query *query, deparse_context *context);
|
||||
static void get_update_query_def(Query *query, deparse_context *context);
|
||||
TupleDesc resultDesc, bool colNamesVisible);
|
||||
static void get_insert_query_def(Query *query, deparse_context *context,
|
||||
bool colNamesVisible);
|
||||
static void get_update_query_def(Query *query, deparse_context *context,
|
||||
bool colNamesVisible);
|
||||
static void get_update_query_targetlist_def(Query *query, List *targetList,
|
||||
deparse_context *context,
|
||||
RangeTblEntry *rte);
|
||||
static void get_delete_query_def(Query *query, deparse_context *context);
|
||||
static void get_delete_query_def(Query *query, deparse_context *context,
|
||||
bool colNamesVisible);
|
||||
static void get_utility_query_def(Query *query, deparse_context *context);
|
||||
static void get_basic_select_query(Query *query, deparse_context *context,
|
||||
TupleDesc resultDesc);
|
||||
TupleDesc resultDesc, bool colNamesVisible);
|
||||
static void get_target_list(List *targetList, deparse_context *context,
|
||||
TupleDesc resultDesc);
|
||||
TupleDesc resultDesc, bool colNamesVisible);
|
||||
static void get_setop_query(Node *setOp, Query *query,
|
||||
deparse_context *context,
|
||||
TupleDesc resultDesc);
|
||||
TupleDesc resultDesc, bool colNamesVisible);
|
||||
static Node *get_rule_sortgroupclause(Index ref, List *tlist,
|
||||
bool force_colno,
|
||||
deparse_context *context);
|
||||
|
@ -476,7 +480,7 @@ static void get_json_table_columns(TableFunc *tf, JsonTableParent *node,
|
|||
void
|
||||
pg_get_query_def(Query *query, StringInfo buffer)
|
||||
{
|
||||
get_query_def(query, buffer, NIL, NULL, 0, WRAP_COLUMN_DEFAULT, 0);
|
||||
get_query_def(query, buffer, NIL, NULL, false, 0, WRAP_COLUMN_DEFAULT, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1964,24 +1968,36 @@ void
|
|||
deparse_shard_query(Query *query, Oid distrelid, int64 shardid,
|
||||
StringInfo buffer)
|
||||
{
|
||||
get_query_def_extended(query, buffer, NIL, distrelid, shardid, NULL, 0,
|
||||
WRAP_COLUMN_DEFAULT, 0);
|
||||
get_query_def_extended(query, buffer, NIL, distrelid, shardid, NULL,
|
||||
false,
|
||||
0, WRAP_COLUMN_DEFAULT, 0);
|
||||
}
|
||||
|
||||
|
||||
/* ----------
|
||||
* get_query_def - Parse back one query parsetree
|
||||
*
|
||||
* If resultDesc is not NULL, then it is the output tuple descriptor for
|
||||
* the view represented by a SELECT query.
|
||||
* query: parsetree to be displayed
|
||||
* buf: output text is appended to buf
|
||||
* parentnamespace: list (initially empty) of outer-level deparse_namespace's
|
||||
* resultDesc: if not NULL, the output tuple descriptor for the view
|
||||
* represented by a SELECT query. We use the column names from it
|
||||
* to label SELECT output columns, in preference to names in the query
|
||||
* colNamesVisible: true if the surrounding context cares about the output
|
||||
* column names at all (as, for example, an EXISTS() context does not);
|
||||
* when false, we can suppress dummy column labels such as "?column?"
|
||||
* prettyFlags: bitmask of PRETTYFLAG_XXX options
|
||||
* wrapColumn: maximum line length, or -1 to disable wrapping
|
||||
* startIndent: initial indentation amount
|
||||
* ----------
|
||||
*/
|
||||
static void
|
||||
get_query_def(Query *query, StringInfo buf, List *parentnamespace,
|
||||
TupleDesc resultDesc,
|
||||
TupleDesc resultDesc, bool colNamesVisible,
|
||||
int prettyFlags, int wrapColumn, int startIndent)
|
||||
{
|
||||
get_query_def_extended(query, buf, parentnamespace, InvalidOid, 0, resultDesc,
|
||||
colNamesVisible,
|
||||
prettyFlags, wrapColumn, startIndent);
|
||||
}
|
||||
|
||||
|
@ -1998,6 +2014,7 @@ get_query_def(Query *query, StringInfo buf, List *parentnamespace,
|
|||
static void
|
||||
get_query_def_extended(Query *query, StringInfo buf, List *parentnamespace,
|
||||
Oid distrelid, int64 shardid, TupleDesc resultDesc,
|
||||
bool colNamesVisible,
|
||||
int prettyFlags, int wrapColumn, int startIndent)
|
||||
{
|
||||
deparse_context context;
|
||||
|
@ -2049,19 +2066,19 @@ get_query_def_extended(Query *query, StringInfo buf, List *parentnamespace,
|
|||
switch (query->commandType)
|
||||
{
|
||||
case CMD_SELECT:
|
||||
get_select_query_def(query, &context, resultDesc);
|
||||
get_select_query_def(query, &context, resultDesc, colNamesVisible);
|
||||
break;
|
||||
|
||||
case CMD_UPDATE:
|
||||
get_update_query_def(query, &context);
|
||||
get_update_query_def(query, &context, colNamesVisible);
|
||||
break;
|
||||
|
||||
case CMD_INSERT:
|
||||
get_insert_query_def(query, &context);
|
||||
get_insert_query_def(query, &context, colNamesVisible);
|
||||
break;
|
||||
|
||||
case CMD_DELETE:
|
||||
get_delete_query_def(query, &context);
|
||||
get_delete_query_def(query, &context, colNamesVisible);
|
||||
break;
|
||||
|
||||
case CMD_NOTHING:
|
||||
|
@ -2188,6 +2205,7 @@ get_with_clause(Query *query, deparse_context *context)
|
|||
if (PRETTY_INDENT(context))
|
||||
appendContextKeyword(context, "", 0, 0, 0);
|
||||
get_query_def((Query *) cte->ctequery, buf, context->namespaces, NULL,
|
||||
true,
|
||||
context->prettyFlags, context->wrapColumn,
|
||||
context->indentLevel);
|
||||
if (PRETTY_INDENT(context))
|
||||
|
@ -2269,7 +2287,7 @@ get_with_clause(Query *query, deparse_context *context)
|
|||
*/
|
||||
static void
|
||||
get_select_query_def(Query *query, deparse_context *context,
|
||||
TupleDesc resultDesc)
|
||||
TupleDesc resultDesc, bool colNamesVisible)
|
||||
{
|
||||
StringInfo buf = context->buf;
|
||||
List *save_windowclause;
|
||||
|
@ -2293,13 +2311,14 @@ get_select_query_def(Query *query, deparse_context *context,
|
|||
*/
|
||||
if (query->setOperations)
|
||||
{
|
||||
get_setop_query(query->setOperations, query, context, resultDesc);
|
||||
get_setop_query(query->setOperations, query, context, resultDesc,
|
||||
colNamesVisible);
|
||||
/* ORDER BY clauses must be simple in this case */
|
||||
force_colno = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
get_basic_select_query(query, context, resultDesc);
|
||||
get_basic_select_query(query, context, resultDesc, colNamesVisible);
|
||||
force_colno = false;
|
||||
}
|
||||
|
||||
|
@ -2467,7 +2486,7 @@ get_simple_values_rte(Query *query, TupleDesc resultDesc)
|
|||
|
||||
static void
|
||||
get_basic_select_query(Query *query, deparse_context *context,
|
||||
TupleDesc resultDesc)
|
||||
TupleDesc resultDesc, bool colNamesVisible)
|
||||
{
|
||||
StringInfo buf = context->buf;
|
||||
RangeTblEntry *values_rte;
|
||||
|
@ -2523,7 +2542,7 @@ get_basic_select_query(Query *query, deparse_context *context,
|
|||
}
|
||||
|
||||
/* Then we tell what to select (the targetlist) */
|
||||
get_target_list(query->targetList, context, resultDesc);
|
||||
get_target_list(query->targetList, context, resultDesc, colNamesVisible);
|
||||
|
||||
/* Add the FROM clause if needed */
|
||||
get_from_clause(query, " FROM ", context);
|
||||
|
@ -2595,11 +2614,13 @@ get_basic_select_query(Query *query, deparse_context *context,
|
|||
* get_target_list - Parse back a SELECT target list
|
||||
*
|
||||
* This is also used for RETURNING lists in INSERT/UPDATE/DELETE.
|
||||
*
|
||||
* resultDesc and colNamesVisible are as for get_query_def()
|
||||
* ----------
|
||||
*/
|
||||
static void
|
||||
get_target_list(List *targetList, deparse_context *context,
|
||||
TupleDesc resultDesc)
|
||||
TupleDesc resultDesc, bool colNamesVisible)
|
||||
{
|
||||
StringInfo buf = context->buf;
|
||||
StringInfoData targetbuf;
|
||||
|
@ -2650,8 +2671,13 @@ get_target_list(List *targetList, deparse_context *context,
|
|||
else
|
||||
{
|
||||
get_rule_expr((Node *) tle->expr, context, true);
|
||||
/* We'll show the AS name unless it's this: */
|
||||
attname = "?column?";
|
||||
|
||||
/*
|
||||
* When colNamesVisible is true, we should always show the
|
||||
* assigned column name explicitly. Otherwise, show it only if
|
||||
* it's not FigureColname's fallback.
|
||||
*/
|
||||
attname = colNamesVisible ? NULL : "?column?";
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2730,7 +2756,7 @@ get_target_list(List *targetList, deparse_context *context,
|
|||
|
||||
static void
|
||||
get_setop_query(Node *setOp, Query *query, deparse_context *context,
|
||||
TupleDesc resultDesc)
|
||||
TupleDesc resultDesc, bool colNamesVisible)
|
||||
{
|
||||
StringInfo buf = context->buf;
|
||||
bool need_paren;
|
||||
|
@ -2756,6 +2782,7 @@ get_setop_query(Node *setOp, Query *query, deparse_context *context,
|
|||
if (need_paren)
|
||||
appendStringInfoChar(buf, '(');
|
||||
get_query_def(subquery, buf, context->namespaces, resultDesc,
|
||||
colNamesVisible,
|
||||
context->prettyFlags, context->wrapColumn,
|
||||
context->indentLevel);
|
||||
if (need_paren)
|
||||
|
@ -2798,7 +2825,7 @@ get_setop_query(Node *setOp, Query *query, deparse_context *context,
|
|||
else
|
||||
subindent = 0;
|
||||
|
||||
get_setop_query(op->larg, query, context, resultDesc);
|
||||
get_setop_query(op->larg, query, context, resultDesc, colNamesVisible);
|
||||
|
||||
if (need_paren)
|
||||
appendContextKeyword(context, ") ", -subindent, 0, 0);
|
||||
|
@ -2842,7 +2869,7 @@ get_setop_query(Node *setOp, Query *query, deparse_context *context,
|
|||
subindent = 0;
|
||||
appendContextKeyword(context, "", subindent, 0, 0);
|
||||
|
||||
get_setop_query(op->rarg, query, context, resultDesc);
|
||||
get_setop_query(op->rarg, query, context, resultDesc, false);
|
||||
|
||||
if (PRETTY_INDENT(context))
|
||||
context->indentLevel -= subindent;
|
||||
|
@ -3178,7 +3205,8 @@ get_rule_windowspec(WindowClause *wc, List *targetList,
|
|||
* ----------
|
||||
*/
|
||||
static void
|
||||
get_insert_query_def(Query *query, deparse_context *context)
|
||||
get_insert_query_def(Query *query, deparse_context *context,
|
||||
bool colNamesVisible)
|
||||
{
|
||||
StringInfo buf = context->buf;
|
||||
RangeTblEntry *select_rte = NULL;
|
||||
|
@ -3290,6 +3318,7 @@ get_insert_query_def(Query *query, deparse_context *context)
|
|||
{
|
||||
/* Add the SELECT */
|
||||
get_query_def(select_rte->subquery, buf, context->namespaces, NULL,
|
||||
false,
|
||||
context->prettyFlags, context->wrapColumn,
|
||||
context->indentLevel);
|
||||
}
|
||||
|
@ -3389,7 +3418,7 @@ get_insert_query_def(Query *query, deparse_context *context)
|
|||
{
|
||||
appendContextKeyword(context, " RETURNING",
|
||||
-PRETTYINDENT_STD, PRETTYINDENT_STD, 1);
|
||||
get_target_list(query->returningList, context, NULL);
|
||||
get_target_list(query->returningList, context, NULL, colNamesVisible);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3399,7 +3428,8 @@ get_insert_query_def(Query *query, deparse_context *context)
|
|||
* ----------
|
||||
*/
|
||||
static void
|
||||
get_update_query_def(Query *query, deparse_context *context)
|
||||
get_update_query_def(Query *query, deparse_context *context,
|
||||
bool colNamesVisible)
|
||||
{
|
||||
StringInfo buf = context->buf;
|
||||
RangeTblEntry *rte;
|
||||
|
@ -3469,7 +3499,7 @@ get_update_query_def(Query *query, deparse_context *context)
|
|||
{
|
||||
appendContextKeyword(context, " RETURNING",
|
||||
-PRETTYINDENT_STD, PRETTYINDENT_STD, 1);
|
||||
get_target_list(query->returningList, context, NULL);
|
||||
get_target_list(query->returningList, context, NULL, colNamesVisible);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3631,7 +3661,8 @@ get_update_query_targetlist_def(Query *query, List *targetList,
|
|||
* ----------
|
||||
*/
|
||||
static void
|
||||
get_delete_query_def(Query *query, deparse_context *context)
|
||||
get_delete_query_def(Query *query, deparse_context *context,
|
||||
bool colNamesVisible)
|
||||
{
|
||||
StringInfo buf = context->buf;
|
||||
RangeTblEntry *rte;
|
||||
|
@ -3696,7 +3727,7 @@ get_delete_query_def(Query *query, deparse_context *context)
|
|||
{
|
||||
appendContextKeyword(context, " RETURNING",
|
||||
-PRETTYINDENT_STD, PRETTYINDENT_STD, 1);
|
||||
get_target_list(query->returningList, context, NULL);
|
||||
get_target_list(query->returningList, context, NULL, colNamesVisible);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7827,7 +7858,7 @@ get_sublink_expr(SubLink *sublink, deparse_context *context)
|
|||
if (need_paren)
|
||||
appendStringInfoChar(buf, '(');
|
||||
|
||||
get_query_def(query, buf, context->namespaces, NULL,
|
||||
get_query_def(query, buf, context->namespaces, NULL, false,
|
||||
context->prettyFlags, context->wrapColumn,
|
||||
context->indentLevel);
|
||||
|
||||
|
@ -8339,6 +8370,7 @@ get_from_clause_item(Node *jtnode, Query *query, deparse_context *context)
|
|||
/* Subquery RTE */
|
||||
appendStringInfoChar(buf, '(');
|
||||
get_query_def(rte->subquery, buf, context->namespaces, NULL,
|
||||
true,
|
||||
context->prettyFlags, context->wrapColumn,
|
||||
context->indentLevel);
|
||||
appendStringInfoChar(buf, ')');
|
||||
|
|
Loading…
Reference in New Issue