postgresql/src/test/regress/sql
Tom Lane 04fe805a17 Drop no-op CoerceToDomain nodes from expressions at planning time.
If a domain has no constraints, then CoerceToDomain doesn't really do
anything and can be simplified to a RelabelType.  This not only
eliminates cycles at execution, but allows the planner to optimize better
(for instance, match the coerced expression to an index on the underlying
column).  However, we do have to support invalidating the plan later if
a constraint gets added to the domain.  That's comparable to the case of
a change to a SQL function that had been inlined into a plan, so all the
necessary logic already exists for plans depending on functions.  We
need only duplicate or share that logic for domains.

ALTER DOMAIN ADD/DROP CONSTRAINT need to be taught to send out sinval
messages for the domain's pg_type entry, since those operations don't
update that row.  (ALTER DOMAIN SET/DROP NOT NULL do update that row,
so no code change is needed for them.)

Testing this revealed what's really a pre-existing bug in plpgsql:
it caches the SQL-expression-tree expansion of type coercions and
had no provision for invalidating entries in that cache.  Up to now
that was only a problem if such an expression had inlined a SQL
function that got changed, which is unlikely though not impossible.
But failing to track changes of domain constraints breaks an existing
regression test case and would likely cause practical problems too.

We could fix that locally in plpgsql, but what seems like a better
idea is to build some generic infrastructure in plancache.c to store
standalone expressions and track invalidation events for them.
(It's tempting to wonder whether plpgsql's "simple expression" stuff
could use this code with lower overhead than its current use of the
heavyweight plancache APIs.  But I've left that idea for later.)

Other stuff fixed in passing:

* Allow estimate_expression_value() to drop CoerceToDomain
unconditionally, effectively assuming that the coercion will succeed.
This will improve planner selectivity estimates for cases involving
estimatable expressions that are coerced to domains.  We could have
done this independently of everything else here, but there wasn't
previously any need for eval_const_expressions_mutator to know about
CoerceToDomain at all.

* Use a dlist for plancache.c's list of cached plans, rather than a
manually threaded singly-linked list.  That eliminates a potential
performance problem in DropCachedPlan.

* Fix a couple of inconsistencies in typecmds.c about whether
operations on domains drop RowExclusiveLock on pg_type.  Our common
practice is that DDL operations do drop catalog locks, so standardize
on that choice.

Discussion: https://postgr.es/m/19958.1544122124@sss.pgh.pa.us
2018-12-13 13:24:43 -05:00
..
.gitignore
advisory_lock.sql
aggregates.sql Fix STRICT check for strict aggregates with NULL ORDER BY columns. 2018-11-03 14:48:42 -07:00
alter_generic.sql Clean up duplicate role and schema names in regression tests. 2018-03-15 14:00:31 -04:00
alter_operator.sql Avoid unnecessary use of pg_strcasecmp for already-downcased identifiers. 2018-01-26 18:25:14 -05:00
alter_table.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
amutils.sql Add support for nearest-neighbor (KNN) searches to SP-GiST 2018-09-19 01:54:10 +03:00
arrays.sql Improve expression evaluation test coverage. 2017-03-11 15:41:34 -08:00
async.sql Add new function pg_notification_queue_usage. 2015-07-17 09:12:03 -04:00
bit.sql Remove ruleutils.c's special case for BIT [VARYING] literals. 2018-09-11 16:32:25 -04:00
bitmapops.sql
boolean.sql Expand AND/OR regression tests around NULL handling. 2018-03-13 16:12:31 -07:00
box.sql Improve test coverage of geometric types 2018-09-26 10:45:21 +02:00
brin.sql Fix BRIN cost estimation 2017-04-06 17:51:53 -03:00
btree_index.sql Skip full index scan during cleanup of B-tree indexes when possible 2018-04-04 19:29:00 +03:00
case.sql Fix interaction of CASE and ArrayCoerceExpr. 2018-10-30 15:26:11 -04:00
char.sql
circle.sql Improve test coverage of geometric types 2018-09-26 10:45:21 +02:00
cluster.sql Ignore partitioned indexes where appropriate 2018-01-25 16:12:15 -03:00
collate.icu.utf8.sql Remove ICU tests from default run 2017-03-25 00:30:26 -04:00
collate.linux.utf8.sql ICU support 2017-03-23 15:28:48 -04:00
collate.sql Avoid unnecessary use of pg_strcasecmp for already-downcased identifiers. 2018-01-26 18:25:14 -05:00
combocid.sql Fix locking a tuple updated by an aborted (sub)transaction 2016-09-09 15:54:29 -03:00
comments.sql
conversion.sql Establish conventions about global object names used in regression tests. 2016-07-17 18:42:43 -04:00
copy2.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
copydml.sql COPY (INSERT/UPDATE/DELETE .. RETURNING ..) 2015-11-27 19:11:22 +03:00
copyselect.sql
create_aggregate.sql Improve spelling of new FINALFUNC_MODIFY aggregate attribute. 2018-05-21 11:41:42 -04:00
create_am.sql Remove no-op GiST support functions in the core GiST opclasses. 2017-09-19 23:32:59 -04:00
create_cast.sql Make CREATE TYPE print warnings if a datatype's I/O functions are volatile. 2014-11-05 11:44:06 -05:00
create_function_3.sql Mop-up for letting VOID-returning SQL functions end with a SELECT. 2018-03-16 12:48:13 -04:00
create_index.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
create_misc.sql Improve regression test coverage of regress.c. 2018-02-27 12:13:14 -05:00
create_operator.sql Fix lexing of standard multi-character operators in edge cases. 2018-08-23 21:42:40 +01:00
create_procedure.sql psql: Add option for procedures to \df 2018-07-24 11:38:53 +02:00
create_table.sql Add additional partition tests to pg_dump 2018-12-10 09:46:36 -05:00
create_table_like.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
create_type.sql Fix format_type() to restore its old behavior. 2018-03-01 11:37:46 -05:00
create_view.sql Clean up duplicate role and schema names in regression tests. 2018-03-15 14:00:31 -04:00
date.sql Allow negative years in make_date to represent BC years 2017-01-19 09:45:38 -03:00
dbsize.sql Add pg_size_bytes() to parse human-readable size strings. 2016-02-20 09:57:27 +00:00
delete.sql
dependency.sql Establish conventions about global object names used in regression tests. 2016-07-17 18:42:43 -04:00
domain.sql Drop no-op CoerceToDomain nodes from expressions at planning time. 2018-12-13 13:24:43 -05:00
drop_if_exists.sql Establish conventions about global object names used in regression tests. 2016-07-17 18:42:43 -04:00
drop_operator.sql Fix DROP OPERATOR to reset oprcom/oprnegate links to the dropped operator. 2016-03-25 12:33:16 -04:00
enum.sql Relax transactional restrictions on ALTER TYPE ... ADD VALUE (redux). 2018-10-09 12:51:01 +13:00
equivclass.sql Reduce "X = X" to "X IS NOT NULL", if it's easy to do so. 2017-10-08 12:23:32 -04:00
errors.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
event_trigger.sql Test that event triggers work in functions and procedures 2018-10-10 22:41:12 +02:00
expressions.sql Improve expression evaluation test coverage. 2017-03-11 15:41:34 -08:00
fast_default.sql Fix typo in regression test comment 2018-10-24 19:39:50 -04:00
float4.sql Fix float-to-integer coercions to handle edge cases correctly. 2018-11-23 20:57:11 -05:00
float8.sql Adjust new test case for more portability. 2018-11-23 23:49:25 -05:00
foreign_data.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
foreign_key.sql Fix spelling errors and typos in comments 2018-11-02 13:56:52 +01:00
functional_deps.sql
geometry.sql Improve test coverage of geometric types 2018-09-26 10:45:21 +02:00
gin.sql Make GIN regression test stable. 2016-02-08 23:41:46 +09:00
gist.sql Add more tests for reloptions 2017-10-19 14:22:05 +02:00
groupingsets.sql Repair crash with unsortable grouping sets. 2018-03-21 11:39:28 +00:00
guc.sql Establish conventions about global object names used in regression tests. 2016-07-17 18:42:43 -04:00
hash_func.sql Introduce 64-bit hash functions with a 64-bit seed. 2017-08-31 22:21:21 -04:00
hash_index.sql Add more tests for reloptions 2017-10-19 14:22:05 +02:00
hash_part.sql Use custom hash opclass for hash partition pruning 2018-04-13 12:27:22 -03:00
horology.sql Remove deprecated abstime, reltime, tinterval datatypes. 2018-10-11 11:59:15 -07:00
hs_primary_extremes.sql Remove all references to "xlog" from SQL-callable functions in pg_proc. 2017-02-09 15:10:09 -05:00
hs_primary_setup.sql Remove all references to "xlog" from SQL-callable functions in pg_proc. 2017-02-09 15:10:09 -05:00
hs_standby_allowed.sql Better fix for sequence access in hot standby test 2017-01-04 08:47:18 -05:00
hs_standby_check.sql
hs_standby_disallowed.sql
hs_standby_functions.sql Remove all references to "xlog" from SQL-callable functions in pg_proc. 2017-02-09 15:10:09 -05:00
identity.sql Revert MERGE patch 2018-04-12 11:22:56 +01:00
index_including.sql Remove pg_constraint.conincluding 2018-09-03 12:59:26 -03:00
indexing.sql Set pg_class.relhassubclass for partitioned indexes 2018-10-22 11:04:48 +09:00
indirect_toast.sql Clean up duplicate table and function names in regression tests. 2018-03-15 17:09:02 -04:00
inet.sql Create an SP-GiST opclass for inet/cidr. 2016-08-23 15:16:30 -04:00
inherit.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
init_privs.sql Fix typos in comments. 2017-02-06 11:33:58 +02:00
insert.sql Use custom hash opclass for hash partition pruning 2018-04-13 12:27:22 -03:00
insert_conflict.sql Don't mark partitioned indexes invalid unnecessarily 2018-12-05 13:31:51 -03:00
int2.sql Add documentation and regression tests concerning rounding of numerics. 2015-07-03 17:04:39 -04:00
int4.sql Add documentation and regression tests concerning rounding of numerics. 2015-07-03 17:04:39 -04:00
int8.sql Add documentation and regression tests concerning rounding of numerics. 2015-07-03 17:04:39 -04:00
interval.sql Fix integer-overflow problems in interval comparison. 2017-04-05 23:51:27 -04:00
join.sql Use PlaceHolderVars within the quals of a FULL JOIN. 2018-10-14 13:07:29 -04:00
json.sql Fix another crash in json{b}_populate_recordset and json{b}_to_recordset. 2018-11-22 15:14:01 -05:00
json_encoding.sql Fix whitespace 2015-10-11 21:44:27 -04:00
jsonb.sql Fix another crash in json{b}_populate_recordset and json{b}_to_recordset. 2018-11-22 15:14:01 -05:00
limit.sql Add regression tests exercising more code paths in nodeLimit.c. 2017-08-11 17:28:01 -04:00
line.sql Improve test coverage of geometric types 2018-09-26 10:45:21 +02:00
lock.sql Add more infinite recursion detection while locking a view. 2018-04-17 16:59:17 +09:00
lseg.sql Improve test coverage of geometric types 2018-09-26 10:45:21 +02:00
macaddr.sql Allow input format xxxx-xxxx-xxxx for macaddr type 2014-10-21 16:16:39 -04:00
macaddr8.sql Add support for EUI-64 MAC addresses as macaddr8 2017-03-15 11:16:25 -04:00
matview.sql Remove useless and rather expensive stanza in matview regression test. 2017-05-03 19:37:01 -04:00
misc_functions.sql Add num_nulls() and num_nonnulls() to count NULL arguments. 2016-02-04 23:03:37 -05:00
misc_sanity.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
money.sql Fix precision and rounding issues in money multiplication and division. 2017-05-21 13:05:16 -04:00
name.sql Introduce parse_ident() 2016-03-18 18:16:14 +03:00
namespace.sql Clean up duplicate role and schema names in regression tests. 2018-03-15 14:00:31 -04:00
numeric.sql Make numeric power() handle NaNs according to the modern POSIX spec. 2018-05-17 11:10:50 -04:00
numeric_big.sql Fix corner-case loss of precision in numeric pow() calculation 2016-05-05 11:16:17 +01:00
numerology.sql
object_address.sql Enable failure to rename a partitioned index 2018-06-26 11:54:45 -04:00
oid.sql
oidjoins.sql Update oidjoins regression test for v11. 2018-05-07 14:32:04 -04:00
opr_sanity.sql Remove unreferenced pg_opfamily entry. 2018-11-05 12:02:27 -05:00
partition_aggregate.sql Disable support for partitionwise joins in problematic cases. 2018-08-31 20:34:06 +09:00
partition_info.sql Tweak pg_partition_tree for undefined relations and unsupported relkinds 2018-12-12 09:49:39 +09:00
partition_join.sql Disable support for partitionwise joins in problematic cases. 2018-08-31 20:34:06 +09:00
partition_prune.sql Improve performance of partition pruning remapping a little. 2018-11-15 13:34:16 -05:00
password.sql Don't allow logging in with empty password. 2017-08-07 17:03:42 +03:00
path.sql Improve test coverage of geometric types 2018-09-26 10:45:21 +02:00
pg_lsn.sql Tweak new regression test case for better portability. 2014-06-04 21:31:41 -04:00
plancache.sql Add plan_cache_mode setting 2018-07-16 13:35:41 +02:00
plpgsql.sql Add strict_multi_assignment and too_many_rows plpgsql checks 2018-07-25 01:46:32 +02:00
point.sql Improve test coverage of geometric types 2018-09-26 10:45:21 +02:00
polygon.sql Improve test coverage of geometric types 2018-09-26 10:45:21 +02:00
polymorphism.sql Fix lexing of standard multi-character operators in edge cases. 2018-08-23 21:42:40 +01:00
portals.sql Fix failure in WHERE CURRENT OF after rewinding the referenced cursor. 2018-09-23 16:05:45 -04:00
portals_p2.sql
prepare.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
prepared_xacts.sql Remove unnecessary dependency on statement_timeout in prepared_xacts test. 2017-03-13 16:46:32 -04:00
privileges.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
psql.sql Fix translation of special characters in psql's LaTeX output modes. 2018-11-26 17:32:51 -05:00
psql_crosstab.sql Fix incorrect error reporting for duplicate data in \crosstabview. 2016-12-25 16:04:45 -05:00
publication.sql psql: Improve display of "for all tables" publications 2017-06-15 10:46:41 -04:00
random.sql
rangefuncs.sql Clean up duplicate table and function names in regression tests. 2018-03-15 17:09:02 -04:00
rangetypes.sql Fix typcache's failure to treat ranges as container types. 2017-10-20 17:12:27 -04:00
regex.linux.utf8.sql Make locale-dependent regex character classes work for large char codes. 2016-09-05 17:06:29 -04:00
regex.sql Implement regexp_match(), a simplified alternative to regexp_matches(). 2016-08-17 18:33:01 -04:00
regproc.sql Establish conventions about global object names used in regression tests. 2016-07-17 18:42:43 -04:00
reloptions.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
replica_identity.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
returning.sql Add support for INSERT ... ON CONFLICT DO NOTHING/UPDATE. 2015-05-08 05:43:10 +02:00
roleattributes.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
rolenames.sql Add basic regression tests for default monitoring roles 2018-09-26 15:26:45 +09:00
rowsecurity.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
rowtypes.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
rules.sql Further fixes for quoted-list GUC values in pg_dump and ruleutils.c. 2018-07-31 13:00:14 -04:00
sanity_check.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
security_label.sql Establish conventions about global object names used in regression tests. 2016-07-17 18:42:43 -04:00
select.sql Make some subquery-using test cases a bit more robust. 2018-10-14 14:02:59 -04:00
select_distinct.sql Disable physical tlist if any Var would need multiple sortgroupref labels. 2016-05-26 14:52:30 -04:00
select_distinct_on.sql
select_having.sql
select_implicit.sql
select_into.sql Clean up duplicate table and function names in regression tests. 2018-03-15 17:09:02 -04:00
select_parallel.sql Make some subquery-using test cases a bit more robust. 2018-10-14 14:02:59 -04:00
select_views.sql Avoid locale-dependent output in select_views regression test. 2017-05-28 14:52:18 -04:00
sequence.sql psql: Update \d sequence display 2017-09-29 13:37:30 -04:00
spgist.sql Repair double-free in SP-GIST rescan (bug #15378) 2018-09-11 18:14:19 +01:00
stats.sql Fix misapplication of pgstat_count_truncate to wrong relation. 2018-12-07 12:11:59 -05:00
stats_ext.sql Suppress less info in regression tests using DROP CASCADE. 2017-08-01 16:49:23 -04:00
strings.sql Repair bug in regexp split performance improvements. 2018-09-12 19:31:06 +01:00
subscription.sql Fix ALTER SUBSCRIPTION grammar ambiguity 2017-06-05 21:43:25 -04:00
subselect.sql Set scan direction appropriately for SubPlans (bug #15336) 2018-08-17 15:44:13 +01:00
sysviews.sql Invent pg_hba_file_rules view to show the content of pg_hba.conf. 2017-01-30 18:00:26 -05:00
tablesample.sql Make tablesample work with partitioned tables. 2017-02-24 12:23:28 +05:30
temp.sql Fix dependency handling of partitions and inheritance for ON COMMIT 2018-11-09 10:03:22 +09:00
text.sql Move checking an explicit VARIADIC "any" argument into the parser. 2013-07-18 11:52:12 -04:00
tidscan.sql Improve regression test coverage for TID scanning. 2017-03-20 12:30:23 -04:00
time.sql
timestamp.sql Be more careful about out-of-range dates and timestamps. 2016-03-16 19:09:28 -04:00
timestamptz.sql Add a timezone-specific variant of date_trunc(). 2018-11-14 15:41:07 -05:00
timetz.sql
transactions.sql Clean up duplicate table and function names in regression tests. 2018-03-15 17:09:02 -04:00
triggers.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
truncate.sql Fix FK checks of TRUNCATE involving partitioned tables 2018-07-12 12:09:08 -04:00
tsdicts.sql Improve regression test coverage for src/backend/tsearch/spell.c. 2018-04-13 13:49:52 -04:00
tsearch.sql Remove tsearch test contained russian characters, missed in 2018-04-05 20:05:04 +03:00
tsrf.sql Fix create_scan_plan's handling of sortgrouprefs for physical tlists. 2018-07-11 15:25:28 -04:00
tstypes.sql Ensure that a tsquery like '!foo' matches empty tsvectors. 2017-01-26 12:18:07 -05:00
txid.sql Add a txid_status function. 2017-03-24 12:00:53 -04:00
type_sanity.sql Set proargmodes for satisfies_hash_partition. 2017-11-17 11:53:00 -05:00
typed_table.sql Suppress less info in regression tests using DROP CASCADE. 2017-08-01 16:49:23 -04:00
union.sql Fix UNION/INTERSECT/EXCEPT over no columns. 2017-12-22 12:08:06 -05:00
updatable_views.sql Fix INSERT ON CONFLICT UPDATE through a view that isn't just SELECT *. 2018-08-04 19:38:58 -04:00
update.sql Repair bogus handling of multi-assignment Params in upper plan levels. 2018-12-12 13:49:41 -05:00
uuid.sql Fix whitespace issues found by git diff --check, add gitattributes 2013-11-10 14:48:29 -05:00
vacuum.sql Add option SKIP_LOCKED to VACUUM and ANALYZE 2018-10-04 09:00:33 +09:00
varchar.sql
window.sql Order active window clauses for greater reuse of Sort nodes. 2018-09-14 17:35:42 +01:00
with.sql Revert MERGE patch 2018-04-12 11:22:56 +01:00
write_parallel.sql Allow DML commands that create tables to use parallel query. 2017-10-05 11:40:48 -04:00
xml.sql Set correct context for XPath evaluation 2018-06-21 15:56:11 -04:00
xmlmap.sql Fix cursor_to_xml in tableforest false mode 2017-05-03 21:41:10 -04:00