aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVitaly Stoyan <vitstn@gmail.com>2023-12-21 12:53:31 +0300
committerGitHub <noreply@github.com>2023-12-21 12:53:31 +0300
commit037dc17c006d158a227672e21578612a85178728 (patch)
treecc864bbddba0b2c06cbcaade4c202cd91458a4db
parent35f1f39580e30e0736ffd75eaa3a815aa8f21860 (diff)
downloadydb-037dc17c006d158a227672e21578612a85178728.tar.gz
init (#610)
-rw-r--r--build/plugins/cp.py21
-rw-r--r--build/plugins/llvm_bc.py6
-rw-r--r--ydb/core/engine/mkql_engine_flat_extfunc.cpp1
-rw-r--r--ydb/core/kqp/runtime/kqp_compute.cpp1
-rw-r--r--ydb/library/yql/core/spilling/storage/file_storage/ya.make16
-rw-r--r--ydb/library/yql/core/spilling/storage/ya.make16
-rw-r--r--ydb/library/yql/core/spilling/ya.make16
-rw-r--r--ydb/library/yql/minikql/codegen/codegen.cpp39
-rw-r--r--ydb/library/yql/minikql/codegen/codegen_llvm_deps.h.txt27
-rw-r--r--ydb/library/yql/minikql/codegen/codegen_ut.cpp8
-rw-r--r--ydb/library/yql/minikql/codegen/codegen_ut_llvm_deps.h.txt7
-rw-r--r--ydb/library/yql/minikql/codegen/llvm/ut/ya.make27
-rw-r--r--ydb/library/yql/minikql/codegen/llvm/ya.make26
-rw-r--r--ydb/library/yql/minikql/codegen/llvm14/ut/ya.make27
-rw-r--r--ydb/library/yql/minikql/codegen/llvm14/ya.make26
-rw-r--r--ydb/library/yql/minikql/codegen/ut/ya.make.inc (renamed from ydb/library/yql/minikql/codegen/ut/ya.make)31
-rw-r--r--ydb/library/yql/minikql/codegen/ya.make42
-rw-r--r--ydb/library/yql/minikql/codegen/ya.make.inc66
-rw-r--r--ydb/library/yql/minikql/comp_nodes/llvm/ut/ya.make19
-rw-r--r--ydb/library/yql/minikql/comp_nodes/llvm/ya.make11
-rw-r--r--ydb/library/yql/minikql/comp_nodes/llvm14/ut/ya.make19
-rw-r--r--ydb/library/yql/minikql/comp_nodes/llvm14/ya.make27
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_addmember.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_aggrcount.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_append.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_apply.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_block_agg.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_block_compress.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_block_skiptake.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_block_top.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_blocks.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_callable.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_chain1_map.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_chain_map.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_chopper.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_coalesce.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_collect.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_combine.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_condense.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_condense1.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_contains.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_decimal_div.cpp4
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_decimal_mod.cpp4
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_decimal_mul.cpp4
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_dictitems.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_discard.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_element.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_ensure.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_enumerate.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_exists.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_extend.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_factory.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_filter.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_flatmap.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_flow.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_fold.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_fold1.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_fromstring.cpp4
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_grace_join.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_guess.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_hasitems.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_heap.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_if.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_ifpresent.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_invoke.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_iterator.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_join.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_join_dict.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_lazy_list.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_length.cpp4
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_listfromrange.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_logical.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_lookup.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_map.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_map_join.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_match_recognize.cpp1
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_multimap.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_null.cpp1
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_prepend.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_random.cpp1
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_reduce.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_removemember.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_reverse.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_size.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_skip.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_source.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_squeeze_to_list.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_switch.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_take.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_time_order_recover.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_timezone.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_tobytes.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_todict.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_toindexdict.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_tooptional.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_tostring.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_udf.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_unwrap.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_varitem.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_visitall.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_way.cpp3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_while.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_wide_chain_map.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_wide_chopper.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_wide_combine.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_wide_condense.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_wide_filter.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_wide_map.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_wide_top_sort.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_withcontext.cpp4
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_zip.cpp1
-rw-r--r--ydb/library/yql/minikql/comp_nodes/no_llvm/ya.make5
-rw-r--r--ydb/library/yql/minikql/comp_nodes/ut/mkql_block_skiptake_ut.cpp2
-rw-r--r--ydb/library/yql/minikql/comp_nodes/ut/ya.make.inc105
-rw-r--r--ydb/library/yql/minikql/comp_nodes/ya.make9
-rw-r--r--ydb/library/yql/minikql/comp_nodes/ya.make.inc25
-rw-r--r--ydb/library/yql/minikql/computation/header.ya.make.inc21
-rw-r--r--ydb/library/yql/minikql/computation/llvm/ut/ya.make19
-rw-r--r--ydb/library/yql/minikql/computation/llvm/ya.make6
-rw-r--r--ydb/library/yql/minikql/computation/llvm14/ut/ya.make19
-rw-r--r--ydb/library/yql/minikql/computation/llvm14/ya.make21
-rw-r--r--ydb/library/yql/minikql/computation/mkql_block_impl.h37
-rw-r--r--ydb/library/yql/minikql/computation/mkql_block_impl_codegen.h45
-rw-r--r--ydb/library/yql/minikql/computation/mkql_computation_node_codegen.cpp2
-rw-r--r--ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h.txt (renamed from ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h)7
-rw-r--r--ydb/library/yql/minikql/computation/mkql_computation_node_codegen_common.h8
-rw-r--r--ydb/library/yql/minikql/computation/mkql_computation_node_graph.cpp3
-rw-r--r--ydb/library/yql/minikql/computation/mkql_computation_node_holders.cpp627
-rw-r--r--ydb/library/yql/minikql/computation/mkql_computation_node_holders.h244
-rw-r--r--ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.cpp443
-rw-r--r--ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h62
-rw-r--r--ydb/library/yql/minikql/computation/mkql_pack_bc.cpp200
-rw-r--r--ydb/library/yql/minikql/computation/no_llvm/ya.make5
-rw-r--r--ydb/library/yql/minikql/computation/ut/ya.make.inc (renamed from ydb/library/yql/minikql/computation/ut/ya.make)7
-rw-r--r--ydb/library/yql/minikql/computation/ya.make40
-rw-r--r--ydb/library/yql/minikql/computation/ya.make.inc46
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/header.ya.make.inc44
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/llvm/ut/ya.make19
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/llvm/ya.make8
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/llvm14/ut/ya.make19
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/llvm14/ya.make29
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_abs.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_add.cpp4
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitand.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitnot.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitor.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitxor.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_byteat.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.cpp6
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.h.txt (renamed from ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.h)0
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen_llvm.h.txt5
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_compare.h2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_concat.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_convert.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_countbits.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_datetime.h2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_dec.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h.txt (renamed from ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h)2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_div.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_equals.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_find.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_greater.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_greater_or_equal.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl.h.txt (renamed from ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl.h)13
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl_common.h13
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_inc.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_invprestr.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_less.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_less_or_equal.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_max.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_min.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_minus.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_mod.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_mul.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_nanvl.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_not_equals.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_plus.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_rotleft.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_rotright.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_shiftleft.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_shiftright.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_string_kernels.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_sub.cpp4
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_substring.cpp2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/ut/ya.make.inc38
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/ya.make.inc20
-rw-r--r--ydb/library/yql/parser/pg_catalog/catalog.h2
-rw-r--r--ydb/library/yql/parser/pg_wrapper/ut/ya.make2
-rw-r--r--ydb/library/yql/parser/pg_wrapper/ya.make4
-rw-r--r--ydb/library/yql/providers/common/codec/ya.make2
-rw-r--r--ydb/library/yql/providers/common/comp_nodes/ya.make2
-rw-r--r--ydb/library/yql/providers/yt/codec/codegen/ya.make9
-rw-r--r--ydb/library/yql/providers/yt/comp_nodes/dq/ya.make2
-rw-r--r--ydb/library/yql/providers/yt/comp_nodes/ya.make2
-rw-r--r--ydb/library/yql/providers/yt/gateway/native/yql_yt_lambda_builder.cpp1
197 files changed, 1961 insertions, 1053 deletions
diff --git a/build/plugins/cp.py b/build/plugins/cp.py
index 5c663a3bdd..ca41fd3b7e 100644
--- a/build/plugins/cp.py
+++ b/build/plugins/cp.py
@@ -4,14 +4,25 @@ from _common import sort_by_keywords
def oncopy(unit, *args):
- keywords = {'RESULT': 1, 'KEEP_DIR_STRUCT': 0, 'DESTINATION': 1, 'FROM': 1}
+ keywords = {
+ 'RESULT': 1,
+ 'KEEP_DIR_STRUCT': 0,
+ 'DESTINATION': 1,
+ 'FROM': 1,
+ 'OUTPUT_INCLUDES': -1,
+ 'AUTO': 0,
+ 'WITH_CONTEXT': 0,
+ }
flat_args, spec_args = sort_by_keywords(keywords, args)
dest_dir = spec_args['DESTINATION'][0] if 'DESTINATION' in spec_args else ''
from_dir = spec_args['FROM'][0] if 'FROM' in spec_args else ''
+ output_includes = spec_args['OUTPUT_INCLUDES'] if 'OUTPUT_INCLUDES' in spec_args else None
keep_struct = 'KEEP_DIR_STRUCT' in spec_args
save_in_var = 'RESULT' in spec_args
+ auto = 'AUTO' in spec_args
+ with_context = 'WITH_CONTEXT' in spec_args
targets = []
for source in flat_args:
@@ -25,6 +36,12 @@ def oncopy(unit, *args):
target_path = os.path.join(dest_dir, rel_path, filename)
if save_in_var:
targets.append(target_path)
- unit.oncopy_file([source_path, target_path])
+ unit.oncopy_file(
+ [source_path, target_path]
+ + (['OUTPUT_INCLUDES'] + output_includes if output_includes else [])
+ + (['OUTPUT_INCLUDES', source_path] if with_context else [])
+ + (['AUTO'] if auto else [])
+ )
+
if save_in_var:
unit.set([spec_args["RESULT"][0], " ".join(targets)])
diff --git a/build/plugins/llvm_bc.py b/build/plugins/llvm_bc.py
index b41c106fe2..bd1e4099f2 100644
--- a/build/plugins/llvm_bc.py
+++ b/build/plugins/llvm_bc.py
@@ -2,10 +2,12 @@ from _common import rootrel_arc_src, sort_by_keywords, skip_build_root
def onllvm_bc(unit, *args):
- free_args, kwds = sort_by_keywords({'SYMBOLS': -1, 'NAME': 1, 'GENERATE_MACHINE_CODE': 0, 'NO_COMPILE': 0}, args)
+ free_args, kwds = sort_by_keywords(
+ {'SYMBOLS': -1, 'NAME': 1, 'GENERATE_MACHINE_CODE': 0, 'NO_COMPILE': 0, 'SUFFIX': 1}, args
+ )
name = kwds['NAME'][0]
symbols = kwds.get('SYMBOLS')
- obj_suf = unit.get('OBJ_SUF')
+ obj_suf = kwds['SUFFIX'][0] if 'SUFFIX' in kwds else '' + unit.get('OBJ_SUF')
skip_compile_step = 'NO_COMPILE' in kwds
merged_bc = name + '_merged' + obj_suf + '.bc'
out_bc = name + '_optimized' + obj_suf + '.bc'
diff --git a/ydb/core/engine/mkql_engine_flat_extfunc.cpp b/ydb/core/engine/mkql_engine_flat_extfunc.cpp
index 2c5d99b278..31d8c6558a 100644
--- a/ydb/core/engine/mkql_engine_flat_extfunc.cpp
+++ b/ydb/core/engine/mkql_engine_flat_extfunc.cpp
@@ -2,6 +2,7 @@
#include "mkql_engine_flat_impl.h"
#include "mkql_keys.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_pack.h>
#include <ydb/library/yql/minikql/computation/mkql_custom_list.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/core/kqp/runtime/kqp_compute.cpp b/ydb/core/kqp/runtime/kqp_compute.cpp
index b2ea8ba2cb..412ed9252c 100644
--- a/ydb/core/kqp/runtime/kqp_compute.cpp
+++ b/ydb/core/kqp/runtime/kqp_compute.cpp
@@ -1,6 +1,7 @@
#include "kqp_compute.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/comp_nodes/mkql_factories.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_program_builder.h>
diff --git a/ydb/library/yql/core/spilling/storage/file_storage/ya.make b/ydb/library/yql/core/spilling/storage/file_storage/ya.make
index bb62430431..73cd58ff13 100644
--- a/ydb/library/yql/core/spilling/storage/file_storage/ya.make
+++ b/ydb/library/yql/core/spilling/storage/file_storage/ya.make
@@ -10,22 +10,6 @@ PEERDIR(
NO_COMPILER_WARNINGS()
-IF (NOT MKQL_DISABLE_CODEGEN)
- PEERDIR(
- ydb/library/yql/minikql/codegen
- contrib/libs/llvm12/lib/IR
- contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
- contrib/libs/llvm12/lib/Linker
- contrib/libs/llvm12/lib/Target/X86
- contrib/libs/llvm12/lib/Target/X86/AsmParser
- contrib/libs/llvm12/lib/Transforms/IPO
- )
-ELSE()
- CFLAGS(
- -DMKQL_DISABLE_CODEGEN
- )
-ENDIF()
-
YQL_LAST_ABI_VERSION()
END()
diff --git a/ydb/library/yql/core/spilling/storage/ya.make b/ydb/library/yql/core/spilling/storage/ya.make
index 8c4746a1a3..aab18fca5c 100644
--- a/ydb/library/yql/core/spilling/storage/ya.make
+++ b/ydb/library/yql/core/spilling/storage/ya.make
@@ -11,22 +11,6 @@ PEERDIR(
NO_COMPILER_WARNINGS()
-IF (NOT MKQL_DISABLE_CODEGEN)
- PEERDIR(
- ydb/library/yql/minikql/codegen
- contrib/libs/llvm12/lib/IR
- contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
- contrib/libs/llvm12/lib/Linker
- contrib/libs/llvm12/lib/Target/X86
- contrib/libs/llvm12/lib/Target/X86/AsmParser
- contrib/libs/llvm12/lib/Transforms/IPO
- )
-ELSE()
- CFLAGS(
- -DMKQL_DISABLE_CODEGEN
- )
-ENDIF()
-
YQL_LAST_ABI_VERSION()
END()
diff --git a/ydb/library/yql/core/spilling/ya.make b/ydb/library/yql/core/spilling/ya.make
index af3aa1592c..709d2db250 100644
--- a/ydb/library/yql/core/spilling/ya.make
+++ b/ydb/library/yql/core/spilling/ya.make
@@ -23,22 +23,6 @@ PEERDIR(
NO_COMPILER_WARNINGS()
-IF (NOT MKQL_DISABLE_CODEGEN)
- PEERDIR(
- ydb/library/yql/minikql/codegen
- contrib/libs/llvm12/lib/IR
- contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
- contrib/libs/llvm12/lib/Linker
- contrib/libs/llvm12/lib/Target/X86
- contrib/libs/llvm12/lib/Target/X86/AsmParser
- contrib/libs/llvm12/lib/Transforms/IPO
- )
-ELSE()
- CFLAGS(
- -DMKQL_DISABLE_CODEGEN
- )
-ENDIF()
-
YQL_LAST_ABI_VERSION()
END()
diff --git a/ydb/library/yql/minikql/codegen/codegen.cpp b/ydb/library/yql/minikql/codegen/codegen.cpp
index 7508858c1c..dbb98ca13c 100644
--- a/ydb/library/yql/minikql/codegen/codegen.cpp
+++ b/ydb/library/yql/minikql/codegen/codegen.cpp
@@ -1,30 +1,5 @@
#include "codegen.h"
-#include <llvm/ExecutionEngine/ExecutionEngine.h>
-#include <llvm/ExecutionEngine/JITEventListener.h>
-#include <llvm/ExecutionEngine/MCJIT.h>
-#include <llvm/IR/DiagnosticInfo.h>
-#include <llvm/IR/DiagnosticPrinter.h>
-#include <llvm/IR/LegacyPassManager.h>
-#include <llvm/IR/LLVMContext.h>
-#include <llvm/IR/Module.h>
-#include <llvm/IR/Verifier.h>
-#include <llvm/IRReader/IRReader.h>
-#include <llvm/Linker/Linker.h>
-#include <llvm-c/Disassembler.h>
-#include <llvm/Support/Host.h>
-#include <llvm/Support/ManagedStatic.h>
-#include <llvm/Support/SourceMgr.h>
-#include <llvm/Support/TargetSelect.h>
-#include <llvm/Support/Timer.h>
-#include <llvm/Support/ErrorHandling.h>
-#include <llvm/Transforms/IPO.h>
-#include <llvm/Transforms/IPO/PassManagerBuilder.h>
-#include <llvm/Transforms/Instrumentation.h>
-#include <llvm/Transforms/Instrumentation/AddressSanitizer.h>
-#include <llvm/Transforms/Instrumentation/MemorySanitizer.h>
-#include <llvm/Transforms/Instrumentation/ThreadSanitizer.h>
-#include <llvm/LinkAllPasses.h>
-
+#include "codegen_llvm_deps.h" // Y_IGNORE
#include <contrib/libs/re2/re2/re2.h>
#include <util/generic/maybe.h>
@@ -211,10 +186,16 @@ namespace NCodegen {
namespace {
- void FatalErrorHandler(void* user_data, const std::string& reason, bool gen_crash_diag) {
+ void FatalErrorHandler(void* user_data,
+#if LLVM_VERSION_MAJOR == 12
+ const std::string& reason
+#else
+ const char* reason
+#endif
+ , bool gen_crash_diag) {
Y_UNUSED(user_data);
Y_UNUSED(gen_crash_diag);
- ythrow yexception() << "LLVM fatal error: " << reason.c_str();
+ ythrow yexception() << "LLVM fatal error: " << reason;
}
void AddAddressSanitizerPasses(const llvm::PassManagerBuilder& builder, llvm::legacy::PassManagerBase& pm) {
@@ -313,7 +294,9 @@ public:
targetOptions.EnableFastISel = true;
// init manually, this field was lost in llvm::TargetOptions ctor :/
// make coverity happy
+#if LLVM_VERSION_MAJOR == 12
targetOptions.StackProtectorGuardOffset = 0;
+#endif
std::string what;
auto&& engineBuilder = llvm::EngineBuilder(std::move(module));
diff --git a/ydb/library/yql/minikql/codegen/codegen_llvm_deps.h.txt b/ydb/library/yql/minikql/codegen/codegen_llvm_deps.h.txt
new file mode 100644
index 0000000000..5b0dc3caea
--- /dev/null
+++ b/ydb/library/yql/minikql/codegen/codegen_llvm_deps.h.txt
@@ -0,0 +1,27 @@
+#pragma once
+
+#include <llvm/ExecutionEngine/ExecutionEngine.h>
+#include <llvm/ExecutionEngine/JITEventListener.h>
+#include <llvm/ExecutionEngine/MCJIT.h>
+#include <llvm/IR/DiagnosticInfo.h>
+#include <llvm/IR/DiagnosticPrinter.h>
+#include <llvm/IR/LegacyPassManager.h>
+#include <llvm/IR/LLVMContext.h>
+#include <llvm/IR/Module.h>
+#include <llvm/IR/Verifier.h>
+#include <llvm/IRReader/IRReader.h>
+#include <llvm/Linker/Linker.h>
+#include <llvm-c/Disassembler.h>
+#include <llvm/Support/Host.h>
+#include <llvm/Support/ManagedStatic.h>
+#include <llvm/Support/SourceMgr.h>
+#include <llvm/Support/TargetSelect.h>
+#include <llvm/Support/Timer.h>
+#include <llvm/Support/ErrorHandling.h>
+#include <llvm/Transforms/IPO.h>
+#include <llvm/Transforms/IPO/PassManagerBuilder.h>
+#include <llvm/Transforms/Instrumentation.h>
+#include <llvm/Transforms/Instrumentation/AddressSanitizer.h>
+#include <llvm/Transforms/Instrumentation/MemorySanitizer.h>
+#include <llvm/Transforms/Instrumentation/ThreadSanitizer.h>
+#include <llvm/LinkAllPasses.h>
diff --git a/ydb/library/yql/minikql/codegen/codegen_ut.cpp b/ydb/library/yql/minikql/codegen/codegen_ut.cpp
index 527cd742e7..980ece9d62 100644
--- a/ydb/library/yql/minikql/codegen/codegen_ut.cpp
+++ b/ydb/library/yql/minikql/codegen/codegen_ut.cpp
@@ -1,10 +1,6 @@
-#include "codegen.h"
+#include <ydb/library/yql/minikql/codegen/codegen.h>
-#include <llvm/IR/Constants.h>
-#include <llvm/IR/DerivedTypes.h>
-#include <llvm/IR/Instructions.h>
-#include <llvm/IR/LLVMContext.h>
-#include <llvm/IR/Module.h>
+#include <codegen_ut_llvm_deps.h> // Y_IGNORE
#include <library/cpp/testing/unittest/registar.h>
#include <library/cpp/resource/resource.h>
diff --git a/ydb/library/yql/minikql/codegen/codegen_ut_llvm_deps.h.txt b/ydb/library/yql/minikql/codegen/codegen_ut_llvm_deps.h.txt
new file mode 100644
index 0000000000..2d4a3ccbc9
--- /dev/null
+++ b/ydb/library/yql/minikql/codegen/codegen_ut_llvm_deps.h.txt
@@ -0,0 +1,7 @@
+#pragma once
+
+#include <llvm/IR/Constants.h>
+#include <llvm/IR/DerivedTypes.h>
+#include <llvm/IR/Instructions.h>
+#include <llvm/IR/LLVMContext.h>
+#include <llvm/IR/Module.h>
diff --git a/ydb/library/yql/minikql/codegen/llvm/ut/ya.make b/ydb/library/yql/minikql/codegen/llvm/ut/ya.make
new file mode 100644
index 0000000000..85f3f16cbb
--- /dev/null
+++ b/ydb/library/yql/minikql/codegen/llvm/ut/ya.make
@@ -0,0 +1,27 @@
+UNITTEST()
+
+PEERDIR(
+ contrib/libs/llvm12/lib/IR
+ contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm12/lib/Linker
+ contrib/libs/llvm12/lib/Target/X86
+ contrib/libs/llvm12/lib/Target/X86/AsmParser
+ contrib/libs/llvm12/lib/Target/X86/Disassembler
+ contrib/libs/llvm12/lib/Transforms/IPO
+ contrib/libs/llvm12/lib/Transforms/ObjCARC
+)
+
+IF (OS_LINUX)
+ PEERDIR(
+ contrib/libs/llvm12/lib/ExecutionEngine/PerfJITEvents
+ )
+ENDIF()
+
+SET(LLVM_VER 12)
+
+INCLUDE(../../ut/ya.make.inc)
+
+PEERDIR(ydb/library/yql/minikql/codegen/llvm)
+
+END()
+
diff --git a/ydb/library/yql/minikql/codegen/llvm/ya.make b/ydb/library/yql/minikql/codegen/llvm/ya.make
new file mode 100644
index 0000000000..ada81a0d32
--- /dev/null
+++ b/ydb/library/yql/minikql/codegen/llvm/ya.make
@@ -0,0 +1,26 @@
+LIBRARY()
+
+PEERDIR(
+ contrib/libs/llvm12/lib/IR
+ contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm12/lib/Linker
+ contrib/libs/llvm12/lib/Target/X86
+ contrib/libs/llvm12/lib/Target/X86/AsmParser
+ contrib/libs/llvm12/lib/Target/X86/Disassembler
+ contrib/libs/llvm12/lib/Transforms/IPO
+ contrib/libs/llvm12/lib/Transforms/ObjCARC
+)
+
+IF (OS_LINUX)
+ PEERDIR(
+ contrib/libs/llvm12/lib/ExecutionEngine/PerfJITEvents
+ )
+ENDIF()
+
+INCLUDE(../ya.make.inc)
+
+END()
+
+RECURSE_FOR_TESTS(
+ ut
+)
diff --git a/ydb/library/yql/minikql/codegen/llvm14/ut/ya.make b/ydb/library/yql/minikql/codegen/llvm14/ut/ya.make
new file mode 100644
index 0000000000..a542021b9f
--- /dev/null
+++ b/ydb/library/yql/minikql/codegen/llvm14/ut/ya.make
@@ -0,0 +1,27 @@
+UNITTEST()
+
+PEERDIR(
+ contrib/libs/llvm14/lib/IR
+ contrib/libs/llvm14/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm14/lib/Linker
+ contrib/libs/llvm14/lib/Target/X86
+ contrib/libs/llvm14/lib/Target/X86/AsmParser
+ contrib/libs/llvm14/lib/Target/X86/Disassembler
+ contrib/libs/llvm14/lib/Transforms/IPO
+ contrib/libs/llvm14/lib/Transforms/ObjCARC
+)
+
+IF (OS_LINUX)
+ PEERDIR(
+ contrib/libs/llvm14/lib/ExecutionEngine/PerfJITEvents
+ )
+ENDIF()
+
+
+SET(LLVM_VER 14)
+
+INCLUDE(../../ut/ya.make.inc)
+
+PEERDIR(ydb/library/yql/minikql/codegen/llvm14)
+
+END() \ No newline at end of file
diff --git a/ydb/library/yql/minikql/codegen/llvm14/ya.make b/ydb/library/yql/minikql/codegen/llvm14/ya.make
new file mode 100644
index 0000000000..68982baff7
--- /dev/null
+++ b/ydb/library/yql/minikql/codegen/llvm14/ya.make
@@ -0,0 +1,26 @@
+LIBRARY()
+
+PEERDIR(
+ contrib/libs/llvm14/lib/IR
+ contrib/libs/llvm14/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm14/lib/Linker
+ contrib/libs/llvm14/lib/Target/X86
+ contrib/libs/llvm14/lib/Target/X86/AsmParser
+ contrib/libs/llvm14/lib/Target/X86/Disassembler
+ contrib/libs/llvm14/lib/Transforms/IPO
+ contrib/libs/llvm14/lib/Transforms/ObjCARC
+)
+
+IF (OS_LINUX)
+ PEERDIR(
+ contrib/libs/llvm14/lib/ExecutionEngine/PerfJITEvents
+ )
+ENDIF()
+
+INCLUDE(../ya.make.inc)
+
+END()
+
+RECURSE_FOR_TESTS(
+ ut
+)
diff --git a/ydb/library/yql/minikql/codegen/ut/ya.make b/ydb/library/yql/minikql/codegen/ut/ya.make.inc
index bc942549b1..876e6a06e5 100644
--- a/ydb/library/yql/minikql/codegen/ut/ya.make
+++ b/ydb/library/yql/minikql/codegen/ut/ya.make.inc
@@ -1,11 +1,32 @@
-UNITTEST_FOR(ydb/library/yql/minikql/codegen)
+OWNER(g:yql)
NO_COMPILER_WARNINGS()
-SRCS(
- codegen_ut.cpp
+ADDINCL(
+ ${ARCADIA_BUILD_ROOT}/${MODDIR}
)
+COPY_FILE(
+ TEXT
+ ../codegen_ut_llvm_deps.h.txt codegen_ut_llvm_deps.h
+ OUTPUT_INCLUDES
+ llvm/IR/Constants.h
+ llvm/IR/DerivedTypes.h
+ llvm/IR/Instructions.h
+ llvm/IR/LLVMContext.h
+ llvm/IR/Module.h
+)
+
+
+COPY_FILE(
+ AUTO
+ ../codegen_ut.cpp codegen_ut.cpp
+ OUTPUT_INCLUDES
+ codegen_ut_llvm_deps.h
+)
+
+SRCDIR(ydb/library/yql/minikql/codegen/ut)
+
IF (OS_WINDOWS)
LLVM_BC(
fib.cpp
@@ -15,6 +36,7 @@ IF (OS_WINDOWS)
128_bit.cpp
128_bit_win.ll
NAME Funcs
+ SUFFIX .${LLVM_VER}
SYMBOLS
fib
sum_sqr
@@ -32,6 +54,7 @@ ELSE()
128_bit.cpp
128_bit.ll
NAME Funcs
+ SUFFIX .${LLVM_VER}
SYMBOLS
fib
sum_sqr
@@ -42,4 +65,4 @@ ELSE()
)
ENDIF()
-END()
+
diff --git a/ydb/library/yql/minikql/codegen/ya.make b/ydb/library/yql/minikql/codegen/ya.make
index fc5ba7756b..5d082d5ae9 100644
--- a/ydb/library/yql/minikql/codegen/ya.make
+++ b/ydb/library/yql/minikql/codegen/ya.make
@@ -1,41 +1 @@
-LIBRARY()
-
-SRCS(
- codegen.cpp
-)
-
-NO_COMPILER_WARNINGS()
-
-IF (NOT WINDOWS)
- PEERDIR(
- contrib/libs/cxxsupp/builtins
- )
-ELSE()
- PEERDIR(
- ydb/library/yql/public/decimal
- )
-ENDIF()
-
-PEERDIR(
- contrib/libs/re2
- contrib/libs/llvm12/lib/IR
- contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
- contrib/libs/llvm12/lib/Linker
- contrib/libs/llvm12/lib/Target/X86
- contrib/libs/llvm12/lib/Target/X86/AsmParser
- contrib/libs/llvm12/lib/Target/X86/Disassembler
- contrib/libs/llvm12/lib/Transforms/IPO
- contrib/libs/llvm12/lib/Transforms/ObjCARC
-)
-
-IF (OS_LINUX)
- PEERDIR(
- contrib/libs/llvm12/lib/ExecutionEngine/PerfJITEvents
- )
-ENDIF()
-
-END()
-
-RECURSE_FOR_TESTS(
- ut
-)
+RECURSE(llvm llvm14) \ No newline at end of file
diff --git a/ydb/library/yql/minikql/codegen/ya.make.inc b/ydb/library/yql/minikql/codegen/ya.make.inc
new file mode 100644
index 0000000000..65b7b788d0
--- /dev/null
+++ b/ydb/library/yql/minikql/codegen/ya.make.inc
@@ -0,0 +1,66 @@
+OWNER(
+ g:yql
+ g:yql_ydb_core
+)
+
+ADDINCL(
+ ${ARCADIA_BUILD_ROOT}/${MODDIR}
+ ydb/library/yql/minikql/codegen
+)
+
+COPY_FILE(
+ AUTO
+ ../codegen_llvm_deps.h.txt ${ARCADIA_BUILD_ROOT}/${MODDIR}/codegen_llvm_deps.h
+ OUTPUT_INCLUDES
+ llvm/ExecutionEngine/ExecutionEngine.h
+ llvm/ExecutionEngine/JITEventListener.h
+ llvm/ExecutionEngine/MCJIT.h
+ llvm/IR/DiagnosticInfo.h
+ llvm/IR/DiagnosticPrinter.h
+ llvm/IR/LegacyPassManager.h
+ llvm/IR/LLVMContext.h
+ llvm/IR/Module.h
+ llvm/IR/Verifier.h
+ llvm/IRReader/IRReader.h
+ llvm/Linker/Linker.h
+ llvm-c/Disassembler.h
+ llvm/Support/Host.h
+ llvm/Support/ManagedStatic.h
+ llvm/Support/SourceMgr.h
+ llvm/Support/TargetSelect.h
+ llvm/Support/Timer.h
+ llvm/Support/ErrorHandling.h
+ llvm/Transforms/IPO.h
+ llvm/Transforms/IPO/PassManagerBuilder.h
+ llvm/Transforms/Instrumentation.h
+ llvm/Transforms/Instrumentation/AddressSanitizer.h
+ llvm/Transforms/Instrumentation/MemorySanitizer.h
+ llvm/Transforms/Instrumentation/ThreadSanitizer.h
+ llvm/LinkAllPasses.h
+)
+
+
+COPY_FILE(
+ AUTO
+ ../codegen.cpp codegen.cpp
+ OUTPUT_INCLUDES
+ codegen_llvm_deps.h
+)
+
+NO_COMPILER_WARNINGS()
+
+IF (NOT WINDOWS)
+ PEERDIR(
+ contrib/libs/cxxsupp/builtins
+ )
+ELSE()
+ PEERDIR(
+ ydb/library/yql/public/decimal
+ )
+ENDIF()
+
+PEERDIR(
+ contrib/libs/re2
+)
+
+PROVIDES(MINIKQL_CODEGEN)
diff --git a/ydb/library/yql/minikql/comp_nodes/llvm/ut/ya.make b/ydb/library/yql/minikql/comp_nodes/llvm/ut/ya.make
new file mode 100644
index 0000000000..956d4f4a73
--- /dev/null
+++ b/ydb/library/yql/minikql/comp_nodes/llvm/ut/ya.make
@@ -0,0 +1,19 @@
+UNITTEST()
+
+NO_COMPILER_WARNINGS()
+
+PEERDIR(
+ ydb/library/yql/minikql/codegen/llvm
+ ydb/library/yql/minikql/comp_nodes/llvm
+ ydb/library/yql/minikql/invoke_builtins/llvm
+ contrib/libs/llvm12/lib/IR
+ contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm12/lib/Linker
+ contrib/libs/llvm12/lib/Target/X86
+ contrib/libs/llvm12/lib/Target/X86/AsmParser
+ contrib/libs/llvm12/lib/Transforms/IPO
+)
+
+INCLUDE(../../ut/ya.make.inc)
+
+END() \ No newline at end of file
diff --git a/ydb/library/yql/minikql/comp_nodes/llvm/ya.make b/ydb/library/yql/minikql/comp_nodes/llvm/ya.make
index e92bc4dfb7..1b6561071e 100644
--- a/ydb/library/yql/minikql/comp_nodes/llvm/ya.make
+++ b/ydb/library/yql/minikql/comp_nodes/llvm/ya.make
@@ -1,9 +1,14 @@
LIBRARY()
+OWNER(
+ g:yql
+ g:yql_ydb_core
+)
+
NO_COMPILER_WARNINGS()
PEERDIR(
- ydb/library/yql/minikql/codegen
+ ydb/library/yql/minikql/codegen/llvm
ydb/library/yql/minikql/invoke_builtins/llvm
contrib/libs/llvm12/lib/IR
contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
@@ -17,3 +22,7 @@ INCLUDE(../ya.make.inc)
END()
+RECURSE_FOR_TESTS(
+ ut
+)
+
diff --git a/ydb/library/yql/minikql/comp_nodes/llvm14/ut/ya.make b/ydb/library/yql/minikql/comp_nodes/llvm14/ut/ya.make
new file mode 100644
index 0000000000..0126919c93
--- /dev/null
+++ b/ydb/library/yql/minikql/comp_nodes/llvm14/ut/ya.make
@@ -0,0 +1,19 @@
+UNITTEST()
+
+NO_COMPILER_WARNINGS()
+
+PEERDIR(
+ ydb/library/yql/minikql/codegen/llvm14
+ ydb/library/yql/minikql/comp_nodes/llvm14
+ ydb/library/yql/minikql/invoke_builtins/llvm14
+ contrib/libs/llvm14/lib/IR
+ contrib/libs/llvm14/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm14/lib/Linker
+ contrib/libs/llvm14/lib/Target/X86
+ contrib/libs/llvm14/lib/Target/X86/AsmParser
+ contrib/libs/llvm14/lib/Transforms/IPO
+)
+
+INCLUDE(../../ut/ya.make.inc)
+
+END() \ No newline at end of file
diff --git a/ydb/library/yql/minikql/comp_nodes/llvm14/ya.make b/ydb/library/yql/minikql/comp_nodes/llvm14/ya.make
new file mode 100644
index 0000000000..77eb4fbd8f
--- /dev/null
+++ b/ydb/library/yql/minikql/comp_nodes/llvm14/ya.make
@@ -0,0 +1,27 @@
+LIBRARY()
+
+OWNER(
+ g:yql
+ g:yql_ydb_core
+)
+
+NO_COMPILER_WARNINGS()
+
+PEERDIR(
+ ydb/library/yql/minikql/codegen/llvm14
+ ydb/library/yql/minikql/invoke_builtins/llvm14
+ contrib/libs/llvm14/lib/IR
+ contrib/libs/llvm14/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm14/lib/Linker
+ contrib/libs/llvm14/lib/Target/X86
+ contrib/libs/llvm14/lib/Target/X86/AsmParser
+ contrib/libs/llvm14/lib/Transforms/IPO
+)
+
+INCLUDE(../ya.make.inc)
+
+END()
+
+RECURSE_FOR_TESTS(
+ ut
+)
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_addmember.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_addmember.cpp
index 7cdfee695d..8f0d32f296 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_addmember.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_addmember.cpp
@@ -1,6 +1,7 @@
#include "mkql_addmember.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_aggrcount.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_aggrcount.cpp
index c08aadfd84..616743ade7 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_aggrcount.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_aggrcount.cpp
@@ -1,6 +1,7 @@
#include "mkql_aggrcount.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_append.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_append.cpp
index c9499169c9..abc913a06f 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_append.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_append.cpp
@@ -1,6 +1,6 @@
#include "mkql_append.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_apply.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_apply.cpp
index 4f0c2dec4c..5f24fe2ccc 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_apply.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_apply.cpp
@@ -1,7 +1,7 @@
#include "mkql_apply.h"
#include <ydb/library/yql/minikql/computation/mkql_block_impl.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <library/cpp/containers/stack_array/stack_array.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_block_agg.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_block_agg.cpp
index 88ddb42ac4..ca91d66c45 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_block_agg.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_block_agg.cpp
@@ -5,9 +5,10 @@
#include <ydb/library/yql/minikql/computation/mkql_block_reader.h>
#include <ydb/library/yql/minikql/computation/mkql_block_builder.h>
#include <ydb/library/yql/minikql/computation/mkql_block_impl.h>
+#include <ydb/library/yql/minikql/computation/mkql_block_impl_codegen.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_impl.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_block_compress.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_block_compress.cpp
index f24b163376..b90c759406 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_block_compress.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_block_compress.cpp
@@ -2,11 +2,12 @@
#include <ydb/library/yql/minikql/computation/mkql_block_builder.h>
#include <ydb/library/yql/minikql/computation/mkql_block_impl.h>
+#include <ydb/library/yql/minikql/computation/mkql_block_impl_codegen.h>
#include <ydb/library/yql/minikql/arrow/arrow_util.h>
#include <ydb/library/yql/minikql/arrow/mkql_bit_utils.h>
#include <ydb/library/yql/minikql/mkql_type_builder.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_block_skiptake.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_block_skiptake.cpp
index 6455a05587..d36f80a8e1 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_block_skiptake.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_block_skiptake.cpp
@@ -5,7 +5,7 @@
#include <ydb/library/yql/minikql/arrow/arrow_util.h>
#include <ydb/library/yql/minikql/mkql_type_builder.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_block_top.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_block_top.cpp
index 50e787272e..be3309b044 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_block_top.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_block_top.cpp
@@ -3,6 +3,7 @@
#include <ydb/library/yql/minikql/computation/mkql_block_reader.h>
#include <ydb/library/yql/minikql/computation/mkql_block_builder.h>
#include <ydb/library/yql/minikql/computation/mkql_block_impl.h>
+#include <ydb/library/yql/minikql/computation/mkql_block_impl_codegen.h>
#include <ydb/library/yql/public/udf/arrow/block_item_comparator.h>
@@ -10,7 +11,7 @@
#include <ydb/library/yql/minikql/arrow/arrow_util.h>
#include <ydb/library/yql/minikql/mkql_type_builder.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_blocks.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_blocks.cpp
index b0130cca0f..a719c116f9 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_blocks.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_blocks.cpp
@@ -3,11 +3,12 @@
#include <ydb/library/yql/minikql/computation/mkql_block_reader.h>
#include <ydb/library/yql/minikql/computation/mkql_block_builder.h>
#include <ydb/library/yql/minikql/computation/mkql_block_impl.h>
+#include <ydb/library/yql/minikql/computation/mkql_block_impl_codegen.h>
#include <ydb/library/yql/minikql/arrow/arrow_defs.h>
#include <ydb/library/yql/minikql/arrow/arrow_util.h>
#include <ydb/library/yql/minikql/mkql_type_builder.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_callable.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_callable.cpp
index a163dd684d..8708daf0e1 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_callable.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_callable.cpp
@@ -1,5 +1,5 @@
#include "mkql_callable.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_chain1_map.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_chain1_map.cpp
index dab2cd4b5b..5c11feed49 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_chain1_map.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_chain1_map.cpp
@@ -1,6 +1,6 @@
#include "mkql_chain1_map.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_custom_list.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_chain_map.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_chain_map.cpp
index af9fe58d16..c798bd73e4 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_chain_map.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_chain_map.cpp
@@ -1,6 +1,6 @@
#include "mkql_chain_map.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_custom_list.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_chopper.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_chopper.cpp
index a27c803bdc..ef8c5ffdc6 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_chopper.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_chopper.cpp
@@ -1,6 +1,6 @@
#include "mkql_chopper.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_coalesce.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_coalesce.cpp
index 014ecc9771..2bed26ed81 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_coalesce.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_coalesce.cpp
@@ -1,5 +1,5 @@
#include "mkql_coalesce.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_collect.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_collect.cpp
index 05849e45f7..a70828fcdd 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_collect.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_collect.cpp
@@ -1,6 +1,6 @@
#include "mkql_collect.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_combine.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_combine.cpp
index 9cf7db1a19..575c0aa553 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_combine.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_combine.cpp
@@ -1,6 +1,6 @@
#include "mkql_combine.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_llvm_base.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_stats_registry.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_condense.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_condense.cpp
index 2a99bfb9b0..588c476a8c 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_condense.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_condense.cpp
@@ -4,7 +4,7 @@
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_condense1.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_condense1.cpp
index 43cffed7cd..89503e8255 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_condense1.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_condense1.cpp
@@ -4,7 +4,7 @@
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_contains.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_contains.cpp
index 75c8cb4f02..009cad6021 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_contains.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_contains.cpp
@@ -1,5 +1,5 @@
#include "mkql_contains.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_decimal_div.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_decimal_div.cpp
index bb0124725f..d1335dfca3 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_decimal_div.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_decimal_div.cpp
@@ -1,6 +1,6 @@
#include "mkql_decimal_div.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
-#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
+#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/public/decimal/yql_decimal.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_decimal_mod.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_decimal_mod.cpp
index b953039e12..0f3d35349a 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_decimal_mod.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_decimal_mod.cpp
@@ -1,6 +1,6 @@
#include "mkql_decimal_div.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
-#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
+#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/public/decimal/yql_decimal.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_decimal_mul.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_decimal_mul.cpp
index ab135d8fc0..b776763d91 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_decimal_mul.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_decimal_mul.cpp
@@ -1,6 +1,6 @@
#include "mkql_decimal_mul.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
-#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
+#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/public/decimal/yql_decimal.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_dictitems.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_dictitems.cpp
index b2a2ac4e0a..6a6c018148 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_dictitems.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_dictitems.cpp
@@ -1,6 +1,7 @@
#include "mkql_dictitems.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_program_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_discard.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_discard.cpp
index 7b9dff2e62..0569360d99 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_discard.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_discard.cpp
@@ -1,6 +1,6 @@
#include "mkql_discard.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_runtime_version.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_element.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_element.cpp
index d6649a40a9..fd7fb67427 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_element.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_element.cpp
@@ -1,5 +1,5 @@
#include "mkql_element.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_ensure.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_ensure.cpp
index c9e8d4c5c5..74166050dc 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_ensure.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_ensure.cpp
@@ -1,5 +1,5 @@
#include "mkql_ensure.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_program_builder.h>
#include <ydb/library/yql/public/udf/udf_terminator.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_enumerate.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_enumerate.cpp
index 34639d7ec4..03f86c447b 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_enumerate.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_enumerate.cpp
@@ -1,6 +1,7 @@
#include "mkql_enumerate.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/computation/mkql_custom_list.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_exists.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_exists.cpp
index 7cffd75739..c8a25335b9 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_exists.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_exists.cpp
@@ -1,5 +1,5 @@
#include "mkql_exists.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_extend.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_extend.cpp
index 1c4ac7456e..7975d22e74 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_extend.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_extend.cpp
@@ -1,6 +1,6 @@
#include "mkql_extend.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_llvm_base.h>
#include <ydb/library/yql/minikql/computation/mkql_custom_list.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_factory.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_factory.cpp
index 3a3cbc4fd3..f8bde610d8 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_factory.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_factory.cpp
@@ -113,7 +113,7 @@
#include "mkql_withcontext.h"
#include "mkql_zip.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <string_view>
#include <unordered_map>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_filter.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_filter.cpp
index 0641165317..034e9c25c3 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_filter.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_filter.cpp
@@ -1,6 +1,6 @@
#include "mkql_filter.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_flatmap.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_flatmap.cpp
index bfb5881422..51cf8316cd 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_flatmap.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_flatmap.cpp
@@ -1,6 +1,6 @@
#include "mkql_flatmap.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/utils/cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_flow.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_flow.cpp
index dbe5925570..c4744d760b 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_flow.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_flow.cpp
@@ -1,6 +1,6 @@
#include "mkql_flow.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_fold.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_fold.cpp
index d3d00d8b3e..8723f3e44a 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_fold.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_fold.cpp
@@ -1,5 +1,5 @@
#include "mkql_fold.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_fold1.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_fold1.cpp
index e5f344a613..4d13424863 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_fold1.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_fold1.cpp
@@ -1,5 +1,5 @@
#include "mkql_fold1.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_fromstring.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_fromstring.cpp
index 6afd780ffa..44a3d8cf7b 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_fromstring.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_fromstring.cpp
@@ -1,10 +1,10 @@
#include "mkql_fromstring.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
-#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h>
+#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h> // Y_IGNORE
#include <ydb/library/yql/public/udf/udf_terminator.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_grace_join.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_grace_join.cpp
index 9cd39efa5a..43812c7abb 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_grace_join.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_grace_join.cpp
@@ -8,7 +8,7 @@
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
#include <ydb/library/yql/minikql/comp_nodes/mkql_factories.h>
#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_pack.h>
#include <ydb/library/yql/minikql/computation/mkql_llvm_base.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_guess.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_guess.cpp
index 2642cbdb6b..a141e57fd4 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_guess.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_guess.cpp
@@ -1,5 +1,5 @@
#include "mkql_guess.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_hasitems.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_hasitems.cpp
index 4e7e307d78..108e9d4f5c 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_hasitems.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_hasitems.cpp
@@ -1,5 +1,5 @@
#include "mkql_hasitems.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_heap.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_heap.cpp
index a77136640f..af1f694777 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_heap.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_heap.cpp
@@ -1,7 +1,7 @@
#include "mkql_heap.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_if.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_if.cpp
index 8b61744364..f4124f0a03 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_if.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_if.cpp
@@ -1,5 +1,5 @@
#include "mkql_if.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_ifpresent.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_ifpresent.cpp
index fa36453086..2ad1beb61b 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_ifpresent.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_ifpresent.cpp
@@ -1,5 +1,5 @@
#include "mkql_ifpresent.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_invoke.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_invoke.cpp
index 95f0492c1b..f27c375a87 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_invoke.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_invoke.cpp
@@ -1,6 +1,6 @@
#include "mkql_invoke.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_iterator.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_iterator.cpp
index 55778f58e7..2d2872b400 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_iterator.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_iterator.cpp
@@ -1,7 +1,8 @@
#include "mkql_iterator.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_join.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_join.cpp
index ced7166e5f..1020a706f7 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_join.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_join.cpp
@@ -1,7 +1,8 @@
#include "mkql_join.h"
#include <ydb/library/yql/minikql/computation/mkql_custom_list.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_pack.h>
#include <ydb/library/yql/minikql/computation/mkql_llvm_base.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_join_dict.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_join_dict.cpp
index 21e40ff88a..cf0c29aa41 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_join_dict.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_join_dict.cpp
@@ -2,7 +2,7 @@
#include <ydb/library/yql/minikql/computation/mkql_custom_list.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_program_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_lazy_list.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_lazy_list.cpp
index f50e1000ac..85f304f0d9 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_lazy_list.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_lazy_list.cpp
@@ -1,6 +1,6 @@
#include "mkql_lazy_list.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_length.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_length.cpp
index cf8c1e5ae6..ec26a228ab 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_length.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_length.cpp
@@ -1,6 +1,6 @@
#include "mkql_length.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
-#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
+#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_listfromrange.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_listfromrange.cpp
index 58ba03b54e..87262250fd 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_listfromrange.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_listfromrange.cpp
@@ -1,6 +1,6 @@
#include "mkql_listfromrange.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_logical.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_logical.cpp
index 795f4d92bd..ed84bd4c5a 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_logical.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_logical.cpp
@@ -1,5 +1,5 @@
#include "mkql_logical.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include "mkql_check_args.h"
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_lookup.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_lookup.cpp
index 8ef161d424..689c8c739d 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_lookup.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_lookup.cpp
@@ -1,5 +1,5 @@
#include "mkql_lookup.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_map.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_map.cpp
index ce1b534cf8..0a7e5e493e 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_map.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_map.cpp
@@ -1,6 +1,6 @@
#include "mkql_map.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_map_join.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_map_join.cpp
index 4b000dd8df..803652d2cd 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_map_join.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_map_join.cpp
@@ -1,7 +1,8 @@
#include "mkql_map_join.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_program_builder.h>
#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_match_recognize.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_match_recognize.cpp
index 2058d02575..160dfbf8bc 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_match_recognize.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_match_recognize.cpp
@@ -5,6 +5,7 @@
#include <ydb/library/yql/core/sql_types/match_recognize.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_impl.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_pack.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_runtime_version.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_multimap.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_multimap.cpp
index 96f1508795..be355d747b 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_multimap.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_multimap.cpp
@@ -1,6 +1,6 @@
#include "mkql_multimap.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/utils/cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_null.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_null.cpp
index a08f71206f..025c528d60 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_null.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_null.cpp
@@ -1,5 +1,6 @@
#include "mkql_null.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_prepend.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_prepend.cpp
index 280ce19128..faef8c4c4f 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_prepend.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_prepend.cpp
@@ -1,6 +1,6 @@
#include "mkql_prepend.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_random.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_random.cpp
index 2621689fc3..d46dbaeee9 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_random.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_random.cpp
@@ -1,5 +1,6 @@
#include "mkql_random.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_program_builder.h>
#include <ydb/library/yql/minikql/mkql_string_util.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_reduce.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_reduce.cpp
index a921dad4e6..4fce63ffbd 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_reduce.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_reduce.cpp
@@ -1,6 +1,6 @@
#include "mkql_reduce.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_removemember.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_removemember.cpp
index 338f3fdb37..442ddfe3bb 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_removemember.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_removemember.cpp
@@ -1,6 +1,7 @@
#include "mkql_removemember.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_reverse.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_reverse.cpp
index fd7cbefc65..40feae31f5 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_reverse.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_reverse.cpp
@@ -1,6 +1,6 @@
#include "mkql_reverse.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_size.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_size.cpp
index 88a88b6bf9..a1ef8e6eed 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_size.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_size.cpp
@@ -1,6 +1,7 @@
#include "mkql_size.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_skip.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_skip.cpp
index 996a9d1d7e..881450504c 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_skip.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_skip.cpp
@@ -1,6 +1,6 @@
#include "mkql_skip.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_source.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_source.cpp
index d68ad0aaf0..1610c98c5d 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_source.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_source.cpp
@@ -1,6 +1,7 @@
#include "mkql_source.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_squeeze_to_list.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_squeeze_to_list.cpp
index 40f73014aa..550edda117 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_squeeze_to_list.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_squeeze_to_list.cpp
@@ -2,7 +2,7 @@
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_llvm_base.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_switch.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_switch.cpp
index ea5df1c8da..643018d4c5 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_switch.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_switch.cpp
@@ -1,6 +1,6 @@
#include "mkql_switch.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_llvm_base.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_stats_registry.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_take.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_take.cpp
index 41e6ba86c7..16ea5fcbbd 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_take.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_take.cpp
@@ -1,6 +1,6 @@
#include "mkql_take.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_time_order_recover.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_time_order_recover.cpp
index ee8aebbfdd..f32d828a0f 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_time_order_recover.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_time_order_recover.cpp
@@ -1,7 +1,8 @@
#include "mkql_time_order_recover.h"
#include "mkql_saveload.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_string_util.h>
#include <queue>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_timezone.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_timezone.cpp
index 8838143650..e8f08fcfa6 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_timezone.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_timezone.cpp
@@ -1,5 +1,5 @@
#include "mkql_timezone.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/mkql_string_util.h>
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_tobytes.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_tobytes.cpp
index 29246ddce2..5e22714213 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_tobytes.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_tobytes.cpp
@@ -1,5 +1,5 @@
#include "mkql_tobytes.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/utils/swap_bytes.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_todict.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_todict.cpp
index 51264ebad8..220fc19ebd 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_todict.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_todict.cpp
@@ -1,7 +1,7 @@
#include "mkql_todict.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_list_adapter.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_pack.h>
#include <ydb/library/yql/minikql/computation/mkql_llvm_base.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_toindexdict.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_toindexdict.cpp
index 6593797cfd..d671cc3fef 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_toindexdict.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_toindexdict.cpp
@@ -1,6 +1,6 @@
#include "mkql_toindexdict.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_tooptional.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_tooptional.cpp
index 25d275709c..3578de1f62 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_tooptional.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_tooptional.cpp
@@ -1,5 +1,5 @@
#include "mkql_tooptional.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_tostring.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_tostring.cpp
index 11ed1dc74f..b60f141261 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_tostring.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_tostring.cpp
@@ -1,7 +1,7 @@
#include "mkql_tostring.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_udf.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_udf.cpp
index c083843926..e5527387df 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_udf.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_udf.cpp
@@ -1,6 +1,7 @@
#include "mkql_udf.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/computation/mkql_validate.h>
#include <ydb/library/yql/minikql/mkql_function_registry.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_unwrap.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_unwrap.cpp
index 09caba5307..6bdbebbb04 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_unwrap.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_unwrap.cpp
@@ -1,5 +1,5 @@
#include "mkql_unwrap.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/public/udf/udf_terminator.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_varitem.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_varitem.cpp
index 43111ad9ba..9c3072e2d9 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_varitem.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_varitem.cpp
@@ -1,6 +1,6 @@
#include "mkql_varitem.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_visitall.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_visitall.cpp
index 2762dd841c..331c82ac1b 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_visitall.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_visitall.cpp
@@ -1,5 +1,5 @@
#include "mkql_visitall.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <util/string/cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_way.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_way.cpp
index ebb87ae398..9de8d09018 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_way.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_way.cpp
@@ -1,6 +1,7 @@
#include "mkql_way.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/mkql_string_util.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_while.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_while.cpp
index 6f0e84ed5c..649da3d5e4 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_while.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_while.cpp
@@ -1,6 +1,6 @@
#include "mkql_while.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_wide_chain_map.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_wide_chain_map.cpp
index a04b7edaf6..a9cdd38156 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_wide_chain_map.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_wide_chain_map.cpp
@@ -1,6 +1,6 @@
#include "mkql_wide_chain_map.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_custom_list.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/utils/cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_wide_chopper.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_wide_chopper.cpp
index ab946a7916..8a32efc421 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_wide_chopper.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_wide_chopper.cpp
@@ -1,6 +1,6 @@
#include "mkql_chopper.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/utils/cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_wide_combine.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_wide_combine.cpp
index a0ee20997f..7a3f0f3d09 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_wide_combine.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_wide_combine.cpp
@@ -1,7 +1,7 @@
#include "mkql_wide_combine.h"
#include "mkql_rh_hash.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_llvm_base.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_wide_condense.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_wide_condense.cpp
index 66e13153d5..aae09f6053 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_wide_condense.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_wide_condense.cpp
@@ -3,7 +3,7 @@
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/utils/cast.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_wide_filter.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_wide_filter.cpp
index d943968e5e..ef9e5ef89a 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_wide_filter.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_wide_filter.cpp
@@ -1,6 +1,6 @@
#include "mkql_wide_filter.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/utils/cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_wide_map.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_wide_map.cpp
index 39744c6412..5e37dd99bf 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_wide_map.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_wide_map.cpp
@@ -1,6 +1,6 @@
#include "mkql_wide_map.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_node_cast.h>
#include <ydb/library/yql/utils/cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_wide_top_sort.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_wide_top_sort.cpp
index 071342579e..7ad66ba832 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_wide_top_sort.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_wide_top_sort.cpp
@@ -1,6 +1,6 @@
#include "mkql_wide_top_sort.h"
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_llvm_base.h>
#include <ydb/library/yql/minikql/computation/presort.h>
#include <ydb/library/yql/minikql/mkql_node_builder.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_withcontext.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_withcontext.cpp
index c4c29dc405..9358f9adf7 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_withcontext.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_withcontext.cpp
@@ -1,7 +1,7 @@
#include "mkql_withcontext.h"
#include <ydb/library/yql/minikql/mkql_node_cast.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
#include <ydb/library/yql/parser/pg_wrapper/interface/context.h>
@@ -211,7 +211,7 @@ public:
block = main;
- const auto state = new LoadInst(statePtr, "state", block);
+ const auto state = new LoadInst(statePtrType, statePtr, "state", block);
const auto half = CastInst::Create(Instruction::Trunc, state, Type::getInt64Ty(context), "half", block);
const auto stateArg = CastInst::Create(Instruction::IntToPtr, half, statePtrType, "state_arg", block);
diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_zip.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_zip.cpp
index 940a59f675..bb5a708afe 100644
--- a/ydb/library/yql/minikql/comp_nodes/mkql_zip.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/mkql_zip.cpp
@@ -1,5 +1,6 @@
#include "mkql_zip.h"
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/minikql/computation/mkql_custom_list.h>
#include <ydb/library/yql/minikql/mkql_node_cast.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/no_llvm/ya.make b/ydb/library/yql/minikql/comp_nodes/no_llvm/ya.make
index 589a87f354..58bb2d80c8 100644
--- a/ydb/library/yql/minikql/comp_nodes/no_llvm/ya.make
+++ b/ydb/library/yql/minikql/comp_nodes/no_llvm/ya.make
@@ -1,5 +1,10 @@
LIBRARY()
+OWNER(
+ g:yql
+ g:yql_ydb_core
+)
+
CXXFLAGS(-DMKQL_DISABLE_CODEGEN)
ADDINCL(GLOBAL ydb/library/yql/minikql/codegen/llvm_stub)
diff --git a/ydb/library/yql/minikql/comp_nodes/ut/mkql_block_skiptake_ut.cpp b/ydb/library/yql/minikql/comp_nodes/ut/mkql_block_skiptake_ut.cpp
index a5ead18465..77b68ede9d 100644
--- a/ydb/library/yql/minikql/comp_nodes/ut/mkql_block_skiptake_ut.cpp
+++ b/ydb/library/yql/minikql/comp_nodes/ut/mkql_block_skiptake_ut.cpp
@@ -2,7 +2,7 @@
#include <ydb/library/yql/minikql/arrow/arrow_defs.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
-#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h> // Y_IGNORE
#include <arrow/array/builder_primitive.h>
diff --git a/ydb/library/yql/minikql/comp_nodes/ut/ya.make.inc b/ydb/library/yql/minikql/comp_nodes/ut/ya.make.inc
new file mode 100644
index 0000000000..12c027fddc
--- /dev/null
+++ b/ydb/library/yql/minikql/comp_nodes/ut/ya.make.inc
@@ -0,0 +1,105 @@
+FORK_SUBTESTS()
+
+SPLIT_FACTOR(60)
+
+IF (SANITIZER_TYPE == "thread" OR WITH_VALGRIND)
+ TIMEOUT(3600)
+ SIZE(LARGE)
+ TAG(ya:fat)
+ELSE()
+ TIMEOUT(600)
+ SIZE(MEDIUM)
+ENDIF()
+
+REQUIREMENTS(ram:32)
+
+OWNER(g:yql)
+
+INCLUDE(${ARCADIA_ROOT}/ydb/library/yql/minikql/computation/header.ya.make.inc)
+INCLUDE(${ARCADIA_ROOT}/ydb/library/yql/minikql/invoke_builtins/header.ya.make.inc)
+
+SET(ORIG_SRC_DIR ydb/library/yql/minikql/comp_nodes/ut)
+
+SET(ORIG_SOURCES
+ mkql_test_factory.cpp
+ mkql_bit_utils_ut.cpp
+ mkql_block_compress_ut.cpp
+ mkql_block_skiptake_ut.cpp
+ mkql_block_top_sort_ut.cpp
+ mkql_blocks_ut.cpp
+ mkql_combine_ut.cpp
+ mkql_condense_ut.cpp
+ mkql_decimal_ut.cpp
+ mkql_chain_map_ut.cpp
+ mkql_chopper_ut.cpp
+ mkql_filters_ut.cpp
+ mkql_flatmap_ut.cpp
+ mkql_fromstring_ut.cpp
+ mkql_multihopping_saveload_ut.cpp
+ mkql_multihopping_ut.cpp
+ mkql_multimap_ut.cpp
+ mkql_fold_ut.cpp
+ mkql_heap_ut.cpp
+ mkql_compare_ut.cpp
+ mkql_computation_node_ut.cpp
+ mkql_group_ut.cpp
+ mkql_dict_ut.cpp
+ mkql_isa_detection_ut.cpp
+ mkql_join_ut.cpp
+ mkql_join_dict_ut.cpp
+ mkql_grace_join_ut.cpp
+ mkql_map_join_ut.cpp
+ mkql_match_recognize_matched_vars_ut.cpp
+ mkql_match_recognize_list_ut.cpp
+ mkql_match_recognize_nfa_ut.cpp
+ mkql_safe_circular_buffer_ut.cpp
+ mkql_sort_ut.cpp
+ mkql_switch_ut.cpp
+ mkql_todict_ut.cpp
+ mkql_variant_ut.cpp
+ mkql_wide_chain_map_ut.cpp
+ mkql_wide_chopper_ut.cpp
+ mkql_wide_combine_ut.cpp
+ mkql_wide_condense_ut.cpp
+ mkql_wide_filter_ut.cpp
+ mkql_wide_map_ut.cpp
+ mkql_wide_nodes_ut.cpp
+ mkql_wide_stream_ut.cpp
+ mkql_wide_top_sort_ut.cpp
+ mkql_listfromrange_ut.cpp
+ mkql_mapnext_ut.cpp
+ mkql_rh_hash_ut.cpp
+)
+
+PEERDIR(
+ ydb/library/yql/public/udf
+ ydb/library/yql/public/udf/arrow
+ ydb/library/yql/public/udf/service/exception_policy
+ ydb/library/yql/sql/pg_dummy
+)
+
+CFLAGS(
+ -mprfchw
+)
+
+YQL_LAST_ABI_VERSION()
+
+IF (MKQL_RUNTIME_VERSION)
+ CFLAGS(
+ -DMKQL_RUNTIME_VERSION=$MKQL_RUNTIME_VERSION
+ )
+ENDIF()
+
+ADDINCL(
+ ${ORIG_SRC_DIR}
+)
+
+COPY(
+ WITH_CONTEXT
+ AUTO
+ FROM ${ORIG_SRC_DIR}
+ ${ORIG_SOURCES}
+ OUTPUT_INCLUDES
+ ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h
+)
+
diff --git a/ydb/library/yql/minikql/comp_nodes/ya.make b/ydb/library/yql/minikql/comp_nodes/ya.make
index 424ecfb86d..3a5f1d3ab2 100644
--- a/ydb/library/yql/minikql/comp_nodes/ya.make
+++ b/ydb/library/yql/minikql/comp_nodes/ya.make
@@ -1,8 +1,15 @@
+OWNER(
+ g:yql
+ g:yql_ydb_core
+)
+
RECURSE(
llvm
+ llvm14
no_llvm
)
RECURSE_FOR_TESTS(
- ut
+ llvm/ut
+ llvm14/ut
)
diff --git a/ydb/library/yql/minikql/comp_nodes/ya.make.inc b/ydb/library/yql/minikql/comp_nodes/ya.make.inc
index fa3d5459e3..594c4a682c 100644
--- a/ydb/library/yql/minikql/comp_nodes/ya.make.inc
+++ b/ydb/library/yql/minikql/comp_nodes/ya.make.inc
@@ -1,6 +1,9 @@
-SRCDIR(ydb/library/yql/minikql/comp_nodes)
+INCLUDE(${ARCADIA_ROOT}/ydb/library/yql/minikql/computation/header.ya.make.inc)
+INCLUDE(${ARCADIA_ROOT}/ydb/library/yql/minikql/invoke_builtins/header.ya.make.inc)
-SRCS(
+SET(ORIG_SRC_DIR ${ARCADIA_ROOT}/ydb/library/yql/minikql/comp_nodes)
+
+SET(ORIG_SOURCES
mkql_addmember.cpp
mkql_aggrcount.cpp
mkql_append.cpp
@@ -127,6 +130,21 @@ SRCS(
mkql_zip.cpp
)
+ADDINCL(
+ ${ORIG_SRC_DIR}
+)
+
+COPY(
+ WITH_CONTEXT
+ AUTO
+ FROM ${ORIG_SRC_DIR}
+ ${ORIG_SOURCES}
+ OUTPUT_INCLUDES
+ ${BINDIR}/ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h
+ ${BINDIR}/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.h
+ ${BINDIR}/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h
+)
+
PEERDIR(
contrib/libs/apache/arrow
ydb/library/binary_json
@@ -136,6 +154,7 @@ PEERDIR(
ydb/library/yql/parser/pg_wrapper/interface
ydb/library/yql/utils
ydb/library/actors/core
+ ydb/library/yql/public/issue/protos
)
CFLAGS(
@@ -144,4 +163,4 @@ CFLAGS(
YQL_LAST_ABI_VERSION()
-PROVIDES(mkql_comp_nodes)
+PROVIDES(MINIKQL_COMP_NODES)
diff --git a/ydb/library/yql/minikql/computation/header.ya.make.inc b/ydb/library/yql/minikql/computation/header.ya.make.inc
new file mode 100644
index 0000000000..91b417664c
--- /dev/null
+++ b/ydb/library/yql/minikql/computation/header.ya.make.inc
@@ -0,0 +1,21 @@
+INCLUDE_ONCE()
+
+ADDINCL(
+ GLOBAL ${ARCADIA_BUILD_ROOT}/${MODDIR}
+ GLOBAL ${ARCADIA_BUILD_ROOT}/${MODDIR}/ydb/library/yql/minikql/computation
+)
+
+COPY_FILE(TEXT
+ ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h.txt
+ ${BINDIR}/ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h
+ OUTPUT_INCLUDES
+ ${ARCADIA_ROOT}/ydb/library/yql/minikql/computation/mkql_computation_node_codegen_common.h
+ llvm/IR/Value.h
+ llvm/IR/BasicBlock.h
+ llvm/IR/Function.h
+ llvm/IR/LLVMContext.h
+ llvm/IR/Module.h
+ llvm/IR/DerivedTypes.h
+ llvm/IR/Instructions.h
+ llvm/IR/Constants.h
+)
diff --git a/ydb/library/yql/minikql/computation/llvm/ut/ya.make b/ydb/library/yql/minikql/computation/llvm/ut/ya.make
new file mode 100644
index 0000000000..c071a36450
--- /dev/null
+++ b/ydb/library/yql/minikql/computation/llvm/ut/ya.make
@@ -0,0 +1,19 @@
+UNITTEST()
+
+NO_COMPILER_WARNINGS()
+
+PEERDIR(
+ ydb/library/yql/minikql/codegen/llvm
+ ydb/library/yql/minikql/computation/llvm
+ ydb/library/yql/minikql/comp_nodes/llvm
+ contrib/libs/llvm12/lib/IR
+ contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm12/lib/Linker
+ contrib/libs/llvm12/lib/Target/X86
+ contrib/libs/llvm12/lib/Target/X86/AsmParser
+ contrib/libs/llvm12/lib/Transforms/IPO
+)
+
+INCLUDE(../../ut/ya.make.inc)
+
+END() \ No newline at end of file
diff --git a/ydb/library/yql/minikql/computation/llvm/ya.make b/ydb/library/yql/minikql/computation/llvm/ya.make
index 077ac01a13..a70fa31127 100644
--- a/ydb/library/yql/minikql/computation/llvm/ya.make
+++ b/ydb/library/yql/minikql/computation/llvm/ya.make
@@ -3,7 +3,7 @@ LIBRARY()
NO_COMPILER_WARNINGS()
PEERDIR(
- ydb/library/yql/minikql/codegen
+ ydb/library/yql/minikql/codegen/llvm
contrib/libs/llvm12/lib/IR
contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
contrib/libs/llvm12/lib/Linker
@@ -15,3 +15,7 @@ PEERDIR(
INCLUDE(../ya.make.inc)
END()
+
+RECURSE_FOR_TESTS(
+ ut
+) \ No newline at end of file
diff --git a/ydb/library/yql/minikql/computation/llvm14/ut/ya.make b/ydb/library/yql/minikql/computation/llvm14/ut/ya.make
new file mode 100644
index 0000000000..93e6274423
--- /dev/null
+++ b/ydb/library/yql/minikql/computation/llvm14/ut/ya.make
@@ -0,0 +1,19 @@
+UNITTEST()
+
+NO_COMPILER_WARNINGS()
+
+PEERDIR(
+ ydb/library/yql/minikql/codegen/llvm14
+ ydb/library/yql/minikql/computation/llvm14
+ ydb/library/yql/minikql/comp_nodes/llvm14
+ contrib/libs/llvm14/lib/IR
+ contrib/libs/llvm14/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm14/lib/Linker
+ contrib/libs/llvm14/lib/Target/X86
+ contrib/libs/llvm14/lib/Target/X86/AsmParser
+ contrib/libs/llvm14/lib/Transforms/IPO
+)
+
+INCLUDE(../../ut/ya.make.inc)
+
+END() \ No newline at end of file
diff --git a/ydb/library/yql/minikql/computation/llvm14/ya.make b/ydb/library/yql/minikql/computation/llvm14/ya.make
new file mode 100644
index 0000000000..222a8b1bed
--- /dev/null
+++ b/ydb/library/yql/minikql/computation/llvm14/ya.make
@@ -0,0 +1,21 @@
+LIBRARY()
+
+NO_COMPILER_WARNINGS()
+
+PEERDIR(
+ ydb/library/yql/minikql/codegen/llvm14
+ contrib/libs/llvm14/lib/IR
+ contrib/libs/llvm14/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm14/lib/Linker
+ contrib/libs/llvm14/lib/Target/X86
+ contrib/libs/llvm14/lib/Target/X86/AsmParser
+ contrib/libs/llvm14/lib/Transforms/IPO
+)
+
+INCLUDE(../ya.make.inc)
+
+END()
+
+RECURSE_FOR_TESTS(
+ ut
+)
diff --git a/ydb/library/yql/minikql/computation/mkql_block_impl.h b/ydb/library/yql/minikql/computation/mkql_block_impl.h
index c710dbfd8c..9a8d39b316 100644
--- a/ydb/library/yql/minikql/computation/mkql_block_impl.h
+++ b/ydb/library/yql/minikql/computation/mkql_block_impl.h
@@ -2,10 +2,8 @@
#include "mkql_computation_node_impl.h"
#include "mkql_computation_node_holders.h"
-#include "mkql_llvm_base.h"
#include <ydb/library/yql/minikql/arrow/arrow_util.h>
-#include <ydb/library/yql/minikql/codegen/codegen.h>
#include <ydb/library/yql/public/udf/arrow/block_item.h>
#include <arrow/array.h>
@@ -111,39 +109,4 @@ struct TBlockState : public TComputationValue<TBlockState> {
NUdf::TUnboxedValuePod Get(const ui64 sliceSize, const THolderFactory& holderFactory, const size_t idx) const;
};
-#ifndef MKQL_DISABLE_CODEGEN
- class TLLVMFieldsStructureBlockState: public TLLVMFieldsStructure<TComputationValue<TBlockState>> {
- private:
- using TBase = TLLVMFieldsStructure<TComputationValue<TBlockState>>;
- llvm::IntegerType*const CountType;
- llvm::PointerType*const PointerType;
- llvm::ArrayType*const SkipSpaceType;
- protected:
- using TBase::Context;
- static constexpr auto BaseFields = 3U;
- public:
- std::vector<llvm::Type*> GetFieldsArray() {
- std::vector<llvm::Type*> result = TBase::GetFields();
- result.emplace_back(CountType);
- result.emplace_back(PointerType);
- result.emplace_back(SkipSpaceType);
- return result;
- }
-
- llvm::Constant* GetCount() {
- return llvm::ConstantInt::get(llvm::Type::getInt32Ty(Context), TBase::GetFieldsCount() + 0);
- }
-
- llvm::Constant* GetPointer() {
- return llvm::ConstantInt::get(llvm::Type::getInt32Ty(Context), TBase::GetFieldsCount() + 1);
- }
-
- TLLVMFieldsStructureBlockState(llvm::LLVMContext& context, size_t width)
- : TBase(context)
- , CountType(llvm::Type::getInt64Ty(Context))
- , PointerType(llvm::PointerType::getUnqual(llvm::ArrayType::get(llvm::Type::getInt128Ty(Context), width)))
- , SkipSpaceType(llvm::ArrayType::get(llvm::Type::getInt64Ty(Context), 9U)) // Skip std::vectors Values & Arrays
- {}
- };
-#endif
} //namespace NKikimr::NMiniKQL
diff --git a/ydb/library/yql/minikql/computation/mkql_block_impl_codegen.h b/ydb/library/yql/minikql/computation/mkql_block_impl_codegen.h
new file mode 100644
index 0000000000..326432002e
--- /dev/null
+++ b/ydb/library/yql/minikql/computation/mkql_block_impl_codegen.h
@@ -0,0 +1,45 @@
+#pragma once
+
+#include "mkql_block_item.h"
+#include "mkql_llvm_base.h"
+
+#include <ydb/library/yql/minikql/codegen/codegen.h>
+
+namespace NKikimr::NMiniKQL {
+
+#ifndef MKQL_DISABLE_CODEGEN
+ class TLLVMFieldsStructureBlockState: public TLLVMFieldsStructure<TComputationValue<TBlockState>> {
+ private:
+ using TBase = TLLVMFieldsStructure<TComputationValue<TBlockState>>;
+ llvm::IntegerType*const CountType;
+ llvm::PointerType*const PointerType;
+ llvm::ArrayType*const SkipSpaceType;
+ protected:
+ using TBase::Context;
+ static constexpr auto BaseFields = 3U;
+ public:
+ std::vector<llvm::Type*> GetFieldsArray() {
+ std::vector<llvm::Type*> result = TBase::GetFields();
+ result.emplace_back(CountType);
+ result.emplace_back(PointerType);
+ result.emplace_back(SkipSpaceType);
+ return result;
+ }
+
+ llvm::Constant* GetCount() {
+ return llvm::ConstantInt::get(llvm::Type::getInt32Ty(Context), TBase::GetFieldsCount() + 0);
+ }
+
+ llvm::Constant* GetPointer() {
+ return llvm::ConstantInt::get(llvm::Type::getInt32Ty(Context), TBase::GetFieldsCount() + 1);
+ }
+
+ TLLVMFieldsStructureBlockState(llvm::LLVMContext& context, size_t width)
+ : TBase(context)
+ , CountType(llvm::Type::getInt64Ty(Context))
+ , PointerType(llvm::PointerType::getUnqual(llvm::ArrayType::get(llvm::Type::getInt128Ty(Context), width)))
+ , SkipSpaceType(llvm::ArrayType::get(llvm::Type::getInt64Ty(Context), 9U)) // Skip std::vectors Values & Arrays
+ {}
+ };
+#endif
+} //namespace NKikimr::NMiniKQL
diff --git a/ydb/library/yql/minikql/computation/mkql_computation_node_codegen.cpp b/ydb/library/yql/minikql/computation/mkql_computation_node_codegen.cpp
index 0f0c33e156..06e62e7101 100644
--- a/ydb/library/yql/minikql/computation/mkql_computation_node_codegen.cpp
+++ b/ydb/library/yql/minikql/computation/mkql_computation_node_codegen.cpp
@@ -1,4 +1,4 @@
-#include "mkql_computation_node_codegen.h"
+#include "mkql_computation_node_codegen.h" // Y_IGNORE
#include "mkql_computation_node_holders.h"
#include <ydb/library/yql/minikql/codegen/codegen.h>
diff --git a/ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h b/ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h.txt
index 0e72bf5b64..cb4df89f59 100644
--- a/ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h
+++ b/ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h.txt
@@ -1,11 +1,6 @@
#pragma once
-#include "mkql_computation_node_impl.h"
-#include "mkql_custom_list.h"
-
-#include <ydb/library/yql/minikql/codegen/codegen.h>
-#include <ydb/library/yql/utils/method_index.h>
-#include <type_traits>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_codegen_common.h>
#ifdef MKQL_DISABLE_CODEGEN
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/computation/mkql_computation_node_codegen_common.h b/ydb/library/yql/minikql/computation/mkql_computation_node_codegen_common.h
new file mode 100644
index 0000000000..f8f3720d4b
--- /dev/null
+++ b/ydb/library/yql/minikql/computation/mkql_computation_node_codegen_common.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#include "mkql_computation_node_impl.h"
+#include "mkql_custom_list.h"
+
+#include <ydb/library/yql/minikql/codegen/codegen.h>
+#include <ydb/library/yql/utils/method_index.h>
+#include <type_traits>
diff --git a/ydb/library/yql/minikql/computation/mkql_computation_node_graph.cpp b/ydb/library/yql/minikql/computation/mkql_computation_node_graph.cpp
index cdaf0ab89e..7519d036b4 100644
--- a/ydb/library/yql/minikql/computation/mkql_computation_node_graph.cpp
+++ b/ydb/library/yql/minikql/computation/mkql_computation_node_graph.cpp
@@ -1,6 +1,7 @@
#include "mkql_computation_node_holders.h"
+#include "mkql_computation_node_holders_codegen.h"
#include "mkql_value_builder.h"
-#include "mkql_computation_node_codegen.h"
+#include "mkql_computation_node_codegen.h" // Y_IGNORE
#include <ydb/library/yql/minikql/arrow/mkql_memory_pool.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_pattern_cache.h>
#include <ydb/library/yql/minikql/comp_nodes/mkql_saveload.h>
diff --git a/ydb/library/yql/minikql/computation/mkql_computation_node_holders.cpp b/ydb/library/yql/minikql/computation/mkql_computation_node_holders.cpp
index ee459f8e19..10119daf00 100644
--- a/ydb/library/yql/minikql/computation/mkql_computation_node_holders.cpp
+++ b/ydb/library/yql/minikql/computation/mkql_computation_node_holders.cpp
@@ -1,5 +1,4 @@
#include "mkql_computation_node_holders.h"
-#include "mkql_computation_node_codegen.h"
#include "mkql_computation_node_pack.h"
#include "mkql_custom_list.h"
#include "mkql_value_builder.h"
@@ -232,217 +231,6 @@ private:
TDefaultListRepresentation Items;
};
-class TOptionalNode: public TDecoratorCodegeneratorNode<TOptionalNode> {
- typedef TDecoratorCodegeneratorNode<TOptionalNode> TBaseComputation;
-public:
- TOptionalNode(IComputationNode* itemNode)
- : TBaseComputation(itemNode)
- {}
-
- NUdf::TUnboxedValuePod DoCalculate(TComputationContext&, const NUdf::TUnboxedValuePod& value) const {
- return value.MakeOptional();
- }
-
-#ifndef MKQL_DISABLE_CODEGEN
- Value* DoGenerateGetValue(const TCodegenContext& ctx, Value* arg, BasicBlock*& block) const {
- return MakeOptional(ctx.Codegen.GetContext(), arg, block);
- }
-#endif
-};
-
-class TDirectArrayHolderInplace : public TComputationValue<TDirectArrayHolderInplace> {
-public:
- void* operator new(size_t sz) = delete;
- void* operator new[](size_t sz) = delete;
- void operator delete(void *mem, std::size_t sz) {
- const auto pSize = static_cast<void*>(static_cast<ui8*>(mem) + sizeof(TComputationValue<TDirectArrayHolderInplace>));
- FreeWithSize(mem, sz + *static_cast<ui64*>(pSize) * sizeof(NUdf::TUnboxedValue));
- }
-
- void operator delete[](void *mem, std::size_t sz) = delete;
-
- TDirectArrayHolderInplace(TMemoryUsageInfo* memInfo, ui64 size)
- : TComputationValue(memInfo)
- , Size(size)
- {
- MKQL_ENSURE(Size > 0U, "Can't create empty array holder.");
- MKQL_MEM_TAKE(GetMemInfo(), GetPtr(), Size * sizeof(NUdf::TUnboxedValue));
- std::memset(GetPtr(), 0, Size * sizeof(NUdf::TUnboxedValue));
- }
-
- ~TDirectArrayHolderInplace() {
- for (ui64 i = 0U; i < Size; ++i) {
- (GetPtr() + i)->~TUnboxedValue();
- }
- MKQL_MEM_RETURN(GetMemInfo(), GetPtr(), Size * sizeof(NUdf::TUnboxedValue));
- }
-
- ui64 GetSize() const {
- return Size;
- }
-
- NUdf::TUnboxedValue* GetPtr() const {
- return (NUdf::TUnboxedValue*)(this + 1);
- }
-
-private:
- class TIterator : public TTemporaryComputationValue<TIterator> {
- public:
- TIterator(const TDirectArrayHolderInplace* parent)
- : TTemporaryComputationValue(parent->GetMemInfo()), Parent(const_cast<TDirectArrayHolderInplace*>(parent))
- {}
-
- private:
- bool Skip() final {
- return ++Current < Parent->GetSize();
- }
-
- bool Next(NUdf::TUnboxedValue& value) final {
- if (!Skip())
- return false;
- value = Parent->GetPtr()[Current];
- return true;
- }
-
- bool NextPair(NUdf::TUnboxedValue& key, NUdf::TUnboxedValue& payload) final {
- if (!Next(payload))
- return false;
- key = NUdf::TUnboxedValuePod(Current);
- return true;
- }
-
- const NUdf::TRefCountedPtr<TDirectArrayHolderInplace> Parent;
- ui64 Current = Max<ui64>();
- };
-
- class TKeysIterator : public TTemporaryComputationValue<TKeysIterator> {
- public:
- TKeysIterator(const TDirectArrayHolderInplace& parent)
- : TTemporaryComputationValue(parent.GetMemInfo()), Size(parent.GetSize())
- {}
- private:
- bool Skip() final {
- return ++Current < Size;
- }
-
- bool Next(NUdf::TUnboxedValue& key) final {
- if (!Skip())
- return false;
- key = NUdf::TUnboxedValuePod(Current);
- return true;
- }
-
- const ui64 Size;
- ui64 Current = Max<ui64>();
- };
-
- bool HasListItems() const final {
- return true;
- }
-
- bool HasDictItems() const final {
- return true;
- }
-
- bool HasFastListLength() const final {
- return true;
- }
-
- ui64 GetListLength() const final {
- return Size;
- }
-
- ui64 GetDictLength() const final {
- return Size;
- }
-
- ui64 GetEstimatedListLength() const final {
- return Size;
- }
-
- NUdf::TUnboxedValue GetListIterator() const final {
- return NUdf::TUnboxedValuePod(new TIterator(this));
- }
-
- NUdf::TUnboxedValue GetDictIterator() const final {
- return NUdf::TUnboxedValuePod(new TIterator(this));
- }
-
- NUdf::TUnboxedValue GetPayloadsIterator() const final {
- return NUdf::TUnboxedValuePod(new TIterator(this));
- }
-
- NUdf::TUnboxedValue GetKeysIterator() const final {
- return NUdf::TUnboxedValuePod(new TKeysIterator(*this));
- }
-
- NUdf::IBoxedValuePtr ReverseListImpl(const NUdf::IValueBuilder& builder) const final {
- if (1U >= Size)
- return const_cast<TDirectArrayHolderInplace*>(this);
-
- NUdf::TUnboxedValue* items = nullptr;
- auto result = builder.NewArray(Size, items);
- std::reverse_copy(GetPtr(), GetPtr() + Size, items);
- return result.Release().AsBoxed();
- }
-
- NUdf::IBoxedValuePtr SkipListImpl(const NUdf::IValueBuilder& builder, ui64 count) const final {
- if (!count)
- return const_cast<TDirectArrayHolderInplace*>(this);
-
- if (count >= Size)
- return builder.NewEmptyList().Release().AsBoxed();
-
- const auto newSize = Size - count;
- NUdf::TUnboxedValue* items = nullptr;
- auto result = builder.NewArray(newSize, items);
- std::copy_n(GetPtr() + count, newSize, items);
- return result.Release().AsBoxed();
- }
-
- NUdf::IBoxedValuePtr TakeListImpl(const NUdf::IValueBuilder& builder, ui64 count) const final {
- if (!count)
- return builder.NewEmptyList().Release().AsBoxed();
-
- if (count >= Size)
- return const_cast<TDirectArrayHolderInplace*>(this);
-
- const auto newSize = count;
- NUdf::TUnboxedValue* items = nullptr;
- auto result = builder.NewArray(newSize, items);
- std::copy_n(GetPtr(), newSize, items);
- return result.Release().AsBoxed();
- }
-
- NUdf::IBoxedValuePtr ToIndexDictImpl(const NUdf::IValueBuilder&) const final {
- return const_cast<TDirectArrayHolderInplace*>(this);
- }
-
- bool Contains(const NUdf::TUnboxedValuePod& key) const final {
- return key.Get<ui64>() < Size;
- }
-
- NUdf::TUnboxedValue Lookup(const NUdf::TUnboxedValuePod& key) const final {
- const auto index = key.Get<ui64>();
- return index < Size ? GetPtr()[index].MakeOptional() : NUdf::TUnboxedValuePod();
- }
-
- NUdf::TUnboxedValue GetElement(ui32 index) const final {
- Y_DEBUG_ABORT_UNLESS(index < Size);
- return GetPtr()[index];
- }
-
- const NUdf::TUnboxedValue* GetElements() const final {
- return GetPtr();
- }
-
- bool IsSortedDict() const override {
- return true;
- }
-
- const ui64 Size;
-};
-
template <class TBaseVector>
class TVectorHolderBase: public TComputationValue<TVectorHolderBase<TBaseVector>>, public TBaseVector {
private:
@@ -640,101 +428,6 @@ public:
using TBase::TBase;
};
-class TArrayNode: public TMutableCodegeneratorFallbackNode<TArrayNode> {
- typedef TMutableCodegeneratorFallbackNode<TArrayNode> TBaseComputation;
-public:
- TArrayNode(TComputationMutables& mutables, TComputationNodePtrVector&& valueNodes)
- : TBaseComputation(mutables, EValueRepresentation::Boxed)
- , ValueNodes(std::move(valueNodes))
- , Cache(mutables)
- {
- }
-
- NUdf::TUnboxedValuePod DoCalculate(TComputationContext& ctx) const {
- NUdf::TUnboxedValue *items = nullptr;
- const auto result = Cache.NewArray(ctx, ValueNodes.size(), items);
- if (!ValueNodes.empty()) {
- Y_ABORT_UNLESS(items);
- for (const auto& node : ValueNodes) {
- *items++ = node->GetValue(ctx);
- }
- }
-
- return result;
- }
-
-#ifndef MKQL_DISABLE_CODEGEN
- Value* DoGenerateGetValue(const TCodegenContext& ctx, BasicBlock*& block) const {
- if (ValueNodes.size() > CodegenArraysFallbackLimit)
- return TBaseComputation::DoGenerateGetValue(ctx, block);
-
- auto& context = ctx.Codegen.GetContext();
-
- const auto valType = Type::getInt128Ty(context);
- const auto idxType = Type::getInt32Ty(context);
- const auto type = ArrayType::get(valType, ValueNodes.size());
- const auto ptrType = PointerType::getUnqual(type);
- /// TODO: how to get computation context or other workaround
- const auto itms = *Stateless || ctx.AlwaysInline ?
- new AllocaInst(ptrType, 0U, "itms", &ctx.Func->getEntryBlock().back()):
- new AllocaInst(ptrType, 0U, "itms", block);
- const auto result = Cache.GenNewArray(ValueNodes.size(), itms, ctx, block);
- const auto itemsPtr = new LoadInst(ptrType, itms, "items", block);
-
- ui32 i = 0U;
- for (const auto node : ValueNodes) {
- const auto itemPtr = GetElementPtrInst::CreateInBounds(type, itemsPtr, {ConstantInt::get(idxType, 0), ConstantInt::get(idxType, i++)}, "item", block);
- GetNodeValue(itemPtr, node, ctx, block);
- }
- return result;
- }
-#endif
-private:
- void RegisterDependencies() const final {
- std::for_each(ValueNodes.cbegin(), ValueNodes.cend(), std::bind(&TArrayNode::DependsOn, this, std::placeholders::_1));
- }
-
- const TComputationNodePtrVector ValueNodes;
- const TContainerCacheOnContext Cache;
-};
-
-class TEmptyNode : public TMutableCodegeneratorNode<TEmptyNode> {
- typedef TMutableCodegeneratorNode<TEmptyNode> TBaseComputation;
-public:
- TEmptyNode(TComputationMutables& mutables)
- : TBaseComputation(mutables, EValueRepresentation::Boxed)
- {}
-
- NUdf::TUnboxedValuePod DoCalculate(TComputationContext& ctx) const {
- return ctx.HolderFactory.GetEmptyContainerLazy();
- }
-
-#ifndef MKQL_DISABLE_CODEGEN
- Value* DoGenerateGetValue(const TCodegenContext& ctx, BasicBlock*& block) const {
- auto& context = ctx.Codegen.GetContext();
- const auto valueType = Type::getInt128Ty(context);
- const auto factory = ctx.GetFactory();
- const auto func = ConstantInt::get(Type::getInt64Ty(context), GetMethodPtr(&THolderFactory::GetEmptyContainerLazy));
-
- if (NYql::NCodegen::ETarget::Windows != ctx.Codegen.GetEffectiveTarget()) {
- const auto funType = FunctionType::get(valueType, {factory->getType()}, false);
- const auto funcPtr = CastInst::Create(Instruction::IntToPtr, func, PointerType::getUnqual(funType), "function", block);
- const auto res = CallInst::Create(funType, funcPtr, {factory}, "res", block);
- return res;
- } else {
- const auto retPtr = new AllocaInst(valueType, 0U, "ret_ptr", block);
- const auto funType = FunctionType::get(Type::getVoidTy(context), {factory->getType(), retPtr->getType()}, false);
- const auto funcPtr = CastInst::Create(Instruction::IntToPtr, func, PointerType::getUnqual(funType), "function", block);
- CallInst::Create(funType, funcPtr, {factory, retPtr}, "", block);
- const auto res = new LoadInst(valueType, retPtr, "res", block);
- return res;
- }
- }
-#endif
-private:
- void RegisterDependencies() const final {}
-};
-
class TEmptyContainerHolder: public TComputationValue<TEmptyContainerHolder> {
public:
TEmptyContainerHolder(TMemoryUsageInfo* memInfo)
@@ -2725,110 +2418,6 @@ private:
TComputationContext* Ctx;
};
-class TDictNode: public TMutableComputationNode<TDictNode> {
- typedef TMutableComputationNode<TDictNode> TBaseComputation;
-public:
- TDictNode(TComputationMutables& mutables,
- std::vector<std::pair<IComputationNode*, IComputationNode*>>&& itemNodes,
- const TKeyTypes& types, bool isTuple, TType* encodedType,
- NUdf::IHash::TPtr hash, NUdf::IEquate::TPtr equate,
- NUdf::ICompare::TPtr compare, bool isSorted)
- : TBaseComputation(mutables)
- , ItemNodes(std::move(itemNodes))
- , Types(types)
- , IsTuple(isTuple)
- , EncodedType(encodedType)
- , Hash(hash)
- , Equate(equate)
- , Compare(compare)
- , IsSorted(isSorted)
- {}
-
- NUdf::TUnboxedValuePod DoCalculate(TComputationContext& ctx) const {
- TKeyPayloadPairVector items;
- items.reserve(ItemNodes.size());
- for (const auto& node : ItemNodes) {
- items.emplace_back(node.first->GetValue(ctx), node.second->GetValue(ctx));
- }
-
- std::optional<TValuePacker> packer;
- if (EncodedType) {
- packer.emplace(true, EncodedType);
- }
-
- if (IsSorted) {
- const TSortedDictFiller filler = [&](TKeyPayloadPairVector& values) {
- values = std::move(items);
- };
-
- return ctx.HolderFactory.CreateDirectSortedDictHolder(filler, Types, IsTuple, EDictSortMode::RequiresSorting,
- true, EncodedType, Compare.Get(), Equate.Get());
- } else {
- THashedDictFiller filler =
- [&items, &packer](TValuesDictHashMap& map) {
- for (auto& value : items) {
- auto key = std::move(value.first);
- if (packer) {
- key = MakeString(packer->Pack(key));
- }
-
- map.emplace(std::move(key), std::move(value.second));
- }
- };
-
- return ctx.HolderFactory.CreateDirectHashedDictHolder(
- filler, Types, IsTuple, true, EncodedType, Hash.Get(), Equate.Get());
- }
- }
-
-private:
- void RegisterDependencies() const final {
- for (const auto& itemNode : ItemNodes) {
- DependsOn(itemNode.first);
- DependsOn(itemNode.second);
- }
- }
-
- const std::vector<std::pair<IComputationNode*, IComputationNode*>> ItemNodes;
- const TKeyTypes Types;
- const bool IsTuple;
- TType* EncodedType;
- NUdf::IHash::TPtr Hash;
- NUdf::IEquate::TPtr Equate;
- NUdf::ICompare::TPtr Compare;
- const bool IsSorted;
-};
-
-class TVariantNode : public TMutableCodegeneratorNode<TVariantNode> {
- typedef TMutableCodegeneratorNode<TVariantNode> TBaseComputation;
-public:
- TVariantNode(TComputationMutables& mutables, IComputationNode* itemNode, ui32 index)
- : TBaseComputation(mutables, EValueRepresentation::Any)
- , ItemNode(itemNode)
- , Index(index)
- {}
-
- NUdf::TUnboxedValuePod DoCalculate(TComputationContext& ctx) const {
- if (auto item = ItemNode->GetValue(ctx); item.TryMakeVariant(Index))
- return item.Release();
- else
- return ctx.HolderFactory.CreateBoxedVariantHolder(item.Release(), Index);
- }
-#ifndef MKQL_DISABLE_CODEGEN
- Value* DoGenerateGetValue(const TCodegenContext& ctx, BasicBlock*& block) const {
- const auto value = GetNodeValue(ItemNode, ctx, block);
- return MakeVariant(value, ConstantInt::get(Type::getInt32Ty(ctx.Codegen.GetContext()), Index), ctx, block);
- }
-#endif
-private:
- void RegisterDependencies() const final {
- DependsOn(ItemNode);
- }
-
- IComputationNode *const ItemNode;
- const ui32 Index;
-};
-
class TVariantHolder : public TComputationValue<TVariantHolder> {
public:
TVariantHolder(TMemoryUsageInfo* memInfo, NUdf::TUnboxedValue&& item, ui32 index)
@@ -3907,58 +3496,6 @@ KNOWN_PRIMITIVE_VALUE_TYPES(DEFINE_HASHED_SINGLE_FIXED_COMPACT_MULTI_MAP_OPT)
KNOWN_PRIMITIVE_VALUE_TYPES(DEFINE_HASHED_SINGLE_FIXED_COMPACT_MULTI_MAP_NONOPT)
#undef DEFINE_HASHED_SINGLE_FIXED_COMPACT_MULTI_MAP_NONOPT
-//////////////////////////////////////////////////////////////////////////////
-// TNodeFactory
-//////////////////////////////////////////////////////////////////////////////
-TNodeFactory::TNodeFactory(TMemoryUsageInfo& memInfo, TComputationMutables& mutables)
- : MemInfo(memInfo)
- , Mutables(mutables)
-{
-}
-
-IComputationNode* TNodeFactory::CreateEmptyNode() const
-{
- return new TEmptyNode(Mutables);
-}
-
-IComputationNode* TNodeFactory::CreateOptionalNode(IComputationNode* item) const
-{
- return item ? new TOptionalNode(item) : CreateImmutableNode(NUdf::TUnboxedValuePod());
-}
-
-IComputationNode* TNodeFactory::CreateArrayNode(TComputationNodePtrVector&& values) const
-{
- if (values.empty()) {
- return new TEmptyNode(Mutables);
- }
-
- return new TArrayNode(Mutables, std::move(values));
-}
-
-IComputationNode* TNodeFactory::CreateDictNode(
- std::vector<std::pair<IComputationNode*, IComputationNode*>>&& items,
- const TKeyTypes& types, bool isTuple, TType* encodedType,
- NUdf::IHash::TPtr hash, NUdf::IEquate::TPtr equate, NUdf::ICompare::TPtr compare, bool isSorted) const
-{
- if (items.empty()) {
- return new TEmptyNode(Mutables);
- }
-
- return new TDictNode(Mutables, std::move(items), types, isTuple, encodedType, hash, equate, compare, isSorted);
-}
-
-IComputationNode* TNodeFactory::CreateVariantNode(IComputationNode* item, ui32 index) const {
- return new TVariantNode(Mutables, item, index);
-}
-
-IComputationNode* TNodeFactory::CreateTypeNode(TType* type) const {
- return CreateImmutableNode(NUdf::TUnboxedValuePod(new TTypeHolder(&MemInfo, type)));
-}
-
-IComputationNode* TNodeFactory::CreateImmutableNode(NUdf::TUnboxedValue&& value) const {
- return new TUnboxedImmutableCodegeneratorNode(&MemInfo, std::move(value));
-}
-
void GetDictionaryKeyTypes(TType* keyType, TKeyTypes& types, bool& isTuple, bool& encoded, bool& useIHash, bool expandTuple) {
isTuple = false;
encoded = false;
@@ -4003,170 +3540,6 @@ void GetDictionaryKeyTypes(TType* keyType, TKeyTypes& types, bool& isTuple, bool
}
}
-TContainerCacheOnContext::TContainerCacheOnContext(TComputationMutables& mutables)
- : Index(mutables.CurValueIndex++)
-{
- ++++mutables.CurValueIndex;
-}
-
-NUdf::TUnboxedValuePod TContainerCacheOnContext::NewArray(TComputationContext& ctx, ui64 size, NUdf::TUnboxedValue*& items) const {
- if (!size)
- return ctx.HolderFactory.GetEmptyContainerLazy();
-
- auto& index = ctx.MutableValues[Index];
- if (index.IsInvalid())
- index = NUdf::TUnboxedValuePod::Zero();
-
- {
- auto& val = ctx.MutableValues[Index + (index.Get<bool>() ? 1U : 2U)];
- if (val.IsInvalid() || !val.UniqueBoxed()) {
- index = NUdf::TUnboxedValuePod(!index.Get<bool>());
- auto& value = ctx.MutableValues[Index + (index.Get<bool>() ? 1U : 2U)];
- if (value.IsInvalid() || !value.UniqueBoxed()) {
- return value = ctx.HolderFactory.CreateDirectArrayHolder(size, items);
- }
- }
- }
-
- auto& value = ctx.MutableValues[Index + (index.Get<bool>() ? 1U : 2U)];
- items = static_cast<const TDirectArrayHolderInplace*>(value.AsBoxed().Get())->GetPtr();
- std::fill_n(items, size, NUdf::TUnboxedValue());
- return value;
-}
-
-#ifndef MKQL_DISABLE_CODEGEN
-namespace {
-
-Value* GenerateCheckNotUniqueBoxed(Value* value, LLVMContext& context, Function* function, BasicBlock*& block) {
- const auto invalid = ConstantInt::get(value->getType(), 0xFFFFFFFFFFFFFFFFULL);
- const auto empty = CmpInst::Create(Instruction::ICmp, ICmpInst::ICMP_ULE, value, invalid, "empty", block);
-
- const auto have = BasicBlock::Create(context, "have", function);
- const auto done = BasicBlock::Create(context, "done", function);
- const auto result = PHINode::Create(empty->getType(), 2, "result", done);
- result->addIncoming(empty, block);
- BranchInst::Create(done, have, empty, block);
-
- block = have;
- const auto half = CastInst::Create(Instruction::Trunc, value, Type::getInt64Ty(context), "half", block);
- const auto type = StructType::get(context, {PointerType::getUnqual(StructType::get(context)), Type::getInt32Ty(context), Type::getInt16Ty(context)});
- const auto boxptr = CastInst::Create(Instruction::IntToPtr, half, PointerType::getUnqual(type), "boxptr", block);
- const auto cntptr = GetElementPtrInst::CreateInBounds(type, boxptr, {ConstantInt::get(Type::getInt32Ty(context), 0), ConstantInt::get(Type::getInt32Ty(context), 1)}, "cntptr", block);
- const auto refs = new LoadInst(Type::getInt32Ty(context), cntptr, "refs", block);
- const auto many = CmpInst::Create(Instruction::ICmp, ICmpInst::ICMP_UGT, refs, ConstantInt::get(refs->getType(), 1U), "many", block);
- result->addIncoming(many, block);
- BranchInst::Create(done, block);
-
- block = done;
- return result;
-}
-
-}
-
-Value* TContainerCacheOnContext::GenNewArray(ui64 sz, Value* items, const TCodegenContext& ctx, BasicBlock*& block) const {
- auto& context = ctx.Codegen.GetContext();
- const auto valueType = Type::getInt128Ty(context);
- const auto arrayType = ArrayType::get(valueType, sz);
- const auto pointerType = PointerType::getUnqual(arrayType);
-
- const auto idxType = Type::getInt32Ty(context);
-
- const auto values = ctx.GetMutables();
-
- const auto indexPtr = GetElementPtrInst::CreateInBounds(valueType, values, {ConstantInt::get(idxType, Index)}, "index_ptr", block);
-
- const auto raw = new LoadInst(valueType, indexPtr, "raw", block);
-
- const auto indb = GetterFor<bool>(raw, context, block);
- const auto indf = CastInst::Create(Instruction::ZExt, indb, idxType, "indf", block);
- const auto ind_one = BinaryOperator::CreateAdd(indf, ConstantInt::get(idxType, Index + 1U), "ind_one", block);
-
- const auto tpfirst = GetElementPtrInst::CreateInBounds(valueType, values, {ind_one}, "tpfirst", block);
-
- const auto tfirst = new LoadInst(valueType, tpfirst, "tfirst", block);
- const auto cfirst = GenerateCheckNotUniqueBoxed(tfirst, context, ctx.Func, block);
-
- const auto scnd = BasicBlock::Create(context, "scnd", ctx.Func);
- const auto make = BasicBlock::Create(context, "make", ctx.Func);
- const auto have = BasicBlock::Create(context, "have", ctx.Func);
- const auto exit = BasicBlock::Create(context, "exit", ctx.Func);
- const auto result = PHINode::Create(valueType, 2, "result", exit);
-
- const auto has = PHINode::Create(tfirst->getType(), 2, "has", have);
- has->addIncoming(tfirst, block);
-
- BranchInst::Create(scnd, have, cfirst, block);
-
- block = scnd;
-
- const auto neg = BinaryOperator::CreateXor(indb, ConstantInt::get(indb->getType(), 1), "xor", block);
- const auto newInd = SetterFor<bool>(neg, context, block);
- new StoreInst(newInd, indexPtr, block);
-
- const auto inds = CastInst::Create(Instruction::ZExt, neg, idxType, "inds", block);
-
- const auto ind_two = BinaryOperator::CreateAdd(inds, ConstantInt::get(idxType, Index + 1U), "ind_two", block);
-
- const auto tpsecond = GetElementPtrInst::CreateInBounds(valueType, values, {ind_two}, "tpsecond", block);
- const auto tsecond = new LoadInst(valueType, tpsecond, "tsecond", block);
- const auto csecond = GenerateCheckNotUniqueBoxed(tsecond, context, ctx.Func, block);
- has->addIncoming(tsecond, block);
- BranchInst::Create(make, have, csecond, block);
-
- {
- block = make;
- ValueUnRef(EValueRepresentation::Boxed, tpsecond, ctx, block);
-
- const auto fact = ctx.GetFactory();
-
- const auto func = ConstantInt::get(Type::getInt64Ty(context), GetMethodPtr(&THolderFactory::CreateDirectArrayHolder));
- const auto size = ConstantInt::get(Type::getInt64Ty(context), sz);
-
- if (NYql::NCodegen::ETarget::Windows != ctx.Codegen.GetEffectiveTarget()) {
- const auto funType = FunctionType::get(valueType, {fact->getType(), size->getType(), items->getType()}, false);
- const auto funcPtr = CastInst::Create(Instruction::IntToPtr, func, PointerType::getUnqual(funType), "function", block);
- const auto array = CallInst::Create(funType, funcPtr, {fact, size, items}, "array", block);
- AddRefBoxed(array, ctx, block);
- result->addIncoming(array, block);
- new StoreInst(array, tpsecond, block);
- } else {
- const auto funType = FunctionType::get(Type::getVoidTy(context), {fact->getType(), tpsecond->getType(), size->getType(), items->getType()}, false);
- const auto funcPtr = CastInst::Create(Instruction::IntToPtr, func, PointerType::getUnqual(funType), "function", block);
- CallInst::Create(funType, funcPtr, {fact, tpsecond, size, items}, "", block);
- const auto array = new LoadInst(valueType, tpsecond, "array", block);
- AddRefBoxed(array, ctx, block);
- result->addIncoming(array, block);
- }
-
- BranchInst::Create(exit, block);
- }
-
- {
- block = have;
-
- const auto half = CastInst::Create(Instruction::Trunc, has, Type::getInt64Ty(context), "half", block);
-
- const auto offs = BinaryOperator::CreateAdd(half, ConstantInt::get(half->getType(), sizeof(TDirectArrayHolderInplace)), "offs", block);
-
- const auto itemsPtr = CastInst::Create(Instruction::IntToPtr, offs, pointerType, "items_ptr", block);
-
- for (ui64 i = 0; i < sz; ++i) {
- const auto itemp = GetElementPtrInst::CreateInBounds(arrayType, itemsPtr, {ConstantInt::get(idxType, 0), ConstantInt::get(idxType, i)}, "itemp", block);
- ValueUnRef(EValueRepresentation::Any, itemp, ctx, block);
- }
-
- result->addIncoming(has, block);
-
- new StoreInst(ConstantAggregateZero::get(arrayType), itemsPtr, block);
- new StoreInst(itemsPtr, items, block);
- BranchInst::Create(exit, block);
- }
-
- block = exit;
- return result;
-}
-#endif
-
TPlainContainerCache::TPlainContainerCache() {
Clear();
}
diff --git a/ydb/library/yql/minikql/computation/mkql_computation_node_holders.h b/ydb/library/yql/minikql/computation/mkql_computation_node_holders.h
index 8de411b674..f52c7a7093 100644
--- a/ydb/library/yql/minikql/computation/mkql_computation_node_holders.h
+++ b/ydb/library/yql/minikql/computation/mkql_computation_node_holders.h
@@ -21,22 +21,11 @@
#include <optional>
#include <vector>
-#ifndef MKQL_DISABLE_CODEGEN
-namespace llvm {
- class Value;
- class BasicBlock;
-}
-#endif
-
namespace NKikimr {
namespace NMiniKQL {
class TMemoryUsageInfo;
-#ifndef MKQL_DISABLE_CODEGEN
-struct TCodegenContext;
-#endif
-
const ui32 CodegenArraysFallbackLimit = 1000u;
using TKeyTypes = std::vector<std::pair<NUdf::EDataSlot, bool>>;
@@ -639,6 +628,199 @@ private:
THashMap<TTypeBase, TValuePtr, THasherTType, TEqualTType> Registry;
};
+class TDirectArrayHolderInplace : public TComputationValue<TDirectArrayHolderInplace> {
+public:
+ void* operator new(size_t sz) = delete;
+ void* operator new[](size_t sz) = delete;
+ void operator delete(void *mem, std::size_t sz) {
+ const auto pSize = static_cast<void*>(static_cast<ui8*>(mem) + sizeof(TComputationValue<TDirectArrayHolderInplace>));
+ FreeWithSize(mem, sz + *static_cast<ui64*>(pSize) * sizeof(NUdf::TUnboxedValue));
+ }
+
+ void operator delete[](void *mem, std::size_t sz) = delete;
+
+ TDirectArrayHolderInplace(TMemoryUsageInfo* memInfo, ui64 size)
+ : TComputationValue(memInfo)
+ , Size(size)
+ {
+ MKQL_ENSURE(Size > 0U, "Can't create empty array holder.");
+ MKQL_MEM_TAKE(GetMemInfo(), GetPtr(), Size * sizeof(NUdf::TUnboxedValue));
+ std::memset(GetPtr(), 0, Size * sizeof(NUdf::TUnboxedValue));
+ }
+
+ ~TDirectArrayHolderInplace() {
+ for (ui64 i = 0U; i < Size; ++i) {
+ (GetPtr() + i)->~TUnboxedValue();
+ }
+ MKQL_MEM_RETURN(GetMemInfo(), GetPtr(), Size * sizeof(NUdf::TUnboxedValue));
+ }
+
+ ui64 GetSize() const {
+ return Size;
+ }
+
+ NUdf::TUnboxedValue* GetPtr() const {
+ return (NUdf::TUnboxedValue*)(this + 1);
+ }
+
+private:
+ class TIterator : public TTemporaryComputationValue<TIterator> {
+ public:
+ TIterator(const TDirectArrayHolderInplace* parent)
+ : TTemporaryComputationValue(parent->GetMemInfo()), Parent(const_cast<TDirectArrayHolderInplace*>(parent))
+ {}
+
+ private:
+ bool Skip() final {
+ return ++Current < Parent->GetSize();
+ }
+
+ bool Next(NUdf::TUnboxedValue& value) final {
+ if (!Skip())
+ return false;
+ value = Parent->GetPtr()[Current];
+ return true;
+ }
+
+ bool NextPair(NUdf::TUnboxedValue& key, NUdf::TUnboxedValue& payload) final {
+ if (!Next(payload))
+ return false;
+ key = NUdf::TUnboxedValuePod(Current);
+ return true;
+ }
+
+ const NUdf::TRefCountedPtr<TDirectArrayHolderInplace> Parent;
+ ui64 Current = Max<ui64>();
+ };
+
+ class TKeysIterator : public TTemporaryComputationValue<TKeysIterator> {
+ public:
+ TKeysIterator(const TDirectArrayHolderInplace& parent)
+ : TTemporaryComputationValue(parent.GetMemInfo()), Size(parent.GetSize())
+ {}
+ private:
+ bool Skip() final {
+ return ++Current < Size;
+ }
+
+ bool Next(NUdf::TUnboxedValue& key) final {
+ if (!Skip())
+ return false;
+ key = NUdf::TUnboxedValuePod(Current);
+ return true;
+ }
+
+ const ui64 Size;
+ ui64 Current = Max<ui64>();
+ };
+
+ bool HasListItems() const final {
+ return true;
+ }
+
+ bool HasDictItems() const final {
+ return true;
+ }
+
+ bool HasFastListLength() const final {
+ return true;
+ }
+
+ ui64 GetListLength() const final {
+ return Size;
+ }
+
+ ui64 GetDictLength() const final {
+ return Size;
+ }
+
+ ui64 GetEstimatedListLength() const final {
+ return Size;
+ }
+
+ NUdf::TUnboxedValue GetListIterator() const final {
+ return NUdf::TUnboxedValuePod(new TIterator(this));
+ }
+
+ NUdf::TUnboxedValue GetDictIterator() const final {
+ return NUdf::TUnboxedValuePod(new TIterator(this));
+ }
+
+ NUdf::TUnboxedValue GetPayloadsIterator() const final {
+ return NUdf::TUnboxedValuePod(new TIterator(this));
+ }
+
+ NUdf::TUnboxedValue GetKeysIterator() const final {
+ return NUdf::TUnboxedValuePod(new TKeysIterator(*this));
+ }
+
+ NUdf::IBoxedValuePtr ReverseListImpl(const NUdf::IValueBuilder& builder) const final {
+ if (1U >= Size)
+ return const_cast<TDirectArrayHolderInplace*>(this);
+
+ NUdf::TUnboxedValue* items = nullptr;
+ auto result = builder.NewArray(Size, items);
+ std::reverse_copy(GetPtr(), GetPtr() + Size, items);
+ return result.Release().AsBoxed();
+ }
+
+ NUdf::IBoxedValuePtr SkipListImpl(const NUdf::IValueBuilder& builder, ui64 count) const final {
+ if (!count)
+ return const_cast<TDirectArrayHolderInplace*>(this);
+
+ if (count >= Size)
+ return builder.NewEmptyList().Release().AsBoxed();
+
+ const auto newSize = Size - count;
+ NUdf::TUnboxedValue* items = nullptr;
+ auto result = builder.NewArray(newSize, items);
+ std::copy_n(GetPtr() + count, newSize, items);
+ return result.Release().AsBoxed();
+ }
+
+ NUdf::IBoxedValuePtr TakeListImpl(const NUdf::IValueBuilder& builder, ui64 count) const final {
+ if (!count)
+ return builder.NewEmptyList().Release().AsBoxed();
+
+ if (count >= Size)
+ return const_cast<TDirectArrayHolderInplace*>(this);
+
+ const auto newSize = count;
+ NUdf::TUnboxedValue* items = nullptr;
+ auto result = builder.NewArray(newSize, items);
+ std::copy_n(GetPtr(), newSize, items);
+ return result.Release().AsBoxed();
+ }
+
+ NUdf::IBoxedValuePtr ToIndexDictImpl(const NUdf::IValueBuilder&) const final {
+ return const_cast<TDirectArrayHolderInplace*>(this);
+ }
+
+ bool Contains(const NUdf::TUnboxedValuePod& key) const final {
+ return key.Get<ui64>() < Size;
+ }
+
+ NUdf::TUnboxedValue Lookup(const NUdf::TUnboxedValuePod& key) const final {
+ const auto index = key.Get<ui64>();
+ return index < Size ? GetPtr()[index].MakeOptional() : NUdf::TUnboxedValuePod();
+ }
+
+ NUdf::TUnboxedValue GetElement(ui32 index) const final {
+ Y_DEBUG_ABORT_UNLESS(index < Size);
+ return GetPtr()[index];
+ }
+
+ const NUdf::TUnboxedValue* GetElements() const final {
+ return GetPtr();
+ }
+
+ bool IsSortedDict() const override {
+ return true;
+ }
+
+ const ui64 Size;
+};
+
//////////////////////////////////////////////////////////////////////////////
// THolderFactory
//////////////////////////////////////////////////////////////////////////////
@@ -848,48 +1030,8 @@ inline bool TComputationContext::CheckAdjustedMemLimit(ui64 memLimit, ui64 initM
return currentMemUsage * UsageAdjustor >= initMemUsage + memLimit;
}
-//////////////////////////////////////////////////////////////////////////////
-// TNodeFactory
-//////////////////////////////////////////////////////////////////////////////
-class TNodeFactory: private TNonCopyable
-{
-public:
- TNodeFactory(TMemoryUsageInfo& memInfo, TComputationMutables& mutables);
-
- IComputationNode* CreateTypeNode(TType* type) const;
-
- IComputationNode* CreateImmutableNode(NUdf::TUnboxedValue&& value) const;
-
- IComputationNode* CreateEmptyNode() const;
-
- IComputationNode* CreateArrayNode(TComputationNodePtrVector&& items) const;
-
- IComputationNode* CreateOptionalNode(IComputationNode* item) const;
-
- IComputationNode* CreateDictNode(
- std::vector<std::pair<IComputationNode*, IComputationNode*>>&& items,
- const TKeyTypes& types, bool isTuple, TType* encodedType,
- NUdf::IHash::TPtr hash, NUdf::IEquate::TPtr equate, NUdf::ICompare::TPtr compare, bool isSorted) const;
-
- IComputationNode* CreateVariantNode(IComputationNode* item, ui32 index) const;
-
-private:
- TMemoryUsageInfo& MemInfo;
- TComputationMutables& Mutables;
-};
-
void GetDictionaryKeyTypes(TType* keyType, TKeyTypes& types, bool& isTuple, bool& encoded, bool& useIHash, bool expandTuple = true);
-struct TContainerCacheOnContext : private TNonCopyable {
- TContainerCacheOnContext(TComputationMutables& mutables);
-
- NUdf::TUnboxedValuePod NewArray(TComputationContext& ctx, ui64 size, NUdf::TUnboxedValue*& items) const;
-#ifndef MKQL_DISABLE_CODEGEN
- llvm::Value* GenNewArray(ui64 sz, llvm::Value* items, const TCodegenContext& ctx, llvm::BasicBlock*& block) const;
-#endif
- const ui32 Index;
-};
-
class TPlainContainerCache {
public:
TPlainContainerCache();
diff --git a/ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.cpp b/ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.cpp
new file mode 100644
index 0000000000..7851730332
--- /dev/null
+++ b/ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.cpp
@@ -0,0 +1,443 @@
+#include "mkql_computation_node_holders_codegen.h"
+#include "mkql_computation_node_codegen.h" // Y_IGNORE
+#include "mkql_computation_node_pack.h"
+#include <ydb/library/yql/minikql/mkql_string_util.h>
+
+namespace NKikimr {
+namespace NMiniKQL {
+
+TContainerCacheOnContext::TContainerCacheOnContext(TComputationMutables& mutables)
+ : Index(mutables.CurValueIndex++)
+{
+ ++++mutables.CurValueIndex;
+}
+
+NUdf::TUnboxedValuePod TContainerCacheOnContext::NewArray(TComputationContext& ctx, ui64 size, NUdf::TUnboxedValue*& items) const {
+ if (!size)
+ return ctx.HolderFactory.GetEmptyContainerLazy();
+
+ auto& index = ctx.MutableValues[Index];
+ if (index.IsInvalid())
+ index = NUdf::TUnboxedValuePod::Zero();
+
+ {
+ auto& val = ctx.MutableValues[Index + (index.Get<bool>() ? 1U : 2U)];
+ if (val.IsInvalid() || !val.UniqueBoxed()) {
+ index = NUdf::TUnboxedValuePod(!index.Get<bool>());
+ auto& value = ctx.MutableValues[Index + (index.Get<bool>() ? 1U : 2U)];
+ if (value.IsInvalid() || !value.UniqueBoxed()) {
+ return value = ctx.HolderFactory.CreateDirectArrayHolder(size, items);
+ }
+ }
+ }
+
+ auto& value = ctx.MutableValues[Index + (index.Get<bool>() ? 1U : 2U)];
+ items = static_cast<const TDirectArrayHolderInplace*>(value.AsBoxed().Get())->GetPtr();
+ std::fill_n(items, size, NUdf::TUnboxedValue());
+ return value;
+}
+
+#ifndef MKQL_DISABLE_CODEGEN
+namespace {
+
+Value* GenerateCheckNotUniqueBoxed(Value* value, LLVMContext& context, Function* function, BasicBlock*& block) {
+ const auto invalid = ConstantInt::get(value->getType(), 0xFFFFFFFFFFFFFFFFULL);
+ const auto empty = CmpInst::Create(Instruction::ICmp, ICmpInst::ICMP_ULE, value, invalid, "empty", block);
+
+ const auto have = BasicBlock::Create(context, "have", function);
+ const auto done = BasicBlock::Create(context, "done", function);
+ const auto result = PHINode::Create(empty->getType(), 2, "result", done);
+ result->addIncoming(empty, block);
+ BranchInst::Create(done, have, empty, block);
+
+ block = have;
+ const auto half = CastInst::Create(Instruction::Trunc, value, Type::getInt64Ty(context), "half", block);
+ const auto type = StructType::get(context, {PointerType::getUnqual(StructType::get(context)), Type::getInt32Ty(context), Type::getInt16Ty(context)});
+ const auto boxptr = CastInst::Create(Instruction::IntToPtr, half, PointerType::getUnqual(type), "boxptr", block);
+ const auto cntptr = GetElementPtrInst::CreateInBounds(type, boxptr, {ConstantInt::get(Type::getInt32Ty(context), 0), ConstantInt::get(Type::getInt32Ty(context), 1)}, "cntptr", block);
+ const auto refs = new LoadInst(Type::getInt32Ty(context), cntptr, "refs", block);
+ const auto many = CmpInst::Create(Instruction::ICmp, ICmpInst::ICMP_UGT, refs, ConstantInt::get(refs->getType(), 1U), "many", block);
+ result->addIncoming(many, block);
+ BranchInst::Create(done, block);
+
+ block = done;
+ return result;
+}
+
+}
+
+Value* TContainerCacheOnContext::GenNewArray(ui64 sz, Value* items, const TCodegenContext& ctx, BasicBlock*& block) const {
+ auto& context = ctx.Codegen.GetContext();
+ const auto valueType = Type::getInt128Ty(context);
+ const auto arrayType = ArrayType::get(valueType, sz);
+ const auto pointerType = PointerType::getUnqual(arrayType);
+
+ const auto idxType = Type::getInt32Ty(context);
+
+ const auto values = ctx.GetMutables();
+
+ const auto indexPtr = GetElementPtrInst::CreateInBounds(valueType, values, {ConstantInt::get(idxType, Index)}, "index_ptr", block);
+
+ const auto raw = new LoadInst(valueType, indexPtr, "raw", block);
+
+ const auto indb = GetterFor<bool>(raw, context, block);
+ const auto indf = CastInst::Create(Instruction::ZExt, indb, idxType, "indf", block);
+ const auto ind_one = BinaryOperator::CreateAdd(indf, ConstantInt::get(idxType, Index + 1U), "ind_one", block);
+
+ const auto tpfirst = GetElementPtrInst::CreateInBounds(valueType, values, {ind_one}, "tpfirst", block);
+
+ const auto tfirst = new LoadInst(valueType, tpfirst, "tfirst", block);
+ const auto cfirst = GenerateCheckNotUniqueBoxed(tfirst, context, ctx.Func, block);
+
+ const auto scnd = BasicBlock::Create(context, "scnd", ctx.Func);
+ const auto make = BasicBlock::Create(context, "make", ctx.Func);
+ const auto have = BasicBlock::Create(context, "have", ctx.Func);
+ const auto exit = BasicBlock::Create(context, "exit", ctx.Func);
+ const auto result = PHINode::Create(valueType, 2, "result", exit);
+
+ const auto has = PHINode::Create(tfirst->getType(), 2, "has", have);
+ has->addIncoming(tfirst, block);
+
+ BranchInst::Create(scnd, have, cfirst, block);
+
+ block = scnd;
+
+ const auto neg = BinaryOperator::CreateXor(indb, ConstantInt::get(indb->getType(), 1), "xor", block);
+ const auto newInd = SetterFor<bool>(neg, context, block);
+ new StoreInst(newInd, indexPtr, block);
+
+ const auto inds = CastInst::Create(Instruction::ZExt, neg, idxType, "inds", block);
+
+ const auto ind_two = BinaryOperator::CreateAdd(inds, ConstantInt::get(idxType, Index + 1U), "ind_two", block);
+
+ const auto tpsecond = GetElementPtrInst::CreateInBounds(valueType, values, {ind_two}, "tpsecond", block);
+ const auto tsecond = new LoadInst(valueType, tpsecond, "tsecond", block);
+ const auto csecond = GenerateCheckNotUniqueBoxed(tsecond, context, ctx.Func, block);
+ has->addIncoming(tsecond, block);
+ BranchInst::Create(make, have, csecond, block);
+
+ {
+ block = make;
+ ValueUnRef(EValueRepresentation::Boxed, tpsecond, ctx, block);
+
+ const auto fact = ctx.GetFactory();
+
+ const auto func = ConstantInt::get(Type::getInt64Ty(context), GetMethodPtr(&THolderFactory::CreateDirectArrayHolder));
+ const auto size = ConstantInt::get(Type::getInt64Ty(context), sz);
+
+ if (NYql::NCodegen::ETarget::Windows != ctx.Codegen.GetEffectiveTarget()) {
+ const auto funType = FunctionType::get(valueType, {fact->getType(), size->getType(), items->getType()}, false);
+ const auto funcPtr = CastInst::Create(Instruction::IntToPtr, func, PointerType::getUnqual(funType), "function", block);
+ const auto array = CallInst::Create(funType, funcPtr, {fact, size, items}, "array", block);
+ AddRefBoxed(array, ctx, block);
+ result->addIncoming(array, block);
+ new StoreInst(array, tpsecond, block);
+ } else {
+ const auto funType = FunctionType::get(Type::getVoidTy(context), {fact->getType(), tpsecond->getType(), size->getType(), items->getType()}, false);
+ const auto funcPtr = CastInst::Create(Instruction::IntToPtr, func, PointerType::getUnqual(funType), "function", block);
+ CallInst::Create(funType, funcPtr, {fact, tpsecond, size, items}, "", block);
+ const auto array = new LoadInst(valueType, tpsecond, "array", block);
+ AddRefBoxed(array, ctx, block);
+ result->addIncoming(array, block);
+ }
+
+ BranchInst::Create(exit, block);
+ }
+
+ {
+ block = have;
+
+ const auto half = CastInst::Create(Instruction::Trunc, has, Type::getInt64Ty(context), "half", block);
+
+ const auto offs = BinaryOperator::CreateAdd(half, ConstantInt::get(half->getType(), sizeof(TDirectArrayHolderInplace)), "offs", block);
+
+ const auto itemsPtr = CastInst::Create(Instruction::IntToPtr, offs, pointerType, "items_ptr", block);
+
+ for (ui64 i = 0; i < sz; ++i) {
+ const auto itemp = GetElementPtrInst::CreateInBounds(arrayType, itemsPtr, {ConstantInt::get(idxType, 0), ConstantInt::get(idxType, i)}, "itemp", block);
+ ValueUnRef(EValueRepresentation::Any, itemp, ctx, block);
+ }
+
+ result->addIncoming(has, block);
+
+ new StoreInst(ConstantAggregateZero::get(arrayType), itemsPtr, block);
+ new StoreInst(itemsPtr, items, block);
+ BranchInst::Create(exit, block);
+ }
+
+ block = exit;
+ return result;
+}
+#endif
+
+class TEmptyNode : public TMutableCodegeneratorNode<TEmptyNode> {
+ typedef TMutableCodegeneratorNode<TEmptyNode> TBaseComputation;
+public:
+ TEmptyNode(TComputationMutables& mutables)
+ : TBaseComputation(mutables, EValueRepresentation::Boxed)
+ {}
+
+ NUdf::TUnboxedValuePod DoCalculate(TComputationContext& ctx) const {
+ return ctx.HolderFactory.GetEmptyContainerLazy();
+ }
+
+#ifndef MKQL_DISABLE_CODEGEN
+ Value* DoGenerateGetValue(const TCodegenContext& ctx, BasicBlock*& block) const {
+ auto& context = ctx.Codegen.GetContext();
+ const auto valueType = Type::getInt128Ty(context);
+ const auto factory = ctx.GetFactory();
+ const auto func = ConstantInt::get(Type::getInt64Ty(context), GetMethodPtr(&THolderFactory::GetEmptyContainerLazy));
+
+ if (NYql::NCodegen::ETarget::Windows != ctx.Codegen.GetEffectiveTarget()) {
+ const auto funType = FunctionType::get(valueType, {factory->getType()}, false);
+ const auto funcPtr = CastInst::Create(Instruction::IntToPtr, func, PointerType::getUnqual(funType), "function", block);
+ const auto res = CallInst::Create(funType, funcPtr, {factory}, "res", block);
+ return res;
+ } else {
+ const auto retPtr = new AllocaInst(valueType, 0U, "ret_ptr", block);
+ const auto funType = FunctionType::get(Type::getVoidTy(context), {factory->getType(), retPtr->getType()}, false);
+ const auto funcPtr = CastInst::Create(Instruction::IntToPtr, func, PointerType::getUnqual(funType), "function", block);
+ CallInst::Create(funType, funcPtr, {factory, retPtr}, "", block);
+ const auto res = new LoadInst(valueType, retPtr, "res", block);
+ return res;
+ }
+ }
+#endif
+private:
+ void RegisterDependencies() const final {}
+};
+
+class TOptionalNode: public TDecoratorCodegeneratorNode<TOptionalNode> {
+ typedef TDecoratorCodegeneratorNode<TOptionalNode> TBaseComputation;
+public:
+ TOptionalNode(IComputationNode* itemNode)
+ : TBaseComputation(itemNode)
+ {}
+
+ NUdf::TUnboxedValuePod DoCalculate(TComputationContext&, const NUdf::TUnboxedValuePod& value) const {
+ return value.MakeOptional();
+ }
+
+#ifndef MKQL_DISABLE_CODEGEN
+ Value* DoGenerateGetValue(const TCodegenContext& ctx, Value* arg, BasicBlock*& block) const {
+ return MakeOptional(ctx.Codegen.GetContext(), arg, block);
+ }
+#endif
+};
+
+class TArrayNode: public TMutableCodegeneratorFallbackNode<TArrayNode> {
+ typedef TMutableCodegeneratorFallbackNode<TArrayNode> TBaseComputation;
+public:
+ TArrayNode(TComputationMutables& mutables, TComputationNodePtrVector&& valueNodes)
+ : TBaseComputation(mutables, EValueRepresentation::Boxed)
+ , ValueNodes(std::move(valueNodes))
+ , Cache(mutables)
+ {
+ }
+
+ NUdf::TUnboxedValuePod DoCalculate(TComputationContext& ctx) const {
+ NUdf::TUnboxedValue *items = nullptr;
+ const auto result = Cache.NewArray(ctx, ValueNodes.size(), items);
+ if (!ValueNodes.empty()) {
+ Y_ABORT_UNLESS(items);
+ for (const auto& node : ValueNodes) {
+ *items++ = node->GetValue(ctx);
+ }
+ }
+
+ return result;
+ }
+
+#ifndef MKQL_DISABLE_CODEGEN
+ Value* DoGenerateGetValue(const TCodegenContext& ctx, BasicBlock*& block) const {
+ if (ValueNodes.size() > CodegenArraysFallbackLimit)
+ return TBaseComputation::DoGenerateGetValue(ctx, block);
+
+ auto& context = ctx.Codegen.GetContext();
+
+ const auto valType = Type::getInt128Ty(context);
+ const auto idxType = Type::getInt32Ty(context);
+ const auto type = ArrayType::get(valType, ValueNodes.size());
+ const auto ptrType = PointerType::getUnqual(type);
+ /// TODO: how to get computation context or other workaround
+ const auto itms = *Stateless || ctx.AlwaysInline ?
+ new AllocaInst(ptrType, 0U, "itms", &ctx.Func->getEntryBlock().back()):
+ new AllocaInst(ptrType, 0U, "itms", block);
+ const auto result = Cache.GenNewArray(ValueNodes.size(), itms, ctx, block);
+ const auto itemsPtr = new LoadInst(ptrType, itms, "items", block);
+
+ ui32 i = 0U;
+ for (const auto node : ValueNodes) {
+ const auto itemPtr = GetElementPtrInst::CreateInBounds(type, itemsPtr, {ConstantInt::get(idxType, 0), ConstantInt::get(idxType, i++)}, "item", block);
+ GetNodeValue(itemPtr, node, ctx, block);
+ }
+ return result;
+ }
+#endif
+private:
+ void RegisterDependencies() const final {
+ std::for_each(ValueNodes.cbegin(), ValueNodes.cend(), std::bind(&TArrayNode::DependsOn, this, std::placeholders::_1));
+ }
+
+ const TComputationNodePtrVector ValueNodes;
+ const TContainerCacheOnContext Cache;
+};
+
+class TVariantNode : public TMutableCodegeneratorNode<TVariantNode> {
+ typedef TMutableCodegeneratorNode<TVariantNode> TBaseComputation;
+public:
+ TVariantNode(TComputationMutables& mutables, IComputationNode* itemNode, ui32 index)
+ : TBaseComputation(mutables, EValueRepresentation::Any)
+ , ItemNode(itemNode)
+ , Index(index)
+ {}
+
+ NUdf::TUnboxedValuePod DoCalculate(TComputationContext& ctx) const {
+ if (auto item = ItemNode->GetValue(ctx); item.TryMakeVariant(Index))
+ return item.Release();
+ else
+ return ctx.HolderFactory.CreateBoxedVariantHolder(item.Release(), Index);
+ }
+#ifndef MKQL_DISABLE_CODEGEN
+ Value* DoGenerateGetValue(const TCodegenContext& ctx, BasicBlock*& block) const {
+ const auto value = GetNodeValue(ItemNode, ctx, block);
+ return MakeVariant(value, ConstantInt::get(Type::getInt32Ty(ctx.Codegen.GetContext()), Index), ctx, block);
+ }
+#endif
+private:
+ void RegisterDependencies() const final {
+ DependsOn(ItemNode);
+ }
+
+ IComputationNode *const ItemNode;
+ const ui32 Index;
+};
+
+class TDictNode: public TMutableComputationNode<TDictNode> {
+ typedef TMutableComputationNode<TDictNode> TBaseComputation;
+public:
+ TDictNode(TComputationMutables& mutables,
+ std::vector<std::pair<IComputationNode*, IComputationNode*>>&& itemNodes,
+ const TKeyTypes& types, bool isTuple, TType* encodedType,
+ NUdf::IHash::TPtr hash, NUdf::IEquate::TPtr equate,
+ NUdf::ICompare::TPtr compare, bool isSorted)
+ : TBaseComputation(mutables)
+ , ItemNodes(std::move(itemNodes))
+ , Types(types)
+ , IsTuple(isTuple)
+ , EncodedType(encodedType)
+ , Hash(hash)
+ , Equate(equate)
+ , Compare(compare)
+ , IsSorted(isSorted)
+ {}
+
+ NUdf::TUnboxedValuePod DoCalculate(TComputationContext& ctx) const {
+ TKeyPayloadPairVector items;
+ items.reserve(ItemNodes.size());
+ for (const auto& node : ItemNodes) {
+ items.emplace_back(node.first->GetValue(ctx), node.second->GetValue(ctx));
+ }
+
+ std::optional<TValuePacker> packer;
+ if (EncodedType) {
+ packer.emplace(true, EncodedType);
+ }
+
+ if (IsSorted) {
+ const TSortedDictFiller filler = [&](TKeyPayloadPairVector& values) {
+ values = std::move(items);
+ };
+
+ return ctx.HolderFactory.CreateDirectSortedDictHolder(filler, Types, IsTuple, EDictSortMode::RequiresSorting,
+ true, EncodedType, Compare.Get(), Equate.Get());
+ } else {
+ THashedDictFiller filler =
+ [&items, &packer](TValuesDictHashMap& map) {
+ for (auto& value : items) {
+ auto key = std::move(value.first);
+ if (packer) {
+ key = MakeString(packer->Pack(key));
+ }
+
+ map.emplace(std::move(key), std::move(value.second));
+ }
+ };
+
+ return ctx.HolderFactory.CreateDirectHashedDictHolder(
+ filler, Types, IsTuple, true, EncodedType, Hash.Get(), Equate.Get());
+ }
+ }
+
+private:
+ void RegisterDependencies() const final {
+ for (const auto& itemNode : ItemNodes) {
+ DependsOn(itemNode.first);
+ DependsOn(itemNode.second);
+ }
+ }
+
+ const std::vector<std::pair<IComputationNode*, IComputationNode*>> ItemNodes;
+ const TKeyTypes Types;
+ const bool IsTuple;
+ TType* EncodedType;
+ NUdf::IHash::TPtr Hash;
+ NUdf::IEquate::TPtr Equate;
+ NUdf::ICompare::TPtr Compare;
+ const bool IsSorted;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// TNodeFactory
+//////////////////////////////////////////////////////////////////////////////
+TNodeFactory::TNodeFactory(TMemoryUsageInfo& memInfo, TComputationMutables& mutables)
+ : MemInfo(memInfo)
+ , Mutables(mutables)
+{
+}
+
+IComputationNode* TNodeFactory::CreateEmptyNode() const
+{
+ return new TEmptyNode(Mutables);
+}
+
+IComputationNode* TNodeFactory::CreateOptionalNode(IComputationNode* item) const
+{
+ return item ? new TOptionalNode(item) : CreateImmutableNode(NUdf::TUnboxedValuePod());
+}
+
+IComputationNode* TNodeFactory::CreateArrayNode(TComputationNodePtrVector&& values) const
+{
+ if (values.empty()) {
+ return new TEmptyNode(Mutables);
+ }
+
+ return new TArrayNode(Mutables, std::move(values));
+}
+
+IComputationNode* TNodeFactory::CreateDictNode(
+ std::vector<std::pair<IComputationNode*, IComputationNode*>>&& items,
+ const TKeyTypes& types, bool isTuple, TType* encodedType,
+ NUdf::IHash::TPtr hash, NUdf::IEquate::TPtr equate, NUdf::ICompare::TPtr compare, bool isSorted) const
+{
+ if (items.empty()) {
+ return new TEmptyNode(Mutables);
+ }
+
+ return new TDictNode(Mutables, std::move(items), types, isTuple, encodedType, hash, equate, compare, isSorted);
+}
+
+IComputationNode* TNodeFactory::CreateVariantNode(IComputationNode* item, ui32 index) const {
+ return new TVariantNode(Mutables, item, index);
+}
+
+IComputationNode* TNodeFactory::CreateTypeNode(TType* type) const {
+ return CreateImmutableNode(NUdf::TUnboxedValuePod(new TTypeHolder(&MemInfo, type)));
+}
+
+IComputationNode* TNodeFactory::CreateImmutableNode(NUdf::TUnboxedValue&& value) const {
+ return new TUnboxedImmutableCodegeneratorNode(&MemInfo, std::move(value));
+}
+
+} // namespace NMiniKQL
+} // namespace NKikimr
diff --git a/ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h b/ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h
new file mode 100644
index 0000000000..3c510319f7
--- /dev/null
+++ b/ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h
@@ -0,0 +1,62 @@
+#pragma once
+
+#include "mkql_computation_node_holders.h"
+
+#ifndef MKQL_DISABLE_CODEGEN
+namespace llvm {
+ class Value;
+ class BasicBlock;
+}
+#endif
+
+namespace NKikimr {
+namespace NMiniKQL {
+
+class TMemoryUsageInfo;
+
+#ifndef MKQL_DISABLE_CODEGEN
+struct TCodegenContext;
+#endif
+
+struct TContainerCacheOnContext : private TNonCopyable {
+ TContainerCacheOnContext(TComputationMutables& mutables);
+
+ NUdf::TUnboxedValuePod NewArray(TComputationContext& ctx, ui64 size, NUdf::TUnboxedValue*& items) const;
+#ifndef MKQL_DISABLE_CODEGEN
+ llvm::Value* GenNewArray(ui64 sz, llvm::Value* items, const TCodegenContext& ctx, llvm::BasicBlock*& block) const;
+#endif
+ const ui32 Index;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// TNodeFactory
+//////////////////////////////////////////////////////////////////////////////
+class TNodeFactory: private TNonCopyable
+{
+public:
+ TNodeFactory(TMemoryUsageInfo& memInfo, TComputationMutables& mutables);
+
+ IComputationNode* CreateTypeNode(TType* type) const;
+
+ IComputationNode* CreateImmutableNode(NUdf::TUnboxedValue&& value) const;
+
+ IComputationNode* CreateEmptyNode() const;
+
+ IComputationNode* CreateArrayNode(TComputationNodePtrVector&& items) const;
+
+ IComputationNode* CreateOptionalNode(IComputationNode* item) const;
+
+ IComputationNode* CreateDictNode(
+ std::vector<std::pair<IComputationNode*, IComputationNode*>>&& items,
+ const TKeyTypes& types, bool isTuple, TType* encodedType,
+ NUdf::IHash::TPtr hash, NUdf::IEquate::TPtr equate, NUdf::ICompare::TPtr compare, bool isSorted) const;
+
+ IComputationNode* CreateVariantNode(IComputationNode* item, ui32 index) const;
+
+private:
+ TMemoryUsageInfo& MemInfo;
+ TComputationMutables& Mutables;
+};
+
+} // namespace NMiniKQL
+} // namespace NKikimr
diff --git a/ydb/library/yql/minikql/computation/mkql_pack_bc.cpp b/ydb/library/yql/minikql/computation/mkql_pack_bc.cpp
new file mode 100644
index 0000000000..68441746c3
--- /dev/null
+++ b/ydb/library/yql/minikql/computation/mkql_pack_bc.cpp
@@ -0,0 +1,200 @@
+#include <util/generic/buffer.h>
+
+#include <ydb/library/yql/public/udf/udf_value.h>
+#include <ydb/library/yql/minikql/pack_num.h>
+#include <library/cpp/packedtypes/zigzag.h>
+
+#include <ydb/library/yql/minikql/defs.h>
+#include "mkql_optional_usage_mask.h"
+
+using namespace NKikimr;
+
+namespace NDetails {
+
+void PackUInt64(ui64 pos, ui64 val, TBuffer& buf) {
+ const auto actual = Pack64(val, buf.Data() + pos);
+ buf.Chop(pos + actual, MAX_PACKED64_SIZE - actual);
+}
+
+void PackUInt64(ui64 val, TBuffer& buf) {
+ size_t off = buf.Size();
+ buf.Advance(MAX_PACKED64_SIZE);
+ buf.EraseBack(MAX_PACKED64_SIZE - Pack64(val, buf.Data() + off));
+}
+
+void PackInt64(i64 val, TBuffer& buf) {
+ PackUInt64(ZigZagEncode(val), buf);
+}
+
+void PackUInt32(ui32 val, TBuffer& buf) {
+ size_t off = buf.Size();
+ buf.Advance(MAX_PACKED32_SIZE);
+ buf.EraseBack(MAX_PACKED32_SIZE - Pack32(val, buf.Data() + off));
+}
+
+void PackInt32(i32 val, TBuffer& buf) {
+ PackUInt32(ZigZagEncode(val), buf);
+}
+
+ui64 UnpackUInt64(TStringBuf& buf) {
+ ui64 res = 0;
+ size_t read = Unpack64(buf.data(), buf.length(), res);
+ MKQL_ENSURE(read, "Bad ui64 packed data");
+ buf.Skip(read);
+ return res;
+}
+
+i64 UnpackInt64(TStringBuf& buf) {
+ return ZigZagDecode(UnpackUInt64(buf));
+}
+
+ui32 UnpackUInt32(TStringBuf& buf) {
+ ui32 res = 0;
+ size_t read = Unpack32(buf.data(), buf.length(), res);
+ MKQL_ENSURE(read, "Bad ui32 packed data");
+ buf.Skip(read);
+ return res;
+}
+
+i32 UnpackInt32(TStringBuf& buf) {
+ return ZigZagDecode(UnpackUInt32(buf));
+}
+
+template <typename T>
+void PutRawData(T val, TBuffer& buf) {
+ buf.Append(reinterpret_cast<const char*>(&val), sizeof(T));
+}
+
+template <typename T>
+T GetRawData(TStringBuf& buf) {
+ MKQL_ENSURE(sizeof(T) <= buf.size(), "Bad packed data. Buffer too small");
+ T val = 0;
+ std::memcpy(&val, buf.data(), sizeof(T));
+ buf.Skip(sizeof(T));
+ return val;
+}
+
+}
+
+extern "C" void GetElement(const TRawUV* value, ui32 index, TRawUV* item) {
+ const auto result(reinterpret_cast<const NUdf::TUnboxedValuePod*>(value)->GetElement(index));
+ *item = reinterpret_cast<const TRawUV&>(result);
+}
+
+extern "C" bool FetchNextItem(const TRawUV* value, TRawUV* item) {
+ NUdf::TUnboxedValue fetch;
+ if (NUdf::EFetchStatus::Finish == reinterpret_cast<const NUdf::TUnboxedValuePod*>(value)->Fetch(fetch))
+ return false;
+ *item = reinterpret_cast<TRawUV&>(fetch);
+ return true;
+}
+
+extern "C" bool NextListItem(TRawUV* value, TRawUV* item) {
+ NUdf::TUnboxedValue next;
+ const auto v = reinterpret_cast<NUdf::TUnboxedValuePod*>(value);
+ if (!v->Next(next)) {
+ v->DeleteUnreferenced();
+ return false;
+ }
+
+ *item = reinterpret_cast<TRawUV&>(next);
+ return true;
+}
+
+extern "C" bool NextDictItem(TRawUV* value, TRawUV* first, TRawUV* second) {
+ NUdf::TUnboxedValue key, payload;
+ const auto v = reinterpret_cast<NUdf::TUnboxedValuePod*>(value);
+ if (!v->NextPair(key, payload)) {
+ v->DeleteUnreferenced();
+ return false;
+ }
+
+ *first = reinterpret_cast<TRawUV&>(key);
+ *second = reinterpret_cast<TRawUV&>(payload);
+ return true;
+}
+
+extern "C" void PackString(const TRawUV* value, ui64* buffer) {
+ const auto& stringRef = reinterpret_cast<const NUdf::TUnboxedValue*>(value)->AsStringRef();
+ NDetails::PackUInt32(stringRef.Size(), *reinterpret_cast<TBuffer*>(buffer));
+ reinterpret_cast<TBuffer*>(buffer)->Append(stringRef.Data(), stringRef.Size());
+}
+
+extern "C" void PackStringData(const TRawUV* value, ui64* buffer) {
+ const auto& stringRef = reinterpret_cast<const NUdf::TUnboxedValue*>(value)->AsStringRef();
+ reinterpret_cast<TBuffer*>(buffer)->Append(stringRef.Data(), stringRef.Size());
+}
+
+extern "C" void PackBool(const TRawUV* value, ui64* buffer) {
+ NDetails::PutRawData(reinterpret_cast<const NUdf::TUnboxedValue*>(value)->Get<bool>(), *reinterpret_cast<TBuffer*>(buffer));
+}
+
+extern "C" void PackByte(const TRawUV* value, ui64* buffer) {
+ NDetails::PutRawData(reinterpret_cast<const NUdf::TUnboxedValue*>(value)->Get<ui8>(), *reinterpret_cast<TBuffer*>(buffer));
+}
+
+extern "C" void PackInt32(const TRawUV* value, ui64* buffer) {
+ NDetails::PackInt32(reinterpret_cast<const NUdf::TUnboxedValue*>(value)->Get<i32>(), *reinterpret_cast<TBuffer*>(buffer));
+}
+
+extern "C" void PackUInt32(const TRawUV* value, ui64* buffer) {
+ NDetails::PackUInt32(reinterpret_cast<const NUdf::TUnboxedValue*>(value)->Get<ui32>(), *reinterpret_cast<TBuffer*>(buffer));
+}
+
+extern "C" void PackInt64(const TRawUV* value, ui64* buffer) {
+ NDetails::PackInt64(reinterpret_cast<const NUdf::TUnboxedValue*>(value)->Get<i64>(), *reinterpret_cast<TBuffer*>(buffer));
+}
+
+extern "C" void PackUInt64(const TRawUV* value, ui64* buffer) {
+ NDetails::PackUInt64(reinterpret_cast<const NUdf::TUnboxedValue*>(value)->Get<ui64>(), *reinterpret_cast<TBuffer*>(buffer));
+}
+
+extern "C" void PackFloat(const TRawUV* value, ui64* buffer) {
+ NDetails::PutRawData(reinterpret_cast<const NUdf::TUnboxedValue*>(value)->Get<float>(), *reinterpret_cast<TBuffer*>(buffer));
+}
+
+extern "C" void PackDouble(const TRawUV* value, ui64* buffer) {
+ NDetails::PutRawData(reinterpret_cast<const NUdf::TUnboxedValue*>(value)->Get<double>(), *reinterpret_cast<TBuffer*>(buffer));
+}
+
+extern "C" ui32 GetVariantItem(const TRawUV* value, TRawUV* item, ui64* buffer) {
+ const auto v = reinterpret_cast<const NUdf::TUnboxedValuePod*>(value);
+ const ui32 index = v->GetVariantIndex();
+ NDetails::PackUInt32(index, *reinterpret_cast<TBuffer*>(buffer));
+ const auto result(v->GetVariantItem());
+ *item = reinterpret_cast<const TRawUV&>(result);
+ return index;
+}
+
+extern "C" bool GetListIterator(const TRawUV* value, TRawUV* item, ui64* buffer) {
+ const auto v = reinterpret_cast<const NUdf::TUnboxedValuePod*>(value);
+ const auto size = v->GetListLength();
+ NDetails::PackUInt64(size, *reinterpret_cast<TBuffer*>(buffer));
+ if (!size)
+ return false;
+ const auto result(v->GetListIterator().Release());
+ *item = reinterpret_cast<const TRawUV&>(result);
+ return true;
+}
+
+extern "C" bool GetDictIterator(const TRawUV* value, TRawUV* item, ui64* buffer) {
+ const auto v = reinterpret_cast<const NUdf::TUnboxedValuePod*>(value);
+ const auto size = v->GetDictLength();
+ NDetails::PackUInt64(size, *reinterpret_cast<TBuffer*>(buffer));
+ if (!size)
+ return false;
+ const auto result(v->GetDictIterator().Release());
+ *item = reinterpret_cast<const TRawUV&>(result);
+ return true;
+}
+
+extern "C" bool GetOptionalValue(const TRawUV* value, TRawUV* item, ui64* mask) {
+ const auto v = reinterpret_cast<const NUdf::TUnboxedValuePod*>(value);
+ const bool has = bool(*v);
+ reinterpret_cast<NMiniKQL::NDetails::TOptionalUsageMask*>(mask)->SetNextEmptyOptional(!*v);
+ if (has) {
+ const auto result(v->GetOptionalValue());
+ *item = reinterpret_cast<const TRawUV&>(result);
+ }
+ return has;
+}
diff --git a/ydb/library/yql/minikql/computation/no_llvm/ya.make b/ydb/library/yql/minikql/computation/no_llvm/ya.make
index 7e86314b94..037cf17102 100644
--- a/ydb/library/yql/minikql/computation/no_llvm/ya.make
+++ b/ydb/library/yql/minikql/computation/no_llvm/ya.make
@@ -1,5 +1,10 @@
LIBRARY()
+OWNER(
+ g:yql
+ g:yql_ydb_core
+)
+
CXXFLAGS(-DMKQL_DISABLE_CODEGEN)
ADDINCL(GLOBAL ydb/library/yql/minikql/codegen/llvm_stub)
diff --git a/ydb/library/yql/minikql/computation/ut/ya.make b/ydb/library/yql/minikql/computation/ut/ya.make.inc
index b4c2ff659f..b2cc788e6d 100644
--- a/ydb/library/yql/minikql/computation/ut/ya.make
+++ b/ydb/library/yql/minikql/computation/ut/ya.make.inc
@@ -1,5 +1,3 @@
-UNITTEST_FOR(ydb/library/yql/minikql/computation/llvm)
-
FORK_SUBTESTS()
IF (SANITIZER_TYPE == "thread" OR WITH_VALGRIND)
@@ -11,6 +9,8 @@ ELSE()
SIZE(MEDIUM)
ENDIF()
+OWNER(g:yql)
+
SRCDIR(ydb/library/yql/minikql/computation)
SRCS(
@@ -27,12 +27,9 @@ SRCS(
PEERDIR(
contrib/libs/apache/arrow
library/cpp/threading/local_executor
- ydb/library/yql/minikql/comp_nodes/llvm
ydb/library/yql/parser/pg_wrapper
ydb/library/yql/public/udf/service/exception_policy
ydb/library/yql/dq/proto
)
YQL_LAST_ABI_VERSION()
-
-END()
diff --git a/ydb/library/yql/minikql/computation/ya.make b/ydb/library/yql/minikql/computation/ya.make
index 424ecfb86d..db6af57d68 100644
--- a/ydb/library/yql/minikql/computation/ya.make
+++ b/ydb/library/yql/minikql/computation/ya.make
@@ -1,8 +1,46 @@
+OWNER(
+ g:yql
+ g:yql_ydb_core
+)
+
+LIBRARY()
+
+SRCS(
+ mkql_block_builder.cpp
+ mkql_block_impl.cpp
+ mkql_block_reader.cpp
+ mkql_block_transport.cpp
+ mkql_computation_node.cpp
+ mkql_computation_node_holders.cpp
+ mkql_computation_node_impl.cpp
+ mkql_computation_node_pack.cpp
+ mkql_computation_node_pack_impl.cpp
+ mkql_custom_list.cpp
+ mkql_validate.cpp
+ mkql_value_builder.cpp
+ mkql_computation_pattern_cache.cpp
+ presort.cpp
+)
+
+PEERDIR(
+ contrib/libs/apache/arrow
+ ydb/library/yql/public/types
+ ydb/library/yql/parser/pg_wrapper/interface
+ ydb/library/yql/public/udf
+ ydb/library/yql/minikql/arrow
+)
+
+YQL_LAST_ABI_VERSION()
+
+END()
+
RECURSE(
llvm
+ llvm14
no_llvm
)
RECURSE_FOR_TESTS(
- ut
+ llvm/ut
+ llvm14/ut
)
diff --git a/ydb/library/yql/minikql/computation/ya.make.inc b/ydb/library/yql/minikql/computation/ya.make.inc
index 4e7de31cb8..9de6ecfff3 100644
--- a/ydb/library/yql/minikql/computation/ya.make.inc
+++ b/ydb/library/yql/minikql/computation/ya.make.inc
@@ -1,24 +1,19 @@
-SRCDIR(ydb/library/yql/minikql/computation)
-
-SRCS(
- mkql_block_builder.cpp
- mkql_block_impl.cpp
- mkql_block_reader.cpp
- mkql_block_transport.cpp
- mkql_computation_node.cpp
+OWNER(
+ g:yql
+ g:yql_ydb_core
+)
+
+
+INCLUDE(header.ya.make.inc)
+
+SET(ORIG_SRC_DIR ydb/library/yql/minikql/computation)
+
+SET(ORIG_SOURCES
mkql_computation_node_codegen.cpp
mkql_computation_node_graph.cpp
mkql_computation_node_graph_saveload.cpp
- mkql_computation_node_holders.cpp
- mkql_computation_node_impl.cpp
- mkql_computation_node_pack.cpp
- mkql_computation_node_pack_impl.cpp
- mkql_custom_list.cpp
+ mkql_computation_node_holders_codegen.cpp
mkql_llvm_base.cpp
- mkql_validate.cpp
- mkql_value_builder.cpp
- mkql_computation_pattern_cache.cpp
- presort.cpp
)
PEERDIR(
@@ -30,12 +25,25 @@ PEERDIR(
library/cpp/time_provider
ydb/library/yql/minikql
ydb/library/yql/minikql/arrow
+ ydb/library/yql/minikql/computation
ydb/library/yql/parser/pg_wrapper/interface
ydb/library/yql/public/udf
ydb/library/yql/utils
library/cpp/threading/future
)
-PROVIDES(mkql_computation)
-
YQL_LAST_ABI_VERSION()
+
+ADDINCL(
+ ${ORIG_SRC_DIR}
+)
+
+COPY(
+ WITH_CONTEXT
+ AUTO
+ FROM ${ORIG_SRC_DIR}
+ ${ORIG_SOURCES}
+ OUTPUT_INCLUDES ${BINDIR}/ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h
+)
+
+PROVIDES(MINIKQL_COMPUTATION)
diff --git a/ydb/library/yql/minikql/invoke_builtins/header.ya.make.inc b/ydb/library/yql/minikql/invoke_builtins/header.ya.make.inc
new file mode 100644
index 0000000000..0df83322e7
--- /dev/null
+++ b/ydb/library/yql/minikql/invoke_builtins/header.ya.make.inc
@@ -0,0 +1,44 @@
+INCLUDE_ONCE()
+
+INCLUDE(${ARCADIA_ROOT}/ydb/library/yql/minikql/computation/header.ya.make.inc)
+
+ADDINCL(
+ ${ARCADIA_BUILD_ROOT}/${MODDIR}
+ ${ARCADIA_BUILD_ROOT}/${MODDIR}/ydb/library/yql/minikql/invoke_builtins
+ ydb/library/yql/minikql/invoke_builtins
+)
+
+COPY_FILE(TEXT
+ ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.h.txt
+ ${BINDIR}/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.h
+ OUTPUT_INCLUDES
+ ydb/library/yql/minikql/computation/mkql_computation_node_codegen.h
+ ydb/library/yql/minikql/codegen/codegen.h
+)
+
+COPY_FILE(TEXT
+ ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen_llvm.h.txt
+ ${BINDIR}/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen_llvm.h
+ OUTPUT_INCLUDES
+ llvm/IR/Constants.h
+ llvm/IR/DerivedTypes.h
+ llvm/IR/Instructions.h
+)
+
+COPY_FILE(TEXT
+ ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl.h.txt
+ ${BINDIR}/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl.h
+ OUTPUT_INCLUDES
+ mkql_builtins_impl_common.h
+ mkql_builtins.h
+ mkql_builtins_codegen.h
+ mkql_builtins_codegen_llvm.h
+)
+
+COPY_FILE(TEXT
+ ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h.txt
+ ${BINDIR}/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h
+ OUTPUT_INCLUDES
+ mkql_builtins_impl.h
+)
+
diff --git a/ydb/library/yql/minikql/invoke_builtins/llvm/ut/ya.make b/ydb/library/yql/minikql/invoke_builtins/llvm/ut/ya.make
new file mode 100644
index 0000000000..50448637f3
--- /dev/null
+++ b/ydb/library/yql/minikql/invoke_builtins/llvm/ut/ya.make
@@ -0,0 +1,19 @@
+UNITTEST()
+
+SRCDIR(ydb/library/yql/minikql/invoke_builtins/llvm)
+
+PEERDIR(
+ ydb/library/yql/minikql/codegen/llvm
+ ydb/library/yql/minikql/invoke_builtins/llvm
+ ydb/library/yql/minikql/computation/llvm
+ contrib/libs/llvm12/lib/IR
+ contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm12/lib/Linker
+ contrib/libs/llvm12/lib/Target/X86
+ contrib/libs/llvm12/lib/Target/X86/AsmParser
+ contrib/libs/llvm12/lib/Transforms/IPO
+)
+
+INCLUDE(../../ut/ya.make.inc)
+
+END() \ No newline at end of file
diff --git a/ydb/library/yql/minikql/invoke_builtins/llvm/ya.make b/ydb/library/yql/minikql/invoke_builtins/llvm/ya.make
index e73006e002..582e335163 100644
--- a/ydb/library/yql/minikql/invoke_builtins/llvm/ya.make
+++ b/ydb/library/yql/minikql/invoke_builtins/llvm/ya.make
@@ -3,7 +3,7 @@ LIBRARY()
NO_COMPILER_WARNINGS()
PEERDIR(
- ydb/library/yql/minikql/codegen
+ ydb/library/yql/minikql/codegen/llvm
ydb/library/yql/minikql/computation/llvm
contrib/libs/llvm12/lib/IR
contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
@@ -15,4 +15,10 @@ PEERDIR(
INCLUDE(../ya.make.inc)
+PROVIDES(mkql_invoke_builtins)
+
END()
+
+RECURSE_FOR_TESTS(
+ ut
+) \ No newline at end of file
diff --git a/ydb/library/yql/minikql/invoke_builtins/llvm14/ut/ya.make b/ydb/library/yql/minikql/invoke_builtins/llvm14/ut/ya.make
new file mode 100644
index 0000000000..6d34eb4771
--- /dev/null
+++ b/ydb/library/yql/minikql/invoke_builtins/llvm14/ut/ya.make
@@ -0,0 +1,19 @@
+UNITTEST()
+
+SRCDIR(ydb/library/yql/minikql/invoke_builtins/llvm14)
+
+PEERDIR(
+ ydb/library/yql/minikql/codegen/llvm14
+ ydb/library/yql/minikql/invoke_builtins/llvm14
+ ydb/library/yql/minikql/computation/llvm14
+ contrib/libs/llvm14/lib/IR
+ contrib/libs/llvm14/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm14/lib/Linker
+ contrib/libs/llvm14/lib/Target/X86
+ contrib/libs/llvm14/lib/Target/X86/AsmParser
+ contrib/libs/llvm14/lib/Transforms/IPO
+)
+
+INCLUDE(../../ut/ya.make.inc)
+
+END() \ No newline at end of file
diff --git a/ydb/library/yql/minikql/invoke_builtins/llvm14/ya.make b/ydb/library/yql/minikql/invoke_builtins/llvm14/ya.make
new file mode 100644
index 0000000000..dc02aeea21
--- /dev/null
+++ b/ydb/library/yql/minikql/invoke_builtins/llvm14/ya.make
@@ -0,0 +1,29 @@
+LIBRARY()
+
+OWNER(
+ g:yql
+ g:yql_ydb_core
+)
+
+NO_COMPILER_WARNINGS()
+
+PEERDIR(
+ ydb/library/yql/minikql/codegen/llvm14
+ ydb/library/yql/minikql/computation/llvm14
+ contrib/libs/llvm14/lib/IR
+ contrib/libs/llvm14/lib/ExecutionEngine/MCJIT
+ contrib/libs/llvm14/lib/Linker
+ contrib/libs/llvm14/lib/Target/X86
+ contrib/libs/llvm14/lib/Target/X86/AsmParser
+ contrib/libs/llvm14/lib/Transforms/IPO
+)
+
+INCLUDE(../ya.make.inc)
+
+PROVIDES(mkql_invoke_builtins)
+
+END()
+
+RECURSE_FOR_TESTS(
+ ut
+)
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins.cpp
index 8bca6fdc39..987f6c282d 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins.cpp
@@ -1,5 +1,5 @@
#include "mkql_builtins.h"
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
#include "mkql_builtins_compare.h"
#include "mkql_builtins_string_kernels.h"
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_abs.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_abs.cpp
index 7d8f5b25c3..e5d7731fc2 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_abs.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_abs.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include <cmath>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_add.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_add.cpp
index d6c142642b..f50ef29857 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_add.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_add.cpp
@@ -1,6 +1,6 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
#include "mkql_builtins_datetime.h"
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitand.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitand.cpp
index cc5fd9dfd5..a5a2967bae 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitand.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitand.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitnot.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitnot.cpp
index ea4b552600..864e68fed1 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitnot.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitnot.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitor.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitor.cpp
index 757cf58f04..5650ccbc5b 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitor.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitor.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitxor.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitxor.cpp
index 7c88f90143..018faee16a 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitxor.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_bitxor.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_byteat.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_byteat.cpp
index 542159735a..b7fbf1e5d3 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_byteat.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_byteat.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.cpp
index 62f9ba9430..c86e44ac4e 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.cpp
@@ -1,9 +1,7 @@
-#include "mkql_builtins_codegen.h"
+#include "mkql_builtins_codegen.h" // Y_IGNORE
#ifndef MKQL_DISABLE_CODEGEN
-#include <llvm/IR/Constants.h>
-#include <llvm/IR/DerivedTypes.h>
-#include <llvm/IR/Instructions.h>
+#include "mkql_builtins_codegen_llvm.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.h b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.h.txt
index 4e46a4d31e..4e46a4d31e 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.h
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen.h.txt
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen_llvm.h.txt b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen_llvm.h.txt
new file mode 100644
index 0000000000..fd7726b7be
--- /dev/null
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_codegen_llvm.h.txt
@@ -0,0 +1,5 @@
+#pragma once
+
+#include <llvm/IR/Constants.h>
+#include <llvm/IR/DerivedTypes.h>
+#include <llvm/IR/Instructions.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_compare.h b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_compare.h
index 3798913e20..098899f53c 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_compare.h
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_compare.h
@@ -1,6 +1,6 @@
#pragma once
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_concat.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_concat.cpp
index 543d9b2f9c..190f0b9396 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_concat.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_concat.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_string_util.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_convert.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_convert.cpp
index 54f96f43d7..4ea6062cc0 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_convert.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_convert.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include <ydb/library/yql/public/udf/udf_value_builder.h>
#include <util/generic/ylimits.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_countbits.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_countbits.cpp
index 23f269d3b1..d71b06251d 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_countbits.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_countbits.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE // Y_IGNORE
#include <library/cpp/pop_count/popcount.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_datetime.h b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_datetime.h
index d19a3178dc..31f7adc15c 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_datetime.h
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_datetime.h
@@ -1,6 +1,6 @@
#pragma once
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_dec.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_dec.cpp
index 06bfa421ec..3400b70909 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_dec.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_dec.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.cpp
index f89b2e7d9a..bd11f4198a 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h.txt
index 2289a5f4f6..1ef75eb006 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h.txt
@@ -1,6 +1,6 @@
#pragma once
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_div.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_div.cpp
index d130c24cb4..880321f8f0 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_div.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_div.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
#include "mkql_builtins_datetime.h"
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_equals.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_equals.cpp
index 01c4331a2d..806f9152b6 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_equals.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_equals.cpp
@@ -1,6 +1,6 @@
#include "mkql_builtins_compare.h"
#include "mkql_builtins_datetime.h"
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include "mkql_builtins_string_kernels.h"
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_find.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_find.cpp
index aece421d61..b085f6b93f 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_find.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_find.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_greater.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_greater.cpp
index e5f24b672b..95bf8db40c 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_greater.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_greater.cpp
@@ -1,6 +1,6 @@
#include "mkql_builtins_compare.h"
#include "mkql_builtins_datetime.h"
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include "mkql_builtins_string_kernels.h"
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_greater_or_equal.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_greater_or_equal.cpp
index 27b919b7b5..26b29e75f0 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_greater_or_equal.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_greater_or_equal.cpp
@@ -1,6 +1,6 @@
#include "mkql_builtins_compare.h"
#include "mkql_builtins_datetime.h"
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include "mkql_builtins_string_kernels.h"
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl.h b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl.h.txt
index 5f920e96e1..9f505aee3d 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl.h
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl.h.txt
@@ -1,20 +1,9 @@
#pragma once
-#include <ydb/library/yql/minikql/defs.h>
-#include <ydb/library/yql/public/udf/udf_value.h>
-#include <ydb/library/yql/public/udf/udf_types.h>
-#include <ydb/library/yql/minikql/mkql_function_metadata.h>
-#include <ydb/library/yql/minikql/arrow/arrow_defs.h>
-#include <ydb/library/yql/minikql/arrow/arrow_util.h>
-#include <util/string/cast.h>
-
+#include "mkql_builtins_impl_common.h"
#include "mkql_builtins.h"
#include "mkql_builtins_codegen.h"
-#include <arrow/compute/function.h>
-#include <arrow/util/bit_util.h>
-#include <arrow/util/bitmap_ops.h>
-
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl_common.h b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl_common.h
new file mode 100644
index 0000000000..34f56ba23e
--- /dev/null
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl_common.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include <ydb/library/yql/minikql/defs.h>
+#include <ydb/library/yql/public/udf/udf_value.h>
+#include <ydb/library/yql/public/udf/udf_types.h>
+#include <ydb/library/yql/minikql/mkql_function_metadata.h>
+#include <ydb/library/yql/minikql/arrow/arrow_defs.h>
+#include <ydb/library/yql/minikql/arrow/arrow_util.h>
+#include <util/string/cast.h>
+
+#include <arrow/compute/function.h>
+#include <arrow/util/bit_util.h>
+#include <arrow/util/bitmap_ops.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_inc.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_inc.cpp
index b210c50b6a..4e0a56e0c6 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_inc.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_inc.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_invprestr.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_invprestr.cpp
index 03f19f2382..e256e79672 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_invprestr.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_invprestr.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_string_util.h>
#include <ydb/library/yql/minikql/computation/presort.h>
#include <util/thread/singleton.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_less.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_less.cpp
index ad60c14c61..5923d93f7a 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_less.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_less.cpp
@@ -1,6 +1,6 @@
#include "mkql_builtins_compare.h"
#include "mkql_builtins_datetime.h"
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include "mkql_builtins_string_kernels.h"
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_less_or_equal.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_less_or_equal.cpp
index bdb2f5a5d3..27d5c0d7a3 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_less_or_equal.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_less_or_equal.cpp
@@ -1,6 +1,6 @@
#include "mkql_builtins_compare.h"
#include "mkql_builtins_datetime.h"
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include "mkql_builtins_string_kernels.h"
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_max.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_max.cpp
index 5ab743bf53..18d390846d 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_max.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_max.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include "mkql_builtins_compare.h"
#include <cmath>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_min.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_min.cpp
index 9d85b84f74..e197fada2f 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_min.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_min.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include "mkql_builtins_compare.h"
#include <cmath>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_minus.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_minus.cpp
index 4253be8619..aad3e5ccd7 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_minus.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_minus.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_mod.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_mod.cpp
index c9ee042ddd..6e08f29b5e 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_mod.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_mod.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
#include <cmath>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_mul.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_mul.cpp
index 6da082824a..36cd070df6 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_mul.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_mul.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
#include "mkql_builtins_datetime.h"
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_nanvl.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_nanvl.cpp
index ddc12b8ece..8b89205b32 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_nanvl.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_nanvl.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include <cmath>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_not_equals.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_not_equals.cpp
index b896aed350..7cd305b76e 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_not_equals.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_not_equals.cpp
@@ -1,6 +1,6 @@
#include "mkql_builtins_compare.h"
#include "mkql_builtins_datetime.h"
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include "mkql_builtins_string_kernels.h"
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_plus.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_plus.cpp
index 49979a435a..8251057935 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_plus.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_plus.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_rotleft.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_rotleft.cpp
index 208428e13b..42ee045f85 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_rotleft.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_rotleft.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_rotright.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_rotright.cpp
index 4694c266df..56305289ee 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_rotright.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_rotright.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_shiftleft.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_shiftleft.cpp
index 02231f46cb..7096fd4a74 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_shiftleft.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_shiftleft.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_shiftright.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_shiftright.cpp
index 43bfb6ad98..f35c85fcc3 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_shiftright.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_shiftright.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_string_kernels.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_string_kernels.cpp
index a291f463eb..f7a1b20cb8 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_string_kernels.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_string_kernels.cpp
@@ -1,5 +1,5 @@
#include "mkql_builtins_string_kernels.h"
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
namespace NKikimr {
namespace NMiniKQL {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_sub.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_sub.cpp
index bd17921738..2b04e4ea58 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_sub.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_sub.cpp
@@ -1,6 +1,6 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
#include "mkql_builtins_datetime.h"
-#include "mkql_builtins_decimal.h"
+#include "mkql_builtins_decimal.h" // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_type_ops.h>
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_substring.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_substring.cpp
index 6411f57817..c29f3bb5d5 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_substring.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_substring.cpp
@@ -1,4 +1,4 @@
-#include "mkql_builtins_impl.h"
+#include "mkql_builtins_impl.h" // Y_IGNORE
#include <ydb/library/yql/minikql/mkql_string_util.h>
namespace NKikimr {
diff --git a/ydb/library/yql/minikql/invoke_builtins/ut/ya.make.inc b/ydb/library/yql/minikql/invoke_builtins/ut/ya.make.inc
new file mode 100644
index 0000000000..eee7440b0b
--- /dev/null
+++ b/ydb/library/yql/minikql/invoke_builtins/ut/ya.make.inc
@@ -0,0 +1,38 @@
+FORK_SUBTESTS()
+
+IF (SANITIZER_TYPE == "thread" OR WITH_VALGRIND)
+ TIMEOUT(1800)
+ SIZE(LARGE)
+ TAG(ya:fat)
+ELSE()
+ TIMEOUT(600)
+ SIZE(MEDIUM)
+ENDIF()
+
+OWNER(g:yql)
+
+PEERDIR(
+ ydb/library/yql/public/udf
+ ydb/library/yql/public/udf/service/exception_policy
+ ydb/library/yql/sql/pg_dummy
+)
+
+YQL_LAST_ABI_VERSION()
+
+SET(ORIG_SRC_DIR ydb/library/yql/minikql/invoke_builtins)
+
+SET(ORIG_SOURCES
+ mkql_builtins_ut.cpp
+)
+
+ADDINCL(
+ ${ORIG_SRC_DIR}
+)
+
+COPY(
+ AUTO
+ FROM ${ORIG_SRC_DIR}
+ ${ORIG_SOURCES}
+ OUTPUT_INCLUDES
+ mkql_builtins.h
+)
diff --git a/ydb/library/yql/minikql/invoke_builtins/ya.make.inc b/ydb/library/yql/minikql/invoke_builtins/ya.make.inc
index c03be1e5ce..59711d7c0a 100644
--- a/ydb/library/yql/minikql/invoke_builtins/ya.make.inc
+++ b/ydb/library/yql/minikql/invoke_builtins/ya.make.inc
@@ -1,6 +1,8 @@
-SRCDIR(ydb/library/yql/minikql/invoke_builtins)
+INCLUDE(header.ya.make.inc)
-SRCS(
+SET(ORIG_SRC_DIR ydb/library/yql/minikql/invoke_builtins)
+
+SET(ORIG_SOURCES
mkql_builtins.cpp
mkql_builtins.h
mkql_builtins_abs.cpp
@@ -18,7 +20,6 @@ SRCS(
mkql_builtins_dec.cpp
mkql_builtins_div.cpp
mkql_builtins_find.cpp
- mkql_builtins_impl.h
mkql_builtins_inc.cpp
mkql_builtins_invprestr.cpp
mkql_builtins_max.cpp
@@ -55,4 +56,15 @@ PEERDIR(
YQL_LAST_ABI_VERSION()
-PROVIDES(mkql_invoke_builtins)
+ADDINCL(
+ ${ORIG_SRC_DIR}
+)
+
+COPY(
+ AUTO
+ FROM ${ORIG_SRC_DIR}
+ ${ORIG_SOURCES}
+ OUTPUT_INCLUDES
+ ${BINDIR}/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_impl.h
+ ${BINDIR}/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_decimal.h
+)
diff --git a/ydb/library/yql/parser/pg_catalog/catalog.h b/ydb/library/yql/parser/pg_catalog/catalog.h
index cea4371b7c..ee527410bb 100644
--- a/ydb/library/yql/parser/pg_catalog/catalog.h
+++ b/ydb/library/yql/parser/pg_catalog/catalog.h
@@ -1,5 +1,5 @@
#pragma once
-#include "ydb/library/yql/public/issue/yql_issue.h"
+#include <ydb/library/yql/public/issue/yql_issue.h>
#include <util/generic/maybe.h>
#include <util/generic/string.h>
#include <util/generic/vector.h>
diff --git a/ydb/library/yql/parser/pg_wrapper/ut/ya.make b/ydb/library/yql/parser/pg_wrapper/ut/ya.make
index 5cff7be9a2..c4a4437072 100644
--- a/ydb/library/yql/parser/pg_wrapper/ut/ya.make
+++ b/ydb/library/yql/parser/pg_wrapper/ut/ya.make
@@ -27,7 +27,7 @@ PEERDIR(
ydb/library/yql/public/udf/service/exception_policy
ydb/library/yql/minikql/comp_nodes/llvm
ydb/library/yql/parser/pg_catalog
- ydb/library/yql/minikql/codegen
+ ydb/library/yql/minikql/codegen/llvm
library/cpp/resource
)
diff --git a/ydb/library/yql/parser/pg_wrapper/ya.make b/ydb/library/yql/parser/pg_wrapper/ya.make
index 7632b8ae55..865c83bedc 100644
--- a/ydb/library/yql/parser/pg_wrapper/ya.make
+++ b/ydb/library/yql/parser/pg_wrapper/ya.make
@@ -4,6 +4,8 @@ PROVIDES(
yql_pg_runtime
)
+CXXFLAGS(-DMKQL_DISABLE_CODEGEN)
+
YQL_LAST_ABI_VERSION()
ADDINCL(
@@ -66,7 +68,7 @@ PEERDIR(
library/cpp/yson
ydb/library/yql/core
ydb/library/yql/minikql/arrow
- ydb/library/yql/minikql/computation/llvm
+ ydb/library/yql/minikql/computation
ydb/library/yql/parser/pg_catalog
ydb/library/yql/providers/common/codec
ydb/library/yql/public/issue
diff --git a/ydb/library/yql/providers/common/codec/ya.make b/ydb/library/yql/providers/common/codec/ya.make
index 0691522c03..012ae75ccf 100644
--- a/ydb/library/yql/providers/common/codec/ya.make
+++ b/ydb/library/yql/providers/common/codec/ya.make
@@ -15,7 +15,7 @@ SRCS(
)
PEERDIR(
- ydb/library/yql/minikql/computation/llvm
+ ydb/library/yql/minikql/computation
ydb/library/yql/parser/pg_wrapper/interface
ydb/library/yql/providers/common/mkql
library/cpp/yson/node
diff --git a/ydb/library/yql/providers/common/comp_nodes/ya.make b/ydb/library/yql/providers/common/comp_nodes/ya.make
index c244a9532c..e829efe3e8 100644
--- a/ydb/library/yql/providers/common/comp_nodes/ya.make
+++ b/ydb/library/yql/providers/common/comp_nodes/ya.make
@@ -43,7 +43,7 @@ PEERDIR(
IF (NOT MKQL_DISABLE_CODEGEN)
PEERDIR(
- ydb/library/yql/minikql/codegen
+ ydb/library/yql/minikql/codegen/llvm
contrib/libs/llvm12/lib/IR
contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
contrib/libs/llvm12/lib/Linker
diff --git a/ydb/library/yql/providers/yt/codec/codegen/ya.make b/ydb/library/yql/providers/yt/codec/codegen/ya.make
index 422511b8da..eb25e02da1 100644
--- a/ydb/library/yql/providers/yt/codec/codegen/ya.make
+++ b/ydb/library/yql/providers/yt/codec/codegen/ya.make
@@ -15,14 +15,7 @@ PEERDIR(
IF (NOT MKQL_DISABLE_CODEGEN)
PEERDIR(
- contrib/libs/llvm12/lib/IR
- contrib/libs/llvm12/lib/ExecutionEngine/MCJIT
- contrib/libs/llvm12/lib/Linker
- contrib/libs/llvm12/lib/Support
- contrib/libs/llvm12/lib/Target/X86
- contrib/libs/llvm12/lib/Target/X86/AsmParser
- contrib/libs/llvm12/lib/Transforms/IPO
- ydb/library/yql/minikql/codegen
+ ydb/library/yql/minikql/codegen/llvm
)
LLVM_BC(
yt_codec_bc.cpp
diff --git a/ydb/library/yql/providers/yt/comp_nodes/dq/ya.make b/ydb/library/yql/providers/yt/comp_nodes/dq/ya.make
index 48ae5d6ea1..39d9e4c1aa 100644
--- a/ydb/library/yql/providers/yt/comp_nodes/dq/ya.make
+++ b/ydb/library/yql/providers/yt/comp_nodes/dq/ya.make
@@ -43,6 +43,8 @@ SRCS(
dq_yt_writer.cpp
)
+INCLUDE(../../../../minikql/computation/header.ya.make.inc)
+
YQL_LAST_ABI_VERSION()
diff --git a/ydb/library/yql/providers/yt/comp_nodes/ya.make b/ydb/library/yql/providers/yt/comp_nodes/ya.make
index 0e5c47c6db..d4cde6e54b 100644
--- a/ydb/library/yql/providers/yt/comp_nodes/ya.make
+++ b/ydb/library/yql/providers/yt/comp_nodes/ya.make
@@ -22,6 +22,8 @@ PEERDIR(
ydb/library/yql/providers/yt/expr_nodes
)
+# INCLUDE(../../../minikql/computation/header.ya.make.inc)
+
YQL_LAST_ABI_VERSION()
END()
diff --git a/ydb/library/yql/providers/yt/gateway/native/yql_yt_lambda_builder.cpp b/ydb/library/yql/providers/yt/gateway/native/yql_yt_lambda_builder.cpp
index 8575067cc1..1ca94b87a9 100644
--- a/ydb/library/yql/providers/yt/gateway/native/yql_yt_lambda_builder.cpp
+++ b/ydb/library/yql/providers/yt/gateway/native/yql_yt_lambda_builder.cpp
@@ -25,6 +25,7 @@
#include <ydb/library/yql/minikql/comp_nodes/mkql_factories.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node.h>
#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h>
+#include <ydb/library/yql/minikql/computation/mkql_computation_node_holders_codegen.h>
#include <ydb/library/yql/utils/yql_panic.h>