diff options
author | vvvv <vvvv@yandex-team.ru> | 2022-02-25 23:33:05 +0300 |
---|---|---|
committer | vvvv <vvvv@yandex-team.ru> | 2022-02-25 23:33:05 +0300 |
commit | 3ac68888f5cd911954a4cb2e2bf081001c5e7e2c (patch) | |
tree | 16ddc82bf8a043a5554b0067e5b566ed6085c484 | |
parent | e888dc3492f86099cdb3660a563711495e890880 (diff) | |
download | ydb-3ac68888f5cd911954a4cb2e2bf081001c5e7e2c.tar.gz |
YQL-13710 initial runtime support for PgCall
ref:fcd347be079fb1c022d213750eda307cf70eaf10
-rw-r--r-- | CMakeLists.txt | 296 | ||||
-rw-r--r-- | ydb/core/kqp/provider/mkql/CMakeLists.txt | 31 | ||||
-rw-r--r-- | ydb/library/yql/core/expr_nodes/CMakeLists.txt | 31 | ||||
-rw-r--r-- | ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp | 10 | ||||
-rw-r--r-- | ydb/library/yql/core/type_ann/type_ann_core.cpp | 163 | ||||
-rw-r--r-- | ydb/library/yql/core/yql_expr_type_annotation.cpp | 6 | ||||
-rw-r--r-- | ydb/library/yql/minikql/mkql_program_builder.cpp | 16 | ||||
-rw-r--r-- | ydb/library/yql/minikql/mkql_program_builder.h | 1 | ||||
-rw-r--r-- | ydb/library/yql/parser/pg_catalog/catalog.cpp | 46 | ||||
-rw-r--r-- | ydb/library/yql/parser/pg_catalog/catalog.h | 2 | ||||
-rw-r--r-- | ydb/library/yql/providers/common/codec/yql_pg_codec.h | 18 | ||||
-rw-r--r-- | ydb/library/yql/providers/common/mkql/yql_provider_mkql.cpp | 13 | ||||
-rw-r--r-- | ydb/library/yql/sql/pg_dummy/CMakeLists.txt | 4 | ||||
-rw-r--r-- | ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp | 17 | ||||
-rw-r--r-- | ydb/library/yql/sql/pg_dummy/ya.make | 3 |
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() |