Run qualified typmodin function in format_type_string() #332
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Formatting
typmodin_func
with%I
causes a qualified function name to be formatted as a identifier when the namespace is not on the search path. For example,foo.bar()
will be formatted as"foo.bar"()
whenfoo
is not on the search_path. Calling"foo.bar"()
triggers the exception handler in most cases either because the function doesn't exist or because it's not atypmodin
function.format_type_string()
will then returnNULL
which in turn results in
col_type_is()
to fail with an error that thewanted type does not exist.
Fix this by formatting the function name with
%s
. This works because%s
emits qualified names and quoted identifiers if necessary forregproc
(or any other OID).Hi David! The fun never stops 😅
Just got pgTAP 1.3.2 in our CI pipeline via Debian Bookworm and we instantly got failures such as
We run those tests only with pgTAP on the search path. Adding
postgis
to the search path as well is a quick workaround. But fixingformat_type_string()
is quite easy. Let me know if I missed something.I also wanted to add tests in
test/sql/coltap.sql
to cover a custom type withtypmodin
function in namespacehidden
. But that doesn't work with a simple SQL function because this function has to be implemented in C:I was also looking for some builtin extension that we could install in namespace
hidden
, but there's no such extension providing types with typmods.At least, here's a reproducer using PostGIS.
Output: