]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix test_rls_hooks to assign expression collations properly.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 11 Dec 2018 16:48:01 +0000 (11:48 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 11 Dec 2018 16:48:01 +0000 (11:48 -0500)
This module overlooked this necessary fixup step on the results of
transformWhereClause().  It accidentally worked anyway, because the
constructed expression involved type "name" which is not collatable,
but it fell over while I was experimenting with changing "name" to
be collatable.

Back-patch, not because there's any live bug here in back branches,
but because somebody might use this code as a model for some real
application and then not understand why it doesn't work.

src/test/modules/test_rls_hooks/test_rls_hooks.c

index cc865cdb98b3532e8889b20da7f54234a041ca25..4052006be0c0c0863afa96b2f55c10be510a411c 100644 (file)
@@ -22,6 +22,7 @@
 #include <nodes/makefuncs.h>
 #include <nodes/makefuncs.h>
 #include <parser/parse_clause.h>
+#include <parser/parse_collate.h>
 #include <parser/parse_node.h>
 #include <parser/parse_relation.h>
 #include <rewrite/rowsecurity.h>
@@ -107,6 +108,8 @@ test_rls_hooks_permissive(CmdType cmdtype, Relation relation)
        policy->qual = (Expr *) transformWhereClause(qual_pstate, copyObject(e),
                                                                                                 EXPR_KIND_POLICY,
                                                                                                 "POLICY");
+       /* Fix up collation information */
+       assign_expr_collations(qual_pstate, (Node *) policy->qual);
 
        policy->with_check_qual = copyObject(policy->qual);
        policy->hassublinks = false;
@@ -165,6 +168,8 @@ test_rls_hooks_restrictive(CmdType cmdtype, Relation relation)
        policy->qual = (Expr *) transformWhereClause(qual_pstate, copyObject(e),
                                                                                                 EXPR_KIND_POLICY,
                                                                                                 "POLICY");
+       /* Fix up collation information */
+       assign_expr_collations(qual_pstate, (Node *) policy->qual);
 
        policy->with_check_qual = copyObject(policy->qual);
        policy->hassublinks = false;