diff options
| author | Tom Lane | 2011-11-21 21:19:53 +0000 |
|---|---|---|
| committer | Tom Lane | 2011-11-21 21:19:53 +0000 |
| commit | a4ffcc8e115ed637f69ecb0295d78cc97f08a483 (patch) | |
| tree | 035ed76e98abd9c42c7294c2baa9db36f7f38a61 /src/test/regress | |
| parent | 9b97b7f8356c63ea0b6704718d75ea01ec3035bf (diff) | |
More code review for rangetypes patch.
Fix up some infelicitous coding in DefineRange, and add some missing error
checks. Rearrange operator strategy number assignments for GiST anyrange
opclass so that they don't make such a mess of opr_sanity's table of
operator names associated with different strategy numbers. Assign
hopefully-temporary selectivity estimators to range operators that didn't
have one --- poor as the estimates are, they're still a lot better than the
default 0.5 estimate, and they'll shut up the opr_sanity test that wants to
see selectivity estimators on all built-in operators.
Diffstat (limited to 'src/test/regress')
| -rw-r--r-- | src/test/regress/expected/opr_sanity.out | 50 | ||||
| -rw-r--r-- | src/test/regress/expected/plpgsql.out | 14 | ||||
| -rw-r--r-- | src/test/regress/expected/rangetypes.out | 14 | ||||
| -rw-r--r-- | src/test/regress/sql/opr_sanity.sql | 20 | ||||
| -rw-r--r-- | src/test/regress/sql/plpgsql.sql | 10 | ||||
| -rw-r--r-- | src/test/regress/sql/rangetypes.sql | 7 |
6 files changed, 50 insertions, 65 deletions
diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out index 19b559ffa17..db74fcb9e69 100644 --- a/src/test/regress/expected/opr_sanity.out +++ b/src/test/regress/expected/opr_sanity.out @@ -140,16 +140,16 @@ WHERE p1.oid < p2.oid AND -- need to be modified whenever new pairs of types are made binary-equivalent, -- or when new polymorphic built-in functions are added! -- Note: ignore aggregate functions here, since they all point to the same --- dummy built-in function. +-- dummy built-in function. Likewise, ignore range constructor functions. SELECT DISTINCT p1.prorettype, p2.prorettype FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND NOT p1.proisagg AND NOT p2.proisagg AND - (p1.prorettype < p2.prorettype) AND - -- range constructor functions are shared by all range types. - NOT p1.prosrc LIKE 'range_constructor%' + p1.prosrc NOT LIKE E'range\\_constructor_' AND + p2.prosrc NOT LIKE E'range\\_constructor_' AND + (p1.prorettype < p2.prorettype) ORDER BY 1, 2; prorettype | prorettype ------------+------------ @@ -163,9 +163,9 @@ WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND NOT p1.proisagg AND NOT p2.proisagg AND - (p1.proargtypes[0] < p2.proargtypes[0]) AND - -- range constructor functions are shared by all range types. - NOT p1.prosrc LIKE 'range_constructor%' + p1.prosrc NOT LIKE E'range\\_constructor_' AND + p2.prosrc NOT LIKE E'range\\_constructor_' AND + (p1.proargtypes[0] < p2.proargtypes[0]) ORDER BY 1, 2; proargtypes | proargtypes -------------+------------- @@ -182,9 +182,9 @@ WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND NOT p1.proisagg AND NOT p2.proisagg AND - (p1.proargtypes[1] < p2.proargtypes[1]) AND - -- range constructor functions are shared by all range types. - NOT p1.prosrc LIKE 'range_constructor%' + p1.prosrc NOT LIKE E'range\\_constructor_' AND + p2.prosrc NOT LIKE E'range\\_constructor_' AND + (p1.proargtypes[1] < p2.proargtypes[1]) ORDER BY 1, 2; proargtypes | proargtypes -------------+------------- @@ -1021,34 +1021,28 @@ ORDER BY 1, 2, 3; 403 | 5 | ~>~ 405 | 1 | = 783 | 1 | << - 783 | 1 | = 783 | 1 | @@ 783 | 2 | &< - 783 | 2 | <> 783 | 3 | && 783 | 4 | &> - 783 | 4 | @> - 783 | 5 | <@ 783 | 5 | >> - 783 | 6 | @> + 783 | 6 | -|- 783 | 6 | ~= - 783 | 7 | <@ 783 | 7 | @> - 783 | 8 | << 783 | 8 | <@ 783 | 9 | &<| - 783 | 9 | >> - 783 | 10 | &< 783 | 10 | <<| 783 | 10 | <^ - 783 | 11 | &> 783 | 11 | >^ 783 | 11 | |>> - 783 | 12 | -|- 783 | 12 | |&> 783 | 13 | ~ 783 | 14 | @ 783 | 15 | <-> + 783 | 16 | @> + 783 | 17 | <@ + 783 | 18 | = + 783 | 19 | <> 783 | 27 | @> 783 | 28 | <@ 783 | 47 | @> @@ -1061,7 +1055,7 @@ ORDER BY 1, 2, 3; 2742 | 2 | @@@ 2742 | 3 | <@ 2742 | 4 | = -(51 rows) +(45 rows) -- Check that all opclass search operators have selectivity estimators. -- This is not absolutely required, but it seems a reasonable thing @@ -1070,15 +1064,9 @@ SELECT p1.amopfamily, p1.amopopr, p2.oid, p2.oprname FROM pg_amop AS p1, pg_operator AS p2 WHERE p1.amopopr = p2.oid AND p1.amoppurpose = 's' AND (p2.oprrest = 0 OR p2.oprjoin = 0); - amopfamily | amopopr | oid | oprname -------------+---------+------+--------- - 3919 | 3888 | 3888 | && - 3919 | 3889 | 3889 | @> - 3919 | 3891 | 3891 | <@ - 3919 | 3890 | 3890 | @> - 3919 | 3892 | 3892 | <@ - 3919 | 3897 | 3897 | -|- -(6 rows) + amopfamily | amopopr | oid | oprname +------------+---------+-----+--------- +(0 rows) -- Check that each opclass in an opfamily has associated operators, that is -- ones whose oprleft matches opcintype (possibly by coercion). diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out index fc9d4019444..238bf5f0aec 100644 --- a/src/test/regress/expected/plpgsql.out +++ b/src/test/regress/expected/plpgsql.out @@ -4571,17 +4571,3 @@ ERROR: value for domain orderedarray violates check constraint "sorted" CONTEXT: PL/pgSQL function "testoa" line 5 at assignment drop function arrayassign1(); drop function testoa(x1 int, x2 int, x3 int); --- Test resolve_polymorphic_argtypes() codepath. It is only taken when --- a function is invoked from a different backend from where it's defined, --- so we create the a function with polymorphic argument, reconnect, and --- and then call it. -create function rangetypes_plpgsql(out a anyelement, b anyrange, c anyarray) - language plpgsql as - $$ begin a := upper(b) + c[1]; return; end; $$; -\c - -select rangetypes_plpgsql(int4range(1,10),ARRAY[2,20]); - rangetypes_plpgsql --------------------- - 12 -(1 row) - diff --git a/src/test/regress/expected/rangetypes.out b/src/test/regress/expected/rangetypes.out index dec748406f9..130446d0069 100644 --- a/src/test/regress/expected/rangetypes.out +++ b/src/test/regress/expected/rangetypes.out @@ -936,6 +936,20 @@ select range_add_bounds(numrange(1.0001, 123.123)); 124.1231 (1 row) +create function rangetypes_sql(q anyrange, b anyarray, out c anyelement) + as $$ select upper($1) + $2[1] $$ + language sql; +select rangetypes_sql(int4range(1,10), ARRAY[2,20]); + rangetypes_sql +---------------- + 12 +(1 row) + +select rangetypes_sql(numrange(1,10), ARRAY[2,20]); -- match failure +ERROR: function rangetypes_sql(numrange, integer[]) does not exist +LINE 1: select rangetypes_sql(numrange(1,10), ARRAY[2,20]); + ^ +HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- -- Arrays of ranges -- diff --git a/src/test/regress/sql/opr_sanity.sql b/src/test/regress/sql/opr_sanity.sql index 7f936c81547..b0d143087e8 100644 --- a/src/test/regress/sql/opr_sanity.sql +++ b/src/test/regress/sql/opr_sanity.sql @@ -125,7 +125,7 @@ WHERE p1.oid < p2.oid AND -- need to be modified whenever new pairs of types are made binary-equivalent, -- or when new polymorphic built-in functions are added! -- Note: ignore aggregate functions here, since they all point to the same --- dummy built-in function. +-- dummy built-in function. Likewise, ignore range constructor functions. SELECT DISTINCT p1.prorettype, p2.prorettype FROM pg_proc AS p1, pg_proc AS p2 @@ -133,9 +133,9 @@ WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND NOT p1.proisagg AND NOT p2.proisagg AND - (p1.prorettype < p2.prorettype) AND - -- range constructor functions are shared by all range types. - NOT p1.prosrc LIKE 'range_constructor%' + p1.prosrc NOT LIKE E'range\\_constructor_' AND + p2.prosrc NOT LIKE E'range\\_constructor_' AND + (p1.prorettype < p2.prorettype) ORDER BY 1, 2; SELECT DISTINCT p1.proargtypes[0], p2.proargtypes[0] @@ -144,9 +144,9 @@ WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND NOT p1.proisagg AND NOT p2.proisagg AND - (p1.proargtypes[0] < p2.proargtypes[0]) AND - -- range constructor functions are shared by all range types. - NOT p1.prosrc LIKE 'range_constructor%' + p1.prosrc NOT LIKE E'range\\_constructor_' AND + p2.prosrc NOT LIKE E'range\\_constructor_' AND + (p1.proargtypes[0] < p2.proargtypes[0]) ORDER BY 1, 2; SELECT DISTINCT p1.proargtypes[1], p2.proargtypes[1] @@ -155,9 +155,9 @@ WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND NOT p1.proisagg AND NOT p2.proisagg AND - (p1.proargtypes[1] < p2.proargtypes[1]) AND - -- range constructor functions are shared by all range types. - NOT p1.prosrc LIKE 'range_constructor%' + p1.prosrc NOT LIKE E'range\\_constructor_' AND + p2.prosrc NOT LIKE E'range\\_constructor_' AND + (p1.proargtypes[1] < p2.proargtypes[1]) ORDER BY 1, 2; SELECT DISTINCT p1.proargtypes[2], p2.proargtypes[2] diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql index 2906943f06f..b47c2de312a 100644 --- a/src/test/regress/sql/plpgsql.sql +++ b/src/test/regress/sql/plpgsql.sql @@ -3600,13 +3600,3 @@ select testoa(1,2,1); -- fail at update drop function arrayassign1(); drop function testoa(x1 int, x2 int, x3 int); - --- Test resolve_polymorphic_argtypes() codepath. It is only taken when --- a function is invoked from a different backend from where it's defined, --- so we create the a function with polymorphic argument, reconnect, and --- and then call it. -create function rangetypes_plpgsql(out a anyelement, b anyrange, c anyarray) - language plpgsql as - $$ begin a := upper(b) + c[1]; return; end; $$; -\c - -select rangetypes_plpgsql(int4range(1,10),ARRAY[2,20]); diff --git a/src/test/regress/sql/rangetypes.sql b/src/test/regress/sql/rangetypes.sql index bdd40cf5a9d..b34a0d7c347 100644 --- a/src/test/regress/sql/rangetypes.sql +++ b/src/test/regress/sql/rangetypes.sql @@ -327,6 +327,13 @@ create function range_add_bounds(anyrange) select range_add_bounds(numrange(1.0001, 123.123)); +create function rangetypes_sql(q anyrange, b anyarray, out c anyelement) + as $$ select upper($1) + $2[1] $$ + language sql; + +select rangetypes_sql(int4range(1,10), ARRAY[2,20]); +select rangetypes_sql(numrange(1,10), ARRAY[2,20]); -- match failure + -- -- Arrays of ranges -- |
