Skip to content

Commit 9905ac6

Browse files
committed
tests and fixes for validate_expression()
1 parent a27dfd6 commit 9905ac6

File tree

3 files changed

+27
-12
lines changed

3 files changed

+27
-12
lines changed

expected/pathman_calamity.out

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -297,15 +297,23 @@ ERROR: relation "1" does not exist
297297
SELECT validate_relname(NULL);
298298
ERROR: relation should not be NULL
299299
/* check function validate_expression() */
300-
SELECT validate_expression('calamity.part_test');
301-
ERROR: function validate_expression(unknown) does not exist at character 51
302-
SELECT validate_expression('calamity.part_test', NULL);
300+
SELECT validate_expression(1::regclass, NULL); /* not ok */
301+
ERROR: relation "1" does not exist
302+
SELECT validate_expression(NULL::regclass, NULL); /* not ok */
303+
ERROR: 'relid' should not be NULL
304+
SELECT validate_expression('calamity.part_test', NULL); /* not ok */
303305
ERROR: 'expression' should not be NULL
304-
SELECT validate_expression('calamity.part_test', 'valval');
306+
SELECT validate_expression('calamity.part_test', 'valval'); /* not ok */
305307
ERROR: cannot find type name for attribute "valval" of relation "part_test"
306-
SELECT validate_expression('calamity.part_test', 'random()');
308+
SELECT validate_expression('calamity.part_test', 'random()'); /* not ok */
307309
ERROR: functions in partitioning expression must be marked IMMUTABLE
308-
SELECT validate_expression('calamity.part_test', 'val');
310+
SELECT validate_expression('calamity.part_test', 'val'); /* OK */
311+
validate_expression
312+
---------------------
313+
314+
(1 row)
315+
316+
SELECT validate_expression('calamity.part_test', 'VaL'); /* OK */
309317
validate_expression
310318
---------------------
311319

sql/pathman_calamity.sql

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,13 @@ SELECT validate_relname(1::REGCLASS);
141141
SELECT validate_relname(NULL);
142142

143143
/* check function validate_expression() */
144-
SELECT validate_expression('calamity.part_test');
145-
SELECT validate_expression('calamity.part_test', NULL);
146-
SELECT validate_expression('calamity.part_test', 'valval');
147-
SELECT validate_expression('calamity.part_test', 'random()');
148-
SELECT validate_expression('calamity.part_test', 'val');
144+
SELECT validate_expression(1::regclass, NULL); /* not ok */
145+
SELECT validate_expression(NULL::regclass, NULL); /* not ok */
146+
SELECT validate_expression('calamity.part_test', NULL); /* not ok */
147+
SELECT validate_expression('calamity.part_test', 'valval'); /* not ok */
148+
SELECT validate_expression('calamity.part_test', 'random()'); /* not ok */
149+
SELECT validate_expression('calamity.part_test', 'val'); /* OK */
150+
SELECT validate_expression('calamity.part_test', 'VaL'); /* OK */
149151

150152
/* check function get_number_of_partitions() */
151153
SELECT get_number_of_partitions('calamity.part_test');

src/pl_funcs.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,12 @@ validate_expression(PG_FUNCTION_ARGS)
608608
char *expression;
609609

610610
/* Fetch relation's Oid */
611-
relid = PG_GETARG_OID(0);
611+
if (!PG_ARGISNULL(0))
612+
{
613+
relid = PG_GETARG_OID(0);
614+
}
615+
else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
616+
errmsg("'relid' should not be NULL")));
612617

613618
/* Protect relation from concurrent drop */
614619
LockRelationOid(relid, AccessShareLock);

0 commit comments

Comments
 (0)