fix(postgresql): Support selecting from a function #4103
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.
Fixes an issue in postgres when selecting from a function. It would silently fail and the output row type would just be a
NullString
. This was due to it not looking for a composite type from the return type. Also it was not generating structs for defined composite types.Sort of addresses the following issues, both were closed but I dont think officially fixed, but this fix requires a composite return type:
#3638
#1322
Supporting
RETURNS TABLE(...)
may be a bit more complex. I don't think libpg_query even returns the data, I don't see it at least but I could be wrong. If it is going to be a known unsupported feature, I can emit a diagnostic saying to use a composite type at the call site if desired.Supporting embedded structs is a bit odd, but possible. The function output needs to be aliased to the composite type name
❌ Does not work:
SELECT sqlc.embed(function_name) FROM function_name()
✅ Works:
SELECT sqlc.embed(type_name) FROM function_name() AS type_name