@@ -697,7 +697,7 @@ create_single_partition_internal(Oid parent_relid,
697
697
698
698
* expr_type = DatumGetObjectId (config_values [Anum_pathman_config_atttype - 1 ]);
699
699
expr_string = TextDatumGetCString (config_values [Anum_pathman_config_expression - 1 ]);
700
- * expr = get_raw_expression (parent_relid , expr_string , NULL );
700
+ * expr = get_raw_expression (parent_relid , expr_string , NULL , NULL );
701
701
pfree (expr_string );
702
702
}
703
703
@@ -1686,7 +1686,8 @@ text_to_regprocedure(text *proc_signature)
1686
1686
1687
1687
/* Wraps expression by SELECT query and returns parsed tree */
1688
1688
Node *
1689
- get_raw_expression (Oid relid , const char * expr , char * * query_string_out )
1689
+ get_raw_expression (Oid relid , const char * expr , char * * query_string_out ,
1690
+ Node * * parsetree )
1690
1691
{
1691
1692
Node * result ;
1692
1693
SelectStmt * select_stmt ;
@@ -1705,7 +1706,14 @@ get_raw_expression(Oid relid, const char *expr, char **query_string_out)
1705
1706
{
1706
1707
* query_string_out = query_string ;
1707
1708
}
1709
+
1708
1710
select_stmt = (SelectStmt * ) lfirst (list_head (parsetree_list ));
1711
+
1712
+ if (parsetree )
1713
+ {
1714
+ * parsetree = (Node * ) select_stmt ;
1715
+ }
1716
+
1709
1717
target = (ResTarget * ) lfirst (list_head (select_stmt -> targetList ));
1710
1718
result = (Node * ) target -> val ;
1711
1719
return result ;
@@ -1719,7 +1727,8 @@ PartExpressionInfo *
1719
1727
get_part_expression_info (Oid relid , const char * expr_string ,
1720
1728
bool check_hash_func , bool make_plan )
1721
1729
{
1722
- Node * expr_node ;
1730
+ Node * expr_node ,
1731
+ * parsetree ;
1723
1732
Query * query ;
1724
1733
char * query_string , * out_string ;
1725
1734
PartExpressionInfo * expr_info ;
@@ -1730,15 +1739,16 @@ get_part_expression_info(Oid relid, const char *expr_string,
1730
1739
expr_info = palloc (sizeof (PartExpressionInfo ));
1731
1740
1732
1741
/* Keep raw expression */
1733
- expr_info -> raw_expr = get_raw_expression (relid , expr_string , & query_string );
1742
+ expr_info -> raw_expr = get_raw_expression (relid , expr_string ,
1743
+ & query_string , & parsetree );
1734
1744
expr_info -> expr_datum = (Datum ) 0 ;
1735
1745
1736
1746
/* We don't need pathman activity initialization for this relation yet */
1737
1747
pathman_hooks_enabled = false;
1738
1748
1739
1749
/* This will fail with elog in case of wrong expression
1740
1750
* with more or less understable text */
1741
- querytree_list = pg_analyze_and_rewrite (expr_info -> raw_expr ,
1751
+ querytree_list = pg_analyze_and_rewrite (parsetree ,
1742
1752
query_string , NULL , 0 );
1743
1753
query = (Query * ) lfirst (list_head (querytree_list ));
1744
1754
0 commit comments