File tree Expand file tree Collapse file tree 3 files changed +25
-1
lines changed Expand file tree Collapse file tree 3 files changed +25
-1
lines changed Original file line number Diff line number Diff line change 2424#include "nodes/makefuncs.h"
2525#include "nodes/nodeFuncs.h"
2626#include "parser/parse_coerce.h"
27+ #include "parser/parse_collate.h"
2728#include "parser/parse_func.h"
2829#include "storage/proc.h"
2930#include "tcop/utility.h"
@@ -1989,6 +1990,7 @@ coerce_fn_result_column(TargetEntry *src_tle,
19891990 -1 );
19901991 if (cast_result == NULL )
19911992 return false;
1993+ assign_expr_collations (NULL , cast_result );
19921994 src_tle -> expr = (Expr * ) cast_result ;
19931995 /* Make a Var referencing the possibly-modified TLE */
19941996 new_tle_expr = (Expr * ) makeVarFromTargetEntry (1 , src_tle );
@@ -2007,6 +2009,7 @@ coerce_fn_result_column(TargetEntry *src_tle,
20072009 -1 );
20082010 if (cast_result == NULL )
20092011 return false;
2012+ assign_expr_collations (NULL , cast_result );
20102013 /* Did the coercion actually do anything? */
20112014 if (cast_result != (Node * ) var )
20122015 * 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;
536536 3 | bbc
537537(4 rows)
538538
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+
539551-- polymorphism
540552SELECT * FROM unnest((SELECT array_agg(b ORDER BY b) FROM collate_test1)) ORDER BY 1;
541553 unnest
@@ -682,7 +694,7 @@ SELECT collation for ((SELECT b FROM collate_test1 LIMIT 1));
682694-- must get rid of them.
683695--
684696DROP SCHEMA collate_tests CASCADE;
685- NOTICE: drop cascades to 17 other objects
697+ NOTICE: drop cascades to 18 other objects
686698DETAIL: drop cascades to table collate_test1
687699drop cascades to table collate_test_like
688700drop cascades to table collate_test2
@@ -694,6 +706,7 @@ drop cascades to view collview1
694706drop cascades to view collview2
695707drop cascades to view collview3
696708drop cascades to type testdomain
709+ drop cascades to function vc(text)
697710drop cascades to function dup(anyelement)
698711drop cascades to table collate_test20
699712drop 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;
177177SELECT a, CAST(b AS varchar ) FROM collate_test2 ORDER BY 2 ;
178178
179179
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+
180188-- polymorphism
181189
182190SELECT * 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