diff --git a/src/backend/distributed/master/master_delete_protocol.c b/src/backend/distributed/master/master_delete_protocol.c index 820f08046..57b773695 100644 --- a/src/backend/distributed/master/master_delete_protocol.c +++ b/src/backend/distributed/master/master_delete_protocol.c @@ -109,11 +109,16 @@ master_apply_delete_command(PG_FUNCTION_ARGS) LOCKMODE lockMode = 0; char partitionMethod = 0; bool failOK = false; +#if (PG_VERSION_NUM >= 100000) + RawStmt *rawStmt = (RawStmt *) ParseTreeRawStmt(queryString); + queryTreeNode = rawStmt->stmt; +#else + queryTreeNode = ParseTreeNode(queryString); +#endif EnsureCoordinator(); CheckCitusVersion(ERROR); - queryTreeNode = ParseTreeNode(queryString); if (!IsA(queryTreeNode, DeleteStmt)) { ereport(ERROR, (errmsg("query \"%s\" is not a delete statement", @@ -144,7 +149,11 @@ master_apply_delete_command(PG_FUNCTION_ARGS) CheckDistributedTable(relationId); EnsureTablePermissions(relationId, ACL_DELETE); +#if (PG_VERSION_NUM >= 100000) + queryTreeList = pg_analyze_and_rewrite(rawStmt, queryString, NULL, 0, NULL); +#else queryTreeList = pg_analyze_and_rewrite(queryTreeNode, queryString, NULL, 0); +#endif deleteQuery = (Query *) linitial(queryTreeList); CheckTableCount(deleteQuery); diff --git a/src/backend/distributed/master/master_modify_multiple_shards.c b/src/backend/distributed/master/master_modify_multiple_shards.c index f7838b08c..08d9bc291 100644 --- a/src/backend/distributed/master/master_modify_multiple_shards.c +++ b/src/backend/distributed/master/master_modify_multiple_shards.c @@ -85,12 +85,17 @@ master_modify_multiple_shards(PG_FUNCTION_ARGS) List *prunedShardIntervalList = NIL; List *taskList = NIL; int32 affectedTupleCount = 0; +#if (PG_VERSION_NUM >= 100000) + RawStmt *rawStmt = (RawStmt *) ParseTreeRawStmt(queryString); + queryTreeNode = rawStmt->stmt; +#else + queryTreeNode = ParseTreeNode(queryString); +#endif EnsureCoordinator(); CheckCitusVersion(ERROR); - queryTreeNode = ParseTreeNode(queryString); if (IsA(queryTreeNode, DeleteStmt)) { DeleteStmt *deleteStatement = (DeleteStmt *) queryTreeNode; @@ -136,7 +141,11 @@ master_modify_multiple_shards(PG_FUNCTION_ARGS) CheckDistributedTable(relationId); +#if (PG_VERSION_NUM >= 100000) + queryTreeList = pg_analyze_and_rewrite(rawStmt, queryString, NULL, 0, NULL); +#else queryTreeList = pg_analyze_and_rewrite(queryTreeNode, queryString, NULL, 0); +#endif modifyQuery = (Query *) linitial(queryTreeList); if (modifyQuery->commandType != CMD_UTILITY) diff --git a/src/backend/distributed/test/deparse_shard_query.c b/src/backend/distributed/test/deparse_shard_query.c index 883f59258..3e36cf324 100644 --- a/src/backend/distributed/test/deparse_shard_query.c +++ b/src/backend/distributed/test/deparse_shard_query.c @@ -50,9 +50,14 @@ deparse_shard_query_test(PG_FUNCTION_ARGS) { Node *parsetree = (Node *) lfirst(parseTreeCell); ListCell *queryTreeCell = NULL; + List *queryTreeList = NIL; - List *queryTreeList = pg_analyze_and_rewrite(parsetree, queryStringChar, - NULL, 0); +#if (PG_VERSION_NUM >= 100000) + queryTreeList = pg_analyze_and_rewrite((RawStmt *) parsetree, queryStringChar, + NULL, 0, NULL); +#else + queryTreeList = pg_analyze_and_rewrite(parsetree, queryStringChar, NULL, 0); +#endif foreach(queryTreeCell, queryTreeList) { diff --git a/src/backend/distributed/worker/worker_data_fetch_protocol.c b/src/backend/distributed/worker/worker_data_fetch_protocol.c index cda912c64..3ceb1ae69 100644 --- a/src/backend/distributed/worker/worker_data_fetch_protocol.c +++ b/src/backend/distributed/worker/worker_data_fetch_protocol.c @@ -1170,6 +1170,22 @@ ExecuteRemoteCommand(const char *nodeName, uint32 nodePort, StringInfo queryStri */ Node * ParseTreeNode(const char *ddlCommand) +{ + Node *parseTreeNode = ParseTreeRawStmt(ddlCommand); + +#if (PG_VERSION_NUM >= 100000) + parseTreeNode = ((RawStmt *) parseTreeNode)->stmt; +#endif + + return parseTreeNode; +} + + +/* + * Parses the given DDL command, and returns the tree node for parsed command. + */ +Node * +ParseTreeRawStmt(const char *ddlCommand) { Node *parseTreeNode = NULL; List *parseTreeList = NULL; diff --git a/src/include/distributed/worker_protocol.h b/src/include/distributed/worker_protocol.h index a8f074be3..3bc5c9bf0 100644 --- a/src/include/distributed/worker_protocol.h +++ b/src/include/distributed/worker_protocol.h @@ -137,6 +137,7 @@ extern Datum CompareCall2(FmgrInfo *funcInfo, Datum leftArgument, Datum rightArg /* Function declaration for parsing tree node */ extern Node * ParseTreeNode(const char *ddlCommand); +extern Node * ParseTreeRawStmt(const char *ddlCommand); /* Function declarations for applying distributed execution primitives */ extern Datum worker_fetch_partition_file(PG_FUNCTION_ARGS);