From 0cad3b22cc96985588487b48c6d40e8c4a9e16e7 Mon Sep 17 00:00:00 2001 From: Brian Cloutier Date: Tue, 12 Jul 2016 11:31:27 +0300 Subject: [PATCH] Simplify code and fix include guards in citus_clauses --- .../executor/multi_router_executor.c | 4 +-- .../planner/multi_router_planner.c | 30 +++---------------- src/backend/distributed/utils/citus_clauses.c | 18 ++--------- src/include/distributed/citus_clauses.h | 6 ++-- 4 files changed, 11 insertions(+), 47 deletions(-) diff --git a/src/backend/distributed/executor/multi_router_executor.c b/src/backend/distributed/executor/multi_router_executor.c index 21785f26a..961345a12 100644 --- a/src/backend/distributed/executor/multi_router_executor.c +++ b/src/backend/distributed/executor/multi_router_executor.c @@ -336,8 +336,8 @@ ExecuteTaskAndStoreResults(QueryDesc *queryDesc, Task *task, DeparseShardQuery(query, task, queryStringInfo); queryString = queryStringInfo->data; - elog(DEBUG4, "old query: %s", task->queryString); - elog(DEBUG4, "new query: %s", queryString); + elog(DEBUG4, "query before master evaluation: %s", task->queryString); + elog(DEBUG4, "query after master evaluation: %s", queryString); } /* diff --git a/src/backend/distributed/planner/multi_router_planner.c b/src/backend/distributed/planner/multi_router_planner.c index be66e6067..381acd737 100644 --- a/src/backend/distributed/planner/multi_router_planner.c +++ b/src/backend/distributed/planner/multi_router_planner.c @@ -57,7 +57,7 @@ #include "optimizer/planmain.h" -typedef struct +typedef struct WalkerState { bool containsVar; bool varArgument; @@ -470,11 +470,9 @@ static bool MasterIrreducibleExpressionWalker(Node *expression, WalkerState *state) { char volatileFlag = 0; - WalkerState childState; + WalkerState childState = {false, false, false}; bool containsDisallowedFunction = false; - childState.containsVar = childState.varArgument = childState.badCoalesce = false; - if (expression == NULL) { return false; @@ -501,33 +499,13 @@ MasterIrreducibleExpressionWalker(Node *expression, WalkerState *state) if (IsA(expression, CaseExpr)) { - CaseExpr *expr = (CaseExpr *) expression; - ListCell *temp; - - /* - * contain_mutable_functions doesn't know what to do with CaseWhen so we - * have to break it out ourselves - */ - foreach(temp, expr->args) - { - CaseWhen *when = (CaseWhen *) lfirst(temp); - Assert(IsA(when, CaseWhen)); - - if (contain_mutable_functions((Node *) when->expr) || - contain_mutable_functions((Node *) when->result)) - { - state->badCoalesce = true; - return true; - } - } - - if (contain_mutable_functions((Node *) expr->defresult)) + if (contain_mutable_functions(expression)) { state->badCoalesce = true; return true; } - return MasterIrreducibleExpressionWalker((Node *) (expr->arg), state); + return false; } if (IsA(expression, Var)) diff --git a/src/backend/distributed/utils/citus_clauses.c b/src/backend/distributed/utils/citus_clauses.c index 9a93c9160..18a5c7079 100644 --- a/src/backend/distributed/utils/citus_clauses.c +++ b/src/backend/distributed/utils/citus_clauses.c @@ -101,8 +101,8 @@ ExecuteMasterEvaluableFunctions(Query *query) /* - * Walks the expression, evaluating any STABLE or IMMUTABLE functions so long as they - * don't reference Vars. + * Walks the expression evaluating any node which invokes a function as long as a Var + * doesn't show up in the parameter list. */ static Node * PartiallyEvaluateExpression(Node *expression) @@ -195,23 +195,11 @@ EvaluateNodeIfReferencesFunction(Node *expression) /* structural equivalence */ OpExpr *expr = (OpExpr *) expression; - /* typemod is always -1? */ - return (Node *) citus_evaluate_expr((Expr *) expr, expr->opresulttype, -1, expr->opcollid); } - if (IsA(expression, DistinctExpr)) - { - DistinctExpr *expr = (DistinctExpr *) expression; - - return (Node *) citus_evaluate_expr((Expr *) expr, - expr->opresulttype, - exprTypmod((Node *) expr), - expr->opcollid); - } - if (IsA(expression, CoerceViaIO)) { CoerceViaIO *expr = (CoerceViaIO *) expression; @@ -233,7 +221,6 @@ EvaluateNodeIfReferencesFunction(Node *expression) if (IsA(expression, ScalarArrayOpExpr)) { - /* TODO: Test this! */ ScalarArrayOpExpr *expr = (ScalarArrayOpExpr *) expression; return (Node *) citus_evaluate_expr((Expr *) expr, BOOLOID, -1, InvalidOid); @@ -241,7 +228,6 @@ EvaluateNodeIfReferencesFunction(Node *expression) if (IsA(expression, RowCompareExpr)) { - /* TODO: Test this! */ RowCompareExpr *expr = (RowCompareExpr *) expression; return (Node *) citus_evaluate_expr((Expr *) expr, BOOLOID, -1, InvalidOid); diff --git a/src/include/distributed/citus_clauses.h b/src/include/distributed/citus_clauses.h index acdc3e05a..29905850a 100644 --- a/src/include/distributed/citus_clauses.h +++ b/src/include/distributed/citus_clauses.h @@ -8,8 +8,8 @@ *------------------------------------------------------------------------- */ -#ifndef CITUS_NODEFUNCS_H -#define CITUS_NODEFUNCS_H +#ifndef CITUS_CLAUSES_H +#define CITUS_CLAUSES_H #include "nodes/nodes.h" #include "nodes/parsenodes.h" @@ -17,4 +17,4 @@ extern bool RequiresMasterEvaluation(Query *query); extern void ExecuteMasterEvaluableFunctions(Query *query); -#endif /* CITUS_NODEFUNCS_H */ +#endif /* CITUS_CLAUSES_H */