Declare lead() and lag() using anycompatible not anyelement.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 4 Nov 2020 20:08:37 +0000 (15:08 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 4 Nov 2020 20:08:37 +0000 (15:08 -0500)
commit5c292e6b90433c760a3e15027646c7b94afd0cdd
treef7a22ff756c6234eb7c234aab6d4d60253847767
parent40c24bfef92530bd846e111c1742c2a54441c62c
Declare lead() and lag() using anycompatible not anyelement.

This allows use of a "default" expression that doesn't slavishly
match the data column's type.  Formerly you got something like
"function lag(numeric, integer, integer) does not exist", which
is not just unhelpful but actively misleading.

The SQL spec suggests that the default should be coerced to the data
column's type, but this implementation instead chooses the common
supertype, which seems at least as reasonable.

(Note: I took the opportunity to run "make reformat-dat-files" on
pg_proc.dat, so this commit includes some cosmetic changes to
recently-added entries that aren't related to lead/lag.)

Vik Fearing

Discussion: https://postgr.es/m/77675130-89da-dab1-51dd-492c93dcf5d1@postgresfriends.org
doc/src/sgml/func.sgml
src/include/catalog/catversion.h
src/include/catalog/pg_proc.dat
src/test/regress/expected/window.out
src/test/regress/sql/window.sql