mirror of
https://github.com/postgres/postgres.git
synced 2025-05-12 16:21:30 +03:00
Assign collations in partition bound expressions.
Failure to do this can result in errors during evaluation of the bound expression, as illustrated by the new regression test. Back-patch to v12 where the ability for partition bounds to be expressions was added. Discussion: https://postgr.es/m/CAJV4CdrZ5mKuaEsRSbLf2URQ3h6iMtKD=hik8MaF5WwdmC9uZw@mail.gmail.com
This commit is contained in:
parent
bda32733ce
commit
29f20db85e
@ -4197,7 +4197,10 @@ transformPartitionBoundValue(ParseState *pstate, Node *val,
|
|||||||
|
|
||||||
/* Simplify the expression, in case we had a coercion */
|
/* Simplify the expression, in case we had a coercion */
|
||||||
if (!IsA(value, Const))
|
if (!IsA(value, Const))
|
||||||
|
{
|
||||||
|
assign_expr_collations(pstate, value);
|
||||||
value = (Node *) expression_planner((Expr *) value);
|
value = (Node *) expression_planner((Expr *) value);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* transformExpr() should have already rejected column references,
|
* transformExpr() should have already rejected column references,
|
||||||
|
@ -937,6 +937,13 @@ DETAIL: Failing row contains (1, null).
|
|||||||
Partition of: parted_notnull_inh_test FOR VALUES IN (1)
|
Partition of: parted_notnull_inh_test FOR VALUES IN (1)
|
||||||
|
|
||||||
drop table parted_notnull_inh_test;
|
drop table parted_notnull_inh_test;
|
||||||
|
-- check that collations are assigned in partition bound expressions
|
||||||
|
create table parted_boolean_col (a bool, b text) partition by list(a);
|
||||||
|
create table parted_boolean_less partition of parted_boolean_col
|
||||||
|
for values in ('foo' < 'bar');
|
||||||
|
create table parted_boolean_greater partition of parted_boolean_col
|
||||||
|
for values in ('foo' > 'bar');
|
||||||
|
drop table parted_boolean_col;
|
||||||
-- check for a conflicting COLLATE clause
|
-- check for a conflicting COLLATE clause
|
||||||
create table parted_collate_must_match (a text collate "C", b text collate "C")
|
create table parted_collate_must_match (a text collate "C", b text collate "C")
|
||||||
partition by range (a);
|
partition by range (a);
|
||||||
|
@ -769,6 +769,14 @@ insert into parted_notnull_inh_test (b) values (null);
|
|||||||
\d parted_notnull_inh_test1
|
\d parted_notnull_inh_test1
|
||||||
drop table parted_notnull_inh_test;
|
drop table parted_notnull_inh_test;
|
||||||
|
|
||||||
|
-- check that collations are assigned in partition bound expressions
|
||||||
|
create table parted_boolean_col (a bool, b text) partition by list(a);
|
||||||
|
create table parted_boolean_less partition of parted_boolean_col
|
||||||
|
for values in ('foo' < 'bar');
|
||||||
|
create table parted_boolean_greater partition of parted_boolean_col
|
||||||
|
for values in ('foo' > 'bar');
|
||||||
|
drop table parted_boolean_col;
|
||||||
|
|
||||||
-- check for a conflicting COLLATE clause
|
-- check for a conflicting COLLATE clause
|
||||||
create table parted_collate_must_match (a text collate "C", b text collate "C")
|
create table parted_collate_must_match (a text collate "C", b text collate "C")
|
||||||
partition by range (a);
|
partition by range (a);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user