*/
if (!commit)
{
- char *rewrite_query;
+ char *rewrite_query = NULL;
if (node)
{
}
/* rewrite `now()' to timestamp literal */
- rewrite_query = rewrite_timestamp(backend, query_context->parse_tree, false, msg);
+ if (!is_select_query(node, query_context->original_query) ||
+ pool_has_function_call(node) || pool_config->replicate_select)
+ rewrite_query = rewrite_timestamp(backend, query_context->parse_tree, false, msg);
/*
* If the query is BEGIN READ WRITE or
stmt = ((PrepareStmt *) node)->query;
ctx.rewrite_to_params = true;
}
- else if (IsA(node, CopyStmt) && ((CopyStmt *) node)->query != NULL)
+ /*
+ * CopyStmt
+ */
+ else if (IsA(node, CopyStmt) &&((CopyStmt *) node)->query != NULL)
stmt = ((CopyStmt *) node)->query;
+ /*
+ * ExplainStmt
+ */
+ else if (IsA(node, ExplainStmt))
+ {
+ ListCell *lc;
+ bool analyze = false;
+
+ /* Check to see if this is EXPLAIN ANALYZE */
+ foreach(lc, ((ExplainStmt *) node)->options)
+ {
+ DefElem *opt = (DefElem *) lfirst(lc);
+
+ if (strcmp(opt->defname, "analyze") == 0)
+ {
+ stmt = ((ExplainStmt *) node)->query;
+ analyze = true;
+ break;
+ }
+ }
+
+ if (!analyze)
+ return NULL;
+ }
else
stmt = node;
rewrite_timestamp_walker, (void *) &ctx);
}
+ if (s_stmt->withClause)
+ {
+ raw_expression_tree_walker(
+ (Node *) s_stmt->withClause,
+ rewrite_timestamp_walker, (void *) &ctx);
+ }
+
rewrite = ctx.rewrite;
}
else