aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvvvv <vvvv@yandex-team.ru>2022-02-25 23:33:05 +0300
committervvvv <vvvv@yandex-team.ru>2022-02-25 23:33:05 +0300
commit3ac68888f5cd911954a4cb2e2bf081001c5e7e2c (patch)
tree16ddc82bf8a043a5554b0067e5b566ed6085c484
parente888dc3492f86099cdb3660a563711495e890880 (diff)
downloadydb-3ac68888f5cd911954a4cb2e2bf081001c5e7e2c.tar.gz
YQL-13710 initial runtime support for PgCall
ref:fcd347be079fb1c022d213750eda307cf70eaf10
-rw-r--r--CMakeLists.txt296
-rw-r--r--ydb/core/kqp/provider/mkql/CMakeLists.txt31
-rw-r--r--ydb/library/yql/core/expr_nodes/CMakeLists.txt31
-rw-r--r--ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp10
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_core.cpp163
-rw-r--r--ydb/library/yql/core/yql_expr_type_annotation.cpp6
-rw-r--r--ydb/library/yql/minikql/mkql_program_builder.cpp16
-rw-r--r--ydb/library/yql/minikql/mkql_program_builder.h1
-rw-r--r--ydb/library/yql/parser/pg_catalog/catalog.cpp46
-rw-r--r--ydb/library/yql/parser/pg_catalog/catalog.h2
-rw-r--r--ydb/library/yql/providers/common/codec/yql_pg_codec.h18
-rw-r--r--ydb/library/yql/providers/common/mkql/yql_provider_mkql.cpp13
-rw-r--r--ydb/library/yql/sql/pg_dummy/CMakeLists.txt4
-rw-r--r--ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp17
-rw-r--r--ydb/library/yql/sql/pg_dummy/ya.make3
15 files changed, 425 insertions, 232 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0561fa3fae..543cfaa401 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -343,31 +343,38 @@ add_subdirectory(ydb/library/yql/parser/pg_catalog)
add_subdirectory(ydb/library/yql/sql/settings)
add_subdirectory(library/cpp/deprecated/split)
add_subdirectory(library/cpp/deprecated/kmp)
-add_subdirectory(ydb/core/driver_lib/run)
-add_subdirectory(library/cpp/actors/core)
-add_subdirectory(library/cpp/actors/memory_log)
-add_subdirectory(library/cpp/threading/queue)
-add_subdirectory(contrib/libs/linuxvdso)
-add_subdirectory(contrib/libs/linuxvdso/original)
-add_subdirectory(library/cpp/actors/prof)
-add_subdirectory(library/cpp/charset)
-add_subdirectory(library/cpp/containers/atomizer)
-add_subdirectory(library/cpp/containers/str_map)
-add_subdirectory(library/cpp/actors/protos)
+add_subdirectory(ydb/library/yql/providers/common/codec)
+add_subdirectory(ydb/library/yql/minikql)
+add_subdirectory(contrib/libs/apache/arrow)
+add_subdirectory(contrib/libs/apache/orc)
+add_subdirectory(contrib/libs/re2)
+add_subdirectory(contrib/libs/utf8proc)
+add_subdirectory(contrib/restricted/boost)
+add_subdirectory(contrib/restricted/fast_float)
+add_subdirectory(contrib/restricted/thrift)
+add_subdirectory(contrib/libs/libevent)
+add_subdirectory(contrib/libs/libevent/event_core)
+add_subdirectory(contrib/libs/libevent/event_extra)
+add_subdirectory(contrib/libs/libevent/event_openssl)
+add_subdirectory(contrib/libs/libevent/event_thread)
+add_subdirectory(contrib/restricted/boost/libs/system)
+add_subdirectory(contrib/restricted/boost/libs/thread)
+add_subdirectory(contrib/restricted/boost/libs/chrono)
+add_subdirectory(contrib/restricted/uriparser)
+add_subdirectory(contrib/libs/cctz/tzdata)
+add_subdirectory(contrib/libs/cctz)
add_subdirectory(library/cpp/actors/util)
-add_subdirectory(library/cpp/execprofile)
-add_subdirectory(library/cpp/json/writer)
-add_subdirectory(library/cpp/json/common)
-add_subdirectory(library/cpp/logger)
-add_subdirectory(library/cpp/json)
-add_subdirectory(contrib/libs/rapidjson)
-add_subdirectory(library/cpp/json/fast_sax)
add_subdirectory(library/cpp/monlib/dynamic_counters)
add_subdirectory(library/cpp/monlib/encode/json)
add_subdirectory(library/cpp/monlib/encode)
add_subdirectory(library/cpp/monlib/metrics)
add_subdirectory(library/cpp/monlib/encode/buffered)
add_subdirectory(library/cpp/monlib/exception)
+add_subdirectory(library/cpp/json)
+add_subdirectory(contrib/libs/rapidjson)
+add_subdirectory(library/cpp/json/common)
+add_subdirectory(library/cpp/json/fast_sax)
+add_subdirectory(library/cpp/json/writer)
add_subdirectory(library/cpp/monlib/encode/spack)
add_subdirectory(library/cpp/monlib/encode/prometheus)
add_subdirectory(library/cpp/monlib/service/pages)
@@ -376,6 +383,7 @@ add_subdirectory(library/cpp/coroutine/engine)
add_subdirectory(library/cpp/containers/intrusive_rb_tree)
add_subdirectory(library/cpp/coroutine/listener)
add_subdirectory(library/cpp/http/fetch)
+add_subdirectory(library/cpp/charset)
add_subdirectory(library/cpp/http/misc)
add_subdirectory(library/cpp/case_insensitive_string)
add_subdirectory(library/cpp/digest/murmur)
@@ -383,6 +391,7 @@ add_subdirectory(library/cpp/cgiparam)
add_subdirectory(library/cpp/iterator)
add_subdirectory(library/cpp/string_utils/scan)
add_subdirectory(library/cpp/digest/lower_case)
+add_subdirectory(library/cpp/logger)
add_subdirectory(library/cpp/mime/types)
add_subdirectory(library/cpp/uri)
add_subdirectory(library/cpp/http/server)
@@ -393,6 +402,127 @@ add_subdirectory(library/cpp/streams/lzma)
add_subdirectory(library/cpp/threading/equeue)
add_subdirectory(library/cpp/monlib/encode/text)
add_subdirectory(library/cpp/threading/light_rw_lock)
+add_subdirectory(library/cpp/packedtypes)
+add_subdirectory(library/cpp/streams/zc_memory_input)
+add_subdirectory(ydb/library/binary_json)
+add_subdirectory(ydb/library/yql/minikql/dom)
+add_subdirectory(library/cpp/yson_pull)
+add_subdirectory(ydb/library/dynumber)
+add_subdirectory(ydb/library/yql/public/udf/tz)
+add_subdirectory(ydb/library/yql/minikql/computation)
+add_subdirectory(library/cpp/random_provider)
+add_subdirectory(library/cpp/time_provider)
+add_subdirectory(ydb/library/yql/minikql/arrow)
+add_subdirectory(ydb/library/yql/minikql/codegen)
+add_subdirectory(contrib/libs/llvm12/lib/IR)
+add_subdirectory(contrib/libs/llvm12)
+add_subdirectory(contrib/libs/llvm12/include)
+add_subdirectory(contrib/libs/llvm12/utils/TableGen)
+add_subdirectory(contrib/libs/llvm12/lib/Demangle)
+add_subdirectory(contrib/libs/llvm12/lib/Support)
+add_subdirectory(contrib/libs/llvm12/lib/TableGen)
+add_subdirectory(contrib/libs/llvm12/utils/TableGen/GlobalISel)
+add_subdirectory(contrib/libs/llvm12/lib/BinaryFormat)
+add_subdirectory(contrib/libs/llvm12/lib/Remarks)
+add_subdirectory(contrib/libs/llvm12/lib/Bitstream/Reader)
+add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine/MCJIT)
+add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine)
+add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine/RuntimeDyld)
+add_subdirectory(contrib/libs/llvm12/lib/MC)
+add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/CodeView)
+add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/MSF)
+add_subdirectory(contrib/libs/llvm12/lib/Object)
+add_subdirectory(contrib/libs/llvm12/lib/Bitcode/Reader)
+add_subdirectory(contrib/libs/llvm12/lib/MC/MCParser)
+add_subdirectory(contrib/libs/llvm12/lib/TextAPI/MachO)
+add_subdirectory(contrib/libs/llvm12/lib/Target)
+add_subdirectory(contrib/libs/llvm12/lib/Analysis)
+add_subdirectory(contrib/libs/llvm12/lib/ProfileData)
+add_subdirectory(contrib/libs/llvm12/lib/Linker)
+add_subdirectory(contrib/libs/llvm12/lib/Transforms/Utils)
+add_subdirectory(contrib/libs/llvm12/lib/Target/X86)
+add_subdirectory(contrib/libs/llvm12/lib/CodeGen)
+add_subdirectory(contrib/libs/llvm12/lib/Bitcode/Writer)
+add_subdirectory(contrib/libs/llvm12/lib/Transforms/Scalar)
+add_subdirectory(contrib/libs/llvm12/lib/Transforms/AggressiveInstCombine)
+add_subdirectory(contrib/libs/llvm12/lib/Transforms/InstCombine)
+add_subdirectory(contrib/libs/llvm12/lib/CodeGen/AsmPrinter)
+add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/DWARF)
+add_subdirectory(contrib/libs/llvm12/lib/CodeGen/GlobalISel)
+add_subdirectory(contrib/libs/llvm12/lib/CodeGen/SelectionDAG)
+add_subdirectory(contrib/libs/llvm12/lib/Target/X86/MCTargetDesc)
+add_subdirectory(contrib/libs/llvm12/lib/MC/MCDisassembler)
+add_subdirectory(contrib/libs/llvm12/lib/Target/X86/TargetInfo)
+add_subdirectory(contrib/libs/llvm12/lib/Transforms/CFGuard)
+add_subdirectory(contrib/libs/llvm12/lib/Target/X86/AsmParser)
+add_subdirectory(contrib/libs/llvm12/lib/Target/X86/Disassembler)
+add_subdirectory(contrib/libs/llvm12/lib/Transforms/IPO)
+add_subdirectory(contrib/libs/llvm12/lib/Frontend/OpenMP)
+add_subdirectory(contrib/libs/llvm12/lib/IRReader)
+add_subdirectory(contrib/libs/llvm12/lib/AsmParser)
+add_subdirectory(contrib/libs/llvm12/lib/Transforms/Instrumentation)
+add_subdirectory(contrib/libs/llvm12/lib/Transforms/Vectorize)
+add_subdirectory(contrib/libs/llvm12/lib/Transforms/ObjCARC)
+add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine/PerfJITEvents)
+add_subdirectory(ydb/library/yql/providers/common/mkql)
+add_subdirectory(ydb/library/yql/core)
+add_subdirectory(library/cpp/yson/node)
+add_subdirectory(library/cpp/yson/json)
+add_subdirectory(ydb/library/yql/core/file_storage)
+add_subdirectory(library/cpp/cache)
+add_subdirectory(library/cpp/logger/global)
+add_subdirectory(library/cpp/regex/pcre)
+add_subdirectory(contrib/libs/pcre)
+add_subdirectory(contrib/libs/pcre/pcre16)
+add_subdirectory(contrib/libs/pcre/pcre32)
+add_subdirectory(library/cpp/containers/stack_array)
+add_subdirectory(library/cpp/protobuf/util)
+add_subdirectory(library/cpp/binsaver)
+add_subdirectory(library/cpp/containers/2d_array)
+add_subdirectory(library/cpp/protobuf/util/proto)
+add_subdirectory(ydb/library/yql/core/file_storage/proto)
+add_subdirectory(ydb/library/yql/core/file_storage/defs)
+add_subdirectory(ydb/library/yql/core/file_storage/download)
+add_subdirectory(ydb/library/yql/utils/log)
+add_subdirectory(ydb/library/yql/utils/fetch)
+add_subdirectory(library/cpp/openssl/io)
+add_subdirectory(certs)
+add_subdirectory(library/cpp/openssl/init)
+add_subdirectory(library/cpp/openssl/method)
+add_subdirectory(library/cpp/openssl/holders)
+add_subdirectory(ydb/library/yql/core/sql_types)
+add_subdirectory(ydb/library/yql/protos)
+add_subdirectory(ydb/library/yql/core/expr_nodes)
+add_subdirectory(ydb/library/yql/core/expr_nodes_gen)
+add_subdirectory(contrib/tools/python3/src)
+add_subdirectory(contrib/tools/python3/src/Modules)
+add_subdirectory(contrib/libs/expat)
+add_subdirectory(contrib/libs/xz/liblzma)
+add_subdirectory(contrib/libs/xz/common)
+add_subdirectory(contrib/restricted/libffi)
+add_subdirectory(library/python/symbols/libc)
+add_subdirectory(library/python/symbols/registry)
+add_subdirectory(library/python/symbols/python)
+add_subdirectory(contrib/tools/python3/lib)
+add_subdirectory(library/cpp/malloc/jemalloc)
+add_subdirectory(contrib/libs/jemalloc)
+add_subdirectory(contrib/tools/python3/src/Modules/_sqlite)
+add_subdirectory(contrib/libs/sqlite3)
+add_subdirectory(ydb/library/yql/providers/common/proto)
+add_subdirectory(ydb/library/yql/providers/common/schema/expr)
+add_subdirectory(ydb/library/yql/providers/common/schema/parser)
+add_subdirectory(ydb/library/yql/providers/dq/expr_nodes)
+add_subdirectory(ydb/core/driver_lib/run)
+add_subdirectory(library/cpp/actors/core)
+add_subdirectory(library/cpp/actors/memory_log)
+add_subdirectory(library/cpp/threading/queue)
+add_subdirectory(contrib/libs/linuxvdso)
+add_subdirectory(contrib/libs/linuxvdso/original)
+add_subdirectory(library/cpp/actors/prof)
+add_subdirectory(library/cpp/containers/atomizer)
+add_subdirectory(library/cpp/containers/str_map)
+add_subdirectory(library/cpp/actors/protos)
+add_subdirectory(library/cpp/execprofile)
add_subdirectory(library/cpp/actors/dnsresolver)
add_subdirectory(library/cpp/actors/interconnect)
add_subdirectory(library/cpp/actors/dnscachelib)
@@ -400,13 +530,9 @@ add_subdirectory(library/cpp/actors/helpers)
add_subdirectory(library/cpp/digest/crc32c)
add_subdirectory(contrib/libs/crcutil)
add_subdirectory(library/cpp/monlib/service/pages/tablesorter)
-add_subdirectory(library/cpp/openssl/init)
-add_subdirectory(library/cpp/packedtypes)
-add_subdirectory(library/cpp/streams/zc_memory_input)
add_subdirectory(library/cpp/grpc/client)
add_subdirectory(contrib/libs/grpc)
add_subdirectory(contrib/libs/grpc/grpc)
-add_subdirectory(certs)
add_subdirectory(contrib/libs/grpc/src/core/lib)
add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/spinlock_wait)
add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/container)
@@ -432,7 +558,6 @@ add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/time/civil_time)
add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/time/time_zone)
add_subdirectory(contrib/libs/grpc/third_party/address_sorting)
add_subdirectory(contrib/libs/grpc/third_party/upb)
-add_subdirectory(contrib/libs/re2)
add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/hash)
add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/city)
add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/hash/internal)
@@ -466,8 +591,6 @@ add_subdirectory(library/cpp/lwtrace/mon)
add_subdirectory(library/cpp/lwtrace/mon/analytics)
add_subdirectory(library/cpp/sliding_window)
add_subdirectory(ydb/core/base)
-add_subdirectory(library/cpp/random_provider)
-add_subdirectory(library/cpp/time_provider)
add_subdirectory(ydb/core/base/services)
add_subdirectory(ydb/core/debug)
add_subdirectory(ydb/core/erasure)
@@ -476,8 +599,6 @@ add_subdirectory(library/cpp/digest/old_crc/gencrc)
add_subdirectory(ydb/core/protos)
add_subdirectory(ydb/core/yq/libs/config/protos)
add_subdirectory(ydb/library/folder_service/proto)
-add_subdirectory(ydb/library/yql/providers/common/proto)
-add_subdirectory(ydb/library/yql/protos)
add_subdirectory(ydb/library/yql/providers/s3/proto)
add_subdirectory(ydb/library/login/protos)
add_subdirectory(ydb/library/mkql_proto/protos)
@@ -487,10 +608,6 @@ add_subdirectory(ydb/library/yql/dq/actors/protos)
add_subdirectory(ydb/library/yql/dq/proto)
add_subdirectory(ydb/core/protos/out)
add_subdirectory(ydb/library/aclib)
-add_subdirectory(library/cpp/protobuf/util)
-add_subdirectory(library/cpp/binsaver)
-add_subdirectory(library/cpp/containers/2d_array)
-add_subdirectory(library/cpp/protobuf/util/proto)
add_subdirectory(ydb/library/aclib/protos)
add_subdirectory(ydb/library/login)
add_subdirectory(contrib/libs/jwt-cpp)
@@ -513,29 +630,6 @@ add_subdirectory(library/cpp/actors/wilson)
add_subdirectory(ydb/library/pretty_types_print/protobuf)
add_subdirectory(ydb/library/pretty_types_print/wilson)
add_subdirectory(ydb/public/api/protos/out)
-add_subdirectory(ydb/library/yql/minikql)
-add_subdirectory(contrib/libs/apache/arrow)
-add_subdirectory(contrib/libs/apache/orc)
-add_subdirectory(contrib/libs/utf8proc)
-add_subdirectory(contrib/restricted/boost)
-add_subdirectory(contrib/restricted/fast_float)
-add_subdirectory(contrib/restricted/thrift)
-add_subdirectory(contrib/libs/libevent)
-add_subdirectory(contrib/libs/libevent/event_core)
-add_subdirectory(contrib/libs/libevent/event_extra)
-add_subdirectory(contrib/libs/libevent/event_openssl)
-add_subdirectory(contrib/libs/libevent/event_thread)
-add_subdirectory(contrib/restricted/boost/libs/system)
-add_subdirectory(contrib/restricted/boost/libs/thread)
-add_subdirectory(contrib/restricted/boost/libs/chrono)
-add_subdirectory(contrib/restricted/uriparser)
-add_subdirectory(contrib/libs/cctz/tzdata)
-add_subdirectory(contrib/libs/cctz)
-add_subdirectory(ydb/library/binary_json)
-add_subdirectory(ydb/library/yql/minikql/dom)
-add_subdirectory(library/cpp/yson_pull)
-add_subdirectory(ydb/library/dynumber)
-add_subdirectory(ydb/library/yql/public/udf/tz)
add_subdirectory(ydb/core/mon)
add_subdirectory(library/cpp/string_utils/url)
add_subdirectory(ydb/core/node_whiteboard)
@@ -583,7 +677,6 @@ add_subdirectory(ydb/core/tablet)
add_subdirectory(ydb/core/mon_alloc)
add_subdirectory(library/cpp/lfalloc/alloc_profiler)
add_subdirectory(library/cpp/lfalloc/dbg_info)
-add_subdirectory(library/cpp/cache)
add_subdirectory(ydb/core/sys_view/service)
add_subdirectory(ydb/core/tracing)
add_subdirectory(ydb/library/persqueue/topic_parser)
@@ -592,107 +685,19 @@ add_subdirectory(ydb/library/mkql_proto)
add_subdirectory(ydb/library/mkql_proto/ut/helpers)
add_subdirectory(ydb/library/yql/minikql/comp_nodes)
add_subdirectory(ydb/library/yql/minikql/invoke_builtins)
-add_subdirectory(ydb/library/yql/minikql/computation)
-add_subdirectory(ydb/library/yql/minikql/arrow)
-add_subdirectory(ydb/library/yql/minikql/codegen)
-add_subdirectory(contrib/libs/llvm12/lib/IR)
-add_subdirectory(contrib/libs/llvm12)
-add_subdirectory(contrib/libs/llvm12/include)
-add_subdirectory(contrib/libs/llvm12/utils/TableGen)
-add_subdirectory(contrib/libs/llvm12/lib/Demangle)
-add_subdirectory(contrib/libs/llvm12/lib/Support)
-add_subdirectory(contrib/libs/llvm12/lib/TableGen)
-add_subdirectory(contrib/libs/llvm12/utils/TableGen/GlobalISel)
-add_subdirectory(contrib/libs/llvm12/lib/BinaryFormat)
-add_subdirectory(contrib/libs/llvm12/lib/Remarks)
-add_subdirectory(contrib/libs/llvm12/lib/Bitstream/Reader)
-add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine/MCJIT)
-add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine)
-add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine/RuntimeDyld)
-add_subdirectory(contrib/libs/llvm12/lib/MC)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/CodeView)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/MSF)
-add_subdirectory(contrib/libs/llvm12/lib/Object)
-add_subdirectory(contrib/libs/llvm12/lib/Bitcode/Reader)
-add_subdirectory(contrib/libs/llvm12/lib/MC/MCParser)
-add_subdirectory(contrib/libs/llvm12/lib/TextAPI/MachO)
-add_subdirectory(contrib/libs/llvm12/lib/Target)
-add_subdirectory(contrib/libs/llvm12/lib/Analysis)
-add_subdirectory(contrib/libs/llvm12/lib/ProfileData)
-add_subdirectory(contrib/libs/llvm12/lib/Linker)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Utils)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen)
-add_subdirectory(contrib/libs/llvm12/lib/Bitcode/Writer)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Scalar)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/AggressiveInstCombine)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/InstCombine)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen/AsmPrinter)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/DWARF)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen/GlobalISel)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen/SelectionDAG)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/MCTargetDesc)
-add_subdirectory(contrib/libs/llvm12/lib/MC/MCDisassembler)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/TargetInfo)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/CFGuard)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/AsmParser)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/Disassembler)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/IPO)
-add_subdirectory(contrib/libs/llvm12/lib/Frontend/OpenMP)
-add_subdirectory(contrib/libs/llvm12/lib/IRReader)
-add_subdirectory(contrib/libs/llvm12/lib/AsmParser)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Instrumentation)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Vectorize)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/ObjCARC)
-add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine/PerfJITEvents)
add_subdirectory(library/cpp/testing/unittest)
add_subdirectory(library/cpp/dbg_output)
add_subdirectory(library/cpp/diff)
add_subdirectory(library/cpp/lcs)
add_subdirectory(library/cpp/containers/paged_vector)
-add_subdirectory(library/cpp/containers/stack_array)
add_subdirectory(library/cpp/testing/common)
add_subdirectory(library/cpp/testing/hook)
add_subdirectory(ydb/core/kqp/provider)
add_subdirectory(ydb/core/kqp/provider/mkql)
-add_subdirectory(contrib/tools/python3/src)
-add_subdirectory(contrib/tools/python3/src/Modules)
-add_subdirectory(contrib/libs/expat)
-add_subdirectory(contrib/libs/xz/liblzma)
-add_subdirectory(contrib/libs/xz/common)
-add_subdirectory(contrib/restricted/libffi)
-add_subdirectory(library/python/symbols/libc)
-add_subdirectory(library/python/symbols/registry)
-add_subdirectory(library/python/symbols/python)
-add_subdirectory(contrib/tools/python3/lib)
-add_subdirectory(library/cpp/malloc/jemalloc)
-add_subdirectory(contrib/libs/jemalloc)
-add_subdirectory(contrib/tools/python3/src/Modules/_sqlite)
-add_subdirectory(contrib/libs/sqlite3)
add_subdirectory(ydb/library/yql/core/services)
add_subdirectory(ydb/library/yql/ast/serialize)
add_subdirectory(ydb/library/yql/sql)
add_subdirectory(ydb/library/yql/sql/v0)
-add_subdirectory(ydb/library/yql/core)
-add_subdirectory(library/cpp/yson/node)
-add_subdirectory(library/cpp/yson/json)
-add_subdirectory(ydb/library/yql/core/file_storage)
-add_subdirectory(library/cpp/logger/global)
-add_subdirectory(library/cpp/regex/pcre)
-add_subdirectory(contrib/libs/pcre)
-add_subdirectory(contrib/libs/pcre/pcre16)
-add_subdirectory(contrib/libs/pcre/pcre32)
-add_subdirectory(ydb/library/yql/core/file_storage/proto)
-add_subdirectory(ydb/library/yql/core/file_storage/defs)
-add_subdirectory(ydb/library/yql/core/file_storage/download)
-add_subdirectory(ydb/library/yql/utils/log)
-add_subdirectory(ydb/library/yql/utils/fetch)
-add_subdirectory(library/cpp/openssl/io)
-add_subdirectory(library/cpp/openssl/method)
-add_subdirectory(library/cpp/openssl/holders)
-add_subdirectory(ydb/library/yql/core/sql_types)
-add_subdirectory(ydb/library/yql/core/expr_nodes)
-add_subdirectory(ydb/library/yql/core/expr_nodes_gen)
add_subdirectory(ydb/library/yql/parser/proto_ast)
add_subdirectory(contrib/libs/antlr3_cpp_runtime)
add_subdirectory(ydb/library/yql/parser/proto_ast/collect_issues)
@@ -706,11 +711,6 @@ add_subdirectory(ydb/library/yql/sql/v1/lexer)
add_subdirectory(ydb/library/yql/core/common_opt)
add_subdirectory(ydb/library/yql/core/peephole_opt)
add_subdirectory(ydb/library/yql/core/type_ann)
-add_subdirectory(ydb/library/yql/providers/common/schema/expr)
-add_subdirectory(ydb/library/yql/providers/common/schema/parser)
-add_subdirectory(ydb/library/yql/providers/common/codec)
-add_subdirectory(ydb/library/yql/providers/common/mkql)
-add_subdirectory(ydb/library/yql/providers/dq/expr_nodes)
add_subdirectory(ydb/library/yql/providers/common/provider)
add_subdirectory(ydb/library/yql/providers/result/expr_nodes)
add_subdirectory(ydb/library/yql/providers/common/config)
diff --git a/ydb/core/kqp/provider/mkql/CMakeLists.txt b/ydb/core/kqp/provider/mkql/CMakeLists.txt
index 9800c19516..e982576483 100644
--- a/ydb/core/kqp/provider/mkql/CMakeLists.txt
+++ b/ydb/core/kqp/provider/mkql/CMakeLists.txt
@@ -5,42 +5,11 @@ set_property(TARGET kqp-provider-mkql PROPERTY
target_link_libraries(kqp-provider-mkql PUBLIC
contrib-libs-cxxsupp
yutil
- contrib-libs-cxxsupp
- yutil
- contrib-libs-cxxsupp
- yutil
- contrib-libs-cxxsupp
- yutil
- tools-python3-src
- contrib-libs-cxxsupp
- yutil
- python-symbols-libc
- python-symbols-python
- tools-python3-lib
- contrib-libs-cxxsupp
- yutil
- tools-python3-src
- library-cpp-resource
- contrib-libs-cxxsupp
- yutil
- contrib-libs-cxxsupp
- yutil
- contrib-libs-cxxsupp
- yutil
- contrib-libs-cxxsupp
- yutil
- contrib-libs-cxxsupp
- yutil
- cpp-malloc-jemalloc
- library-cpp-cpuid_check
- src-Modules-_sqlite
)
target_sources(kqp-provider-mkql PRIVATE
${CMAKE_BINARY_DIR}/ydb/core/kqp/provider/mkql/yql_kikimr_mkql_expr_nodes.gen.h
${CMAKE_BINARY_DIR}/ydb/core/kqp/provider/mkql/yql_kikimr_mkql_expr_nodes.decl.inl.h
${CMAKE_BINARY_DIR}/ydb/core/kqp/provider/mkql/yql_kikimr_mkql_expr_nodes.defs.inl.h
- ${CMAKE_SOURCE_DIR}/library/python/symbols/module/module.cpp
- ${CMAKE_SOURCE_DIR}/contrib/python/MarkupSafe/py3/markupsafe/_speedups.c
)
add_custom_command(
OUTPUT
diff --git a/ydb/library/yql/core/expr_nodes/CMakeLists.txt b/ydb/library/yql/core/expr_nodes/CMakeLists.txt
index 5df709fd66..713a17a847 100644
--- a/ydb/library/yql/core/expr_nodes/CMakeLists.txt
+++ b/ydb/library/yql/core/expr_nodes/CMakeLists.txt
@@ -5,12 +5,43 @@ target_link_libraries(yql-core-expr_nodes PUBLIC
yql-core-expr_nodes_gen
yql-public-udf
yql-core-issue
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-cxxsupp
+ yutil
+ tools-python3-src
+ contrib-libs-cxxsupp
+ yutil
+ python-symbols-libc
+ python-symbols-python
+ tools-python3-lib
+ contrib-libs-cxxsupp
+ yutil
+ tools-python3-src
+ library-cpp-resource
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-cxxsupp
+ yutil
+ cpp-malloc-jemalloc
+ library-cpp-cpuid_check
+ src-Modules-_sqlite
)
target_sources(yql-core-expr_nodes PRIVATE
${CMAKE_SOURCE_DIR}/ydb/library/yql/core/expr_nodes/yql_expr_nodes.cpp
${CMAKE_BINARY_DIR}/ydb/library/yql/core/expr_nodes/yql_expr_nodes.gen.h
${CMAKE_BINARY_DIR}/ydb/library/yql/core/expr_nodes/yql_expr_nodes.decl.inl.h
${CMAKE_BINARY_DIR}/ydb/library/yql/core/expr_nodes/yql_expr_nodes.defs.inl.h
+ ${CMAKE_SOURCE_DIR}/library/python/symbols/module/module.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/python/MarkupSafe/py3/markupsafe/_speedups.c
)
add_custom_command(
OUTPUT
diff --git a/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp b/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
index ce22b12571..46195ae0c8 100644
--- a/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
+++ b/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
@@ -1918,9 +1918,14 @@ IGraphTransformer::TStatus PeepHoleCommonStage(const TExprNode::TPtr& input, TEx
TOptimizeExprSettings settings(&types);
settings.CustomInstantTypeTransformer = types.CustomInstantTypeTransformer.Get();
- return OptimizeExpr(input, output, [&optimizers](const TExprNode::TPtr& node, TExprContext& ctx) -> TExprNode::TPtr {
+ return OptimizeExpr(input, output, [&optimizers, &types](const TExprNode::TPtr& node, TExprContext& ctx) -> TExprNode::TPtr {
if (const auto rule = optimizers.find(node->Content()); optimizers.cend() != rule)
return (rule->second)(node, ctx);
+
+ if (!types.PgTypes && node->IsCallable("PgCall")) {
+ return ExpandPgCall(node, ctx);
+ }
+
return node;
}, ctx, settings);
}
@@ -5754,8 +5759,7 @@ struct TPeepHoleRules {
{"AggrGreaterOrEqual", &ExpandAggrCompare<false, true>},
{"RangeEmpty", &ExpandRangeEmpty},
{"AsRange", &ExpandAsRange},
- {"RangeFor", &ExpandRangeFor},
- {"PgCall", &ExpandPgCall},
+ {"RangeFor", &ExpandRangeFor}
};
static constexpr std::initializer_list<TPeepHoleOptimizerMap::value_type> SimplifyStageRulesInit = {
diff --git a/ydb/library/yql/core/type_ann/type_ann_core.cpp b/ydb/library/yql/core/type_ann/type_ann_core.cpp
index c2eb154c99..47c2c076db 100644
--- a/ydb/library/yql/core/type_ann/type_ann_core.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_core.cpp
@@ -8773,9 +8773,10 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
}
};
- IGraphTransformer::TStatus PgCallWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
+ IGraphTransformer::TStatus PgCallWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TExtContext& ctx) {
Y_UNUSED(output);
- if (!EnsureMinArgsCount(*input, 1, ctx.Expr)) {
+ bool isResolved = input->Content() == "PgResolvedCall";
+ if (!EnsureMinArgsCount(*input, isResolved ? 2 : 1, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -8784,68 +8785,115 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
}
auto name = input->Head().Content();
- const TTypeAnnotationNode* result = nullptr;
- TVector<const TTypeAnnotationNode*> argTypes;
- bool isNull = false;
- bool isOptional = false;
- for (ui32 i = 1; i < input->ChildrenSize(); ++i) {
- auto type = input->Child(i)->GetTypeAnn();
- if (type->GetKind() == ETypeAnnotationKind::Null) {
- argTypes.push_back(type);
- isNull = true;
- result = type;
- continue;
+
+ if (isResolved) {
+ if (!EnsureAtom(*input->Child(1), ctx.Expr)) {
+ return IGraphTransformer::TStatus::Error;
}
+ }
- if (type->GetKind() == ETypeAnnotationKind::Optional) {
- type = RemoveOptionalType(type);
- isOptional = true;
+ if (ctx.Types.PgTypes || isResolved) {
+ TVector<ui32> argTypes;
+ for (ui32 i = isResolved ? 2 : 1; i < input->ChildrenSize(); ++i) {
+ auto type = input->Child(i)->GetTypeAnn();
+ if (type->GetKind() == ETypeAnnotationKind::Null) {
+ argTypes.push_back(0);
+ continue;
+ }
+
+ if (type->GetKind() != ETypeAnnotationKind::Pg) {
+ ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
+ TStringBuilder() << "Expected PG type for argument " << (i - (isResolved ? 2 : 1) + 1) << ", but got: " << type->GetKind() << " for function: " << name));
+ return IGraphTransformer::TStatus::Error;
+ }
+
+ argTypes.push_back(type->Cast<TPgExprType>()->GetId());
}
- argTypes.push_back(type);
- }
+ if (isResolved) {
+ auto procId = FromString<ui32>(input->Child(1)->Content());
+ const auto& proc = NPg::LookupProc(procId, argTypes);
+ if (proc.Name != name) {
+ ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
+ TStringBuilder() << "Mismatch of resolved function name, expected: " << name << ", but got:" << proc.Name));
+ return IGraphTransformer::TStatus::Error;
+ }
- const auto& funcs = TPgFuncMap::Instance().Funcs;
- auto it = funcs.find(name);
- if (it != funcs.end()) {
- const auto& desc = it->second;
- if (argTypes.size() > desc.MaxArgs || argTypes.size() < desc.MinArgs) {
- ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
- TStringBuilder() << "Incorrect arguments count: " << argTypes.size() << " for function: " << name));
- return IGraphTransformer::TStatus::Error;
+ auto result = ctx.Expr.MakeType<TPgExprType>(proc.ResultType);
+ input->SetTypeAnn(result);
+ return IGraphTransformer::TStatus::Ok;
+ } else {
+ const auto& proc = NPg::LookupProc(TString(name), argTypes);
+ auto children = input->ChildrenList();
+ auto idNode = ctx.Expr.NewAtom(input->Pos(), ToString(proc.ProcId));
+ children.insert(children.begin() + 1, idNode);
+ output = ctx.Expr.NewCallable(input->Pos(), "PgResolvedCall", std::move(children));
+ return IGraphTransformer::TStatus::Repeat;
}
+ } else {
+ const TTypeAnnotationNode* result = nullptr;
+ TVector<const TTypeAnnotationNode*> argTypes;
+ bool isNull = false;
+ bool isOptional = false;
+ for (ui32 i = 1; i < input->ChildrenSize(); ++i) {
+ auto type = input->Child(i)->GetTypeAnn();
+ if (type->GetKind() == ETypeAnnotationKind::Null) {
+ argTypes.push_back(type);
+ isNull = true;
+ result = type;
+ continue;
+ }
- for (ui32 i = 0; i < argTypes.size(); ++i) {
- auto expectedType = desc.DataTypes[i];
- if (argTypes[i]->GetKind() != ETypeAnnotationKind::Null) {
- if (argTypes[i]->GetKind() != ETypeAnnotationKind::Data) {
- ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
- TStringBuilder() << "Expected type " << expectedType << " for argument " << (i + 1) << ", but got: " << argTypes[i]->GetKind() << " for function: " << name));
- return IGraphTransformer::TStatus::Error;
- } else {
- auto dataType = argTypes[i]->Cast<TDataExprType>()->GetSlot();
- if (dataType != expectedType) {
+ if (type->GetKind() == ETypeAnnotationKind::Optional) {
+ type = RemoveOptionalType(type);
+ isOptional = true;
+ }
+
+ argTypes.push_back(type);
+ }
+
+ const auto& funcs = TPgFuncMap::Instance().Funcs;
+ auto it = funcs.find(name);
+ if (it != funcs.end()) {
+ const auto& desc = it->second;
+ if (argTypes.size() > desc.MaxArgs || argTypes.size() < desc.MinArgs) {
+ ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
+ TStringBuilder() << "Incorrect arguments count: " << argTypes.size() << " for function: " << name));
+ return IGraphTransformer::TStatus::Error;
+ }
+
+ for (ui32 i = 0; i < argTypes.size(); ++i) {
+ auto expectedType = desc.DataTypes[i];
+ if (argTypes[i]->GetKind() != ETypeAnnotationKind::Null) {
+ if (argTypes[i]->GetKind() != ETypeAnnotationKind::Data) {
ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
- TStringBuilder() << "Expected type " << expectedType << " for argument " << (i + 1) << ", but got: " << dataType << " for function: " << name));
+ TStringBuilder() << "Expected type " << expectedType << " for argument " << (i + 1) << ", but got: " << argTypes[i]->GetKind() << " for function: " << name));
return IGraphTransformer::TStatus::Error;
+ } else {
+ auto dataType = argTypes[i]->Cast<TDataExprType>()->GetSlot();
+ if (dataType != expectedType) {
+ ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
+ TStringBuilder() << "Expected type " << expectedType << " for argument " << (i + 1) << ", but got: " << dataType << " for function: " << name));
+ return IGraphTransformer::TStatus::Error;
+ }
}
}
}
+
+ result = ctx.Expr.MakeType<TDataExprType>(desc.ReturnType);
+ } else {
+ ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
+ TStringBuilder() << "Unsupported function: " << name));
+ return IGraphTransformer::TStatus::Error;
}
- result = ctx.Expr.MakeType<TDataExprType>(desc.ReturnType);
- } else {
- ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
- TStringBuilder() << "Unsupported function: " << name));
- return IGraphTransformer::TStatus::Error;
- }
+ if (!isNull && isOptional && result->GetKind() != ETypeAnnotationKind::Optional) {
+ result = ctx.Expr.MakeType<TOptionalExprType>(result);
+ }
- if (!isNull && isOptional && result->GetKind() != ETypeAnnotationKind::Optional) {
- result = ctx.Expr.MakeType<TOptionalExprType>(result);
+ input->SetTypeAnn(result);
+ return IGraphTransformer::TStatus::Ok;
}
-
- input->SetTypeAnn(result);
- return IGraphTransformer::TStatus::Ok;
}
IGraphTransformer::TStatus PgWindowCallWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
@@ -9379,6 +9427,21 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
return IGraphTransformer::TStatus::Ok;
}
+ IGraphTransformer::TStatus PgTypeWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
+ Y_UNUSED(output);
+ if (!EnsureArgsCount(*input, 1, ctx.Expr)) {
+ return IGraphTransformer::TStatus::Error;
+ }
+
+ if (!EnsureAtom(*input->Child(0), ctx.Expr)) {
+ return IGraphTransformer::TStatus::Error;
+ }
+
+ auto typeId = NPg::LookupType(TString(input->Child(0)->Content())).TypeId;
+ input->SetTypeAnn(ctx.Expr.MakeType<TTypeExprType>(ctx.Expr.MakeType<TPgExprType>(typeId)));
+ return IGraphTransformer::TStatus::Ok;
+ }
+
using TInputs = TVector<std::tuple<TString, const TStructExprType*, TMaybe<TColumnOrder>>>;
bool ScanColumns(TExprNode::TPtr root, const TInputs& inputs, const THashSet<TString>& possibleAliases,
@@ -13080,7 +13143,6 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
Functions["SqlProjectItem"] = &SqlProjectItemWrapper;
Functions["SqlProjectStarItem"] = &SqlProjectItemWrapper;
Functions["PgStar"] = &PgStarWrapper;
- Functions["PgCall"] = &PgCallWrapper;
Functions["PgAgg"] = &PgAggWrapper;
Functions["PgAggWindowCall"] = &PgAggWrapper;
Functions["PgWindowCall"] = &PgWindowCallWrapper;
@@ -13093,6 +13155,7 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
Functions["PgWindow"] = &PgWindowWrapper;
Functions["PgAnonWindow"] = &PgAnonWindowWrapper;
Functions["PgConst"] = &PgConstWrapper;
+ Functions["PgType"] = &PgTypeWrapper;
Functions["AutoDemuxList"] = &AutoDemuxListWrapper;
Functions["AggrCountInit"] = &AggrCountInitWrapper;
Functions["AggrCountUpdate"] = &AggrCountUpdateWrapper;
@@ -13219,6 +13282,8 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
Functions["RoundDown"] = &RoundWrapper;
Functions["NextValue"] = &NextValueWrapper;
+ ExtFunctions["PgCall"] = &PgCallWrapper;
+ ExtFunctions["PgResolvedCall"] = &PgCallWrapper;
ExtFunctions["PgSelect"] = &PgSelectWrapper;
ExtFunctions["PgSetItem"] = &PgSetItemWrapper;
ExtFunctions["TablePath"] = &TablePathWrapper;
diff --git a/ydb/library/yql/core/yql_expr_type_annotation.cpp b/ydb/library/yql/core/yql_expr_type_annotation.cpp
index f2b793af8d..7cccc910e9 100644
--- a/ydb/library/yql/core/yql_expr_type_annotation.cpp
+++ b/ydb/library/yql/core/yql_expr_type_annotation.cpp
@@ -4689,6 +4689,12 @@ TExprNode::TPtr ExpandTypeNoCache(TPositionHandle position, const TTypeAnnotatio
}
}
+ case ETypeAnnotationKind::Pg:
+ {
+ const auto pgType = type.Cast<TPgExprType>();
+ return ctx.NewCallable(position, "PgType", { ctx.NewAtom(position, pgType->GetName(), TNodeFlags::Default) });
+ }
+
case ETypeAnnotationKind::Optional:
{
auto ret = ctx.NewCallable(position, "OptionalType",
diff --git a/ydb/library/yql/minikql/mkql_program_builder.cpp b/ydb/library/yql/minikql/mkql_program_builder.cpp
index ffbdf61c2f..ba55d92072 100644
--- a/ydb/library/yql/minikql/mkql_program_builder.cpp
+++ b/ydb/library/yql/minikql/mkql_program_builder.cpp
@@ -5026,6 +5026,22 @@ TRuntimeNode TProgramBuilder::PgConst(TPgType* pgType, const std::string_view& v
return TRuntimeNode(callableBuilder.Build(), false);
}
+TRuntimeNode TProgramBuilder::PgResolvedCall(const std::string_view& name, ui32 id, const TArrayRef<const TRuntimeNode>& args,
+ TType* returnType) {
+ if constexpr (RuntimeVersion < 30U) {
+ THROW yexception() << "Runtime version (" << RuntimeVersion << ") too old for " << __func__;
+ }
+
+ TCallableBuilder callableBuilder(Env, __func__, returnType);
+ callableBuilder.Add(NewDataLiteral<NUdf::EDataSlot::String>(name));
+ callableBuilder.Add(NewDataLiteral(id));
+ for (const auto arg : args) {
+ callableBuilder.Add(arg);
+ }
+
+ return TRuntimeNode(callableBuilder.Build(), false);
+}
+
bool CanExportType(TType* type, const TTypeEnvironment& env) {
if (type->GetKind() == TType::EKind::Type) {
return false; // Type of Type
diff --git a/ydb/library/yql/minikql/mkql_program_builder.h b/ydb/library/yql/minikql/mkql_program_builder.h
index 1e6f521a68..ed9333378c 100644
--- a/ydb/library/yql/minikql/mkql_program_builder.h
+++ b/ydb/library/yql/minikql/mkql_program_builder.h
@@ -624,6 +624,7 @@ public:
typedef TRuntimeNode (TProgramBuilder::*NarrowFunctionMethod)(TRuntimeNode, const TNarrowLambda&);
TRuntimeNode PgConst(TPgType* pgType, const std::string_view& value);
+ TRuntimeNode PgResolvedCall(const std::string_view& name, ui32 id, const TArrayRef<const TRuntimeNode>& args, TType* returnType);
protected:
TRuntimeNode Invoke(const std::string_view& funcName, TType* resultType, const TArrayRef<const TRuntimeNode>& args);
diff --git a/ydb/library/yql/parser/pg_catalog/catalog.cpp b/ydb/library/yql/parser/pg_catalog/catalog.cpp
index abc148fa87..0cebe1baac 100644
--- a/ydb/library/yql/parser/pg_catalog/catalog.cpp
+++ b/ydb/library/yql/parser/pg_catalog/catalog.cpp
@@ -299,6 +299,40 @@ struct TCatalog {
THashMap<TString, ui32> TypeByName;
};
+bool ValidateArgs(const TProcDesc& d, const TVector<ui32>& argTypeIds) {
+ if (argTypeIds.size() != d.ArgTypes.size()) {
+ return false;
+ }
+
+ bool found = true;
+ for (size_t i = 0; i < argTypeIds.size(); ++i) {
+ if (argTypeIds[i] == 0) {
+ continue; // NULL
+ }
+
+ if (argTypeIds[i] != d.ArgTypes[i]) {
+ found = false;
+ break;
+ }
+ }
+
+ return found;
+}
+
+const TProcDesc& LookupProc(ui32 procId, const TVector<ui32>& argTypeIds) {
+ const auto& catalog = TCatalog::Instance();
+ auto procPtr = catalog.Procs.FindPtr(procId);
+ if (!procPtr) {
+ throw yexception() << "No such proc: " << procId;
+ }
+
+ if (!ValidateArgs(*procPtr, argTypeIds)) {
+ throw yexception() << "Unable to find an overload for with oid " << procId << " with given argument types";
+ }
+
+ return *procPtr;
+}
+
const TProcDesc& LookupProc(const TString& name, const TVector<ui32>& argTypeIds) {
const auto& catalog = TCatalog::Instance();
auto procIdPtr = catalog.ProcByName.FindPtr(name);
@@ -309,7 +343,7 @@ const TProcDesc& LookupProc(const TString& name, const TVector<ui32>& argTypeIds
for (const auto& id : *procIdPtr) {
const auto& d = catalog.Procs.FindPtr(id);
Y_ENSURE(d);
- if (argTypeIds != d->ArgTypes) {
+ if (!ValidateArgs(*d, argTypeIds)) {
continue;
}
@@ -319,6 +353,16 @@ const TProcDesc& LookupProc(const TString& name, const TVector<ui32>& argTypeIds
throw yexception() << "Unable to find an overload for function " << name << " with given argument types";
}
+const TProcDesc& LookupProc(ui32 procId) {
+ const auto& catalog = TCatalog::Instance();
+ auto procPtr = catalog.Procs.FindPtr(procId);
+ if (!procPtr) {
+ throw yexception() << "No such proc: " << procId;
+ }
+
+ return *procPtr;
+}
+
const TTypeDesc& LookupType(const TString& name) {
const auto& catalog = TCatalog::Instance();
auto typeIdPtr = catalog.TypeByName.FindPtr(name);
diff --git a/ydb/library/yql/parser/pg_catalog/catalog.h b/ydb/library/yql/parser/pg_catalog/catalog.h
index b4ed9802d9..fadfe3ae82 100644
--- a/ydb/library/yql/parser/pg_catalog/catalog.h
+++ b/ydb/library/yql/parser/pg_catalog/catalog.h
@@ -38,6 +38,8 @@ struct TTypeDesc {
};
const TProcDesc& LookupProc(const TString& name, const TVector<ui32>& argTypeIds);
+const TProcDesc& LookupProc(ui32 procId, const TVector<ui32>& argTypeIds);
+const TProcDesc& LookupProc(ui32 procId);
const TTypeDesc& LookupType(const TString& name);
const TTypeDesc& LookupType(ui32 typeId);
diff --git a/ydb/library/yql/providers/common/codec/yql_pg_codec.h b/ydb/library/yql/providers/common/codec/yql_pg_codec.h
new file mode 100644
index 0000000000..969bfb9ca5
--- /dev/null
+++ b/ydb/library/yql/providers/common/codec/yql_pg_codec.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <library/cpp/yson/public.h>
+#include <ydb/library/yql/public/udf/udf_value.h>
+#include <ydb/library/yql/minikql/mkql_node.h>
+
+#include <util/generic/vector.h>
+
+#include "yql_codec_results.h"
+
+namespace NYql {
+namespace NCommon {
+
+void WriteYsonValuePg(TYsonResultWriter& writer, const NUdf::TUnboxedValuePod& value, NKikimr::NMiniKQL::TPgType* type,
+ const TVector<ui32>* structPositions);
+
+} // namespace NCommon
+} // namespace NYql
diff --git a/ydb/library/yql/providers/common/mkql/yql_provider_mkql.cpp b/ydb/library/yql/providers/common/mkql/yql_provider_mkql.cpp
index ed6d5e7ce2..9e22d7771c 100644
--- a/ydb/library/yql/providers/common/mkql/yql_provider_mkql.cpp
+++ b/ydb/library/yql/providers/common/mkql/yql_provider_mkql.cpp
@@ -2241,6 +2241,19 @@ TMkqlCommonCallableCompiler::TShared::TShared() {
return ctx.ProgramBuilder.PgConst(type, node.Tail().Content());
});
+ AddCallable("PgResolvedCall", [](const TExprNode& node, TMkqlBuildContext& ctx) {
+ auto name = node.Head().Content();
+ auto id = FromString<ui32>(node.Child(1)->Content());
+ std::vector<TRuntimeNode> args;
+ args.reserve(node.ChildrenSize() - 1);
+ for (ui32 i = 2; i < node.ChildrenSize(); ++i) {
+ args.push_back(MkqlBuildExpr(*node.Child(i), ctx));
+ }
+
+ auto returnType = BuildType(node, *node.GetTypeAnn(), ctx.ProgramBuilder);
+ return ctx.ProgramBuilder.PgResolvedCall(name, id, args, returnType);
+ });
+
AddCallable("QueueCreate", [](const TExprNode& node, TMkqlBuildContext& ctx) {
const auto initCapacity = MkqlBuildExpr(*node.Child(1), ctx);
const auto initSize = MkqlBuildExpr(*node.Child(2), ctx);
diff --git a/ydb/library/yql/sql/pg_dummy/CMakeLists.txt b/ydb/library/yql/sql/pg_dummy/CMakeLists.txt
index 0a73a1be6f..a92777624d 100644
--- a/ydb/library/yql/sql/pg_dummy/CMakeLists.txt
+++ b/ydb/library/yql/sql/pg_dummy/CMakeLists.txt
@@ -1,9 +1,13 @@
add_library(yql-sql-pg_dummy)
+target_compile_options(yql-sql-pg_dummy PRIVATE
+ -DUSE_CURRENT_UDF_ABI_VERSION
+)
target_link_libraries(yql-sql-pg_dummy PUBLIC
contrib-libs-cxxsupp
yutil
library-yql-ast
yql-sql-settings
+ providers-common-codec
)
target_sources(yql-sql-pg_dummy PRIVATE
${CMAKE_SOURCE_DIR}/ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp
diff --git a/ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp b/ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp
index e811c69d05..ed06cabfb0 100644
--- a/ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp
+++ b/ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp
@@ -1,4 +1,5 @@
#include <ydb/library/yql/sql/pg_sql.h>
+#include <ydb/library/yql/providers/common/codec/yql_pg_codec.h>
namespace NSQLTranslationPG {
@@ -11,3 +12,19 @@ NYql::TAstParseResult PGToYql(const TString& query, const NSQLTranslation::TTran
}
} // NSQLTranslationPG
+
+namespace NYql {
+namespace NCommon {
+
+void WriteYsonValuePg(TYsonResultWriter& writer, const NUdf::TUnboxedValuePod& value, NKikimr::NMiniKQL::TPgType* type,
+ const TVector<ui32>* structPositions) {
+ Y_UNUSED(writer);
+ Y_UNUSED(value);
+ Y_UNUSED(type);
+ Y_UNUSED(structPositions);
+ throw yexception() << "PG types are not supported";
+}
+
+} // namespace NCommon
+} // NYql
+
diff --git a/ydb/library/yql/sql/pg_dummy/ya.make b/ydb/library/yql/sql/pg_dummy/ya.make
index 966b9de4fd..f165f93741 100644
--- a/ydb/library/yql/sql/pg_dummy/ya.make
+++ b/ydb/library/yql/sql/pg_dummy/ya.make
@@ -5,10 +5,13 @@ OWNER(g:yql)
PEERDIR(
ydb/library/yql/ast
ydb/library/yql/sql/settings
+ ydb/library/yql/providers/common/codec
)
SRCS(
pg_sql_dummy.cpp
)
+YQL_LAST_ABI_VERSION()
+
END()