File tree 3 files changed +25
-1
lines changed
3 files changed +25
-1
lines changed Original file line number Diff line number Diff line change 24
24
#include "nodes/makefuncs.h"
25
25
#include "nodes/nodeFuncs.h"
26
26
#include "parser/parse_coerce.h"
27
+ #include "parser/parse_collate.h"
27
28
#include "parser/parse_func.h"
28
29
#include "storage/proc.h"
29
30
#include "tcop/utility.h"
@@ -1989,6 +1990,7 @@ coerce_fn_result_column(TargetEntry *src_tle,
1989
1990
-1 );
1990
1991
if (cast_result == NULL )
1991
1992
return false;
1993
+ assign_expr_collations (NULL , cast_result );
1992
1994
src_tle -> expr = (Expr * ) cast_result ;
1993
1995
/* Make a Var referencing the possibly-modified TLE */
1994
1996
new_tle_expr = (Expr * ) makeVarFromTargetEntry (1 , src_tle );
@@ -2007,6 +2009,7 @@ coerce_fn_result_column(TargetEntry *src_tle,
2007
2009
-1 );
2008
2010
if (cast_result == NULL )
2009
2011
return false;
2012
+ assign_expr_collations (NULL , cast_result );
2010
2013
/* Did the coercion actually do anything? */
2011
2014
if (cast_result != (Node * ) var )
2012
2015
* upper_tlist_nontrivial = true;
Original file line number Diff line number Diff line change @@ -536,6 +536,18 @@ SELECT a, CAST(b AS varchar) FROM collate_test2 ORDER BY 2;
536
536
3 | bbc
537
537
(4 rows)
538
538
539
+ -- result of a SQL function
540
+ CREATE FUNCTION vc (text) RETURNS text LANGUAGE sql
541
+ AS 'select $1::varchar';
542
+ SELECT a, b FROM collate_test1 ORDER BY a, vc(b);
543
+ a | b
544
+ ---+-----
545
+ 1 | abc
546
+ 2 | Abc
547
+ 3 | bbc
548
+ 4 | ABD
549
+ (4 rows)
550
+
539
551
-- polymorphism
540
552
SELECT * FROM unnest((SELECT array_agg(b ORDER BY b) FROM collate_test1)) ORDER BY 1;
541
553
unnest
@@ -682,7 +694,7 @@ SELECT collation for ((SELECT b FROM collate_test1 LIMIT 1));
682
694
-- must get rid of them.
683
695
--
684
696
DROP SCHEMA collate_tests CASCADE;
685
- NOTICE: drop cascades to 17 other objects
697
+ NOTICE: drop cascades to 18 other objects
686
698
DETAIL: drop cascades to table collate_test1
687
699
drop cascades to table collate_test_like
688
700
drop cascades to table collate_test2
@@ -694,6 +706,7 @@ drop cascades to view collview1
694
706
drop cascades to view collview2
695
707
drop cascades to view collview3
696
708
drop cascades to type testdomain
709
+ drop cascades to function vc(text)
697
710
drop cascades to function dup(anyelement)
698
711
drop cascades to table collate_test20
699
712
drop cascades to table collate_test21
Original file line number Diff line number Diff line change @@ -177,6 +177,14 @@ SELECT a, CAST(b AS varchar) FROM collate_test1 ORDER BY 2;
177
177
SELECT a, CAST(b AS varchar ) FROM collate_test2 ORDER BY 2 ;
178
178
179
179
180
+ -- result of a SQL function
181
+
182
+ CREATE FUNCTION vc (text ) RETURNS text LANGUAGE sql
183
+ AS ' select $1::varchar' ;
184
+
185
+ SELECT a, b FROM collate_test1 ORDER BY a, vc(b);
186
+
187
+
180
188
-- polymorphism
181
189
182
190
SELECT * FROM unnest((SELECT array_agg(b ORDER BY b) FROM collate_test1)) ORDER BY 1 ;
You can’t perform that action at this time.
0 commit comments