diff options
author | Tom Lane | 2013-11-06 18:32:26 +0000 |
---|---|---|
committer | Tom Lane | 2013-11-06 18:32:26 +0000 |
commit | aad87e3f25ad751a3d021c139fd3adbbe1d19fce (patch) | |
tree | 91731d8feeed6fcb3dcca3257d93763b09c1af31 | |
parent | db157fb141df983f6d66209182ef4ac7997588d4 (diff) |
Prevent creating window functions with default arguments.
Insertion of default arguments doesn't work for window functions, which is
likely to cause a crash at runtime if the implementation code doesn't check
the number of actual arguments carefully. It doesn't seem worth working
harder than this for pre-9.2 branches.
-rw-r--r-- | doc/src/sgml/syntax.sgml | 7 | ||||
-rw-r--r-- | src/backend/catalog/pg_proc.c | 6 |
2 files changed, 13 insertions, 0 deletions
diff --git a/doc/src/sgml/syntax.sgml b/doc/src/sgml/syntax.sgml index 9e87186bb53..863de8852b0 100644 --- a/doc/src/sgml/syntax.sgml +++ b/doc/src/sgml/syntax.sgml @@ -2464,6 +2464,13 @@ SELECT concat_lower_or_upper('Hello', 'World', uppercase := true); having numerous parameters that have default values, named or mixed notation can save a great deal of writing and reduce chances for error. </para> + + <note> + <para> + Named and mixed call notations can currently be used only with regular + functions, not with aggregate functions or window functions. + </para> + </note> </sect2> </sect1> diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index ca21faf7b43..9d5f1a6cbc2 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -285,6 +285,12 @@ ProcedureCreate(const char *procedureName, } } + /* Guard against a case the planner doesn't handle yet */ + if (isWindowFunc && parameterDefaults != NIL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("window functions cannot have default arguments"))); + /* * All seems OK; prepare the data to be inserted into pg_proc. */ |