aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormonster <monster@ydb.tech>2022-10-04 14:16:50 +0300
committermonster <monster@ydb.tech>2022-10-04 14:16:50 +0300
commit4780349153062fe2a64aa5bd878b927bdc532d94 (patch)
treef949a8e639271c4035eff6244e47ba757960e3d1
parentcd0a32136bce815fff11b9787ab5b058c2cce7d6 (diff)
downloadydb-4780349153062fe2a64aa5bd878b927bdc532d94.tar.gz
initial pg types support in local db
-rw-r--r--ydb/core/actorlib_impl/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/actorlib_impl/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/blobstorage/dsproxy/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/blobstorage/dsproxy/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.linux.txt2
-rw-r--r--ydb/core/blobstorage/nodewarden/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/blobstorage/nodewarden/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.linux.txt2
-rw-r--r--ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/blobstorage/ut_vdisk/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/blobstorage/ut_vdisk/CMakeLists.linux.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/client/minikql_compile/db_key_resolver.h2
-rw-r--r--ydb/core/client/minikql_compile/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/client/minikql_compile/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/client/minikql_compile/yql_expr_minikql.cpp21
-rw-r--r--ydb/core/client/minikql_compile/yql_expr_minikql_compile_ut.cpp12
-rw-r--r--ydb/core/client/minikql_result_lib/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/client/minikql_result_lib/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/client/scheme_cache_lib/yql_db_scheme_resolver.cpp2
-rw-r--r--ydb/core/client/server/CMakeLists.txt2
-rw-r--r--ydb/core/client/server/msgbus_server_db.cpp14
-rw-r--r--ydb/core/client/server/msgbus_server_s3_listing.cpp13
-rw-r--r--ydb/core/client/server/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/client/server/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/client/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/client/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/cms/console/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/cms/console/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/cms/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/cms/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/cms/ut_sentinel/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/cms/ut_sentinel/CMakeLists.linux.txt2
-rw-r--r--ydb/core/engine/kikimr_program_builder.cpp58
-rw-r--r--ydb/core/engine/kikimr_program_builder.h22
-rw-r--r--ydb/core/engine/kikimr_program_builder_ut.cpp192
-rw-r--r--ydb/core/engine/minikql/flat_local_tx_read_columns.h8
-rw-r--r--ydb/core/engine/minikql/minikql_engine_host.cpp41
-rw-r--r--ydb/core/engine/minikql/minikql_engine_host.h2
-rw-r--r--ydb/core/engine/mkql_engine_flat.cpp6
-rw-r--r--ydb/core/engine/mkql_engine_flat_extfunc.cpp17
-rw-r--r--ydb/core/engine/mkql_engine_flat_ut.cpp464
-rw-r--r--ydb/core/engine/mkql_keys.cpp49
-rw-r--r--ydb/core/engine/mkql_keys.h4
-rw-r--r--ydb/core/engine/mkql_proto.cpp52
-rw-r--r--ydb/core/engine/mkql_proto.h4
-rw-r--r--ydb/core/engine/mkql_proto_ut.cpp30
-rw-r--r--ydb/core/engine/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/engine/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/core/formats/arrow_batch_builder.cpp8
-rw-r--r--ydb/core/formats/arrow_batch_builder.h8
-rw-r--r--ydb/core/formats/arrow_helpers.cpp28
-rw-r--r--ydb/core/formats/arrow_helpers.h16
-rw-r--r--ydb/core/formats/clickhouse_block.cpp27
-rw-r--r--ydb/core/formats/factory.h2
-rw-r--r--ydb/core/formats/switch_type.h7
-rw-r--r--ydb/core/formats/ut_arrow.cpp89
-rw-r--r--ydb/core/grpc_services/rpc_import_data.cpp8
-rw-r--r--ydb/core/grpc_services/rpc_kh_describe.cpp10
-rw-r--r--ydb/core/grpc_services/rpc_load_rows.cpp21
-rw-r--r--ydb/core/grpc_services/rpc_log_store.cpp8
-rw-r--r--ydb/core/grpc_services/rpc_long_tx.cpp7
-rw-r--r--ydb/core/grpc_services/rpc_read_columns.cpp18
-rw-r--r--ydb/core/grpc_services/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/grpc_services/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/grpc_streaming/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/grpc_streaming/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/health_check/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/health_check/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/io_formats/csv.h4
-rw-r--r--ydb/core/io_formats/csv_arrow.cpp2
-rw-r--r--ydb/core/io_formats/csv_ydb_dump.cpp16
-rw-r--r--ydb/core/kesus/proxy/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/kesus/proxy/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.linux.txt2
-rw-r--r--ydb/core/kesus/tablet/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/kesus/tablet/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/keyvalue/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/keyvalue/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/kqp/common/CMakeLists.txt1
-rw-r--r--ydb/core/kqp/common/kqp_resolve.cpp4
-rw-r--r--ydb/core/kqp/common/kqp_resolve.h14
-rw-r--r--ydb/core/kqp/common/kqp_types.cpp49
-rw-r--r--ydb/core/kqp/common/kqp_types.h16
-rw-r--r--ydb/core/kqp/compile/kqp_compile.cpp6
-rw-r--r--ydb/core/kqp/compile/kqp_mkql_compiler.cpp25
-rw-r--r--ydb/core/kqp/compute_actor/kqp_compute_state.cpp8
-rw-r--r--ydb/core/kqp/compute_actor/kqp_compute_state.h6
-rw-r--r--ydb/core/kqp/compute_actor/kqp_scan_compute_actor.cpp18
-rw-r--r--ydb/core/kqp/executer/kqp_data_executer.cpp26
-rw-r--r--ydb/core/kqp/executer/kqp_partition_helper.cpp28
-rw-r--r--ydb/core/kqp/executer/kqp_partition_helper.h8
-rw-r--r--ydb/core/kqp/executer/kqp_scan_executer.cpp25
-rw-r--r--ydb/core/kqp/executer/kqp_table_resolver.cpp2
-rw-r--r--ydb/core/kqp/executer/kqp_tasks_graph.cpp6
-rw-r--r--ydb/core/kqp/executer/kqp_tasks_graph.h10
-rw-r--r--ydb/core/kqp/executer/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/kqp/executer/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/core/kqp/kqp_metadata_loader.cpp4
-rw-r--r--ydb/core/kqp/node/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/kqp/node/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp4
-rw-r--r--ydb/core/kqp/provider/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/kqp/provider/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_gateway.cpp9
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_gateway.h19
-rw-r--r--ydb/core/kqp/proxy/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/kqp/proxy/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/core/kqp/rm/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/kqp/rm/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/core/kqp/runtime/kqp_compute.h2
-rw-r--r--ydb/core/kqp/runtime/kqp_output_stream.cpp6
-rw-r--r--ydb/core/kqp/runtime/kqp_read_table.cpp7
-rw-r--r--ydb/core/kqp/runtime/kqp_runtime_impl.h2
-rw-r--r--ydb/core/kqp/runtime/kqp_scan_data.cpp35
-rw-r--r--ydb/core/kqp/runtime/kqp_scan_data.h2
-rw-r--r--ydb/core/kqp/runtime/kqp_scan_data_ut.cpp45
-rw-r--r--ydb/core/kqp/runtime/kqp_stream_lookup_actor.cpp6
-rw-r--r--ydb/core/kqp/runtime/kqp_tasks_runner.cpp12
-rw-r--r--ydb/core/kqp/runtime/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/kqp/runtime/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/kqp/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/kqp/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/kqp/ut/fat/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/kqp/ut/fat/CMakeLists.linux.txt1
-rw-r--r--ydb/core/kqp/ut/pg/CMakeLists.darwin.txt51
-rw-r--r--ydb/core/kqp/ut/pg/CMakeLists.linux.txt55
-rw-r--r--ydb/core/kqp/ut/pg/CMakeLists.txt13
-rw-r--r--ydb/core/kqp/ut/pg/kqp_pg_ut.cpp162
-rw-r--r--ydb/core/kqp/ut/spilling/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/kqp/ut/spilling/CMakeLists.linux.txt1
-rw-r--r--ydb/core/mind/address_classification/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/mind/address_classification/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.linux.txt2
-rw-r--r--ydb/core/mind/hive/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/mind/hive/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/mind/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/mind/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/mind/ut_fat/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/mind/ut_fat/CMakeLists.linux.txt2
-rw-r--r--ydb/core/persqueue/pq_impl.cpp9
-rw-r--r--ydb/core/persqueue/pq_impl.h2
-rw-r--r--ydb/core/persqueue/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/persqueue/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/persqueue/ut_slow/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/persqueue/ut_slow/CMakeLists.linux.txt2
-rw-r--r--ydb/core/protos/CMakeLists.txt1
-rw-r--r--ydb/core/protos/flat_scheme_op.proto3
-rw-r--r--ydb/core/protos/flat_tx_scheme.proto2
-rw-r--r--ydb/core/protos/kqp.proto2
-rw-r--r--ydb/core/protos/pqconfig.proto2
-rw-r--r--ydb/core/protos/scheme_log.proto2
-rw-r--r--ydb/core/protos/tx_datashard.proto5
-rw-r--r--ydb/core/protos/type_info.proto6
-rw-r--r--ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.linux.txt2
-rw-r--r--ydb/core/quoter/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/quoter/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/scheme/CMakeLists.txt2
-rw-r--r--ydb/core/scheme/scheme_borders.cpp2
-rw-r--r--ydb/core/scheme/scheme_borders.h2
-rw-r--r--ydb/core/scheme/scheme_borders_ut.cpp6
-rw-r--r--ydb/core/scheme/scheme_tablecell.cpp28
-rw-r--r--ydb/core/scheme/scheme_tablecell.h33
-rw-r--r--ydb/core/scheme/scheme_tablecell_ut.cpp93
-rw-r--r--ydb/core/scheme/scheme_tabledefs.cpp8
-rw-r--r--ydb/core/scheme/scheme_tabledefs.h18
-rw-r--r--ydb/core/scheme/scheme_type_info.cpp16
-rw-r--r--ydb/core/scheme/scheme_type_info.h9
-rw-r--r--ydb/core/scheme/scheme_type_order.h44
-rw-r--r--ydb/core/scheme/scheme_types_defs.cpp10
-rw-r--r--ydb/core/scheme/scheme_types_defs.h9
-rw-r--r--ydb/core/scheme/scheme_types_proto.cpp26
-rw-r--r--ydb/core/scheme/scheme_types_proto.h17
-rw-r--r--ydb/core/scheme/ut/CMakeLists.darwin.txt5
-rw-r--r--ydb/core/scheme/ut/CMakeLists.linux.txt5
-rw-r--r--ydb/core/scheme_types/scheme_raw_type_value.h31
-rw-r--r--ydb/core/scheme_types/scheme_type_info.h45
-rw-r--r--ydb/core/scheme_types/scheme_types_defs.h6
-rw-r--r--ydb/core/security/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/security/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/sys_view/common/schema.cpp2
-rw-r--r--ydb/core/sys_view/common/schema.h2
-rw-r--r--ydb/core/sys_view/partition_stats/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/sys_view/partition_stats/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/sys_view/query_stats/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/sys_view/query_stats/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/sys_view/storage/base.h2
-rw-r--r--ydb/core/sys_view/ut_kqp/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/sys_view/ut_kqp/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tablet/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tablet/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tablet_flat/CMakeLists.txt1
-rw-r--r--ydb/core/tablet_flat/flat_cxx_database.h2
-rw-r--r--ydb/core/tablet_flat/flat_cxx_database_ut.cpp2
-rw-r--r--ydb/core/tablet_flat/flat_dbase_apply.cpp32
-rw-r--r--ydb/core/tablet_flat/flat_dbase_apply.h1
-rw-r--r--ydb/core/tablet_flat/flat_dbase_scheme.cpp12
-rw-r--r--ydb/core/tablet_flat/flat_dbase_scheme.h2
-rw-r--r--ydb/core/tablet_flat/flat_executor.cpp2
-rw-r--r--ydb/core/tablet_flat/flat_executor_db_mon.cpp10
-rw-r--r--ydb/core/tablet_flat/flat_executor_ut.cpp28
-rw-r--r--ydb/core/tablet_flat/flat_executor_ut_large.cpp6
-rw-r--r--ydb/core/tablet_flat/flat_iterator.h4
-rw-r--r--ydb/core/tablet_flat/flat_iterator_ops.h4
-rw-r--r--ydb/core/tablet_flat/flat_mem_warm.cpp4
-rw-r--r--ydb/core/tablet_flat/flat_mem_warm.h6
-rw-r--r--ydb/core/tablet_flat/flat_part_dump.cpp6
-rw-r--r--ydb/core/tablet_flat/flat_part_scheme.h2
-rw-r--r--ydb/core/tablet_flat/flat_range_cache.h4
-rw-r--r--ydb/core/tablet_flat/flat_range_cache_ut.cpp4
-rw-r--r--ydb/core/tablet_flat/flat_row_column.h4
-rw-r--r--ydb/core/tablet_flat/flat_row_misc.h2
-rw-r--r--ydb/core/tablet_flat/flat_row_nulls.h6
-rw-r--r--ydb/core/tablet_flat/flat_row_remap.h8
-rw-r--r--ydb/core/tablet_flat/flat_row_scheme.h15
-rw-r--r--ydb/core/tablet_flat/flat_table_column.h4
-rw-r--r--ydb/core/tablet_flat/flat_table_part.cpp24
-rw-r--r--ydb/core/tablet_flat/protos/flat_table_part.proto2
-rw-r--r--ydb/core/tablet_flat/test/libs/rows/all.cpp2
-rw-r--r--ydb/core/tablet_flat/test/libs/rows/layout.h3
-rw-r--r--ydb/core/tablet_flat/test/libs/rows/tool.h6
-rw-r--r--ydb/core/tablet_flat/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tablet_flat/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tablet_flat/ut/flat_test_db.cpp7
-rw-r--r--ydb/core/tablet_flat/ut/flat_test_db_helpers.h4
-rw-r--r--ydb/core/tablet_flat/ut/ut_db_scheme.cpp4
-rw-r--r--ydb/core/tablet_flat/ut_pg/CMakeLists.darwin.txt52
-rw-r--r--ydb/core/tablet_flat/ut_pg/CMakeLists.linux.txt56
-rw-r--r--ydb/core/tablet_flat/ut_pg/CMakeLists.txt13
-rw-r--r--ydb/core/tablet_flat/ut_pg/flat_database_pg_ut.cpp142
-rw-r--r--ydb/core/tablet_flat/util_fmt_cell.h4
-rw-r--r--ydb/core/testlib/CMakeLists.txt2
-rw-r--r--ydb/core/testlib/basics/CMakeLists.txt2
-rw-r--r--ydb/core/testlib/basics/default/CMakeLists.txt16
-rw-r--r--ydb/core/testlib/default/CMakeLists.txt16
-rw-r--r--ydb/core/testlib/pg/CMakeLists.txt16
-rw-r--r--ydb/core/tx/balance_coverage/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/balance_coverage/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/columnshard/columnshard__scan.cpp6
-rw-r--r--ydb/core/tx/columnshard/columnshard_common.cpp14
-rw-r--r--ydb/core/tx/columnshard/columnshard_common.h2
-rw-r--r--ydb/core/tx/columnshard/columnshard_impl.cpp6
-rw-r--r--ydb/core/tx/columnshard/columnshard_ut_common.cpp22
-rw-r--r--ydb/core/tx/columnshard/columnshard_ut_common.h132
-rw-r--r--ydb/core/tx/columnshard/engines/index_info.cpp1
-rw-r--r--ydb/core/tx/columnshard/engines/index_info.h16
-rw-r--r--ydb/core/tx/columnshard/engines/indexed_read_data.cpp4
-rw-r--r--ydb/core/tx/columnshard/engines/indexed_read_data.h12
-rw-r--r--ydb/core/tx/columnshard/engines/ut_logs_engine.cpp23
-rw-r--r--ydb/core/tx/columnshard/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/columnshard/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/columnshard/ut_columnshard_read_write.cpp63
-rw-r--r--ydb/core/tx/columnshard/ut_columnshard_schema.cpp2
-rw-r--r--ydb/core/tx/coordinator/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/coordinator/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/build_distributed_erase_tx_out_rs_unit.cpp8
-rw-r--r--ydb/core/tx/datashard/change_collector_async_index.cpp6
-rw-r--r--ydb/core/tx/datashard/change_collector_async_index.h6
-rw-r--r--ydb/core/tx/datashard/change_record.cpp7
-rw-r--r--ydb/core/tx/datashard/change_sender_async_index.cpp2
-rw-r--r--ydb/core/tx/datashard/change_sender_cdc_stream.cpp9
-rw-r--r--ydb/core/tx/datashard/check_scheme_tx_unit.cpp3
-rw-r--r--ydb/core/tx/datashard/datashard.cpp15
-rw-r--r--ydb/core/tx/datashard/datashard__build_index.cpp16
-rw-r--r--ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp6
-rw-r--r--ydb/core/tx/datashard/datashard__engine_host.cpp101
-rw-r--r--ydb/core/tx/datashard/datashard__engine_host.h4
-rw-r--r--ydb/core/tx/datashard/datashard__kqp_scan.cpp8
-rw-r--r--ydb/core/tx/datashard/datashard__read_columns.cpp8
-rw-r--r--ydb/core/tx/datashard/datashard__read_iterator.cpp25
-rw-r--r--ydb/core/tx/datashard/datashard__s3.cpp2
-rw-r--r--ydb/core/tx/datashard/datashard_change_receiving.cpp2
-rw-r--r--ydb/core/tx/datashard/datashard_common_upload.cpp4
-rw-r--r--ydb/core/tx/datashard/datashard_direct_erase.cpp2
-rw-r--r--ydb/core/tx/datashard/datashard_distributed_erase.cpp6
-rw-r--r--ydb/core/tx/datashard/datashard_impl.h2
-rw-r--r--ydb/core/tx/datashard/datashard_kqp.cpp13
-rw-r--r--ydb/core/tx/datashard/datashard_kqp_compute.cpp6
-rw-r--r--ydb/core/tx/datashard/datashard_kqp_compute.h2
-rw-r--r--ydb/core/tx/datashard/datashard_kqp_delete_rows.cpp13
-rw-r--r--ydb/core/tx/datashard/datashard_kqp_lookup_table.cpp21
-rw-r--r--ydb/core/tx/datashard/datashard_kqp_read_table.cpp11
-rw-r--r--ydb/core/tx/datashard/datashard_kqp_upsert_rows.cpp18
-rw-r--r--ydb/core/tx/datashard/datashard_locks.h6
-rw-r--r--ydb/core/tx/datashard/datashard_repl_offsets.cpp4
-rw-r--r--ydb/core/tx/datashard/datashard_repl_offsets.h8
-rw-r--r--ydb/core/tx/datashard/datashard_split_dst.cpp2
-rw-r--r--ydb/core/tx/datashard/datashard_user_table.cpp21
-rw-r--r--ydb/core/tx/datashard/datashard_user_table.h6
-rw-r--r--ydb/core/tx/datashard/datashard_ut_common.cpp5
-rw-r--r--ydb/core/tx/datashard/datashard_ut_locks.cpp2
-rw-r--r--ydb/core/tx/datashard/datashard_ut_range_ops.cpp7
-rw-r--r--ydb/core/tx/datashard/datashard_ut_read_iterator.cpp18
-rw-r--r--ydb/core/tx/datashard/datashard_ut_snapshot.cpp4
-rw-r--r--ydb/core/tx/datashard/erase_rows_condition.cpp3
-rw-r--r--ydb/core/tx/datashard/execute_distributed_erase_tx_unit.cpp1
-rw-r--r--ydb/core/tx/datashard/export_s3_buffer_raw.cpp5
-rw-r--r--ydb/core/tx/datashard/import_common.h2
-rw-r--r--ydb/core/tx/datashard/import_s3.cpp17
-rw-r--r--ydb/core/tx/datashard/range_avl_tree_ut.cpp7
-rw-r--r--ydb/core/tx/datashard/range_ops.cpp10
-rw-r--r--ydb/core/tx/datashard/range_ops.h10
-rw-r--r--ydb/core/tx/datashard/range_treap_ut.cpp7
-rw-r--r--ydb/core/tx/datashard/range_tree_base.h4
-rw-r--r--ydb/core/tx/datashard/read_table_scan.cpp43
-rw-r--r--ydb/core/tx/datashard/sys_tables.h12
-rw-r--r--ydb/core/tx/datashard/ut_background_compaction/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_background_compaction/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_build_index/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_build_index/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_change_collector/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_change_collector/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_change_exchange/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_change_exchange/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_compaction/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_compaction/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_erase_rows/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_erase_rows/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_followers/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_followers/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_init/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_init/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_keys/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_keys/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_kqp/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_kqp/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_locks/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_locks/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_minikql/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_minikql/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_minstep/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_minstep/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_order/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_order/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_range_ops/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_range_ops/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_range_treap/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_range_treap/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_read_iterator/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_read_iterator/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_read_table/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_read_table/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_reassign/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_reassign/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_replication/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_replication/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_rs/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_rs/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_snapshot/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_snapshot/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_stats/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_stats/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_testload/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_testload/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/datashard/ut_upload_rows/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/datashard/ut_upload_rows/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/long_tx_service/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/long_tx_service/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/scheme_board/cache.cpp20
-rw-r--r--ydb/core/tx/scheme_board/cache_ut.cpp2
-rw-r--r--ydb/core/tx/scheme_board/ut_cache/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_cache/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_populator/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_populator/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_replica/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_replica/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.darwin.txt3
-rw-r--r--ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.linux.txt3
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__init.cpp59
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__monitoring.cpp2
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_alter_olap_table.cpp6
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp7
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_olap_store.cpp23
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_olap_table.cpp17
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_table.cpp14
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_split_merge.cpp2
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_upgrade_subdomain.cpp7
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__table_stats_histogram.cpp15
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp2
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_impl.cpp44
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_impl.h4
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_info_types.cpp45
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_info_types.h6
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_path_describer.cpp13
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_schema.h12
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_utils.cpp60
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_utils.h10
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_validate_ttl.cpp8
-rw-r--r--ydb/core/tx/schemeshard/ut_async_index/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_backup/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_base.cpp18
-rw-r--r--ydb/core/tx/schemeshard/ut_base/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_base/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_compaction/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_helpers/helpers.cpp11
-rw-r--r--ydb/core/tx/schemeshard/ut_helpers/helpers.h2
-rw-r--r--ydb/core/tx/schemeshard/ut_helpers/ls_checks.cpp8
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_login/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_login/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap.cpp13
-rw-r--r--ydb/core/tx/schemeshard/ut_olap/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_pq/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_pq/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_replication/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_restore/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_serverless/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_stats/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_ttl/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/sequenceproxy/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/sequenceproxy/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/sequenceshard/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/sequenceshard/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/time_cast/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/time_cast/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/tx_allocator/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/tx_allocator/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/tx_allocator_client/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/tx_allocator_client/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/tx_proxy/datareq.cpp25
-rw-r--r--ydb/core/tx/tx_proxy/describe.cpp10
-rw-r--r--ydb/core/tx/tx_proxy/read_table_impl.cpp15
-rw-r--r--ydb/core/tx/tx_proxy/resolvereq.cpp6
-rw-r--r--ydb/core/tx/tx_proxy/upload_rows_common_impl.h46
-rw-r--r--ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.linux.txt2
-rw-r--r--ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.linux.txt2
-rw-r--r--ydb/core/viewer/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/viewer/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/wrappers/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/wrappers/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/ydb_convert/table_description.cpp23
-rw-r--r--ydb/core/ydb_convert/table_description.h3
-rw-r--r--ydb/core/ydb_convert/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/ydb_convert/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/ymq/actor/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/ymq/actor/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/ymq/actor/yc_search_ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/ymq/actor/yc_search_ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/yq/libs/checkpointing/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/yq/libs/checkpointing/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/yql_testlib/CMakeLists.txt2
-rw-r--r--ydb/library/yql/parser/pg_wrapper/comp_factory.cpp261
-rw-r--r--ydb/library/yql/providers/ydb/actors/yql_ydb_read_actor.cpp11
-rw-r--r--ydb/library/yql/providers/ydb/comp_nodes/yql_kik_scan.cpp16
-rw-r--r--ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp50
-rw-r--r--ydb/library/yql/utils/actors/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/library/yql/utils/actors/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/library/yql/utils/pg_types.h21
-rw-r--r--ydb/public/lib/deprecated/kicli/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/public/lib/deprecated/kicli/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/public/lib/experimental/ydb_clickhouse_internal.cpp6
-rw-r--r--ydb/public/lib/experimental/ydb_clickhouse_internal.h8
-rw-r--r--ydb/public/lib/scheme_types/scheme_type_id.h2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_table/table.cpp19
-rw-r--r--ydb/public/sdk/cpp/client/ydb_table/table.h2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/services/cms/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/services/cms/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/services/datastreams/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/services/datastreams/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/services/fq/ut_integration/CMakeLists.darwin.txt3
-rw-r--r--ydb/services/fq/ut_integration/CMakeLists.linux.txt3
-rw-r--r--ydb/services/persqueue_cluster_discovery/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/services/persqueue_cluster_discovery/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/services/persqueue_v1/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/services/persqueue_v1/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.linux.txt2
-rw-r--r--ydb/services/rate_limiter/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/services/rate_limiter/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/services/ydb/index_ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/services/ydb/index_ut/CMakeLists.linux.txt2
-rw-r--r--ydb/services/ydb/sdk_credprovider_ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/services/ydb/sdk_credprovider_ut/CMakeLists.linux.txt2
-rw-r--r--ydb/services/ydb/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/services/ydb/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/services/ydb/ydb_ut.cpp2
-rw-r--r--ydb/services/yq/ut_integration/CMakeLists.darwin.txt3
-rw-r--r--ydb/services/yq/ut_integration/CMakeLists.linux.txt3
-rw-r--r--ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_schemeshard_/flat_schemeshard.schema32
573 files changed, 3597 insertions, 1807 deletions
diff --git a/ydb/core/actorlib_impl/ut/CMakeLists.darwin.txt b/ydb/core/actorlib_impl/ut/CMakeLists.darwin.txt
index f720b5a034a..221666064f8 100644
--- a/ydb/core/actorlib_impl/ut/CMakeLists.darwin.txt
+++ b/ydb/core/actorlib_impl/ut/CMakeLists.darwin.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-actorlib_impl-ut PUBLIC
library-cpp-getopt
library-cpp-svnversion
core-testlib-actors
- core-testlib-basics
+ testlib-basics-default
)
target_link_options(ydb-core-actorlib_impl-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/actorlib_impl/ut/CMakeLists.linux.txt b/ydb/core/actorlib_impl/ut/CMakeLists.linux.txt
index ad984648c01..f6c32c2dc18 100644
--- a/ydb/core/actorlib_impl/ut/CMakeLists.linux.txt
+++ b/ydb/core/actorlib_impl/ut/CMakeLists.linux.txt
@@ -27,7 +27,7 @@ target_link_libraries(ydb-core-actorlib_impl-ut PUBLIC
library-cpp-getopt
library-cpp-svnversion
core-testlib-actors
- core-testlib-basics
+ testlib-basics-default
)
target_link_options(ydb-core-actorlib_impl-ut PRIVATE
-ldl
diff --git a/ydb/core/blobstorage/dsproxy/ut/CMakeLists.darwin.txt b/ydb/core/blobstorage/dsproxy/ut/CMakeLists.darwin.txt
index 505bfc907f6..d25ea7f0bab 100644
--- a/ydb/core/blobstorage/dsproxy/ut/CMakeLists.darwin.txt
+++ b/ydb/core/blobstorage/dsproxy/ut/CMakeLists.darwin.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-blobstorage-dsproxy-ut PUBLIC
blobstorage-ut_vdisk-lib
blobstorage-vdisk-common
blobstorage-vdisk-query
- ydb-core-testlib
+ core-testlib-default
core-testlib-actors
core-testlib-basics
)
diff --git a/ydb/core/blobstorage/dsproxy/ut/CMakeLists.linux.txt b/ydb/core/blobstorage/dsproxy/ut/CMakeLists.linux.txt
index bdff919b557..7a0176498c3 100644
--- a/ydb/core/blobstorage/dsproxy/ut/CMakeLists.linux.txt
+++ b/ydb/core/blobstorage/dsproxy/ut/CMakeLists.linux.txt
@@ -28,7 +28,7 @@ target_link_libraries(ydb-core-blobstorage-dsproxy-ut PUBLIC
blobstorage-ut_vdisk-lib
blobstorage-vdisk-common
blobstorage-vdisk-query
- ydb-core-testlib
+ core-testlib-default
core-testlib-actors
core-testlib-basics
)
diff --git a/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.darwin.txt b/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.darwin.txt
index f470ddf13e5..2edad9dd725 100644
--- a/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.darwin.txt
+++ b/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-blobstorage-dsproxy-ut_fat PUBLIC
core-blobstorage-pdisk
core-blobstorage-vdisk
blobstorage-vdisk-common
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-blobstorage-dsproxy-ut_fat PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.linux.txt b/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.linux.txt
index 8419abbec4e..1eb24584a9b 100644
--- a/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.linux.txt
+++ b/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-blobstorage-dsproxy-ut_fat PUBLIC
core-blobstorage-pdisk
core-blobstorage-vdisk
blobstorage-vdisk-common
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-blobstorage-dsproxy-ut_fat PRIVATE
-ldl
diff --git a/ydb/core/blobstorage/nodewarden/ut/CMakeLists.darwin.txt b/ydb/core/blobstorage/nodewarden/ut/CMakeLists.darwin.txt
index 0fb64510bd5..8d0ae85f1ab 100644
--- a/ydb/core/blobstorage/nodewarden/ut/CMakeLists.darwin.txt
+++ b/ydb/core/blobstorage/nodewarden/ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-blobstorage-nodewarden-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-blobstorage-nodewarden
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-blobstorage-nodewarden-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/blobstorage/nodewarden/ut/CMakeLists.linux.txt b/ydb/core/blobstorage/nodewarden/ut/CMakeLists.linux.txt
index 9c40dd66fd6..5d8e0d0f682 100644
--- a/ydb/core/blobstorage/nodewarden/ut/CMakeLists.linux.txt
+++ b/ydb/core/blobstorage/nodewarden/ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-blobstorage-nodewarden-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-blobstorage-nodewarden
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-blobstorage-nodewarden-ut PRIVATE
-ldl
diff --git a/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.darwin.txt b/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.darwin.txt
index 1ba91724ddf..56195156049 100644
--- a/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.darwin.txt
+++ b/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-blobstorage-nodewarden-ut_sequence PUBLIC
core-blobstorage-crypto
core-blobstorage-nodewarden
core-blobstorage-pdisk
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-blobstorage-nodewarden-ut_sequence PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.linux.txt b/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.linux.txt
index ddd10efe7fd..5bbf8dd0058 100644
--- a/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.linux.txt
+++ b/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-blobstorage-nodewarden-ut_sequence PUBLIC
core-blobstorage-crypto
core-blobstorage-nodewarden
core-blobstorage-pdisk
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-blobstorage-nodewarden-ut_sequence PRIVATE
-ldl
diff --git a/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.darwin.txt b/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.darwin.txt
index dbf6c826c16..7fb27c04e72 100644
--- a/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.darwin.txt
+++ b/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.darwin.txt
@@ -16,7 +16,7 @@ target_link_libraries(ydb-core-blobstorage-storagepoolmon-ut PUBLIC
library-cpp-getopt
library-cpp-svnversion
core-blobstorage-storagepoolmon
- ydb-core-testlib
+ core-testlib-default
core-testlib-actors
core-testlib-basics
)
diff --git a/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.linux.txt b/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.linux.txt
index e88dac66b06..44937a0cbf5 100644
--- a/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.linux.txt
+++ b/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.linux.txt
@@ -18,7 +18,7 @@ target_link_libraries(ydb-core-blobstorage-storagepoolmon-ut PUBLIC
library-cpp-getopt
library-cpp-svnversion
core-blobstorage-storagepoolmon
- ydb-core-testlib
+ core-testlib-default
core-testlib-actors
core-testlib-basics
)
diff --git a/ydb/core/blobstorage/ut_vdisk/CMakeLists.darwin.txt b/ydb/core/blobstorage/ut_vdisk/CMakeLists.darwin.txt
index 3c6079fa054..2c7e9d55a85 100644
--- a/ydb/core/blobstorage/ut_vdisk/CMakeLists.darwin.txt
+++ b/ydb/core/blobstorage/ut_vdisk/CMakeLists.darwin.txt
@@ -29,6 +29,7 @@ target_link_libraries(ydb-core-blobstorage-ut_vdisk PUBLIC
ydb-core-erasure
ydb-core-scheme
udf-service-stub
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-blobstorage-ut_vdisk PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/blobstorage/ut_vdisk/CMakeLists.linux.txt b/ydb/core/blobstorage/ut_vdisk/CMakeLists.linux.txt
index 0086d887385..71a49269d92 100644
--- a/ydb/core/blobstorage/ut_vdisk/CMakeLists.linux.txt
+++ b/ydb/core/blobstorage/ut_vdisk/CMakeLists.linux.txt
@@ -31,6 +31,7 @@ target_link_libraries(ydb-core-blobstorage-ut_vdisk PUBLIC
ydb-core-erasure
ydb-core-scheme
udf-service-stub
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-blobstorage-ut_vdisk PRIVATE
-ldl
diff --git a/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.darwin.txt b/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.darwin.txt
index 318f73ce482..7a99a0da1f8 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.darwin.txt
+++ b/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-blobstorage-vdisk-skeleton-ut PUBLIC
library-cpp-svnversion
ydb-core-blobstorage
blobstorage-vdisk-common
- ydb-core-testlib
+ core-testlib-default
core-testlib-actors
)
target_link_options(ydb-core-blobstorage-vdisk-skeleton-ut PRIVATE
diff --git a/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.linux.txt b/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.linux.txt
index bd07535b2d4..aa0faa9574d 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.linux.txt
+++ b/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-blobstorage-vdisk-skeleton-ut PUBLIC
library-cpp-svnversion
ydb-core-blobstorage
blobstorage-vdisk-common
- ydb-core-testlib
+ core-testlib-default
core-testlib-actors
)
target_link_options(ydb-core-blobstorage-vdisk-skeleton-ut PRIVATE
diff --git a/ydb/core/client/minikql_compile/db_key_resolver.h b/ydb/core/client/minikql_compile/db_key_resolver.h
index 4d93c1a4c25..8304aa1cb58 100644
--- a/ydb/core/client/minikql_compile/db_key_resolver.h
+++ b/ydb/core/client/minikql_compile/db_key_resolver.h
@@ -42,7 +42,7 @@ public:
struct TColumn {
ui32 Column;
i32 KeyPosition;
- ui32 Type;
+ NKikimr::NScheme::TTypeInfo Type;
ui32 AllowInplaceMode;
NKikimr::EColumnTypeConstraint TypeConstraint;
};
diff --git a/ydb/core/client/minikql_compile/ut/CMakeLists.darwin.txt b/ydb/core/client/minikql_compile/ut/CMakeLists.darwin.txt
index 8179879db9d..c8d3034db0b 100644
--- a/ydb/core/client/minikql_compile/ut/CMakeLists.darwin.txt
+++ b/ydb/core/client/minikql_compile/ut/CMakeLists.darwin.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-client-minikql_compile-ut PUBLIC
core-client-scheme_cache_lib
core-client-server
ydb-core-tablet
- ydb-core-testlib
+ core-testlib-default
library-yql-minikql
udf-service-exception_policy
)
diff --git a/ydb/core/client/minikql_compile/ut/CMakeLists.linux.txt b/ydb/core/client/minikql_compile/ut/CMakeLists.linux.txt
index e7535e44a61..f1e362978ef 100644
--- a/ydb/core/client/minikql_compile/ut/CMakeLists.linux.txt
+++ b/ydb/core/client/minikql_compile/ut/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-client-minikql_compile-ut PUBLIC
core-client-scheme_cache_lib
core-client-server
ydb-core-tablet
- ydb-core-testlib
+ core-testlib-default
library-yql-minikql
udf-service-exception_policy
)
diff --git a/ydb/core/client/minikql_compile/yql_expr_minikql.cpp b/ydb/core/client/minikql_compile/yql_expr_minikql.cpp
index 28a7a4dbff9..c025b8fe73e 100644
--- a/ydb/core/client/minikql_compile/yql_expr_minikql.cpp
+++ b/ydb/core/client/minikql_compile/yql_expr_minikql.cpp
@@ -392,15 +392,19 @@ private:
YQL_ENSURE(column);
typeConstraint = column->TypeConstraint;
+ // TODO: support pg types
+ auto columnTypeId = column->Type.GetTypeId();
+ YQL_ENSURE(columnTypeId != NScheme::NTypeIds::Pg, "pg types are not supported");
+
// Decimal type is transformed into parametrized Decimal(22, 9).
- if (column->Type == NYql::NProto::TypeIds::Decimal) {
+ if (columnTypeId == NYql::NProto::TypeIds::Decimal) {
columnDataType = ctx.MakeType<TDataExprParamsType>(
- NUdf::GetDataSlot(column->Type),
+ NUdf::GetDataSlot(columnTypeId),
ToString(NScheme::DECIMAL_PRECISION),
ToString(NScheme::DECIMAL_SCALE));
} else {
columnDataType = GetMkqlDataTypeAnnotation(
- TDataType::Create(column->Type, *MkqlCtx->TypeEnv),
+ TDataType::Create(columnTypeId, *MkqlCtx->TypeEnv),
ctx);
}
}
@@ -839,7 +843,8 @@ void FillColumnsToRead(IDbSchemeResolver::TTableResult* lookup, TExprNode* selec
auto columnName = selectTuple->Child(i)->Content();
const auto& systemColumn = GetSystemColumns().find(columnName);
if (systemColumn != GetSystemColumns().end()) {
- columnsToRead.emplace_back(columnName, systemColumn->second.ColumnId, systemColumn->second.TypeId, EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back(columnName, systemColumn->second.ColumnId,
+ NScheme::TTypeInfo(systemColumn->second.TypeId), EColumnTypeConstraint::Nullable);
} else {
auto column = lookup->Columns.FindPtr(columnName);
YQL_ENSURE(column);
@@ -921,7 +926,7 @@ TIntrusivePtr<NCommon::IMkqlCallableCompiler> CreateMkqlCompiler(TContext::TPtr
auto rowTuple = node.Child(1);
TVector<TRuntimeNode> row(rowTuple->ChildrenSize());
- TVector<ui32> keyTypes(rowTuple->ChildrenSize());
+ TVector<NScheme::TTypeInfo> keyTypes(rowTuple->ChildrenSize());
for (ui32 i = 0; i < rowTuple->ChildrenSize(); ++i) {
auto columnName = rowTuple->Child(i)->Child(0)->Content();
auto column = lookup->Columns.FindPtr(columnName);
@@ -992,7 +997,7 @@ TIntrusivePtr<NCommon::IMkqlCallableCompiler> CreateMkqlCompiler(TContext::TPtr
}
TTableRangeOptions options = mkqlContext->PgmBuilder->GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(Max(fromComponents, toComponents));
+ TVector<NScheme::TTypeInfo> keyTypes(Max(fromComponents, toComponents));
TVector<TRuntimeNode> from(fromComponents);
TVector<TRuntimeNode> to(toComponents);
ui32 keyIndex = 0;
@@ -1080,7 +1085,7 @@ TIntrusivePtr<NCommon::IMkqlCallableCompiler> CreateMkqlCompiler(TContext::TPtr
auto rowTuple = node.Child(1);
TVector<TRuntimeNode> row(rowTuple->ChildrenSize());
- TVector<ui32> keyTypes(rowTuple->ChildrenSize());
+ TVector<NScheme::TTypeInfo> keyTypes(rowTuple->ChildrenSize());
for (ui32 i = 0; i < rowTuple->ChildrenSize(); ++i) {
auto columnName = rowTuple->Child(i)->Child(0)->Content();
auto column = lookup->Columns.FindPtr(columnName);
@@ -1131,7 +1136,7 @@ TIntrusivePtr<NCommon::IMkqlCallableCompiler> CreateMkqlCompiler(TContext::TPtr
auto rowTuple = node.Child(1);
TVector<TRuntimeNode> row(rowTuple->ChildrenSize());
- TVector<ui32> keyTypes(rowTuple->ChildrenSize());
+ TVector<NScheme::TTypeInfo> keyTypes(rowTuple->ChildrenSize());
for (ui32 i = 0; i < rowTuple->ChildrenSize(); ++i) {
auto columnName = rowTuple->Child(i)->Child(0)->Content();
auto column = lookup->Columns.FindPtr(columnName);
diff --git a/ydb/core/client/minikql_compile/yql_expr_minikql_compile_ut.cpp b/ydb/core/client/minikql_compile/yql_expr_minikql_compile_ut.cpp
index df56ab1c273..052ca5f6f96 100644
--- a/ydb/core/client/minikql_compile/yql_expr_minikql_compile_ut.cpp
+++ b/ydb/core/client/minikql_compile/yql_expr_minikql_compile_ut.cpp
@@ -11,6 +11,8 @@ namespace NYql {
using namespace NKikimr;
using namespace NKikimr::NMiniKQL;
+using TTypeInfo = NScheme::TTypeInfo;
+
namespace {
const TDuration TIME_LIMIT = TDuration::Seconds(60);
@@ -72,8 +74,8 @@ namespace {
table.Table.ColumnNames = { "key", "value" };
table.TableId.Reset(new TTableId(1, 2));
table.KeyColumnCount = 1;
- table.Columns.insert(std::make_pair("key", TColumn{ 34, 0, NUdf::TDataType<ui32>::Id, 0, EColumnTypeConstraint::Nullable }));
- table.Columns.insert(std::make_pair("value", TColumn{ 56, -1, NUdf::TDataType<char*>::Id, (ui32)EInplaceUpdateMode::Min, EColumnTypeConstraint::Nullable }));
+ table.Columns.insert(std::make_pair("key", TColumn{ 34, 0, TTypeInfo(NUdf::TDataType<ui32>::Id), 0, EColumnTypeConstraint::Nullable }));
+ table.Columns.insert(std::make_pair("value", TColumn{ 56, -1, TTypeInfo(NUdf::TDataType<char*>::Id), (ui32)EInplaceUpdateMode::Min, EColumnTypeConstraint::Nullable }));
services.DbSchemeResolver.AddTable(table);
IDbSchemeResolver::TTableResult table2(IDbSchemeResolver::TTableResult::Ok);
@@ -81,8 +83,8 @@ namespace {
table2.Table.ColumnNames = { "key", "value" };
table2.TableId.Reset(new TTableId(10, 20));
table2.KeyColumnCount = 1;
- table2.Columns.insert(std::make_pair("key", TColumn{ 340, 0, NUdf::TDataType<ui32>::Id, 0, EColumnTypeConstraint::Nullable }));
- table2.Columns.insert(std::make_pair("value", TColumn{ 560, -1, NUdf::TDataType<char*>::Id, (ui32)EInplaceUpdateMode::Min, EColumnTypeConstraint::Nullable }));
+ table2.Columns.insert(std::make_pair("key", TColumn{ 340, 0, TTypeInfo(NUdf::TDataType<ui32>::Id), 0, EColumnTypeConstraint::Nullable }));
+ table2.Columns.insert(std::make_pair("value", TColumn{ 560, -1, TTypeInfo(NUdf::TDataType<char*>::Id), (ui32)EInplaceUpdateMode::Min, EColumnTypeConstraint::Nullable }));
services.DbSchemeResolver.AddTable(table2);
}
}
@@ -107,7 +109,7 @@ Y_UNIT_TEST_SUITE(TTestYqlToMiniKQLCompile) {
UNIT_ASSERT_VALUES_EQUAL(res[0].Columns["value"].Column, 56);
UNIT_ASSERT_VALUES_EQUAL(res[0].Columns["value"].KeyPosition, -1);
UNIT_ASSERT_VALUES_EQUAL(res[0].Columns["value"].AllowInplaceMode, (ui32)EInplaceUpdateMode::Min);
- UNIT_ASSERT_VALUES_EQUAL(res[0].Columns["value"].Type, (ui32)NUdf::TDataType<char*>::Id);
+ UNIT_ASSERT_VALUES_EQUAL(res[0].Columns["value"].Type.GetTypeId(), (ui32)NUdf::TDataType<char*>::Id);
}
Y_UNIT_TEST(OnlyResult) {
diff --git a/ydb/core/client/minikql_result_lib/ut/CMakeLists.darwin.txt b/ydb/core/client/minikql_result_lib/ut/CMakeLists.darwin.txt
index d1521ad2cb2..fc6819f6ce0 100644
--- a/ydb/core/client/minikql_result_lib/ut/CMakeLists.darwin.txt
+++ b/ydb/core/client/minikql_result_lib/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-client-minikql_result_lib-ut PUBLIC
cpp-testing-unittest_main
core-client-minikql_result_lib
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-client-minikql_result_lib-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/client/minikql_result_lib/ut/CMakeLists.linux.txt b/ydb/core/client/minikql_result_lib/ut/CMakeLists.linux.txt
index 6de99596903..230f018b3bc 100644
--- a/ydb/core/client/minikql_result_lib/ut/CMakeLists.linux.txt
+++ b/ydb/core/client/minikql_result_lib/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-client-minikql_result_lib-ut PUBLIC
cpp-testing-unittest_main
core-client-minikql_result_lib
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-client-minikql_result_lib-ut PRIVATE
-ldl
diff --git a/ydb/core/client/scheme_cache_lib/yql_db_scheme_resolver.cpp b/ydb/core/client/scheme_cache_lib/yql_db_scheme_resolver.cpp
index d019533c69e..7d0dfdbf50c 100644
--- a/ydb/core/client/scheme_cache_lib/yql_db_scheme_resolver.cpp
+++ b/ydb/core/client/scheme_cache_lib/yql_db_scheme_resolver.cpp
@@ -67,7 +67,7 @@ class TTableProxyActor : public TActorBootstrapped<TTableProxyActor> {
if (systemColumn != GetSystemColumns().end()) {
reply.Columns.insert({
column,
- {systemColumn->second.ColumnId, -1, systemColumn->second.TypeId, 0, EColumnTypeConstraint::Nullable}
+ {systemColumn->second.ColumnId, -1, NScheme::TTypeInfo(systemColumn->second.TypeId), 0, EColumnTypeConstraint::Nullable}
});
continue;
}
diff --git a/ydb/core/client/server/CMakeLists.txt b/ydb/core/client/server/CMakeLists.txt
index 502f7f22e4d..3c8a48ea36f 100644
--- a/ydb/core/client/server/CMakeLists.txt
+++ b/ydb/core/client/server/CMakeLists.txt
@@ -32,10 +32,12 @@ target_link_libraries(core-client-server PUBLIC
core-engine-minikql
ydb-core-grpc_services
ydb-core-keyvalue
+ core-kqp-common
ydb-core-node_whiteboard
ydb-core-persqueue
core-persqueue-writer
ydb-core-protos
+ ydb-core-scheme
ydb-core-ydb_convert
core-ymq-actor
ydb-library-aclib
diff --git a/ydb/core/client/server/msgbus_server_db.cpp b/ydb/core/client/server/msgbus_server_db.cpp
index ff851a58975..f3f5d032050 100644
--- a/ydb/core/client/server/msgbus_server_db.cpp
+++ b/ydb/core/client/server/msgbus_server_db.cpp
@@ -384,7 +384,7 @@ public:
const TVector<const NTxProxy::TTableColumnInfo*>& keys, const THashMap<TString, const NTxProxy::TTableColumnInfo*>& columnByName, THashSet<TString> notNullColumns,
TVector<NMiniKQL::TRuntimeNode>& result) {
TVector<NMiniKQL::TRuntimeNode> keyColumns;
- TVector<ui32> keyTypes;
+ TVector<NScheme::TTypeInfo> keyTypes;
keyTypes.reserve(keys.size());
for (const NTxProxy::TTableColumnInfo* key : keys) {
Y_VERIFY(key != nullptr);
@@ -395,8 +395,10 @@ public:
keyColumns.reserve(keys.size());
for (const NTxProxy::TTableColumnInfo* key : keys) {
NJson::TJsonValue jsonKey;
+ // TODO: support pg types
+ Y_VERIFY(key->PType.GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
if (jsonWhere.GetValue(key->Name, &jsonKey)) {
- keyColumns.emplace_back(NewDataLiteral(pgmBuilder, jsonKey, key->PType));
+ keyColumns.emplace_back(NewDataLiteral(pgmBuilder, jsonKey, key->PType.GetTypeId()));
} else {
throw yexception() << "Key \"" << key->Name << "\" was not specified";
}
@@ -451,7 +453,9 @@ public:
NMiniKQL::TTableRangeOptions tableRangeOptions = pgmBuilder.GetDefaultTableRangeOptions();
TVector<NMiniKQL::TRuntimeNode> keyFromColumns = keyColumns;
for (size_t i = keyColumns.size(); i < keyTypes.size(); ++i) {
- keyFromColumns.emplace_back(pgmBuilder.NewEmptyOptionalDataLiteral(keyTypes[i]));
+ // TODO: support pg types
+ Y_VERIFY(keyTypes[i].GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+ keyFromColumns.emplace_back(pgmBuilder.NewEmptyOptionalDataLiteral(keyTypes[i].GetTypeId()));
}
tableRangeOptions.ToColumns = keyColumns;
tableRangeOptions.FromColumns = keyFromColumns;
@@ -467,7 +471,9 @@ public:
auto itCol = columnByName.find(itVal->first);
if (itCol != columnByName.end()) {
auto update = pgmBuilder.GetUpdateRowBuilder();
- update.SetColumn(itCol->second->Id, itCol->second->PType, pgmBuilder.NewOptional(NewDataLiteral(pgmBuilder, itVal->second, itCol->second->PType)));
+ // TODO: support pg types
+ Y_VERIFY(itCol->second->PType.GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+ update.SetColumn(itCol->second->Id, itCol->second->PType, pgmBuilder.NewOptional(NewDataLiteral(pgmBuilder, itVal->second, itCol->second->PType.GetTypeId())));
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.UpdateRow(tableInfo.TableId, keyTypes, keyColumns, update));
} else {
throw yexception() << "Column \"" << itVal->first << "\" not found";
diff --git a/ydb/core/client/server/msgbus_server_s3_listing.cpp b/ydb/core/client/server/msgbus_server_s3_listing.cpp
index 94542d8d737..0e58a57e1c3 100644
--- a/ydb/core/client/server/msgbus_server_s3_listing.cpp
+++ b/ydb/core/client/server/msgbus_server_s3_listing.cpp
@@ -8,6 +8,8 @@
#include <ydb/core/actorlib_impl/long_timer.h>
#include <ydb/core/grpc_services/rpc_calls.h>
#include <ydb/core/ydb_convert/ydb_convert.h>
+#include <ydb/core/kqp/common/kqp_types.h>
+#include <ydb/core/scheme/scheme_type_info.h>
#include <util/system/unaligned_mem.h>
namespace NKikimr {
@@ -34,7 +36,7 @@ private:
bool WaitingResolveReply;
bool Finished;
TAutoPtr<NSchemeCache::TSchemeCacheNavigate> ResolveNamesResult;
- TVector<NScheme::TTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
TSysTables::TTableColumnInfo PathColumnInfo;
TVector<TSysTables::TTableColumnInfo> CommonPrefixesColumns;
TVector<TSysTables::TTableColumnInfo> ContentsColumns;
@@ -194,7 +196,7 @@ private:
TString errStr;
TVector<TCell> prefixCells;
- TConstArrayRef<NScheme::TTypeId> prefixTypes(KeyColumnTypes.data(), KeyColumnTypes.size() - 1); // -1 for path column
+ TConstArrayRef<NScheme::TTypeInfo> prefixTypes(KeyColumnTypes.data(), KeyColumnTypes.size() - 1); // -1 for path column
NMiniKQL::CellsFromTuple(&Request->GetKeyPrefix().GetType(), Request->GetKeyPrefix().GetValue(),
prefixTypes, true, prefixCells, errStr);
if (!errStr.empty()) {
@@ -208,7 +210,7 @@ private:
ui32 pathColPos = prefixCells.size();
Y_VERIFY(pathColPos < KeyColumnTypes.size());
PathColumnInfo = entry.Columns[keyColumnIds[pathColPos]];
- if (PathColumnInfo.PType != NScheme::NTypeIds::Utf8) {
+ if (PathColumnInfo.PType.GetTypeId() != NScheme::NTypeIds::Utf8) {
ReplyWithError(MSTATUS_ERROR, NTxProxy::TResultStatus::EStatus::WrongRequest,
Sprintf("Value for path column '%s' has type %s, expected Utf8",
PathColumnInfo.Name.data(), NScheme::TypeName(PathColumnInfo.PType)), ctx);
@@ -218,7 +220,7 @@ private:
CommonPrefixesColumns.push_back(PathColumnInfo);
TVector<TCell> suffixCells;
- TConstArrayRef<NScheme::TTypeId> suffixTypes(KeyColumnTypes.data() + pathColPos, KeyColumnTypes.size() - pathColPos); // starts at path column
+ TConstArrayRef<NScheme::TTypeInfo> suffixTypes(KeyColumnTypes.data() + pathColPos, KeyColumnTypes.size() - pathColPos); // starts at path column
NMiniKQL::CellsFromTuple(&Request->GetStartAfterKeySuffix().GetType(), Request->GetStartAfterKeySuffix().GetValue(),
suffixTypes, true, suffixCells, errStr);
if (!errStr.empty()) {
@@ -489,8 +491,7 @@ private:
col->SetName(colInfo.Name);
col->MutableType()->SetKind(NKikimrMiniKQL::Optional);
auto* item = col->MutableType()->MutableOptional()->MutableItem();
- item->SetKind(NKikimrMiniKQL::Data);
- item->MutableData()->SetScheme(colInfo.PType);
+ NScheme::ProtoMiniKQLTypeFromTypeInfo(item, colInfo.PType);
}
void BuildResultType(NKikimrMiniKQL::TType& type) const {
diff --git a/ydb/core/client/server/ut/CMakeLists.darwin.txt b/ydb/core/client/server/ut/CMakeLists.darwin.txt
index 094ca6798cd..62b99bcc13e 100644
--- a/ydb/core/client/server/ut/CMakeLists.darwin.txt
+++ b/ydb/core/client/server/ut/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-client-server-ut PUBLIC
cpp-testing-gmock_in_unittest
ydb-core-persqueue
ydb-core-tablet_flat
- ydb-core-testlib
+ core-testlib-default
core-testlib-actors
)
target_link_options(ydb-core-client-server-ut PRIVATE
diff --git a/ydb/core/client/server/ut/CMakeLists.linux.txt b/ydb/core/client/server/ut/CMakeLists.linux.txt
index d87ac09ac67..d51915d33ae 100644
--- a/ydb/core/client/server/ut/CMakeLists.linux.txt
+++ b/ydb/core/client/server/ut/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-client-server-ut PUBLIC
cpp-testing-gmock_in_unittest
ydb-core-persqueue
ydb-core-tablet_flat
- ydb-core-testlib
+ core-testlib-default
core-testlib-actors
)
target_link_options(ydb-core-client-server-ut PRIVATE
diff --git a/ydb/core/client/ut/CMakeLists.darwin.txt b/ydb/core/client/ut/CMakeLists.darwin.txt
index adca63db791..e749d361178 100644
--- a/ydb/core/client/ut/CMakeLists.darwin.txt
+++ b/ydb/core/client/ut/CMakeLists.darwin.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-client-ut PUBLIC
library-cpp-svnversion
core-client-scheme_cache_lib
test-libs-rows
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-client-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/client/ut/CMakeLists.linux.txt b/ydb/core/client/ut/CMakeLists.linux.txt
index a174a026163..95a38a926f1 100644
--- a/ydb/core/client/ut/CMakeLists.linux.txt
+++ b/ydb/core/client/ut/CMakeLists.linux.txt
@@ -27,7 +27,7 @@ target_link_libraries(ydb-core-client-ut PUBLIC
library-cpp-svnversion
core-client-scheme_cache_lib
test-libs-rows
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-client-ut PRIVATE
-ldl
diff --git a/ydb/core/cms/console/ut/CMakeLists.darwin.txt b/ydb/core/cms/console/ut/CMakeLists.darwin.txt
index 8daffabf380..68b10f5a0f8 100644
--- a/ydb/core/cms/console/ut/CMakeLists.darwin.txt
+++ b/ydb/core/cms/console/ut/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-cms-console-ut PUBLIC
cpp-protobuf-util
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-cms-console-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/cms/console/ut/CMakeLists.linux.txt b/ydb/core/cms/console/ut/CMakeLists.linux.txt
index b30e2dbb6a5..b07660d0841 100644
--- a/ydb/core/cms/console/ut/CMakeLists.linux.txt
+++ b/ydb/core/cms/console/ut/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-cms-console-ut PUBLIC
cpp-protobuf-util
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-cms-console-ut PRIVATE
-ldl
diff --git a/ydb/core/cms/ut/CMakeLists.darwin.txt b/ydb/core/cms/ut/CMakeLists.darwin.txt
index c35c8bed546..acf38cecda7 100644
--- a/ydb/core/cms/ut/CMakeLists.darwin.txt
+++ b/ydb/core/cms/ut/CMakeLists.darwin.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-cms-ut PUBLIC
ydb-core-cms
library-cpp-getopt
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-cms-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/cms/ut/CMakeLists.linux.txt b/ydb/core/cms/ut/CMakeLists.linux.txt
index f07fb4aad4f..a325a16f3fc 100644
--- a/ydb/core/cms/ut/CMakeLists.linux.txt
+++ b/ydb/core/cms/ut/CMakeLists.linux.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-cms-ut PUBLIC
ydb-core-cms
library-cpp-getopt
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-cms-ut PRIVATE
-ldl
diff --git a/ydb/core/cms/ut_sentinel/CMakeLists.darwin.txt b/ydb/core/cms/ut_sentinel/CMakeLists.darwin.txt
index 26e890c5981..fdc9505a7f2 100644
--- a/ydb/core/cms/ut_sentinel/CMakeLists.darwin.txt
+++ b/ydb/core/cms/ut_sentinel/CMakeLists.darwin.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-cms-ut_sentinel PUBLIC
ydb-core-cms
library-cpp-getopt
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-cms-ut_sentinel PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/cms/ut_sentinel/CMakeLists.linux.txt b/ydb/core/cms/ut_sentinel/CMakeLists.linux.txt
index 10142ee779c..e99f6ab04ed 100644
--- a/ydb/core/cms/ut_sentinel/CMakeLists.linux.txt
+++ b/ydb/core/cms/ut_sentinel/CMakeLists.linux.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-cms-ut_sentinel PUBLIC
ydb-core-cms
library-cpp-getopt
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-cms-ut_sentinel PRIVATE
-ldl
diff --git a/ydb/core/engine/kikimr_program_builder.cpp b/ydb/core/engine/kikimr_program_builder.cpp
index e4077e2e102..6b50565fd8d 100644
--- a/ydb/core/engine/kikimr_program_builder.cpp
+++ b/ydb/core/engine/kikimr_program_builder.cpp
@@ -23,15 +23,17 @@ TType* ValidateColumns(
rowTypeBuilder.Reserve(columns.size());
tagsBuilder.Reserve(columns.size());
for (auto& col : columns) {
- MKQL_ENSURE(col.SchemeType != 0, "Null type is not allowed");
+ // TODO: support pg types
+ MKQL_ENSURE(col.SchemeType.GetTypeId() != 0, "Null type is not allowed");
+ MKQL_ENSURE(col.SchemeType.GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
TType* dataType;
- if (col.SchemeType == NYql::NProto::TypeIds::Decimal)
+ if (col.SchemeType.GetTypeId() == NYql::NProto::TypeIds::Decimal)
dataType = TDataDecimalType::Create(
NScheme::DECIMAL_PRECISION,
NScheme::DECIMAL_SCALE,
builder->GetTypeEnvironment());
else
- dataType = TDataType::Create(col.SchemeType, builder->GetTypeEnvironment());
+ dataType = TDataType::Create(col.SchemeType.GetTypeId(), builder->GetTypeEnvironment());
if (col.TypeConstraint == EColumnTypeConstraint::Nullable) {
dataType = TOptionalType::Create(dataType, builder->GetTypeEnvironment());
@@ -103,24 +105,30 @@ TUpdateRowBuilder::TUpdateRowBuilder(const TTypeEnvironment& env)
}
void TUpdateRowBuilder::SetColumn(
- ui32 columnId, ui32 expectedType,
+ ui32 columnId, NScheme::TTypeInfo expectedType,
TRuntimeNode value)
{
+ // TODO: support pg types
+ MKQL_ENSURE(expectedType.GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+
bool isOptional;
- value = DoRewriteNullType(value, expectedType, NullInternName, Env);
+ value = DoRewriteNullType(value, expectedType.GetTypeId(), NullInternName, Env);
TDataType* dataType = UnpackOptionalData(value, isOptional);
- MKQL_ENSURE(expectedType == dataType->GetSchemeType(),
- "Mismatch of column type expectedType = " << expectedType
+
+ MKQL_ENSURE(expectedType.GetTypeId() == dataType->GetSchemeType(),
+ "Mismatch of column type expectedType = " << expectedType.GetTypeId()
<< " actual type = " << dataType->GetSchemeType());
Builder.Add(ToString(columnId), value);
}
void TUpdateRowBuilder::InplaceUpdateColumn(
- ui32 columnId, ui32 expectedType,
+ ui32 columnId, NScheme::TTypeInfo expectedType,
TRuntimeNode value,
EInplaceUpdateMode mode)
{
- MKQL_ENSURE(AS_TYPE(TDataType, value)->GetSchemeType() == expectedType,
+ // TODO: support pg types
+ MKQL_ENSURE(expectedType.GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+ MKQL_ENSURE(AS_TYPE(TDataType, value)->GetSchemeType() == expectedType.GetTypeId(),
"Mismatch of column type");
TDataType* byteType = TDataType::Create(NUdf::TDataType<ui8>::Id, Env);
std::array<TType*, 2> elements;
@@ -199,19 +207,21 @@ TRuntimeNode TKikimrProgramBuilder::RewriteNullType(
}
TVector<TRuntimeNode> TKikimrProgramBuilder::FixKeysType(
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TKeyColumnValues& row) const
{
MKQL_ENSURE(!row.empty(), "Expected at least 1 key column");
MKQL_ENSURE(keyTypes.size() == row.size(), "Mismatch of key types count");
TVector<TRuntimeNode> tmp(row.size());
for (ui32 i = 0; i < row.size(); ++i) {
- tmp[i] = RewriteNullType(row[i], keyTypes[i]);
+ // TODO: support pg types
+ MKQL_ENSURE(keyTypes[i].GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+ tmp[i] = RewriteNullType(row[i], keyTypes[i].GetTypeId());
bool isOptional;
TDataType* dataType = UnpackOptionalData(tmp[i], isOptional);
- MKQL_ENSURE(keyTypes[i] == dataType->GetSchemeType(),
+ MKQL_ENSURE(keyTypes[i].GetTypeId() == dataType->GetSchemeType(),
"Mismatch of key column type, expected: "
- << keyTypes[i] << ", but got: " << dataType->GetSchemeType());
+ << keyTypes[i].GetTypeId() << ", but got: " << dataType->GetSchemeType());
}
return tmp;
}
@@ -223,7 +233,7 @@ TRuntimeNode TKikimrProgramBuilder::ReadTarget(const TReadTarget& target) {
TRuntimeNode TKikimrProgramBuilder::SelectRow(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TArrayRef<const TSelectColumn>& columns,
const TKeyColumnValues& row, const TReadTarget& target)
{
@@ -232,7 +242,7 @@ TRuntimeNode TKikimrProgramBuilder::SelectRow(
TRuntimeNode TKikimrProgramBuilder::SelectRow(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TArrayRef<const TSelectColumn>& columns,
const TKeyColumnValues& row, TRuntimeNode readTarget)
{
@@ -258,7 +268,7 @@ TRuntimeNode TKikimrProgramBuilder::SelectRow(
TRuntimeNode TKikimrProgramBuilder::SelectRange(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TArrayRef<const TSelectColumn>& columns,
const TTableRangeOptions& options,
const TReadTarget& target)
@@ -284,7 +294,7 @@ static bool AtLeastOneFlagSet(const TArrayRef<bool>& arr) {
TRuntimeNode TKikimrProgramBuilder::SelectRange(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TArrayRef<const TSelectColumn>& columns,
const TTableRangeOptions& options,
TRuntimeNode readTarget)
@@ -307,14 +317,16 @@ TRuntimeNode TKikimrProgramBuilder::SelectRange(
TDataType* dataFrom = nullptr;
TDataType* dataTo = nullptr;
if (i < options.FromColumns.size()) {
- from[i] = RewriteNullType(options.FromColumns[i], keyTypes[i]);
+ MKQL_ENSURE(keyTypes[i].GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+ from[i] = RewriteNullType(options.FromColumns[i], keyTypes[i].GetTypeId());
bool isOptionalFrom;
dataFrom = UnpackOptionalData(from[i], isOptionalFrom);
}
if (i < options.ToColumns.size()) {
- to[i] = RewriteNullType(options.ToColumns[i], keyTypes[i]);
+ MKQL_ENSURE(keyTypes[i].GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+ to[i] = RewriteNullType(options.ToColumns[i], keyTypes[i].GetTypeId());
bool isOptionalTo;
dataTo = UnpackOptionalData(to[i], isOptionalTo);
@@ -329,8 +341,8 @@ TRuntimeNode TKikimrProgramBuilder::SelectRange(
}
ui32 dataType = dataFrom ? dataFrom->GetSchemeType() : dataTo->GetSchemeType();
- MKQL_ENSURE(keyTypes[i] == dataType, "Mismatch of key column " << i
- << " type, expected: " << NUdf::GetDataTypeInfo(NUdf::GetDataSlot(keyTypes[i])).Name
+ MKQL_ENSURE(keyTypes[i].GetTypeId() == dataType, "Mismatch of key column " << i
+ << " type, expected: " << NUdf::GetDataTypeInfo(NUdf::GetDataSlot(keyTypes[i].GetTypeId())).Name
<< ", but got: " << NUdf::GetDataTypeInfo(NUdf::GetDataSlot(dataType)).Name);
}
@@ -375,7 +387,7 @@ TRuntimeNode TKikimrProgramBuilder::SelectRange(
TRuntimeNode TKikimrProgramBuilder::UpdateRow(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TKeyColumnValues& row,
TUpdateRowBuilder& update)
{
@@ -391,7 +403,7 @@ TRuntimeNode TKikimrProgramBuilder::UpdateRow(
TRuntimeNode TKikimrProgramBuilder::EraseRow(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TKeyColumnValues& row)
{
auto rows = FixKeysType(keyTypes, row);
diff --git a/ydb/core/engine/kikimr_program_builder.h b/ydb/core/engine/kikimr_program_builder.h
index 446d976dd3e..267f06bdaeb 100644
--- a/ydb/core/engine/kikimr_program_builder.h
+++ b/ydb/core/engine/kikimr_program_builder.h
@@ -13,12 +13,12 @@ static constexpr NUdf::TDataTypeId LegacyPairUi64Ui64 = 0x101;
struct TSelectColumn {
TStringBuf Label;
ui32 ColumnId = 0;
- NUdf::TDataTypeId SchemeType = 0;
+ NScheme::TTypeInfo SchemeType;
EColumnTypeConstraint TypeConstraint = EColumnTypeConstraint::Nullable;
TSelectColumn()
{}
- TSelectColumn(TStringBuf label, ui32 columnId, NUdf::TDataTypeId schemeType, EColumnTypeConstraint typeConstraint)
+ TSelectColumn(TStringBuf label, ui32 columnId, NScheme::TTypeInfo schemeType, EColumnTypeConstraint typeConstraint)
: Label(label)
, ColumnId(columnId)
, SchemeType(schemeType)
@@ -91,10 +91,10 @@ public:
TUpdateRowBuilder(const TUpdateRowBuilder&) = default;
TUpdateRowBuilder& operator=(const TUpdateRowBuilder&) = default;
// Supports Data or Optional of Data
- void SetColumn(ui32 columnId, ui32 expectedType, TRuntimeNode value);
+ void SetColumn(ui32 columnId, NScheme::TTypeInfo expectedType, TRuntimeNode value);
// Supports Data
void InplaceUpdateColumn(
- ui32 columnId, ui32 expectedType,
+ ui32 columnId, NScheme::TTypeInfo expectedType,
TRuntimeNode value, EInplaceUpdateMode mode);
void EraseColumn(ui32 columnId);
TRuntimeNode Build();
@@ -138,14 +138,14 @@ public:
// returns Optional of structType
TRuntimeNode SelectRow(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TArrayRef<const TSelectColumn>& columns,
const TKeyColumnValues& row,
const TReadTarget& target = TReadTarget());
TRuntimeNode SelectRow(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TArrayRef<const TSelectColumn>& columns,
const TKeyColumnValues& row,
TRuntimeNode readTarget);
@@ -158,14 +158,14 @@ public:
// returns Struct with fields { List: List of structType, Truncated: Bool }
TRuntimeNode SelectRange(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TArrayRef<const TSelectColumn>& columns,
const TTableRangeOptions& options,
const TReadTarget& target = TReadTarget());
TRuntimeNode SelectRange(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TArrayRef<const TSelectColumn>& columns,
const TTableRangeOptions& options,
TRuntimeNode readTarget);
@@ -177,14 +177,14 @@ public:
// returns Void
TRuntimeNode UpdateRow(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TKeyColumnValues& row,
TUpdateRowBuilder& update);
// returns Void
TRuntimeNode EraseRow(
const TTableId& tableId,
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TKeyColumnValues& row);
//-- parameters functions
@@ -236,7 +236,7 @@ private:
TRuntimeNode NewDataLiteral(const std::pair<ui64, ui64>& data) const;
TRuntimeNode BuildTableId(const TTableId& tableId) const;
TVector<TRuntimeNode> FixKeysType(
- const TArrayRef<const ui32>& keyTypes,
+ const TArrayRef<NScheme::TTypeInfo>& keyTypes,
const TKeyColumnValues& row) const;
TRuntimeNode RewriteNullType(
TRuntimeNode value,
diff --git a/ydb/core/engine/kikimr_program_builder_ut.cpp b/ydb/core/engine/kikimr_program_builder_ut.cpp
index 00c58c32b7b..4173d753c80 100644
--- a/ydb/core/engine/kikimr_program_builder_ut.cpp
+++ b/ydb/core/engine/kikimr_program_builder_ut.cpp
@@ -16,6 +16,9 @@
namespace NKikimr {
namespace NMiniKQL {
+
+ using TTypeInfo = NScheme::TTypeInfo;
+
TIntrusivePtr<IRandomProvider> CreateRandomProvider() {
return CreateDeterministicRandomProvider(1);
}
@@ -91,7 +94,11 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
keyColumns.push_back(pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui64>::Id));
keyColumns.push_back(pgmBuilder.NewOptional(
pgmBuilder.NewDataLiteral<NUdf::EDataSlot::String>("qwe")));
- TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id, NUdf::TDataType<char*>::Id });
+ TVector<TTypeInfo> keyTypes({
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
+ TTypeInfo(NUdf::TDataType<ui64>::Id),
+ TTypeInfo(NUdf::TDataType<char*>::Id)
+ });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.EraseRow(TTableId(1, 2),
keyTypes,
keyColumns));
@@ -118,9 +125,9 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Range.To[2].Size() == 3);
UNIT_ASSERT(tableKeys[0]->Columns.size() == 0);
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 3);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<ui32>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1] == NUdf::TDataType<ui64>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[2] == NUdf::TDataType<char*>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1].GetTypeId() == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[2].GetTypeId() == NUdf::TDataType<char*>::Id);
}
Y_UNIT_TEST(TestEraseRowPartialDynamicKey) {
@@ -135,7 +142,11 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(34),
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(12)));
keyColumns.push_back(pgmBuilder.NewDataLiteral<NUdf::EDataSlot::String>("qwe"));
- TVector<ui32> keyTypes({ NUdf::TDataType<ui64>::Id, NUdf::TDataType<ui32>::Id, NUdf::TDataType<char*>::Id });
+ TVector<TTypeInfo> keyTypes({
+ TTypeInfo(NUdf::TDataType<ui64>::Id),
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
+ TTypeInfo(NUdf::TDataType<char*>::Id)
+ });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.EraseRow(TTableId(1, 2),
keyTypes,
keyColumns));
@@ -160,9 +171,9 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Range.To[0].IsNull());
UNIT_ASSERT(tableKeys[0]->Columns.size() == 0);
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 3);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<ui64>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1] == NUdf::TDataType<ui32>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[2] == NUdf::TDataType<char*>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1].GetTypeId() == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[2].GetTypeId() == NUdf::TDataType<char*>::Id);
}
Y_UNIT_TEST(TestEraseRowDynamicKey) {
@@ -177,7 +188,10 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(12)));
keyColumns.push_back(pgmBuilder.NewDataLiteral<NUdf::EDataSlot::String>("qwe"));
- TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<char*>::Id });
+ TVector<TTypeInfo> keyTypes({
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
+ TTypeInfo(NUdf::TDataType<char*>::Id)
+ });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.EraseRow(TTableId(1, 2),
keyTypes,
keyColumns));
@@ -200,8 +214,8 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Range.To.size() == 0);
UNIT_ASSERT(tableKeys[0]->Columns.size() == 0);
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 2);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<ui32>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1] == NUdf::TDataType<char*>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1].GetTypeId() == NUdf::TDataType<char*>::Id);
}
Y_UNIT_TEST(TestSelectRow) {
@@ -216,9 +230,13 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
keyColumns.push_back(pgmBuilder.NewOptional(
pgmBuilder.NewDataLiteral<NUdf::EDataSlot::String>("qwe")));
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id, NUdf::TDataType<char*>::Id });
+ columnsToRead.emplace_back("column1", 34, TTypeInfo(NUdf::TDataType<ui32>::Id), EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, TTypeInfo(NUdf::TDataType<ui64>::Id), EColumnTypeConstraint::Nullable);
+ TVector<TTypeInfo> keyTypes({
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
+ TTypeInfo(NUdf::TDataType<ui64>::Id),
+ TTypeInfo(NUdf::TDataType<char*>::Id)
+ });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRow(TTableId(1, 2),
keyTypes,
@@ -247,14 +265,14 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Columns.size() == 2);
UNIT_ASSERT(tableKeys[0]->Columns[0].Column == 34);
UNIT_ASSERT(tableKeys[0]->Columns[0].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType.GetTypeId() == NUdf::TDataType<ui32>::Id);
UNIT_ASSERT(tableKeys[0]->Columns[1].Column == 56);
UNIT_ASSERT(tableKeys[0]->Columns[1].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType.GetTypeId() == NUdf::TDataType<ui64>::Id);
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 3);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<ui32>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1] == NUdf::TDataType<ui64>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[2] == NUdf::TDataType<char*>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1].GetTypeId() == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[2].GetTypeId() == NUdf::TDataType<char*>::Id);
}
Y_UNIT_TEST(TestUpdateRowStaticKey) {
@@ -269,12 +287,16 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
keyColumns.push_back(pgmBuilder.NewOptional(
pgmBuilder.NewDataLiteral<NUdf::EDataSlot::String>("qwe")));
auto update = pgmBuilder.GetUpdateRowBuilder();
- update.SetColumn(34, NUdf::TDataType<ui32>::Id,
+ update.SetColumn(34, TTypeInfo(NUdf::TDataType<ui32>::Id),
pgmBuilder.NewOptional(pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(12)));
update.EraseColumn(56);
- update.InplaceUpdateColumn(78, NUdf::TDataType<ui64>::Id,
+ update.InplaceUpdateColumn(78, TTypeInfo(NUdf::TDataType<ui64>::Id),
pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(1), EInplaceUpdateMode::Sum);
- TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id, NUdf::TDataType<char*>::Id });
+ TVector<TTypeInfo> keyTypes({
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
+ TTypeInfo(NUdf::TDataType<ui64>::Id),
+ TTypeInfo(NUdf::TDataType<char*>::Id)
+ });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.UpdateRow(TTableId(1, 2),
keyTypes,
keyColumns, update));
@@ -302,17 +324,17 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Columns.size() == 3);
UNIT_ASSERT(tableKeys[0]->Columns[0].Column == 34);
UNIT_ASSERT(tableKeys[0]->Columns[0].Operation == TKeyDesc::EColumnOperation::Set);
- UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType.GetTypeId() == NUdf::TDataType<ui32>::Id);
UNIT_ASSERT(tableKeys[0]->Columns[1].Column == 56);
UNIT_ASSERT(tableKeys[0]->Columns[1].Operation == TKeyDesc::EColumnOperation::Set);
- UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType == 0);
+ UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType.GetTypeId() == 0);
UNIT_ASSERT(tableKeys[0]->Columns[2].Column == 78);
UNIT_ASSERT(tableKeys[0]->Columns[2].Operation == TKeyDesc::EColumnOperation::InplaceUpdate);
- UNIT_ASSERT(tableKeys[0]->Columns[2].ExpectedType == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[2].ExpectedType.GetTypeId() == NUdf::TDataType<ui64>::Id);
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 3);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<ui32>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1] == NUdf::TDataType<ui64>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[2] == NUdf::TDataType<char*>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1].GetTypeId() == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[2].GetTypeId() == NUdf::TDataType<char*>::Id);
}
Y_UNIT_TEST(TestUpdateRowDynamicKey) {
@@ -329,12 +351,16 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
keyColumns.push_back(pgmBuilder.NewOptional(
pgmBuilder.NewDataLiteral<NUdf::EDataSlot::String>("qwe")));
auto update = pgmBuilder.GetUpdateRowBuilder();
- update.SetColumn(34, NUdf::TDataType<ui32>::Id,
+ update.SetColumn(34, TTypeInfo(NUdf::TDataType<ui32>::Id),
pgmBuilder.NewOptional(pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(12)));
update.EraseColumn(56);
- update.InplaceUpdateColumn(78, NUdf::TDataType<ui64>::Id,
+ update.InplaceUpdateColumn(78, TTypeInfo(NUdf::TDataType<ui64>::Id),
pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(1), EInplaceUpdateMode::Sum);
- TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id, NUdf::TDataType<char*>::Id });
+ TVector<TTypeInfo> keyTypes({
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
+ TTypeInfo(NUdf::TDataType<ui64>::Id),
+ TTypeInfo(NUdf::TDataType<char*>::Id)
+ });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.UpdateRow(TTableId(1, 2),
keyTypes,
keyColumns, update));
@@ -359,18 +385,18 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Columns.size() == 3);
UNIT_ASSERT(tableKeys[0]->Columns[0].Column == 34);
UNIT_ASSERT(tableKeys[0]->Columns[0].Operation == TKeyDesc::EColumnOperation::Set);
- UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType.GetTypeId() == NUdf::TDataType<ui32>::Id);
UNIT_ASSERT(tableKeys[0]->Columns[1].Column == 56);
UNIT_ASSERT(tableKeys[0]->Columns[1].Operation == TKeyDesc::EColumnOperation::Set);
- UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType == 0);
+ UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType.GetTypeId() == 0);
UNIT_ASSERT(tableKeys[0]->Columns[2].Column == 78);
UNIT_ASSERT(tableKeys[0]->Columns[2].Operation == TKeyDesc::EColumnOperation::InplaceUpdate);
- UNIT_ASSERT(tableKeys[0]->Columns[2].ExpectedType == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[2].ExpectedType.GetTypeId() == NUdf::TDataType<ui64>::Id);
UNIT_ASSERT(tableKeys[0]->Columns[2].InplaceUpdateMode == (ui32)EInplaceUpdateMode::Sum);
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 3);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<ui32>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1] == NUdf::TDataType<ui64>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[2] == NUdf::TDataType<char*>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1].GetTypeId() == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[2].GetTypeId() == NUdf::TDataType<char*>::Id);
}
Y_UNIT_TEST(TestSelectFromInclusiveRange) {
@@ -386,9 +412,12 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
options.FromColumns = from;
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id });
+ columnsToRead.emplace_back("column1", 34, TTypeInfo(NUdf::TDataType<ui32>::Id), EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, TTypeInfo(NUdf::TDataType<ui64>::Id), EColumnTypeConstraint::Nullable);
+ TVector<TTypeInfo> keyTypes({
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
+ TTypeInfo(NUdf::TDataType<ui64>::Id)
+ });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
keyTypes,
@@ -411,15 +440,15 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Range.From[1].IsNull());
UNIT_ASSERT(tableKeys[0]->Range.To.size() == 0);
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 2);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<ui32>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1] == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1].GetTypeId() == NUdf::TDataType<ui64>::Id);
UNIT_ASSERT(tableKeys[0]->Columns.size() == 2);
UNIT_ASSERT(tableKeys[0]->Columns[0].Column == 34);
UNIT_ASSERT(tableKeys[0]->Columns[0].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType.GetTypeId() == NUdf::TDataType<ui32>::Id);
UNIT_ASSERT(tableKeys[0]->Columns[1].Column == 56);
UNIT_ASSERT(tableKeys[0]->Columns[1].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType.GetTypeId() == NUdf::TDataType<ui64>::Id);
}
Y_UNIT_TEST(TestSelectFromExclusiveRange) {
@@ -436,9 +465,12 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeInitValue);
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id });
+ columnsToRead.emplace_back("column1", 34, TTypeInfo(NUdf::TDataType<ui32>::Id), EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, TTypeInfo(NUdf::TDataType<ui64>::Id), EColumnTypeConstraint::Nullable);
+ TVector<TTypeInfo> keyTypes({
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
+ TTypeInfo(NUdf::TDataType<ui64>::Id)
+ });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
keyTypes,
@@ -461,15 +493,15 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Range.From[1].IsNull());
UNIT_ASSERT(tableKeys[0]->Range.To.size() == 0);
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 2);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<ui32>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1] == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1].GetTypeId() == NUdf::TDataType<ui64>::Id);
UNIT_ASSERT(tableKeys[0]->Columns.size() == 2);
UNIT_ASSERT(tableKeys[0]->Columns[0].Column == 34);
UNIT_ASSERT(tableKeys[0]->Columns[0].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType.GetTypeId() == NUdf::TDataType<ui32>::Id);
UNIT_ASSERT(tableKeys[0]->Columns[1].Column == 56);
UNIT_ASSERT(tableKeys[0]->Columns[1].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType.GetTypeId() == NUdf::TDataType<ui64>::Id);
}
Y_UNIT_TEST(TestSelectToInclusiveRange) {
@@ -488,9 +520,12 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
options.ToColumns = to;
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id });
+ columnsToRead.emplace_back("column1", 34, TTypeInfo(NUdf::TDataType<ui32>::Id), EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, TTypeInfo(NUdf::TDataType<ui64>::Id), EColumnTypeConstraint::Nullable);
+ TVector<TTypeInfo> keyTypes({
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
+ TTypeInfo(NUdf::TDataType<ui64>::Id)
+ });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
keyTypes,
@@ -515,15 +550,15 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Range.To[0].Size() == 4);
UNIT_ASSERT(tableKeys[0]->Range.To[1].IsNull());
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 2);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<ui32>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1] == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1].GetTypeId() == NUdf::TDataType<ui64>::Id);
UNIT_ASSERT(tableKeys[0]->Columns.size() == 2);
UNIT_ASSERT(tableKeys[0]->Columns[0].Column == 34);
UNIT_ASSERT(tableKeys[0]->Columns[0].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType.GetTypeId() == NUdf::TDataType<ui32>::Id);
UNIT_ASSERT(tableKeys[0]->Columns[1].Column == 56);
UNIT_ASSERT(tableKeys[0]->Columns[1].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType.GetTypeId() == NUdf::TDataType<ui64>::Id);
}
Y_UNIT_TEST(TestSelectToExclusiveRange) {
@@ -543,9 +578,12 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id });
+ columnsToRead.emplace_back("column1", 34, TTypeInfo(NUdf::TDataType<ui32>::Id), EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, TTypeInfo(NUdf::TDataType<ui64>::Id), EColumnTypeConstraint::Nullable);
+ TVector<TTypeInfo> keyTypes({
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
+ TTypeInfo(NUdf::TDataType<ui64>::Id)
+ });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
keyTypes,
@@ -570,15 +608,15 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Range.To[0].Size() == 4);
UNIT_ASSERT(tableKeys[0]->Range.To[1].IsNull());
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 2);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<ui32>::Id);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1] == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[1].GetTypeId() == NUdf::TDataType<ui64>::Id);
UNIT_ASSERT(tableKeys[0]->Columns.size() == 2);
UNIT_ASSERT(tableKeys[0]->Columns[0].Column == 34);
UNIT_ASSERT(tableKeys[0]->Columns[0].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType.GetTypeId() == NUdf::TDataType<ui32>::Id);
UNIT_ASSERT(tableKeys[0]->Columns[1].Column == 56);
UNIT_ASSERT(tableKeys[0]->Columns[1].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType.GetTypeId() == NUdf::TDataType<ui64>::Id);
}
Y_UNIT_TEST(TestSelectBothFromInclusiveToInclusiveRange) {
@@ -596,9 +634,9 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
options.ToColumns = to;
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes({ NUdf::TDataType<char*>::Id });
+ columnsToRead.emplace_back("column1", 34, TTypeInfo(NUdf::TDataType<ui32>::Id), EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, TTypeInfo(NUdf::TDataType<ui64>::Id), EColumnTypeConstraint::Nullable);
+ TVector<TTypeInfo> keyTypes({ TTypeInfo(NUdf::TDataType<char*>::Id) });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
keyTypes,
@@ -621,14 +659,14 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Range.To.size() == 1);
UNIT_ASSERT(tableKeys[0]->Range.To[0].Size() == 2);
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 1);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<char*>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<char*>::Id);
UNIT_ASSERT(tableKeys[0]->Columns.size() == 2);
UNIT_ASSERT(tableKeys[0]->Columns[0].Column == 34);
UNIT_ASSERT(tableKeys[0]->Columns[0].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType.GetTypeId() == NUdf::TDataType<ui32>::Id);
UNIT_ASSERT(tableKeys[0]->Columns[1].Column == 56);
UNIT_ASSERT(tableKeys[0]->Columns[1].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType.GetTypeId() == NUdf::TDataType<ui64>::Id);
}
Y_UNIT_TEST(TestSelectBothFromExclusiveToExclusiveRange) {
@@ -648,9 +686,9 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
TReadRangeOptions::TFlags::ExcludeInitValue | TReadRangeOptions::TFlags::ExcludeTermValue);
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes({ NUdf::TDataType<char*>::Id });
+ columnsToRead.emplace_back("column1", 34, TTypeInfo(NUdf::TDataType<ui32>::Id), EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, TTypeInfo(NUdf::TDataType<ui64>::Id), EColumnTypeConstraint::Nullable);
+ TVector<TTypeInfo> keyTypes({ TTypeInfo(NUdf::TDataType<char*>::Id) });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
keyTypes,
@@ -673,14 +711,14 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->Range.To.size() == 1);
UNIT_ASSERT(tableKeys[0]->Range.To[0].Size() == 2);
UNIT_ASSERT(tableKeys[0]->KeyColumnTypes.size() == 1);
- UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0] == NUdf::TDataType<char*>::Id);
+ UNIT_ASSERT(tableKeys[0]->KeyColumnTypes[0].GetTypeId() == NUdf::TDataType<char*>::Id);
UNIT_ASSERT(tableKeys[0]->Columns.size() == 2);
UNIT_ASSERT(tableKeys[0]->Columns[0].Column == 34);
UNIT_ASSERT(tableKeys[0]->Columns[0].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType == NUdf::TDataType<ui32>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[0].ExpectedType.GetTypeId() == NUdf::TDataType<ui32>::Id);
UNIT_ASSERT(tableKeys[0]->Columns[1].Column == 56);
UNIT_ASSERT(tableKeys[0]->Columns[1].Operation == TKeyDesc::EColumnOperation::Read);
- UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType == NUdf::TDataType<ui64>::Id);
+ UNIT_ASSERT(tableKeys[0]->Columns[1].ExpectedType.GetTypeId() == NUdf::TDataType<ui64>::Id);
}
Y_UNIT_TEST(TestAcquireLocks) {
diff --git a/ydb/core/engine/minikql/flat_local_tx_read_columns.h b/ydb/core/engine/minikql/flat_local_tx_read_columns.h
index 57d3c7bef9d..53e08fd2869 100644
--- a/ydb/core/engine/minikql/flat_local_tx_read_columns.h
+++ b/ydb/core/engine/minikql/flat_local_tx_read_columns.h
@@ -53,11 +53,11 @@ public:
return true;
}
- TVector<NScheme::TTypeId> keyColumnTypes;
+ TVector<NScheme::TTypeInfo> keyColumnTypes;
TSmallVec<TRawTypeValue> keyFrom;
TSmallVec<TRawTypeValue> keyTo;
- bool inclusiveFrom = Ev->Get()->Record.GetFromKeyInclusive();;
- bool inclusiveTo = Ev->Get()->Record.GetToKeyInclusive();;
+ bool inclusiveFrom = Ev->Get()->Record.GetFromKeyInclusive();
+ bool inclusiveTo = Ev->Get()->Record.GetToKeyInclusive();
// TODO: check schemas
for (ui32 keyColId : tableInfo->KeyColumns) {
@@ -78,7 +78,7 @@ public:
}
TVector<NTable::TTag> valueColumns;
- TVector<std::pair<TString, NScheme::TTypeId>> columns;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> columns;
for (const auto& col : Ev->Get()->Record.GetColumns()) {
const auto* colNameInfo = tableInfo->ColumnNames.FindPtr(col);
if (!colNameInfo) {
diff --git a/ydb/core/engine/minikql/minikql_engine_host.cpp b/ydb/core/engine/minikql/minikql_engine_host.cpp
index d362d938068..84cf7fa3b21 100644
--- a/ydb/core/engine/minikql/minikql_engine_host.cpp
+++ b/ydb/core/engine/minikql/minikql_engine_host.cpp
@@ -22,7 +22,8 @@ void ConvertTableKeys(const TScheme& scheme, const TScheme::TTableInfo* tableInf
for (size_t keyIdx = 0; keyIdx < row.size(); keyIdx++) {
const TCell& cell = row[keyIdx];
ui32 keyCol = tableInfo->KeyColumns[keyIdx];
- NScheme::TTypeId vtype = scheme.GetColumnInfo(tableInfo, keyCol)->PType;
+ // TODO: support pg types
+ NScheme::TTypeId vtype = scheme.GetColumnInfo(tableInfo, keyCol)->PType.GetTypeId();
if (cell.IsNull()) {
key.emplace_back();
bytes += 1;
@@ -75,7 +76,7 @@ bool TEngineHost::IsValidKey(TKeyDesc& key, std::pair<ui64, ui64>& maxSnapshotTi
// Specified keys types should be valid for any operation
for (size_t keyIdx = 0; keyIdx < key.KeyColumnTypes.size(); keyIdx++) {
ui32 keyCol = tableInfo->KeyColumns[keyIdx];
- NScheme::TTypeId vtype = Scheme.GetColumnInfo(tableInfo, keyCol)->PType;
+ auto vtype = Scheme.GetColumnInfo(tableInfo, keyCol)->PType;
EH_VALIDATE(key.KeyColumnTypes[keyIdx] == vtype, TypeCheckFailed);
}
@@ -93,7 +94,7 @@ bool TEngineHost::IsValidKey(TKeyDesc& key, std::pair<ui64, ui64>& maxSnapshotTi
}
auto* cinfo = Scheme.GetColumnInfo(tableInfo, cop.Column);
EH_VALIDATE(cinfo, TypeCheckFailed); // Unknown column
- NScheme::TTypeId vtype = cinfo->PType;
+ auto vtype = cinfo->PType;
EH_VALIDATE(cop.ExpectedType == vtype, TypeCheckFailed);
EH_VALIDATE(cop.Operation == TKeyDesc::EColumnOperation::Read, OperationNotSupported);
}
@@ -103,8 +104,8 @@ bool TEngineHost::IsValidKey(TKeyDesc& key, std::pair<ui64, ui64>& maxSnapshotTi
const TKeyDesc::TColumnOp& cop = key.Columns[i];
auto* cinfo = Scheme.GetColumnInfo(tableInfo, cop.Column);
EH_VALIDATE(cinfo, TypeCheckFailed); // Unknown column
- NScheme::TTypeId vtype = cinfo->PType;
- EH_VALIDATE(!cop.ExpectedType || cop.ExpectedType == vtype, TypeCheckFailed);
+ auto vtype = cinfo->PType;
+ EH_VALIDATE(cop.ExpectedType.GetTypeId() == 0 || cop.ExpectedType == vtype, TypeCheckFailed);
EH_VALIDATE(cop.Operation == TKeyDesc::EColumnOperation::Set, OperationNotSupported); // TODO[serxa]: support inplace operations in IsValidKey
}
} else if (key.RowOperation == TKeyDesc::ERowOperation::Erase) {
@@ -286,7 +287,7 @@ NUdf::TUnboxedValue TEngineHost::SelectRow(const TTableId& tableId, const TArray
TSmallVec<NTable::TTag> systemColumnTags;
AnalyzeRowType(columnIds, tags, systemColumnTags);
- TSmallVec<NScheme::TTypeId> cellTypes;
+ TSmallVec<NScheme::TTypeInfo> cellTypes;
cellTypes.reserve(tags.size());
for (size_t i = 0; i < tags.size(); ++i)
cellTypes.emplace_back(tableInfo->Columns.at(tags[i]).PType);
@@ -538,8 +539,16 @@ public:
TString firstKey;
firstKey.reserve(totalSize);
firstKey.AppendNoAlias((const char*)&tuple.ColumnCount, sizeof(ui32));
- firstKey.AppendNoAlias((const char*)tuple.Types, tuple.ColumnCount * sizeof(NScheme::TTypeId));
+ TVector<NScheme::TTypeId> typeIds;
+ typeIds.reserve(tuple.ColumnCount);
+ for (ui32 i = 0; i < tuple.ColumnCount; ++i) {
+ auto typeId = tuple.Types[i].GetTypeId();
+ Y_ENSURE(typeId != NScheme::NTypeIds::Pg, "pg types are not supported");
+ typeIds.push_back(typeId);
+ }
+ firstKey.AppendNoAlias((const char*)typeIds.data(), tuple.ColumnCount * sizeof(NScheme::TTypeId));
firstKey.AppendNoAlias(cells);
+ // TODO: support pg types
if (List.FirstKey) {
Y_VERIFY_DEBUG(*List.FirstKey == firstKey);
@@ -879,7 +888,8 @@ void TEngineHost::UpdateRow(const TTableId& tableId, const TArrayRef<const TCell
for (size_t i = 0; i < commands.size(); i++) {
const TUpdateCommand& upd = commands[i];
Y_VERIFY(upd.Operation == TKeyDesc::EColumnOperation::Set); // TODO[serxa]: support inplace update in update row
- NScheme::TTypeId vtype = Scheme.GetColumnInfo(tableInfo, upd.Column)->PType;
+ // TODO: support pg types
+ NScheme::TTypeId vtype = Scheme.GetColumnInfo(tableInfo, upd.Column)->PType.GetTypeId();
ops.emplace_back(upd.Column, NTable::ECellOp::Set,
upd.Value.IsNull() ? TRawTypeValue() : TRawTypeValue(upd.Value.Data(), upd.Value.Size(), vtype));
valueBytes += upd.Value.IsNull() ? 1 : upd.Value.Size();
@@ -996,12 +1006,12 @@ void AnalyzeRowType(TStructLiteral* columnIds, TSmallVec<NTable::TTag>& tags, TS
}
}
-NUdf::TUnboxedValue GetCellValue(const TCell& cell, NScheme::TTypeId type) {
+NUdf::TUnboxedValue GetCellValue(const TCell& cell, NScheme::TTypeInfo type) {
if (cell.IsNull()) {
return NUdf::TUnboxedValue();
}
- switch (type) {
+ switch (type.GetTypeId()) {
case NYql::NProto::TypeIds::Bool:
return NUdf::TUnboxedValuePod(cell.AsValue<bool>());
case NYql::NProto::TypeIds::Int8:
@@ -1065,9 +1075,16 @@ NUdf::TUnboxedValue GetCellValue(const TCell& cell, NScheme::TTypeId type) {
return MakeString(NUdf::TStringRef(cell.Data(), cell.Size()));
default:
- Y_VERIFY_DEBUG(false, "Unsupported type: %" PRIu16, type);
- return MakeString(NUdf::TStringRef(cell.Data(), cell.Size()));
+ break;
}
+
+ if (type.GetTypeId() == NScheme::NTypeIds::Pg) {
+ // TODO: support pg types
+ Y_VERIFY(false, "pg types are not supported");
+ }
+
+ Y_VERIFY_DEBUG(false, "Unsupported type: %" PRIu16, type.GetTypeId());
+ return MakeString(NUdf::TStringRef(cell.Data(), cell.Size()));
}
}}
diff --git a/ydb/core/engine/minikql/minikql_engine_host.h b/ydb/core/engine/minikql/minikql_engine_host.h
index 7ae05b75237..7f8434eb887 100644
--- a/ydb/core/engine/minikql/minikql_engine_host.h
+++ b/ydb/core/engine/minikql/minikql_engine_host.h
@@ -187,7 +187,7 @@ public:
};
void AnalyzeRowType(TStructLiteral* columnIds, TSmallVec<NTable::TTag>& tags, TSmallVec<NTable::TTag>& systemColumnTags);
-NUdf::TUnboxedValue GetCellValue(const TCell& cell, NScheme::TTypeId type);
+NUdf::TUnboxedValue GetCellValue(const TCell& cell, NScheme::TTypeInfo type);
NUdf::TUnboxedValue CreateSelectRangeLazyRowsList(NTable::TDatabase& db, const NTable::TScheme& scheme,
const THolderFactory& holderFactory, const TTableId& tableId, ui64 localTid, const TSmallVec<NTable::TTag>& tags,
const TSmallVec<bool>& skipNullKeys, const TTableRange& range, ui64 itemsLimit, ui64 bytesLimit,
diff --git a/ydb/core/engine/mkql_engine_flat.cpp b/ydb/core/engine/mkql_engine_flat.cpp
index 52a61a3eb22..a79fdf83fe4 100644
--- a/ydb/core/engine/mkql_engine_flat.cpp
+++ b/ydb/core/engine/mkql_engine_flat.cpp
@@ -566,8 +566,8 @@ public:
// Temporary check for KIKIMR-7112
bool CheckValidUint8InKey(TKeyDesc& desc) const {
if (!desc.Range.Point) {
- for (NScheme::TTypeId typeId : desc.KeyColumnTypes) {
- if (typeId == NScheme::NTypeIds::Uint8) {
+ for (auto typeInfo : desc.KeyColumnTypes) {
+ if (typeInfo.GetTypeId() == NScheme::NTypeIds::Uint8) {
AddError("Validate", __LINE__, "Bad shard program: dynamic keys with Uint8 columns are currently prohibited");
return false;
}
@@ -578,7 +578,7 @@ public:
return false;
}
for (size_t i = 0; i < desc.Range.From.size(); ++i) {
- if (desc.KeyColumnTypes[i] != NScheme::NTypeIds::Uint8)
+ if (desc.KeyColumnTypes[i].GetTypeId() != NScheme::NTypeIds::Uint8)
continue;
const TCell& c = desc.Range.From[i];
if (!c.IsNull() && c.AsValue<ui8>() > 127) {
diff --git a/ydb/core/engine/mkql_engine_flat_extfunc.cpp b/ydb/core/engine/mkql_engine_flat_extfunc.cpp
index 51e79ad54e4..bb10c3a8803 100644
--- a/ydb/core/engine/mkql_engine_flat_extfunc.cpp
+++ b/ydb/core/engine/mkql_engine_flat_extfunc.cpp
@@ -26,7 +26,9 @@ namespace {
}
const auto literal = AS_VALUE(TDataLiteral, data);
- return MakeCell(literal->GetType()->GetSchemeType(), literal->AsValue(), env, false);
+ // TODO: support pg types
+ auto typeInfo = NScheme::TTypeInfo(literal->GetType()->GetSchemeType());
+ return MakeCell(typeInfo, literal->AsValue(), env, false);
}
void ExtractRow(TVector<TCell>& row, TTupleLiteral* tupleNode, const TTypeEnvironment& env) {
@@ -45,7 +47,9 @@ namespace {
const auto dataType = type->IsOptional()
? AS_TYPE(TDataType, AS_TYPE(TOptionalType, type)->GetItemType()) : AS_TYPE(TDataType, type);
- return MakeCell(dataType->GetSchemeType(), value, env);
+ // TODO: support pg types
+ auto typeInfo = NScheme::TTypeInfo(dataType->GetSchemeType());
+ return MakeCell(typeInfo, value, env);
}
void ExtractRow(const NUdf::TUnboxedValue& row, TTupleType* rowType, TVector<TCell>& cells, const TTypeEnvironment& env) {
@@ -600,7 +604,7 @@ namespace {
bool truncatedAny = false;
ui32 keyColumnsCount = 0;
- TVector<NUdf::TDataTypeId> types;
+ TVector<NScheme::TTypeInfo> types;
using TPartKey = std::tuple<const TCell*, NUdf::TUnboxedValue, ui64, ui64, NUdf::TUnboxedValue, bool>;
@@ -632,17 +636,20 @@ namespace {
ui32 typesSize = sizeof(ui32) + partKeyColumnsCount * sizeof(NUdf::TDataTypeId);
MKQL_ENSURE(firstKey.size() >= typesSize, "Corrupted key");
const char* partTypes = firstKey.data() + sizeof(ui32);
+
if (!keyColumnsCount) {
keyColumnsCount = partKeyColumnsCount;
for (ui32 i = 0; i < partKeyColumnsCount; ++i) {
auto partType = ReadUnaligned<NUdf::TDataTypeId>(partTypes + i * sizeof(NUdf::TDataTypeId));
- types.push_back(partType);
+ // TODO: support pg types
+ types.push_back(NScheme::TTypeInfo(partType));
}
} else {
MKQL_ENSURE(keyColumnsCount == partKeyColumnsCount, "Mismatch of key columns count");
for (ui32 i = 0; i < keyColumnsCount; ++i) {
auto partType = ReadUnaligned<NUdf::TDataTypeId>(partTypes + i * sizeof(NUdf::TDataTypeId));
- MKQL_ENSURE(partType == types[i], "Mismatch of key columns type");
+ // TODO: support pg types
+ MKQL_ENSURE(partType == types[i].GetTypeId(), "Mismatch of key columns type");
}
}
diff --git a/ydb/core/engine/mkql_engine_flat_ut.cpp b/ydb/core/engine/mkql_engine_flat_ut.cpp
index 84fcf280cbe..145815e3c6e 100644
--- a/ydb/core/engine/mkql_engine_flat_ut.cpp
+++ b/ydb/core/engine/mkql_engine_flat_ut.cpp
@@ -15,6 +15,8 @@ namespace NKikimr {
namespace NMiniKQL {
namespace {
+ using TTypeInfo = NScheme::TTypeInfo;
+
const ui64 Shard1 = 100;
const ui64 Shard2 = 101;
//const ui64 Shard3 = 102;
@@ -306,15 +308,15 @@ Y_UNIT_TEST_SUITE(TMiniKQLEngineFlatTest) {
TRuntimeNode value = TRuntimeNode())
{
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)TKey;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(TKey);
TRuntimeNode::TList row(1);
row[0] = key ? key : pgmBuilder.NewNull();
auto update = pgmBuilder.GetUpdateRowBuilder();
ui32 columnId = (ui32)Schema1::Table1::Value::ColumnId;
update.SetColumn(columnId,
- TValue,
+ TTypeInfo(TValue),
value ? value : pgmBuilder.NewNull());
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.UpdateRow(TTableId(OwnerId, Table1Id),
@@ -330,13 +332,13 @@ Y_UNIT_TEST_SUITE(TMiniKQLEngineFlatTest) {
TDriver& driver)
{
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)TKey;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(TKey);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.NewNull();
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto value = pgmBuilder.SelectRow(TTableId(OwnerId, Table1Id), keyTypes, columns, row);
@@ -420,8 +422,8 @@ Value {
TDriver driver;
driver.ShardDbState.AddShard<Schema1>(Shard1);
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.TProgramBuilder::TProgramBuilder::NewDataLiteral<ui32>(42);
TVector<TSelectColumn> columns;
@@ -477,8 +479,8 @@ Value {
}
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
TVector<TSelectColumn> columns;
@@ -536,12 +538,12 @@ Value {
}
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto value = pgmBuilder.SelectRow(TTableId(OwnerId, Table1Id), keyTypes, columns, row);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -685,8 +687,8 @@ Value {
}
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.Add(
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(40),
@@ -727,8 +729,8 @@ Value {
pgmBuilder.TProgramBuilder::NewDataLiteral<NUdf::EDataSlot::Utf8>("qwe"));
}
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.NewNull();
@@ -800,8 +802,8 @@ Value {
driver.ShardDbState.AddShard<Schema1>(Shard1);
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.Add(
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(40),
@@ -838,8 +840,8 @@ Value {
driver.ShardDbState.AddShard<Schema1>(Shard1);
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.Add(
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(40),
@@ -848,7 +850,7 @@ Value {
auto update = pgmBuilder.GetUpdateRowBuilder();
ui32 columnId = (ui32)Schema1::Table1::Value::ColumnId;
update.SetColumn(columnId,
- NUdf::TDataType<NUdf::TUtf8>::Id,
+ TTypeInfo(NUdf::TDataType<NUdf::TUtf8>::Id),
pgmBuilder.TProgramBuilder::NewDataLiteral<NUdf::EDataSlot::Utf8>("qwe"));
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.UpdateRow(TTableId(OwnerId, Table1Id),
keyTypes, row, update)));
@@ -910,8 +912,8 @@ Value {
driver.ShardDbState.AddShard<Schema1>(Shard1);
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.Add(
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(40),
@@ -960,8 +962,8 @@ Value {
}
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.Add(
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(40),
@@ -970,7 +972,7 @@ Value {
auto update = pgmBuilder.GetUpdateRowBuilder();
ui32 columnId = (ui32)Schema1::Table1::Value::ColumnId;
update.SetColumn(columnId,
- NUdf::TDataType<NUdf::TUtf8>::Id,
+ TTypeInfo(NUdf::TDataType<NUdf::TUtf8>::Id),
pgmBuilder.TProgramBuilder::NewDataLiteral<NUdf::EDataSlot::Utf8>("qwe"));
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.UpdateRow(TTableId(OwnerId, Table1Id),
keyTypes, row, update)));
@@ -1013,8 +1015,8 @@ Value {
}
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.Add(
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(40),
@@ -1054,8 +1056,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -1125,8 +1127,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewNull();
options.FromColumns = rowFrom;
@@ -1210,12 +1212,12 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -1329,11 +1331,11 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -1440,11 +1442,11 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewNull();
options.FromColumns = rowFrom;
@@ -1554,12 +1556,12 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -1676,11 +1678,11 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(43);
@@ -1798,11 +1800,11 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(43);
@@ -1915,11 +1917,11 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
TRuntimeNode::TList rowTo(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
@@ -2040,11 +2042,11 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
TRuntimeNode::TList rowTo(1);
rowFrom[0] = pgmBuilder.NewNull();
@@ -2151,11 +2153,11 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
TRuntimeNode::TList rowTo(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
@@ -2272,11 +2274,11 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
TRuntimeNode::TList rowTo(1);
rowFrom[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
@@ -2402,11 +2404,11 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
TRuntimeNode::TList rowTo(1);
rowFrom[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
@@ -2525,11 +2527,11 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
TRuntimeNode::TList rowTo(1);
rowFrom[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
@@ -2648,11 +2650,11 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
TRuntimeNode::TList rowTo(1);
rowFrom[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
@@ -2766,22 +2768,22 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes1(1);
- keyTypes1[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes1(1);
+ keyTypes1[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row1(1);
TVector<TSelectColumn> columns1;
- columns1.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns1.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
row1[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
auto value1 = pgmBuilder.SelectRow(TTableId(OwnerId, Table1Id), keyTypes1, columns1, row1);
- TVector<ui32> keyTypes2(1);
- keyTypes2[0] = (ui32)NUdf::TDataType<ui64>::Id;
+ TVector<TTypeInfo> keyTypes2(1);
+ keyTypes2[0] = TTypeInfo(NUdf::TDataType<ui64>::Id);
TRuntimeNode::TList row2(1);
row2[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(11);
TVector<TSelectColumn> columns2;
- columns2.emplace_back("4", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType,
+ columns2.emplace_back("4", (ui32)Schema2::Table2::Value::ColumnId, TTypeInfo(Schema2::Table2::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto value2 = pgmBuilder.SelectRow(TTableId(OwnerId, Table2Id), keyTypes2, columns2, row2);
@@ -2917,14 +2919,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes1(1);
- keyTypes1[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes1(1);
+ keyTypes1[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row1(1);
row1[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
auto value1 = pgmBuilder.EraseRow(TTableId(OwnerId, Table1Id), keyTypes1, row1);
- TVector<ui32> keyTypes2(1);
- keyTypes2[0] = (ui32)NUdf::TDataType<ui64>::Id;
+ TVector<TTypeInfo> keyTypes2(1);
+ keyTypes2[0] = TTypeInfo(NUdf::TDataType<ui64>::Id);
TRuntimeNode::TList row2(1);
row2[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(11);
@@ -2973,27 +2975,27 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes1(1);
- keyTypes1[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes1(1);
+ keyTypes1[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row1(1);
row1[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
auto update1 = pgmBuilder.GetUpdateRowBuilder();
ui32 columnId1 = (ui32)Schema1::Table1::Value::ColumnId;
update1.SetColumn(columnId1,
- NUdf::TDataType<NUdf::TUtf8>::Id,
+ TTypeInfo(NUdf::TDataType<NUdf::TUtf8>::Id),
pgmBuilder.TProgramBuilder::NewDataLiteral<NUdf::EDataSlot::Utf8>("qwe"));
auto value1 = pgmBuilder.UpdateRow(TTableId(OwnerId, Table1Id), keyTypes1, row1, update1);
- TVector<ui32> keyTypes2(1);
- keyTypes2[0] = (ui32)NUdf::TDataType<ui64>::Id;
+ TVector<TTypeInfo> keyTypes2(1);
+ keyTypes2[0] = TTypeInfo(NUdf::TDataType<ui64>::Id);
TRuntimeNode::TList row2(1);
row2[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(11);
auto update2 = pgmBuilder.GetUpdateRowBuilder();
ui32 columnId2 = (ui32)Schema2::Table2::Value::ColumnId;
update2.SetColumn(columnId2,
- NUdf::TDataType<ui32>::Id,
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(21));
auto value2 = pgmBuilder.UpdateRow(TTableId(OwnerId, Table2Id), keyTypes2, row2, update2);
@@ -3065,36 +3067,36 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes1(1);
- keyTypes1[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes1(1);
+ keyTypes1[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row1(1);
row1[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
auto update1 = pgmBuilder.GetUpdateRowBuilder();
ui32 columnId1 = (ui32)Schema1::Table1::Value::ColumnId;
update1.SetColumn(columnId1,
- NUdf::TDataType<NUdf::TUtf8>::Id,
+ TTypeInfo(NUdf::TDataType<NUdf::TUtf8>::Id),
pgmBuilder.TProgramBuilder::NewDataLiteral<NUdf::EDataSlot::Utf8>("asd"));
TVector<TSelectColumn> columns1;
- columns1.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns1.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto oldRow1 = pgmBuilder.SelectRow(TTableId(OwnerId, Table1Id), keyTypes1, columns1, row1);
auto value1 = pgmBuilder.UpdateRow(TTableId(OwnerId, Table1Id), keyTypes1, row1, update1);
- TVector<ui32> keyTypes2(1);
- keyTypes2[0] = (ui32)NUdf::TDataType<ui64>::Id;
+ TVector<TTypeInfo> keyTypes2(1);
+ keyTypes2[0] = TTypeInfo(NUdf::TDataType<ui64>::Id);
TRuntimeNode::TList row2(1);
row2[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(11);
auto update2 = pgmBuilder.GetUpdateRowBuilder();
ui32 columnId2 = (ui32)Schema2::Table2::Value::ColumnId;
update2.SetColumn(columnId2,
- NUdf::TDataType<ui32>::Id,
+ TTypeInfo(NUdf::TDataType<ui32>::Id),
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(32));
TVector<TSelectColumn> columns2;
- columns2.emplace_back("4", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType,
+ columns2.emplace_back("4", (ui32)Schema2::Table2::Value::ColumnId, TTypeInfo(Schema2::Table2::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto oldRow2 = pgmBuilder.SelectRow(TTableId(OwnerId, Table2Id), keyTypes2, columns2, row2);
@@ -3189,12 +3191,12 @@ Value {
}
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto value = pgmBuilder.SelectRow(TTableId(OwnerId, Table1Id), keyTypes, columns, row);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -3268,12 +3270,12 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -3358,8 +3360,8 @@ Value {
driver.ShardDbState.AddShard<Schema1>(Shard1);
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.Add(
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(40),
@@ -3368,7 +3370,7 @@ Value {
auto update = pgmBuilder.GetUpdateRowBuilder();
ui32 columnId = (ui32)Schema1::Table1::Value::ColumnId;
update.SetColumn(columnId,
- NUdf::TDataType<NUdf::TUtf8>::Id,
+ TTypeInfo(NUdf::TDataType<NUdf::TUtf8>::Id),
pgmBuilder.TProgramBuilder::NewDataLiteral<NUdf::EDataSlot::Utf8>("qwe"));
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.UpdateRow(TTableId(OwnerId, Table1Id),
keyTypes, row, update)));
@@ -3409,8 +3411,8 @@ Value {
}
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.Add(
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(40),
@@ -3466,12 +3468,12 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -3592,12 +3594,12 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -3722,12 +3724,12 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -3856,12 +3858,12 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -4003,12 +4005,12 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -4130,12 +4132,12 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -4264,12 +4266,12 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -4767,14 +4769,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -4845,14 +4847,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -4915,21 +4917,21 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
- auto mapped = pgmBuilder.Map(list, [&pgmBuilder, keyTypes, columns](TRuntimeNode item) {
+ auto mapped = pgmBuilder.Map(list, [&pgmBuilder, &keyTypes, &columns](TRuntimeNode item) {
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(3);
@@ -4979,14 +4981,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -5067,14 +5069,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -5087,15 +5089,15 @@ Value {
});
auto write = pgmBuilder.Map(mapped, [&pgmBuilder](TRuntimeNode item) {
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui64>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui64>::Id);
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.Convert(pgmBuilder.Member(item, "ID"), pgmBuilder.NewOptionalType(pgmBuilder.NewDataType(NUdf::TDataType<ui64>::Id)));
auto update = pgmBuilder.GetUpdateRowBuilder();
ui32 columnId = (ui32)Schema2::Table2::Value::ColumnId;
- update.SetColumn(columnId, NUdf::TDataType<ui32>::Id, pgmBuilder.Member(item, "ID"));
+ update.SetColumn(columnId, TTypeInfo(NUdf::TDataType<ui32>::Id), pgmBuilder.Member(item, "ID"));
return pgmBuilder.UpdateRow(TTableId(OwnerId, Table2Id), keyTypes, row, update);
});
@@ -5112,14 +5114,14 @@ Value {
{
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, TTypeInfo(Schema2::Table2::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, TTypeInfo(Schema2::Table2::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui64>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui64>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui64>::Id);
options.FromColumns = rowFrom;
@@ -5176,13 +5178,13 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns1;
- columns1.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns1.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns1.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns1.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options1 = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes1(1);
- keyTypes1[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes1(1);
+ keyTypes1[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom1(1);
rowFrom1[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options1.FromColumns = rowFrom1;
@@ -5191,13 +5193,13 @@ Value {
auto list1 = pgmBuilder.Member(range1, "List");
TVector<TSelectColumn> columns2;
- columns2.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType,
+ columns2.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, TTypeInfo(Schema2::Table2::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns2.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType,
+ columns2.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, TTypeInfo(Schema2::Table2::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options2 = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes2(1);
- keyTypes2[0] = (ui32)NUdf::TDataType<ui64>::Id;
+ TVector<TTypeInfo> keyTypes2(1);
+ keyTypes2[0] = TTypeInfo(NUdf::TDataType<ui64>::Id);
TRuntimeNode::TList rowFrom2(1);
rowFrom2[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui64>::Id);
options2.FromColumns = rowFrom2;
@@ -5270,13 +5272,13 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns1;
- columns1.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns1.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns1.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns1.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options1 = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes1(1);
- keyTypes1[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes1(1);
+ keyTypes1[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom1(1);
rowFrom1[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options1.FromColumns = rowFrom1;
@@ -5285,13 +5287,13 @@ Value {
auto list1 = pgmBuilder.Member(range1, "List");
TVector<TSelectColumn> columns2;
- columns2.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType,
+ columns2.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, TTypeInfo(Schema2::Table2::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns2.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType,
+ columns2.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, TTypeInfo(Schema2::Table2::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options2 = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes2(1);
- keyTypes2[0] = (ui32)NUdf::TDataType<ui64>::Id;
+ TVector<TTypeInfo> keyTypes2(1);
+ keyTypes2[0] = TTypeInfo(NUdf::TDataType<ui64>::Id);
TRuntimeNode::TList rowFrom2(1);
rowFrom2[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui64>::Id);
options2.FromColumns = rowFrom2;
@@ -5377,14 +5379,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -5493,14 +5495,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -5604,14 +5606,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -5688,14 +5690,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -5766,14 +5768,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -5847,14 +5849,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -5936,14 +5938,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -6023,14 +6025,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -6114,14 +6116,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -6209,14 +6211,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType),
EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -6284,8 +6286,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
@@ -6360,16 +6362,17 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns1 {
- {"ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType, EColumnTypeConstraint::Nullable},
- {"Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType, EColumnTypeConstraint::Nullable}
+ {"ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType), EColumnTypeConstraint::Nullable},
+ {"Value", (ui32)Schema1::Table1::Value::ColumnId, TTypeInfo(Schema1::Table1::Value::ColumnType), EColumnTypeConstraint::Nullable}
};
TRuntimeNode::TList fromColumns1{pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id)};
auto options1 = pgmBuilder.GetDefaultTableRangeOptions();
options1.FromColumns = fromColumns1;
options1.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
- auto range1 = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), {(ui32)NUdf::TDataType<ui32>::Id},
- columns1, options1);
+ TVector<TTypeInfo> keyTypes1(1);
+ keyTypes1[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
+ auto range1 = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes1, columns1, options1);
auto list1 = pgmBuilder.Member(range1, "List");
const TString filterValue = "Value6";
@@ -6383,16 +6386,17 @@ Value {
auto take1 = pgmBuilder.Take(filtered1, pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(2));
TVector<TSelectColumn> columns2 {
- {"ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType, EColumnTypeConstraint::Nullable},
- {"Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType, EColumnTypeConstraint::Nullable}
+ {"ID", (ui32)Schema2::Table2::ID::ColumnId, TTypeInfo(Schema2::Table2::ID::ColumnType), EColumnTypeConstraint::Nullable},
+ {"Value", (ui32)Schema2::Table2::Value::ColumnId, TTypeInfo(Schema2::Table2::Value::ColumnType), EColumnTypeConstraint::Nullable}
};
TRuntimeNode::TList fromColumns2{pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui64>::Id)};
auto options2 = pgmBuilder.GetDefaultTableRangeOptions();
options2.FromColumns = fromColumns2;
options2.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
- auto range2 = pgmBuilder.SelectRange(TTableId(OwnerId, Table2Id), {(ui32)NUdf::TDataType<ui64>::Id},
- columns2, options2);
+ TVector<TTypeInfo> keyTypes2(1);
+ keyTypes2[0] = TTypeInfo(NUdf::TDataType<ui64>::Id);
+ auto range2 = pgmBuilder.SelectRange(TTableId(OwnerId, Table2Id), keyTypes2, columns2, options2);
auto list2 = pgmBuilder.Member(range2, "List");
auto mapped2 = pgmBuilder.Map(list2, [&pgmBuilder](TRuntimeNode item) {
@@ -6435,10 +6439,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
TRuntimeNode::TList row1(1);
@@ -6484,14 +6488,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
- TVector<ui32> keyTypes(1);
- keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
+ TVector<TTypeInfo> keyTypes(1);
+ keyTypes[0] = TTypeInfo(NUdf::TDataType<ui32>::Id);
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, TTypeInfo(Schema1::Table1::ID::ColumnType),
EColumnTypeConstraint::Nullable);
- TVector<ui32> key2Types(1);
- key2Types[0] = (ui32)NUdf::TDataType<ui64>::Id;
+ TVector<TTypeInfo> key2Types(1);
+ key2Types[0] = TTypeInfo(NUdf::TDataType<ui64>::Id);
TRuntimeNode::TList row1(1);
row1[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(1);
diff --git a/ydb/core/engine/mkql_keys.cpp b/ydb/core/engine/mkql_keys.cpp
index 720e00325e7..fb34be11586 100644
--- a/ydb/core/engine/mkql_keys.cpp
+++ b/ydb/core/engine/mkql_keys.cpp
@@ -48,7 +48,7 @@ TCell MakeCell(const NUdf::TUnboxedValuePod& value) {
THolder<TKeyDesc> ExtractKeyTuple(const TTableId& tableId, TTupleLiteral* tuple,
const TVector<TKeyDesc::TColumnOp>& columns,
TKeyDesc::ERowOperation rowOperation, bool requireStaticKey, const TTypeEnvironment& env) {
- TVector<ui32> keyColumnTypes(tuple->GetValuesCount());
+ TVector<NScheme::TTypeInfo> keyColumnTypes(tuple->GetValuesCount());
TVector<TCell> fromValues(tuple->GetValuesCount());
TVector<TCell> toValues(tuple->GetValuesCount());
bool inclusiveFrom = true;
@@ -59,7 +59,8 @@ THolder<TKeyDesc> ExtractKeyTuple(const TTableId& tableId, TTupleLiteral* tuple,
auto type = tuple->GetType()->GetElementType(i);
bool isOptional;
auto dataType = UnpackOptionalData(type, isOptional);
- keyColumnTypes[i] = dataType->GetSchemeType();
+ // TODO: support pg types
+ keyColumnTypes[i] = NScheme::TTypeInfo(dataType->GetSchemeType());
if (i != staticComponents) {
continue;
}
@@ -74,6 +75,8 @@ THolder<TKeyDesc> ExtractKeyTuple(const TTableId& tableId, TTupleLiteral* tuple,
}
++staticComponents;
+ // TODO: support pg types
+ Y_VERIFY(keyColumnTypes[i].GetTypeId() != NScheme::NTypeIds::Pg);
fromValues[i] = toValues[i] = MakeCell(keyColumnTypes[i], data, env);
}
@@ -92,8 +95,11 @@ void ExtractReadColumns(TStructType* columnsType, TStructLiteral* tags, TVector<
op.Column = columnId;
op.Operation = TKeyDesc::EColumnOperation::Read;
bool isOptional;
- op.ExpectedType = UnpackOptionalData(columnsType->GetMemberType(i), isOptional)->GetSchemeType();
- MKQL_ENSURE(op.ExpectedType != 0, "Null type is not allowed");
+ auto dataType = UnpackOptionalData(columnsType->GetMemberType(i), isOptional);
+ auto expectedType = (NScheme::TTypeId)dataType->GetSchemeType();
+ MKQL_ENSURE(expectedType != 0, "Null type is not allowed");
+ // TODO: support pg types
+ op.ExpectedType = NScheme::TTypeInfo(expectedType);
}
}
@@ -130,7 +136,7 @@ THolder<TKeyDesc> ExtractSelectRange(TCallable& callable, const TTypeEnvironment
ui64 itemsLimit = AS_VALUE(TDataLiteral, callable.GetInput(6))->AsValue().Get<ui64>();
ui64 bytesLimit = AS_VALUE(TDataLiteral, callable.GetInput(7))->AsValue().Get<ui64>();
- TVector<ui32> keyColumnTypes(Max(fromTuple->GetValuesCount(), toTuple->GetValuesCount()));
+ TVector<NScheme::TTypeInfo> keyColumnTypes(Max(fromTuple->GetValuesCount(), toTuple->GetValuesCount()));
TVector<TCell> fromValues(keyColumnTypes.size()); // padded with NULLs
TVector<TCell> toValues(toTuple->GetValuesCount());
bool inclusiveFrom = !(flags & TReadRangeOptions::TFlags::ExcludeInitValue);
@@ -140,7 +146,9 @@ THolder<TKeyDesc> ExtractSelectRange(TCallable& callable, const TTypeEnvironment
auto type = fromTuple->GetType()->GetElementType(i);
bool isOptional;
auto dataType = UnpackOptionalData(type, isOptional);
- keyColumnTypes[i] = dataType->GetSchemeType();
+ auto keyType = (NScheme::TTypeId)dataType->GetSchemeType();
+ // TODO: support pg types
+ keyColumnTypes[i] = NScheme::TTypeInfo(keyType);
auto valueNode = fromTuple->GetValue(i);
NUdf::TUnboxedValue data;
bool hasImmediateData = ExtractKeyData(valueNode, isOptional, data);
@@ -152,7 +160,9 @@ THolder<TKeyDesc> ExtractSelectRange(TCallable& callable, const TTypeEnvironment
auto type = toTuple->GetType()->GetElementType(i);
bool isOptional;
auto dataType = UnpackOptionalData(type, isOptional);
- keyColumnTypes[i] = dataType->GetSchemeType();
+ auto keyType = (NScheme::TTypeId)dataType->GetSchemeType();
+ // TODO: support pg types
+ keyColumnTypes[i] = NScheme::TTypeInfo(keyType);
auto valueNode = toTuple->GetValue(i);
NUdf::TUnboxedValue data;
bool hasImmediateData = ExtractKeyData(valueNode, isOptional, data);
@@ -191,7 +201,7 @@ THolder<TKeyDesc> ExtractUpdateRow(TCallable& callable, const TTypeEnvironment&
if (cmd.GetStaticType()->IsVoid()) {
// erase
op.Operation = TKeyDesc::EColumnOperation::Set;
- op.ExpectedType = 0;
+ op.ExpectedType = NScheme::TTypeInfo(0);
} else if (cmd.GetStaticType()->IsTuple()) {
// inplace update
TTupleLiteral* tuple = AS_VALUE(TTupleLiteral, cmd);
@@ -203,7 +213,9 @@ THolder<TKeyDesc> ExtractUpdateRow(TCallable& callable, const TTypeEnvironment&
auto valueNode = tuple->GetValue(1);
op.Operation = TKeyDesc::EColumnOperation::InplaceUpdate;
bool isOptional;
- op.ExpectedType = UnpackOptionalData(valueNode, isOptional)->GetSchemeType();
+ auto keyType = (NScheme::TTypeId)UnpackOptionalData(valueNode, isOptional)->GetSchemeType();
+ // TODO: support pg types
+ op.ExpectedType = NScheme::TTypeInfo(keyType);
MKQL_ENSURE(!isOptional, "Expected data type for inplace update, not an optional");
op.InplaceUpdateMode = mode;
@@ -214,10 +226,12 @@ THolder<TKeyDesc> ExtractUpdateRow(TCallable& callable, const TTypeEnvironment&
}
else {
// update
- op.Operation = TKeyDesc::EColumnOperation::Set;
- bool isOptional;
- op.ExpectedType = UnpackOptionalData(cmd, isOptional)->GetSchemeType();
- MKQL_ENSURE(op.ExpectedType != 0, "Null type is not allowed");
+ op.Operation = TKeyDesc::EColumnOperation::Set;
+ bool isOptional;
+ auto keyType = (NScheme::TTypeId)UnpackOptionalData(cmd, isOptional)->GetSchemeType();
+ // TODO: support pg types
+ op.ExpectedType = NScheme::TTypeInfo(keyType);
+ MKQL_ENSURE(op.ExpectedType.GetTypeId() != 0, "Null type is not allowed");
NUdf::TUnboxedValue data;
if (ExtractKeyData(cmd, isOptional, data)) {
@@ -243,11 +257,14 @@ THolder<TKeyDesc> ExtractEraseRow(TCallable& callable, const TTypeEnvironment& e
#define MAKE_PRIMITIVE_TYPE_CELL(type, layout) \
case NUdf::TDataType<type>::Id: return MakeCell<layout>(value);
-TCell MakeCell(NUdf::TDataTypeId typeId, const NUdf::TUnboxedValuePod& value, const TTypeEnvironment& env, bool copy) {
+TCell MakeCell(NScheme::TTypeInfo type, const NUdf::TUnboxedValuePod& value, const TTypeEnvironment& env, bool copy) {
if (!value)
return TCell();
- switch(typeId) {
+ // TODO: support pg types
+ Y_VERIFY(type.GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+
+ switch(type.GetTypeId()) {
KNOWN_FIXED_VALUE_TYPES(MAKE_PRIMITIVE_TYPE_CELL)
case NUdf::TDataType<NUdf::TDecimal>::Id:
{
@@ -336,7 +353,7 @@ TTableId ExtractTableId(const TRuntimeNode& node) {
}
void FillKeyTupleValue(const NUdf::TUnboxedValue& row, const TVector<ui32>& rowIndices,
- const TVector<NUdf::TDataTypeId>& rowTypes, TVector<TCell>& cells, const TTypeEnvironment& env)
+ const TVector<NScheme::TTypeInfo>& rowTypes, TVector<TCell>& cells, const TTypeEnvironment& env)
{
for (ui32 i = 0; i < rowIndices.size(); ++i) {
auto rowIndex = rowIndices[i];
diff --git a/ydb/core/engine/mkql_keys.h b/ydb/core/engine/mkql_keys.h
index 635ad3ce147..ac968a473e9 100644
--- a/ydb/core/engine/mkql_keys.h
+++ b/ydb/core/engine/mkql_keys.h
@@ -44,9 +44,9 @@ struct TTableStrings {
THolder<TKeyDesc> ExtractTableKey(TCallable& callable, const TTableStrings& strings, const TTypeEnvironment& env);
TVector<THolder<TKeyDesc>> ExtractTableKeys(TExploringNodeVisitor& explorer, const TTypeEnvironment& env);
TTableId ExtractTableId(const TRuntimeNode& node);
-TCell MakeCell(NUdf::TDataTypeId typeId, const NUdf::TUnboxedValuePod& value, const TTypeEnvironment& env, bool copy = true);
+TCell MakeCell(NScheme::TTypeInfo type, const NUdf::TUnboxedValuePod& value, const TTypeEnvironment& env, bool copy = true);
void FillKeyTupleValue(const NUdf::TUnboxedValue& row, const TVector<ui32>& rowIndices,
- const TVector<NUdf::TDataTypeId>& rowTypes, TVector<TCell>& cells, const TTypeEnvironment& env);
+ const TVector<NScheme::TTypeInfo>& rowTypes, TVector<TCell>& cells, const TTypeEnvironment& env);
}
}
diff --git a/ydb/core/engine/mkql_proto.cpp b/ydb/core/engine/mkql_proto.cpp
index ea0ac631994..6fcb2de9fb8 100644
--- a/ydb/core/engine/mkql_proto.cpp
+++ b/ydb/core/engine/mkql_proto.cpp
@@ -156,36 +156,19 @@ NUdf::TUnboxedValue ImportValueFromProto(TType* type, const Ydb::Value& value, c
return std::move(unboxedValue);
}
+ case TType::EKind::Pg:
+ // TODO: support pg types
+ MKQL_ENSURE(false, "pg types are not supported");
+
default:
MKQL_ENSURE(false, TStringBuilder() << "Unknown kind: " << type->GetKindAsStr());
}
}
-
-template <typename ValType>
-class TAlmostDoneTypeValue : public TRawTypeValue {
-public:
- TAlmostDoneTypeValue(NUdf::TDataTypeId schemeType, ValType value)
- : TRawTypeValue(&Value, sizeof(Value), schemeType)
- , Value(value)
- {}
-
-protected:
- ValType Value;
-};
-
-template <>
-class TAlmostDoneTypeValue<TString> : public TRawTypeValue {
-public:
- TAlmostDoneTypeValue(NUdf::TDataTypeId schemeType, const TString& value)
- : TRawTypeValue(value.data(), value.size(), schemeType)
- {}
-};
-
// NOTE: TCell's can reference memomry from tupleValue
bool CellsFromTuple(const NKikimrMiniKQL::TType* tupleType,
const NKikimrMiniKQL::TValue& tupleValue,
- const TConstArrayRef<NScheme::TTypeId>& types,
+ const TConstArrayRef<NScheme::TTypeInfo>& types,
bool allowCastFromString,
TVector<TCell>& key,
TString& errStr)
@@ -209,9 +192,9 @@ bool CellsFromTuple(const NKikimrMiniKQL::TType* tupleType,
const auto& item = ti.GetOptional().GetItem();
CHECK_OR_RETURN_ERROR(item.GetKind() == NKikimrMiniKQL::Data, "Element at index " + ToString(i) + " Item kind is not Data");
const auto& typeId = item.GetData().GetScheme();
- CHECK_OR_RETURN_ERROR(typeId == types[i] ||
+ CHECK_OR_RETURN_ERROR(typeId == types[i].GetTypeId() ||
allowCastFromString && (typeId == NScheme::NTypeIds::Utf8),
- "Element at index " + ToString(i) + " has type " + ToString(typeId) + " but expected type is " + ToString(types[i]));
+ "Element at index " + ToString(i) + " has type " + ToString(typeId) + " but expected type is " + ToString(types[i].GetTypeId()));
}
CHECK_OR_RETURN_ERROR(tupleType->GetTuple().ElementSize() == tupleValue.TupleSize(),
@@ -256,7 +239,8 @@ bool CellsFromTuple(const NKikimrMiniKQL::TType* tupleType,
Sprintf("Simple type is expected in tuple at position %" PRIu32, i));
TCell c;
- switch (types[i]) {
+ auto typeId = types[i].GetTypeId();
+ switch (typeId) {
#define CASE_SIMPLE_TYPE(name, type, protoField) \
case NScheme::NTypeIds::name: \
@@ -266,7 +250,7 @@ bool CellsFromTuple(const NKikimrMiniKQL::TType* tupleType,
type val = v.Get##protoField(); \
c = TCell((const char*)&val, sizeof(val)); \
} else if (allowCastFromString && v.HasText()) { \
- const auto slot = NUdf::GetDataSlot(types[i]); \
+ const auto slot = NUdf::GetDataSlot(typeId); \
const auto out = NMiniKQL::ValueFromString(slot, v.GetText()); \
CHECK_OR_RETURN_ERROR(out, Sprintf("Cannot parse value of type " #name " from text '%s' in tuple at position %" PRIu32, v.GetText().data(), i)); \
const auto val = out.Get<type>(); \
@@ -321,8 +305,13 @@ bool CellsFromTuple(const NKikimrMiniKQL::TType* tupleType,
}
break;
}
+ case NScheme::NTypeIds::Pg:
+ // TODO: support pg types
+ CHECK_OR_RETURN_ERROR(false, Sprintf("Unsupported pg type at position %" PRIu32, i));
+ break;
+
default:
- CHECK_OR_RETURN_ERROR(false, Sprintf("Unsupported typeId %" PRIu16 " at index %" PRIu32, types[i], i));
+ CHECK_OR_RETURN_ERROR(false, Sprintf("Unsupported typeId %" PRIu16 " at index %" PRIu32, typeId, i));
break;
}
@@ -335,11 +324,12 @@ bool CellsFromTuple(const NKikimrMiniKQL::TType* tupleType,
return true;
}
-bool CellToValue(NScheme::TTypeId typeId, const TCell& c, NKikimrMiniKQL::TValue& val, TString& errStr) {
+bool CellToValue(NScheme::TTypeInfo type, const TCell& c, NKikimrMiniKQL::TValue& val, TString& errStr) {
if (c.IsNull()) {
return true;
}
+ auto typeId = type.GetTypeId();
switch (typeId) {
case NScheme::NTypeIds::Int8:
Y_VERIFY(c.Size() == sizeof(i8));
@@ -420,6 +410,12 @@ bool CellToValue(NScheme::TTypeId typeId, const TCell& c, NKikimrMiniKQL::TValue
case NScheme::NTypeIds::Utf8:
val.MutableOptional()->SetText(c.Data(), c.Size());
break;
+
+ case NScheme::NTypeIds::Pg:
+ // TODO: support pg types
+ errStr = "Unknown pg type";
+ return false;
+
default:
errStr = "Unknown type: " + ToString(typeId);
return false;
diff --git a/ydb/core/engine/mkql_proto.h b/ydb/core/engine/mkql_proto.h
index 510ff15991f..06d1bbce15c 100644
--- a/ydb/core/engine/mkql_proto.h
+++ b/ydb/core/engine/mkql_proto.h
@@ -17,12 +17,12 @@ NUdf::TUnboxedValue ImportValueFromProto(TType* type, const Ydb::Value& value, c
// NOTE: TCell's can reference memomry from tupleValue
bool CellsFromTuple(const NKikimrMiniKQL::TType* tupleType,
const NKikimrMiniKQL::TValue& tupleValue,
- const TConstArrayRef<NScheme::TTypeId>& expectedTypes,
+ const TConstArrayRef<NScheme::TTypeInfo>& expectedTypes,
bool allowCastFromString,
TVector<TCell>& key,
TString& errStr);
-bool CellToValue(NScheme::TTypeId typeId, const TCell& c, NKikimrMiniKQL::TValue& val, TString& errStr);
+bool CellToValue(NScheme::TTypeInfo type, const TCell& c, NKikimrMiniKQL::TValue& val, TString& errStr);
} // namspace NMiniKQL
} // namspace NKikimr
diff --git a/ydb/core/engine/mkql_proto_ut.cpp b/ydb/core/engine/mkql_proto_ut.cpp
index c6e00e947c5..5ac30073b5d 100644
--- a/ydb/core/engine/mkql_proto_ut.cpp
+++ b/ydb/core/engine/mkql_proto_ut.cpp
@@ -389,7 +389,7 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
"variant_index: 1\n");
}
- TString DoTestCellsFromTuple(const TConstArrayRef<NScheme::TTypeId>& types, TString paramsProto) {
+ TString DoTestCellsFromTuple(const TConstArrayRef<NScheme::TTypeInfo>& types, TString paramsProto) {
NKikimrMiniKQL::TParams params;
bool parseOk = ::google::protobuf::TextFormat::ParseFromString(paramsProto, &params);
UNIT_ASSERT_C(parseOk, paramsProto);
@@ -405,7 +405,7 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
Y_UNIT_TEST(TestCellsFromTuple) {
UNIT_ASSERT_VALUES_EQUAL("", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::Int32
+ NScheme::TTypeInfo(NScheme::NTypeIds::Int32)
},
" Type {"
" Kind : Tuple"
@@ -421,7 +421,7 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
UNIT_ASSERT_VALUES_EQUAL("Value of type Int32 expected in tuple at position 0", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::Int32
+ NScheme::TTypeInfo(NScheme::NTypeIds::Int32)
},
" Type {"
" Kind : Tuple"
@@ -437,7 +437,7 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
UNIT_ASSERT_VALUES_EQUAL("", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::Int32
+ NScheme::TTypeInfo(NScheme::NTypeIds::Int32)
},
" Type {"
" Kind : Tuple"
@@ -453,7 +453,7 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
UNIT_ASSERT_VALUES_EQUAL("", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::Int32
+ NScheme::TTypeInfo(NScheme::NTypeIds::Int32)
},
" Type {"
" Kind : Tuple"
@@ -469,7 +469,7 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
UNIT_ASSERT_VALUES_EQUAL("", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::String
+ NScheme::TTypeInfo(NScheme::NTypeIds::String)
},
" Type {"
" Kind : Tuple"
@@ -485,7 +485,7 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
UNIT_ASSERT_VALUES_EQUAL("Cannot parse value of type Uint32 from text '-42' in tuple at position 0", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::Uint32
+ NScheme::TTypeInfo(NScheme::NTypeIds::Uint32)
},
" Type {"
" Kind : Tuple"
@@ -501,7 +501,7 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
UNIT_ASSERT_VALUES_EQUAL("Tuple value length 0 doesn't match the length in type 1", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::Int32
+ NScheme::TTypeInfo(NScheme::NTypeIds::Int32)
},
" Type {"
" Kind : Tuple"
@@ -516,7 +516,7 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
UNIT_ASSERT_VALUES_EQUAL("", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::Int32
+ NScheme::TTypeInfo(NScheme::NTypeIds::Int32)
},
" Type {"
" Kind : Tuple"
@@ -530,7 +530,7 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
UNIT_ASSERT_VALUES_EQUAL("Data must be present at position 0", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::Int32
+ NScheme::TTypeInfo(NScheme::NTypeIds::Int32)
},
" Type {"
" Kind : Tuple"
@@ -546,8 +546,8 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
UNIT_ASSERT_VALUES_EQUAL("Tuple value length 0 doesn't match the length in type 1", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::Int32,
- NScheme::NTypeIds::Utf8
+ NScheme::TTypeInfo(NScheme::NTypeIds::Int32),
+ NScheme::TTypeInfo(NScheme::NTypeIds::Utf8)
},
" Type {"
" Kind : Tuple"
@@ -562,8 +562,8 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
UNIT_ASSERT_VALUES_EQUAL("", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::Int32,
- NScheme::NTypeIds::Int32
+ NScheme::TTypeInfo(NScheme::NTypeIds::Int32),
+ NScheme::TTypeInfo(NScheme::NTypeIds::Int32)
},
" Type {"
" Kind : Tuple"
@@ -581,7 +581,7 @@ Y_UNIT_TEST(TestExportVariantStructTypeYdb) {
UNIT_ASSERT_VALUES_EQUAL("Tuple size 2 is greater that expected size 1", DoTestCellsFromTuple(
{
- NScheme::NTypeIds::Int32
+ NScheme::TTypeInfo(NScheme::NTypeIds::Int32)
},
" Type {"
" Kind : Tuple"
diff --git a/ydb/core/engine/ut/CMakeLists.darwin.txt b/ydb/core/engine/ut/CMakeLists.darwin.txt
index 94c41469d9b..1084b3c9bb8 100644
--- a/ydb/core/engine/ut/CMakeLists.darwin.txt
+++ b/ydb/core/engine/ut/CMakeLists.darwin.txt
@@ -26,6 +26,7 @@ target_link_libraries(ydb-core-engine-ut PUBLIC
test-libs-table
mkql_proto-ut-helpers
udf-service-exception_policy
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-engine-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/engine/ut/CMakeLists.linux.txt b/ydb/core/engine/ut/CMakeLists.linux.txt
index e6ce7faed25..ef05f08345d 100644
--- a/ydb/core/engine/ut/CMakeLists.linux.txt
+++ b/ydb/core/engine/ut/CMakeLists.linux.txt
@@ -26,6 +26,7 @@ target_link_libraries(ydb-core-engine-ut PUBLIC
test-libs-table
mkql_proto-ut-helpers
udf-service-exception_policy
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-engine-ut PRIVATE
-ldl
diff --git a/ydb/core/formats/arrow_batch_builder.cpp b/ydb/core/formats/arrow_batch_builder.cpp
index ee74796711a..b7107e7ce11 100644
--- a/ydb/core/formats/arrow_batch_builder.cpp
+++ b/ydb/core/formats/arrow_batch_builder.cpp
@@ -52,7 +52,7 @@ arrow::Status AppendCell(arrow::RecordBatchBuilder& builder, const TCell& cell,
return AppendCell(*builder.GetFieldAs<TBuilderType>(colNum), cell);
}
-arrow::Status AppendCell(arrow::RecordBatchBuilder& builder, const TCell& cell, ui32 colNum, NScheme::TTypeId type) {
+arrow::Status AppendCell(arrow::RecordBatchBuilder& builder, const TCell& cell, ui32 colNum, NScheme::TTypeInfo type) {
arrow::Status result;
auto callback = [&]<typename TType>(TTypeWrapper<TType> typeHolder) {
Y_UNUSED(typeHolder);
@@ -196,7 +196,7 @@ TArrowBatchBuilder::TArrowBatchBuilder(arrow::Compression::type codec)
WriteOptions.use_threads = false;
}
-bool TArrowBatchBuilder::Start(const TVector<std::pair<TString, NScheme::TTypeId>>& ydbColumns) {
+bool TArrowBatchBuilder::Start(const TVector<std::pair<TString, NScheme::TTypeInfo>>& ydbColumns) {
YdbSchema = ydbColumns;
auto schema = MakeArrowSchema(ydbColumns);
auto status = arrow::RecordBatchBuilder::Make(schema, arrow::default_memory_pool(), RowsToReserve, &BatchBuilder);
@@ -206,7 +206,7 @@ bool TArrowBatchBuilder::Start(const TVector<std::pair<TString, NScheme::TTypeId
void TArrowBatchBuilder::AppendCell(const TCell& cell, ui32 colNum) {
NumBytes += cell.Size();
- const ui32 ydbType = YdbSchema[colNum].second;
+ auto ydbType = YdbSchema[colNum].second;
auto status = NKikimr::NArrow::AppendCell(*BatchBuilder, cell, colNum, ydbType);
Y_VERIFY(status.ok());
}
@@ -216,7 +216,7 @@ void TArrowBatchBuilder::AddRow(const TDbTupleRef& key, const TDbTupleRef& value
auto fnAppendTuple = [&] (const TDbTupleRef& tuple, size_t offsetInRow) {
for (size_t i = 0; i < tuple.ColumnCount; ++i) {
- const ui32 ydbType = tuple.Types[i];
+ auto ydbType = tuple.Types[i];
const ui32 colNum = offsetInRow + i;
Y_VERIFY(ydbType == YdbSchema[colNum].second);
auto& cell = tuple.Columns[i];
diff --git a/ydb/core/formats/arrow_batch_builder.h b/ydb/core/formats/arrow_batch_builder.h
index ae15d175445..303e57d23c9 100644
--- a/ydb/core/formats/arrow_batch_builder.h
+++ b/ydb/core/formats/arrow_batch_builder.h
@@ -151,7 +151,7 @@ public:
TArrowBatchBuilder(arrow::Compression::type codec = arrow::Compression::UNCOMPRESSED);
~TArrowBatchBuilder() = default;
- bool Start(const TVector<std::pair<TString, NScheme::TTypeId>>& columns,
+ bool Start(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns,
ui64 maxRowsInBlock, ui64 maxBytesInBlock, TString& err) override {
Y_UNUSED(maxRowsInBlock);
Y_UNUSED(maxBytesInBlock);
@@ -174,20 +174,20 @@ public:
return NumBytes;
}
- bool Start(const TVector<std::pair<TString, NScheme::TTypeId>>& columns);
+ bool Start(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns);
std::shared_ptr<arrow::RecordBatch> FlushBatch(bool reinitialize);
std::shared_ptr<arrow::RecordBatch> GetBatch() const { return Batch; }
protected:
void AppendCell(const TCell& cell, ui32 colNum);
- const TVector<std::pair<TString, NScheme::TTypeId>>& GetYdbSchema() const {
+ const TVector<std::pair<TString, NScheme::TTypeInfo>>& GetYdbSchema() const {
return YdbSchema;
}
private:
arrow::ipc::IpcWriteOptions WriteOptions;
- TVector<std::pair<TString, NScheme::TTypeId>> YdbSchema;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> YdbSchema;
std::unique_ptr<arrow::RecordBatchBuilder> BatchBuilder;
std::shared_ptr<arrow::RecordBatch> Batch;
size_t RowsToReserve{DEFAULT_ROWS_TO_RESERVE};
diff --git a/ydb/core/formats/arrow_helpers.cpp b/ydb/core/formats/arrow_helpers.cpp
index 388c460413b..00feaabbf5e 100644
--- a/ydb/core/formats/arrow_helpers.cpp
+++ b/ydb/core/formats/arrow_helpers.cpp
@@ -205,7 +205,7 @@ std::shared_ptr<arrow::DataType> CreateEmptyArrowImpl<arrow::DurationType>() {
return arrow::duration(arrow::TimeUnit::TimeUnit::MICRO);
}
-std::shared_ptr<arrow::DataType> GetArrowType(NScheme::TTypeId typeId) {
+std::shared_ptr<arrow::DataType> GetArrowType(NScheme::TTypeInfo typeId) {
std::shared_ptr<arrow::DataType> result;
bool success = SwitchYqlTypeToArrowType(typeId, [&]<typename TType>(TTypeWrapper<TType> typeHolder) {
Y_UNUSED(typeHolder);
@@ -218,7 +218,7 @@ std::shared_ptr<arrow::DataType> GetArrowType(NScheme::TTypeId typeId) {
return std::make_shared<arrow::NullType>();
}
-std::vector<std::shared_ptr<arrow::Field>> MakeArrowFields(const TVector<std::pair<TString, NScheme::TTypeId>>& columns) {
+std::vector<std::shared_ptr<arrow::Field>> MakeArrowFields(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns) {
std::vector<std::shared_ptr<arrow::Field>> fields;
fields.reserve(columns.size());
for (auto& [name, ydbType] : columns) {
@@ -228,7 +228,7 @@ std::vector<std::shared_ptr<arrow::Field>> MakeArrowFields(const TVector<std::pa
return fields;
}
-std::shared_ptr<arrow::Schema> MakeArrowSchema(const TVector<std::pair<TString, NScheme::TTypeId>>& ydbColumns) {
+std::shared_ptr<arrow::Schema> MakeArrowSchema(const TVector<std::pair<TString, NScheme::TTypeInfo>>& ydbColumns) {
return std::make_shared<arrow::Schema>(MakeArrowFields(ydbColumns));
}
@@ -953,8 +953,8 @@ std::shared_ptr<arrow::RecordBatch> SortBatch(const std::shared_ptr<arrow::Recor
return Reorder(batch, sortPermutation);
}
-static bool ConvertData(TCell& cell, const NScheme::TTypeId& colType, TMemoryPool& memPool, TString& errorMessage) {
- switch (colType) {
+static bool ConvertData(TCell& cell, const NScheme::TTypeInfo& colType, TMemoryPool& memPool, TString& errorMessage) {
+ switch (colType.GetTypeId()) {
case NScheme::NTypeIds::DyNumber: {
const auto dyNumber = NDyNumber::ParseDyNumberString(cell.AsBuf());
if (!dyNumber.Defined()) {
@@ -985,8 +985,8 @@ static bool ConvertData(TCell& cell, const NScheme::TTypeId& colType, TMemoryPoo
}
static std::shared_ptr<arrow::Array> ConvertColumn(const std::shared_ptr<arrow::Array>& column,
- NScheme::TTypeId colType) {
- if (colType == NScheme::NTypeIds::Decimal) {
+ NScheme::TTypeInfo colType) {
+ if (colType.GetTypeId() == NScheme::NTypeIds::Decimal) {
return {};
}
@@ -999,7 +999,7 @@ static std::shared_ptr<arrow::Array> ConvertColumn(const std::shared_ptr<arrow::
builder.Reserve(binaryArray.length()).ok();
// TODO: ReserveData
- switch (colType) {
+ switch (colType.GetTypeId()) {
case NScheme::NTypeIds::DyNumber: {
for (i32 i = 0; i < binaryArray.length(); ++i) {
auto value = binaryArray.Value(i);
@@ -1030,7 +1030,7 @@ static std::shared_ptr<arrow::Array> ConvertColumn(const std::shared_ptr<arrow::
}
std::shared_ptr<arrow::RecordBatch> ConvertColumns(const std::shared_ptr<arrow::RecordBatch>& batch,
- const THashMap<TString, NScheme::TTypeId>& columnsToConvert)
+ const THashMap<TString, NScheme::TTypeInfo>& columnsToConvert)
{
std::vector<std::shared_ptr<arrow::Array>> columns = batch->columns();
for (i32 i = 0; i < batch->num_columns(); ++i) {
@@ -1076,6 +1076,9 @@ bool TArrowToYdbConverter::Process(const arrow::RecordBatch& batch, TString& err
for (; row < rowsUnroll; row += unroll) {
ui32 col = 0;
for (auto& [colName, colType] : YdbSchema) {
+ // TODO: support pg types
+ Y_VERIFY(colType.GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+
auto& column = allColumns[col];
bool success = SwitchYqlTypeToArrowType(colType, [&]<typename TType>(TTypeWrapper<TType> typeHolder) {
Y_UNUSED(typeHolder);
@@ -1091,7 +1094,7 @@ bool TArrowToYdbConverter::Process(const arrow::RecordBatch& batch, TString& err
});
if (!success) {
- errorMessage = TStringBuilder() << "No arrow conversion for type Yql::" << NScheme::TypeName(colType)
+ errorMessage = TStringBuilder() << "No arrow conversion for type Yql::" << NScheme::TypeName(colType.GetTypeId())
<< " at column '" << colName << "'";
return false;
}
@@ -1123,6 +1126,9 @@ bool TArrowToYdbConverter::Process(const arrow::RecordBatch& batch, TString& err
ui32 col = 0;
for (auto& [colName, colType] : YdbSchema) {
+ // TODO: support pg types
+ Y_VERIFY(colType.GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+
auto& column = allColumns[col];
auto& curCell = cells[0][col];
if (column->IsNull(row)) {
@@ -1137,7 +1143,7 @@ bool TArrowToYdbConverter::Process(const arrow::RecordBatch& batch, TString& err
});
if (!success) {
- errorMessage = TStringBuilder() << "No arrow conversion for type Yql::" << NScheme::TypeName(colType)
+ errorMessage = TStringBuilder() << "No arrow conversion for type Yql::" << NScheme::TypeName(colType.GetTypeId())
<< " at column '" << colName << "'";
return false;
}
diff --git a/ydb/core/formats/arrow_helpers.h b/ydb/core/formats/arrow_helpers.h
index bfe8fb88a3d..9f96d2b81b7 100644
--- a/ydb/core/formats/arrow_helpers.h
+++ b/ydb/core/formats/arrow_helpers.h
@@ -23,7 +23,7 @@ public:
}
};
-std::shared_ptr<arrow::DataType> GetArrowType(NScheme::TTypeId typeId);
+std::shared_ptr<arrow::DataType> GetArrowType(NScheme::TTypeInfo typeInfo);
template <typename T>
inline bool ArrayEqualValue(const std::shared_ptr<arrow::Array>& x, const std::shared_ptr<arrow::Array>& y) {
@@ -51,8 +51,8 @@ inline bool ArrayEqualView(const std::shared_ptr<arrow::Array>& x, const std::sh
struct TSortDescription;
-std::vector<std::shared_ptr<arrow::Field>> MakeArrowFields(const TVector<std::pair<TString, NScheme::TTypeId>>& columns);
-std::shared_ptr<arrow::Schema> MakeArrowSchema(const TVector<std::pair<TString, NScheme::TTypeId>>& columns);
+std::vector<std::shared_ptr<arrow::Field>> MakeArrowFields(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns);
+std::shared_ptr<arrow::Schema> MakeArrowSchema(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns);
TString SerializeSchema(const arrow::Schema& schema);
std::shared_ptr<arrow::Schema> DeserializeSchema(const TString& str);
@@ -154,7 +154,7 @@ class IRowWriter;
// Converts an arrow batch into YDB rows feeding them IRowWriter one by one
class TArrowToYdbConverter {
private:
- TVector<std::pair<TString, NScheme::TTypeId>> YdbSchema; // Destination schema (allow shrink and reorder)
+ TVector<std::pair<TString, NScheme::TTypeInfo>> YdbSchema; // Destination schema (allow shrink and reorder)
IRowWriter& RowWriter;
template <typename TArray>
@@ -191,8 +191,8 @@ private:
}
public:
- static bool NeedDataConversion(const NScheme::TTypeId& colType) {
- switch (colType) {
+ static bool NeedDataConversion(const NScheme::TTypeInfo& colType) {
+ switch (colType.GetTypeId()) {
case NScheme::NTypeIds::DyNumber:
case NScheme::NTypeIds::JsonDocument:
case NScheme::NTypeIds::Decimal:
@@ -203,7 +203,7 @@ public:
return false;
}
- TArrowToYdbConverter(const TVector<std::pair<TString, NScheme::TTypeId>>& ydbSchema, IRowWriter& rowWriter)
+ TArrowToYdbConverter(const TVector<std::pair<TString, NScheme::TTypeInfo>>& ydbSchema, IRowWriter& rowWriter)
: YdbSchema(ydbSchema)
, RowWriter(rowWriter)
{}
@@ -221,7 +221,7 @@ public:
};
std::shared_ptr<arrow::RecordBatch> ConvertColumns(const std::shared_ptr<arrow::RecordBatch>& batch,
- const THashMap<TString, NScheme::TTypeId>& columnsToConvert);
+ const THashMap<TString, NScheme::TTypeInfo>& columnsToConvert);
inline bool HasNulls(const std::shared_ptr<arrow::Array>& column) {
return column->null_bitmap_data();
diff --git a/ydb/core/formats/clickhouse_block.cpp b/ydb/core/formats/clickhouse_block.cpp
index 0fd77f5fdad..2b5a629b517 100644
--- a/ydb/core/formats/clickhouse_block.cpp
+++ b/ydb/core/formats/clickhouse_block.cpp
@@ -440,13 +440,13 @@ public:
return Types.at(name);
}
- TDataTypePtr GetByYdbType(NScheme::TTypeId t) const {
+ TDataTypePtr GetByYdbType(NScheme::TTypeInfo type) const {
#define CONVERT(ydbType, chType) \
case NScheme::NTypeIds::ydbType: \
return Get(#chType);
- switch (t) {
+ switch (type.GetTypeId()) {
CONVERT(Bool, UInt8);
CONVERT(Int8, Int8);
@@ -479,8 +479,12 @@ public:
CONVERT(ActorId, String);
CONVERT(StepOrderId, String);
+ case NScheme::NTypeIds::Pg:
+ // TODO: support pg types
+ throw yexception() << "Unsupported pg type";
+
default:
- throw yexception() << "Unsupported type: " << t;
+ throw yexception() << "Unsupported type: " << type.GetTypeId();
}
#undef CONVERT
}
@@ -533,13 +537,16 @@ void AddDecimal(const TMutableColumnPtr& column, const TCell& cell) {
}
}
-size_t AddValue(const TMutableColumnPtr& column, const TCell& cell, ui32 ydbType) {
- Y_UNUSED(ydbType);
+size_t AddValue(const TMutableColumnPtr& column, const TCell& cell, NScheme::TTypeInfo type) {
size_t prevBytes = column->byteSize();
if (cell.IsNull()) {
AddNull(column);
} else {
- if (ydbType == NScheme::NTypeIds::Decimal) {
+ auto typeId = type.GetTypeId();
+ if (typeId == NScheme::NTypeIds::Pg) {
+ // TODO: support pg types
+ Y_VERIFY(false, "pg types are not supported");
+ } else if (typeId == NScheme::NTypeIds::Decimal) {
AddDecimal(column, cell);
} else {
column->insertData(cell.Data(), cell.Size());
@@ -548,7 +555,7 @@ size_t AddValue(const TMutableColumnPtr& column, const TCell& cell, ui32 ydbType
return column->byteSize() - prevBytes;
}
-TTypesAndNames MakeColumns(const TDataTypeRegistryPtr& dataTypeRegistry, const TVector<std::pair<TString, NScheme::TTypeId>>& columns) {
+TTypesAndNames MakeColumns(const TDataTypeRegistryPtr& dataTypeRegistry, const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns) {
TTypesAndNames res;
for (auto& c : columns) {
TDataTypePtr dataType = dataTypeRegistry->GetByYdbType(c.second);
@@ -568,7 +575,7 @@ class TBlockBuilder : public NKikimr::IBlockBuilder {
public:
explicit TBlockBuilder(TDataTypeRegistryPtr dataTypeRegistry);
~TBlockBuilder();
- bool Start(const TVector<std::pair<TString, NScheme::TTypeId>>& columns, ui64 maxRowsInBlock, ui64 maxBytesInBlock, TString& err) override;
+ bool Start(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns, ui64 maxRowsInBlock, ui64 maxBytesInBlock, TString& err) override;
void AddRow(const NKikimr::TDbTupleRef& key, const NKikimr::TDbTupleRef& value) override;
TString Finish() override;
size_t Bytes() const override;
@@ -587,7 +594,7 @@ private:
class TBlockBuilder::TImpl {
constexpr static ui32 DBMS_MIN_REVISION_WITH_CURRENT_AGGREGATION_VARIANT_SELECTION_METHOD = 54408;
public:
- TImpl(const TDataTypeRegistryPtr& dataTypeRegistry, const TVector<std::pair<TString, NScheme::TTypeId>>& columns, ui64 maxRowsInBlock, ui64 maxBytesInBlock)
+ TImpl(const TDataTypeRegistryPtr& dataTypeRegistry, const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns, ui64 maxRowsInBlock, ui64 maxBytesInBlock)
: MaxRowsInBlock(maxRowsInBlock)
, MaxBytesInBlock(maxBytesInBlock)
, BlockTemplate(MakeColumns(dataTypeRegistry, columns))
@@ -656,7 +663,7 @@ TBlockBuilder::TBlockBuilder(TDataTypeRegistryPtr dataTypeRegistry)
TBlockBuilder::~TBlockBuilder() {
}
-bool TBlockBuilder::Start(const TVector<std::pair<TString, NScheme::TTypeId>>& columns, ui64 maxRowsInBlock, ui64 maxBytesInBlock, TString& err) {
+bool TBlockBuilder::Start(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns, ui64 maxRowsInBlock, ui64 maxBytesInBlock, TString& err) {
try {
Impl.Reset(new TImpl(DataTypeRegistry, columns, maxRowsInBlock, maxBytesInBlock));
} catch (std::exception& e) {
diff --git a/ydb/core/formats/factory.h b/ydb/core/formats/factory.h
index 59f9079fac7..40d44a12d4a 100644
--- a/ydb/core/formats/factory.h
+++ b/ydb/core/formats/factory.h
@@ -11,7 +11,7 @@ class IBlockBuilder {
public:
virtual ~IBlockBuilder() = default;
- virtual bool Start(const TVector<std::pair<TString, NScheme::TTypeId>>& columns, ui64 maxRowsInBlock, ui64 maxBytesInBlock, TString& err) = 0;
+ virtual bool Start(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns, ui64 maxRowsInBlock, ui64 maxBytesInBlock, TString& err) = 0;
virtual void AddRow(const TDbTupleRef& key, const TDbTupleRef& value) = 0;
virtual TString Finish() = 0;
virtual size_t Bytes() const = 0;
diff --git a/ydb/core/formats/switch_type.h b/ydb/core/formats/switch_type.h
index 5cc7924389d..c04d59fd248 100644
--- a/ydb/core/formats/switch_type.h
+++ b/ydb/core/formats/switch_type.h
@@ -108,8 +108,8 @@ bool SwitchArrayType(const arrow::Datum& column, TFunc&& f) {
* @return Result of execution of callback or false if the type typeId is not supported.
*/
template <typename TFunc>
-bool SwitchYqlTypeToArrowType(NScheme::TTypeId typeId, TFunc&& callback) {
- switch (typeId) {
+bool SwitchYqlTypeToArrowType(NScheme::TTypeInfo typeInfo, TFunc&& callback) {
+ switch (typeInfo.GetTypeId()) {
case NScheme::NTypeIds::Bool:
return callback(TTypeWrapper<arrow::BooleanType>());
case NScheme::NTypeIds::Int8:
@@ -155,6 +155,9 @@ bool SwitchYqlTypeToArrowType(NScheme::TTypeId typeId, TFunc&& callback) {
case NScheme::NTypeIds::ActorId:
case NScheme::NTypeIds::StepOrderId:
break; // Deprecated types
+
+ case NScheme::NTypeIds::Pg:
+ break; // TODO: support pg types
}
return false;
}
diff --git a/ydb/core/formats/ut_arrow.cpp b/ydb/core/formats/ut_arrow.cpp
index 68f338b0205..d49c04fd389 100644
--- a/ydb/core/formats/ut_arrow.cpp
+++ b/ydb/core/formats/ut_arrow.cpp
@@ -14,29 +14,30 @@ namespace {
namespace NTypeIds = NScheme::NTypeIds;
using TTypeId = NScheme::TTypeId;
+using TTypeInfo = NScheme::TTypeInfo;
struct TDataRow {
- static const constexpr TTypeId Types[20] = {
- NTypeIds::Bool,
- NTypeIds::Int8,
- NTypeIds::Int16,
- NTypeIds::Int32,
- NTypeIds::Int64,
- NTypeIds::Uint8,
- NTypeIds::Uint16,
- NTypeIds::Uint32,
- NTypeIds::Uint64,
- NTypeIds::Float,
- NTypeIds::Double,
- NTypeIds::String,
- NTypeIds::Utf8,
- NTypeIds::Json,
- NTypeIds::Yson,
- NTypeIds::Date,
- NTypeIds::Datetime,
- NTypeIds::Timestamp,
- NTypeIds::Interval,
- NTypeIds::JsonDocument,
+ static const constexpr TTypeInfo Types[20] = {
+ TTypeInfo(NTypeIds::Bool),
+ TTypeInfo(NTypeIds::Int8),
+ TTypeInfo(NTypeIds::Int16),
+ TTypeInfo(NTypeIds::Int32),
+ TTypeInfo(NTypeIds::Int64),
+ TTypeInfo(NTypeIds::Uint8),
+ TTypeInfo(NTypeIds::Uint16),
+ TTypeInfo(NTypeIds::Uint32),
+ TTypeInfo(NTypeIds::Uint64),
+ TTypeInfo(NTypeIds::Float),
+ TTypeInfo(NTypeIds::Double),
+ TTypeInfo(NTypeIds::String),
+ TTypeInfo(NTypeIds::Utf8),
+ TTypeInfo(NTypeIds::Json),
+ TTypeInfo(NTypeIds::Yson),
+ TTypeInfo(NTypeIds::Date),
+ TTypeInfo(NTypeIds::Datetime),
+ TTypeInfo(NTypeIds::Timestamp),
+ TTypeInfo(NTypeIds::Interval),
+ TTypeInfo(NTypeIds::JsonDocument),
// TODO: DyNumber, Decimal
};
@@ -114,29 +115,29 @@ struct TDataRow {
return std::make_shared<arrow::Schema>(fields);
}
- static TVector<std::pair<TString, TTypeId>> MakeYdbSchema() {
- TVector<std::pair<TString, TTypeId>> columns = {
- {"bool", NTypeIds::Bool },
- {"i8", NTypeIds::Int8 },
- {"i16", NTypeIds::Int16 },
- {"i32", NTypeIds::Int32 },
- {"i64", NTypeIds::Int64 },
- {"ui8", NTypeIds::Uint8 },
- {"ui16", NTypeIds::Uint16 },
- {"ui32", NTypeIds::Uint32 },
- {"ui64", NTypeIds::Uint64 },
- {"f32", NTypeIds::Float },
- {"f64", NTypeIds::Double },
- {"string", NTypeIds::String },
- {"utf8", NTypeIds::Utf8 },
- {"json", NTypeIds::Json },
- {"yson", NTypeIds::Yson },
- {"date", NTypeIds::Date },
- {"datetime", NTypeIds::Datetime },
- {"ts", NTypeIds::Timestamp },
- {"ival", NTypeIds::Interval },
- {"json_doc", NTypeIds::JsonDocument },
- //{"dec", NTypeIds::Decimal }
+ static TVector<std::pair<TString, TTypeInfo>> MakeYdbSchema() {
+ TVector<std::pair<TString, TTypeInfo>> columns = {
+ {"bool", TTypeInfo(NTypeIds::Bool) },
+ {"i8", TTypeInfo(NTypeIds::Int8) },
+ {"i16", TTypeInfo(NTypeIds::Int16) },
+ {"i32", TTypeInfo(NTypeIds::Int32) },
+ {"i64", TTypeInfo(NTypeIds::Int64) },
+ {"ui8", TTypeInfo(NTypeIds::Uint8) },
+ {"ui16", TTypeInfo(NTypeIds::Uint16) },
+ {"ui32", TTypeInfo(NTypeIds::Uint32) },
+ {"ui64", TTypeInfo(NTypeIds::Uint64) },
+ {"f32", TTypeInfo(NTypeIds::Float) },
+ {"f64", TTypeInfo(NTypeIds::Double) },
+ {"string", TTypeInfo(NTypeIds::String) },
+ {"utf8", TTypeInfo(NTypeIds::Utf8) },
+ {"json", TTypeInfo(NTypeIds::Json) },
+ {"yson", TTypeInfo(NTypeIds::Yson) },
+ {"date", TTypeInfo(NTypeIds::Date) },
+ {"datetime", TTypeInfo(NTypeIds::Datetime) },
+ {"ts", TTypeInfo(NTypeIds::Timestamp) },
+ {"ival", TTypeInfo(NTypeIds::Interval) },
+ {"json_doc", TTypeInfo(NTypeIds::JsonDocument) },
+ //{"dec", TTypeInfo(NTypeIds::Decimal) }
};
return columns;
}
diff --git a/ydb/core/grpc_services/rpc_import_data.cpp b/ydb/core/grpc_services/rpc_import_data.cpp
index d9b32d742a5..33bd25942ab 100644
--- a/ydb/core/grpc_services/rpc_import_data.cpp
+++ b/ydb/core/grpc_services/rpc_import_data.cpp
@@ -42,8 +42,8 @@ class TImportDataRPC: public TRpcRequestActor<TImportDataRPC, TEvImportDataReque
static constexpr TDuration MAX_TIMEOUT = TDuration::Minutes(5);
- static TVector<NUdf::TDataTypeId> MakeKeyColumnTypes(const TNavigate::TEntry& entry) {
- TVector<NUdf::TDataTypeId> result;
+ static TVector<NScheme::TTypeInfo> MakeKeyColumnTypes(const TNavigate::TEntry& entry) {
+ TVector<NScheme::TTypeInfo> result;
for (const auto& [_, column] : entry.Columns) {
if (column.KeyOrder < 0) {
@@ -67,7 +67,7 @@ class TImportDataRPC: public TRpcRequestActor<TImportDataRPC, TEvImportDataReque
}
static THolder<TKeyDesc> MakeKeyDesc(const TNavigate::TEntry& entry) {
- const TVector<NUdf::TDataTypeId> keyColumnTypes = MakeKeyColumnTypes(entry);
+ const TVector<NScheme::TTypeInfo> keyColumnTypes = MakeKeyColumnTypes(entry);
return MakeHolder<TKeyDesc>(
entry.TableId,
GetFullRange(keyColumnTypes.size()).ToTableRange(),
@@ -290,7 +290,7 @@ class TImportDataRPC: public TRpcRequestActor<TImportDataRPC, TEvImportDataReque
TMaybe<TOwnedCellVec> prevKey;
TMemoryPool pool(256);
- std::vector<std::pair<i32, ui32>> columnOrderTypes; // {keyOrder, PType}
+ std::vector<std::pair<i32, NScheme::TTypeInfo>> columnOrderTypes; // {keyOrder, PType}
columnOrderTypes.reserve(format.columns().size());
for (const auto& column : format.columns()) {
const auto* info = Columns.FindPtr(column);
diff --git a/ydb/core/grpc_services/rpc_kh_describe.cpp b/ydb/core/grpc_services/rpc_kh_describe.cpp
index 9882b0abb1a..2cd5434a926 100644
--- a/ydb/core/grpc_services/rpc_kh_describe.cpp
+++ b/ydb/core/grpc_services/rpc_kh_describe.cpp
@@ -42,7 +42,7 @@ private:
bool WaitingResolveReply;
bool Finished;
- TVector<NScheme::TTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
THolder<NKikimr::TKeyDesc> KeyRange;
TAutoPtr<NSchemeCache::TSchemeCacheNavigate> ResolveNamesResult;
@@ -175,7 +175,13 @@ private:
for (const auto& col : entry.Columns) {
auto* colMeta = Result.add_columns();
colMeta->set_name(col.second.Name);
- colMeta->mutable_type()->mutable_optional_type()->mutable_item()->set_type_id((Ydb::Type::PrimitiveTypeId)col.second.PType);
+ auto& typeInfo = col.second.PType;
+ auto* item = colMeta->mutable_type()->mutable_optional_type()->mutable_item();
+ if (typeInfo.GetTypeId() == NScheme::NTypeIds::Pg) {
+ item->mutable_pg_type()->set_oid(NPg::PgTypeIdFromTypeDesc(typeInfo.GetTypeDesc()));
+ } else {
+ item->set_type_id((Ydb::Type::PrimitiveTypeId)typeInfo.GetTypeId());
+ }
if (col.second.KeyOrder == -1)
continue;
diff --git a/ydb/core/grpc_services/rpc_load_rows.cpp b/ydb/core/grpc_services/rpc_load_rows.cpp
index be234b7eff6..7cdb15f5ab7 100644
--- a/ydb/core/grpc_services/rpc_load_rows.cpp
+++ b/ydb/core/grpc_services/rpc_load_rows.cpp
@@ -25,9 +25,9 @@ using namespace Ydb;
namespace {
-bool CheckValueData(NScheme::TTypeId type, const TCell& cell, TString& err) {
+bool CheckValueData(NScheme::TTypeInfo type, const TCell& cell, TString& err) {
bool ok = true;
- switch (type) {
+ switch (type.GetTypeId()) {
case NScheme::NTypeIds::Bool:
case NScheme::NTypeIds::Int8:
case NScheme::NTypeIds::Uint8:
@@ -82,8 +82,12 @@ bool CheckValueData(NScheme::TTypeId type, const TCell& cell, TString& err) {
// DyNumber value was verified at parsing time
break;
+ case NScheme::NTypeIds::Pg:
+ // no pg validation here
+ break;
+
default:
- err = Sprintf("Unexpected type %d", type);
+ err = Sprintf("Unexpected type %d", type.GetTypeId());
return false;
}
@@ -191,7 +195,7 @@ public:
{}
private:
- static bool CellFromProtoVal(NScheme::TTypeId type, const Ydb::Value* vp,
+ static bool CellFromProtoVal(NScheme::TTypeInfo type, const Ydb::Value* vp,
TCell& c, TString& err, TMemoryPool& valueDataPool)
{
if (vp->Hasnull_flag_value()) {
@@ -212,7 +216,7 @@ private:
break; \
}
- switch (type) {
+ switch (type.GetTypeId()) {
EXTRACT_VAL(Bool, bool, ui8);
EXTRACT_VAL(Int8, int32, i8);
EXTRACT_VAL(Uint8, uint32, ui8);
@@ -267,8 +271,13 @@ private:
c = TCell((const char*)&decimalVal, sizeof(decimalVal));
break;
}
+ case NScheme::NTypeIds::Pg : {
+ TString v = val.Getbytes_value();
+ c = TCell(v.data(), v.size());
+ break;
+ }
default:
- err = Sprintf("Unexpected type %d", type);
+ err = Sprintf("Unexpected type %d", type.GetTypeId());
return false;
};
diff --git a/ydb/core/grpc_services/rpc_log_store.cpp b/ydb/core/grpc_services/rpc_log_store.cpp
index e82b54488fc..732303407bc 100644
--- a/ydb/core/grpc_services/rpc_log_store.cpp
+++ b/ydb/core/grpc_services/rpc_log_store.cpp
@@ -95,15 +95,15 @@ bool ConvertSchemaFromPublicToInternal(const Ydb::LogStore::Schema& from, NKikim
for (const auto& column : from.columns()) {
auto* col = to.AddColumns();
col->SetName(column.name());
- ui32 typeId;
- if (!ExtractColumnTypeId(typeId, column.type(), status, error)) {
+ NScheme::TTypeInfo typeInfo;
+ if (!ExtractColumnTypeInfo(typeInfo, column.type(), status, error)) {
return false;
}
- auto typeName = NScheme::TypeName(typeId);
+ auto typeName = NScheme::TypeName(typeInfo);
col->SetType(typeName);
key.erase(column.name());
- if (column.name() == firstKeyColumn && typeId != NYql::NProto::Timestamp) {
+ if (column.name() == firstKeyColumn && typeInfo.GetTypeId() != NYql::NProto::Timestamp) {
error = "not supported first PK column type for LogStore. Only Timestamp columns are allowed for now.";
return false;
}
diff --git a/ydb/core/grpc_services/rpc_long_tx.cpp b/ydb/core/grpc_services/rpc_long_tx.cpp
index 276a500ea72..3ca643789a0 100644
--- a/ydb/core/grpc_services/rpc_long_tx.cpp
+++ b/ydb/core/grpc_services/rpc_long_tx.cpp
@@ -10,6 +10,7 @@
#include <ydb/core/tablet/tablet_pipe_client_cache.h>
#include <ydb/core/formats/arrow_helpers.h>
#include <ydb/core/formats/sharding.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/tx/schemeshard/schemeshard.h>
#include <ydb/core/tx/columnshard/columnshard.h>
#include <ydb/core/tx/long_tx_service/public/events.h>
@@ -33,10 +34,12 @@ using TEvLongTxReadRequest = NGRpcService::TGrpcRequestOperationCall<Ydb::LongTx
Ydb::LongTx::ReadResponse>;
std::shared_ptr<arrow::Schema> ExtractArrowSchema(const NKikimrSchemeOp::TColumnTableSchema& schema) {
- TVector<std::pair<TString, NScheme::TTypeId>> columns;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> columns;
for (auto& col : schema.GetColumns()) {
Y_VERIFY(col.HasTypeId());
- columns.emplace_back(col.GetName(), (NScheme::TTypeId)col.GetTypeId());
+ auto typeInfo = NScheme::TypeInfoFromProtoColumnType(col.GetTypeId(),
+ col.HasTypeInfo() ? &col.GetTypeInfo() : nullptr);
+ columns.emplace_back(col.GetName(), typeInfo);
}
return NArrow::MakeArrowSchema(columns);
diff --git a/ydb/core/grpc_services/rpc_read_columns.cpp b/ydb/core/grpc_services/rpc_read_columns.cpp
index d9f17687a94..bbff1078e6b 100644
--- a/ydb/core/grpc_services/rpc_read_columns.cpp
+++ b/ydb/core/grpc_services/rpc_read_columns.cpp
@@ -43,13 +43,13 @@ private:
TAutoPtr<TKeyDesc> KeyRange;
TAutoPtr<NSchemeCache::TSchemeCacheNavigate> ResolveNamesResult;
- TVector<NScheme::TTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
// Positions of key and value fields in the request proto struct
struct TFieldDescription {
ui32 ColId;
ui32 PositionInStruct;
- NScheme::TTypeId Type;
+ NScheme::TTypeInfo Type;
};
TVector<TFieldDescription> KeyColumnPositions;
TVector<TFieldDescription> ValueColumnPositions;
@@ -64,7 +64,7 @@ private:
TActorId SysViewScanActor;
std::unique_ptr<IBlockBuilder> BlockBuilder;
- TVector<NScheme::TTypeId> ValueColumnTypes;
+ TVector<NScheme::TTypeInfo> ValueColumnTypes;
ui64 SysViewMaxRows;
ui64 SysViewMaxBytes;
ui64 SysViewRowsReceived;
@@ -254,7 +254,7 @@ private:
SysViewMaxBytes = maxBytes;
// List of columns requested by user
- TVector<std::pair<TString, NScheme::TTypeId>> valueColumnNamesAndTypes;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> valueColumnNamesAndTypes;
// This list of columns will be requested from sys view scan actor
// It starts with all key columns followed by all the columns requested by user possibly including key columns again
@@ -270,7 +270,7 @@ private:
KeyColumnTypes[ci.second.KeyOrder] = ci.second.PType;
columns.resize(Max<size_t>(columns.size(), ci.second.KeyOrder + 1));
- columns[ci.second.KeyOrder] = {ci.second.Id, (NScheme::TTypeId)ci.second.PType};
+ columns[ci.second.KeyOrder] = {ci.second.Id, ci.second.PType};
}
}
@@ -283,10 +283,10 @@ private:
}
auto ci = entry.Columns.find(id->second);
- columns.push_back({ci->second.Id, (NScheme::TTypeId)ci->second.PType});
+ columns.push_back({ci->second.Id, ci->second.PType});
- valueColumnNamesAndTypes.push_back({ci->second.Name, (NScheme::TTypeId)ci->second.PType});
- ValueColumnTypes.push_back((NScheme::TTypeId)ci->second.PType);
+ valueColumnNamesAndTypes.push_back({ci->second.Name, ci->second.PType});
+ ValueColumnTypes.push_back(ci->second.PType);
}
}
@@ -505,7 +505,7 @@ private:
return true;
}
- bool CheckCellSizes(const TConstArrayRef<TCell>& cells, const TConstArrayRef<NScheme::TTypeId>& types) {
+ bool CheckCellSizes(const TConstArrayRef<TCell>& cells, const TConstArrayRef<NScheme::TTypeInfo>& types) {
if (cells.size() > types.size())
return false;
diff --git a/ydb/core/grpc_services/ut/CMakeLists.darwin.txt b/ydb/core/grpc_services/ut/CMakeLists.darwin.txt
index 573ff572497..10d02da6dfb 100644
--- a/ydb/core/grpc_services/ut/CMakeLists.darwin.txt
+++ b/ydb/core/grpc_services/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-grpc_services-ut PUBLIC
cpp-regex-pcre
library-cpp-svnversion
core-client-scheme_cache_lib
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-grpc_services-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/grpc_services/ut/CMakeLists.linux.txt b/ydb/core/grpc_services/ut/CMakeLists.linux.txt
index 79560ac6a68..ead6d659edc 100644
--- a/ydb/core/grpc_services/ut/CMakeLists.linux.txt
+++ b/ydb/core/grpc_services/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-grpc_services-ut PUBLIC
cpp-regex-pcre
library-cpp-svnversion
core-client-scheme_cache_lib
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-grpc_services-ut PRIVATE
-ldl
diff --git a/ydb/core/grpc_streaming/ut/CMakeLists.darwin.txt b/ydb/core/grpc_streaming/ut/CMakeLists.darwin.txt
index 9f9cf5dae44..bbeafa0ac05 100644
--- a/ydb/core/grpc_streaming/ut/CMakeLists.darwin.txt
+++ b/ydb/core/grpc_streaming/ut/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-grpc_streaming-ut PUBLIC
ydb-core-grpc_streaming
cpp-grpc-client
grpc_streaming-ut-grpc
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-grpc_streaming-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/grpc_streaming/ut/CMakeLists.linux.txt b/ydb/core/grpc_streaming/ut/CMakeLists.linux.txt
index 61213521677..18ffe471426 100644
--- a/ydb/core/grpc_streaming/ut/CMakeLists.linux.txt
+++ b/ydb/core/grpc_streaming/ut/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-grpc_streaming-ut PUBLIC
ydb-core-grpc_streaming
cpp-grpc-client
grpc_streaming-ut-grpc
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-grpc_streaming-ut PRIVATE
-ldl
diff --git a/ydb/core/health_check/ut/CMakeLists.darwin.txt b/ydb/core/health_check/ut/CMakeLists.darwin.txt
index fbfdfed6dfc..2b7b62513ff 100644
--- a/ydb/core/health_check/ut/CMakeLists.darwin.txt
+++ b/ydb/core/health_check/ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-health_check-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-core-health_check
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-health_check-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/health_check/ut/CMakeLists.linux.txt b/ydb/core/health_check/ut/CMakeLists.linux.txt
index 9d64a700e31..c941884da7f 100644
--- a/ydb/core/health_check/ut/CMakeLists.linux.txt
+++ b/ydb/core/health_check/ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-health_check-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-core-health_check
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-health_check-ut PRIVATE
-ldl
diff --git a/ydb/core/io_formats/csv.h b/ydb/core/io_formats/csv.h
index d3e75a487df..0924ac16850 100644
--- a/ydb/core/io_formats/csv.h
+++ b/ydb/core/io_formats/csv.h
@@ -13,7 +13,7 @@ namespace NKikimr::NFormats {
struct TYdbDump {
// Parse YdbDump-formatted line
- static bool ParseLine(TStringBuf line, const std::vector<std::pair<i32, ui32>>& columnOrderTypes, TMemoryPool& pool,
+ static bool ParseLine(TStringBuf line, const std::vector<std::pair<i32, NScheme::TTypeInfo>>& columnOrderTypes, TMemoryPool& pool,
TVector<TCell>& keys, TVector<TCell>& values, TString& strError, ui64& numBytes);
};
@@ -23,7 +23,7 @@ public:
/// If header is true read column names from first line after skipRows. Parse columns as strings in this case.
/// @note It's possible to skip header with skipRows and use typed columns instead.
- TArrowCSV(const TVector<std::pair<TString, NScheme::TTypeId>>& columns,
+ TArrowCSV(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns,
ui32 skipRows = 0, bool header = false, ui32 blockSize = DEFAULT_BLOCK_SIZE);
std::shared_ptr<arrow::RecordBatch> ReadNext(const TString& csv, TString& errString);
diff --git a/ydb/core/io_formats/csv_arrow.cpp b/ydb/core/io_formats/csv_arrow.cpp
index 6a79825e56d..e4a42f7f802 100644
--- a/ydb/core/io_formats/csv_arrow.cpp
+++ b/ydb/core/io_formats/csv_arrow.cpp
@@ -3,7 +3,7 @@
namespace NKikimr::NFormats {
-TArrowCSV::TArrowCSV(const TVector<std::pair<TString, NScheme::TTypeId>>& columns, ui32 skipRows, bool header,
+TArrowCSV::TArrowCSV(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns, ui32 skipRows, bool header,
ui32 blockSize)
: ReadOptions(arrow::csv::ReadOptions::Defaults())
, ParseOptions(arrow::csv::ParseOptions::Defaults())
diff --git a/ydb/core/io_formats/csv_ydb_dump.cpp b/ydb/core/io_formats/csv_ydb_dump.cpp
index 683a55a0856..5aab7d3b1d6 100644
--- a/ydb/core/io_formats/csv_ydb_dump.cpp
+++ b/ydb/core/io_formats/csv_ydb_dump.cpp
@@ -164,12 +164,12 @@ namespace {
} // anonymous
-bool MakeCell(TCell& cell, TStringBuf value, NScheme::TTypeId type, TMemoryPool& pool) {
+bool MakeCell(TCell& cell, TStringBuf value, NScheme::TTypeInfo type, TMemoryPool& pool) {
if (value == "null") {
return true;
}
- switch (type) {
+ switch (type.GetTypeId()) {
case NScheme::NTypeIds::Bool:
return TCellMaker<bool>::Make(cell, value, pool);
case NScheme::NTypeIds::Int8:
@@ -213,17 +213,20 @@ bool MakeCell(TCell& cell, TStringBuf value, NScheme::TTypeId type, TMemoryPool&
return TCellMaker<TMaybe<TString>, TStringBuf>::Make(cell, value, pool, &DyNumberToStringBuf);
case NScheme::NTypeIds::Decimal:
return TCellMaker<NYql::NDecimal::TInt128, std::pair<ui64, ui64>>::Make(cell, value, pool, &Int128ToPair);
+ case NScheme::NTypeIds::Pg:
+ // TODO: support pg types
+ Y_VERIFY(false, "pg types are not supported");
default:
return false;
}
}
-bool CheckCellValue(const TCell& cell, NScheme::TTypeId type) {
+bool CheckCellValue(const TCell& cell, NScheme::TTypeInfo type) {
if (cell.IsNull()) {
return true;
}
- switch (type) {
+ switch (type.GetTypeId()) {
case NScheme::NTypeIds::Bool:
case NScheme::NTypeIds::Int8:
case NScheme::NTypeIds::Uint8:
@@ -257,12 +260,15 @@ bool CheckCellValue(const TCell& cell, NScheme::TTypeId type) {
return NYql::NDom::IsValidJson(cell.AsBuf());
case NScheme::NTypeIds::Decimal:
return !NYql::NDecimal::IsError(cell.AsValue<NYql::NDecimal::TInt128>());
+ case NScheme::NTypeIds::Pg:
+ // TODO: support pg types
+ Y_VERIFY(false, "pg types are not supported");
default:
return false;
}
}
-bool TYdbDump::ParseLine(TStringBuf line, const std::vector<std::pair<i32, ui32>>& columnOrderTypes, TMemoryPool& pool,
+bool TYdbDump::ParseLine(TStringBuf line, const std::vector<std::pair<i32, NScheme::TTypeInfo>>& columnOrderTypes, TMemoryPool& pool,
TVector<TCell>& keys, TVector<TCell>& values, TString& strError, ui64& numBytes)
{
for (const auto& [keyOrder, pType] : columnOrderTypes) {
diff --git a/ydb/core/kesus/proxy/ut/CMakeLists.darwin.txt b/ydb/core/kesus/proxy/ut/CMakeLists.darwin.txt
index c4258c7c46a..6d97c9882f6 100644
--- a/ydb/core/kesus/proxy/ut/CMakeLists.darwin.txt
+++ b/ydb/core/kesus/proxy/ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-kesus-proxy-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-kesus-proxy
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-kesus-proxy-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/kesus/proxy/ut/CMakeLists.linux.txt b/ydb/core/kesus/proxy/ut/CMakeLists.linux.txt
index 4d415bbecb4..85fdeb1b574 100644
--- a/ydb/core/kesus/proxy/ut/CMakeLists.linux.txt
+++ b/ydb/core/kesus/proxy/ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-kesus-proxy-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-kesus-proxy
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-kesus-proxy-ut PRIVATE
-ldl
diff --git a/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.darwin.txt b/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.darwin.txt
index 9df85c22844..19fec0b0b0a 100644
--- a/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.darwin.txt
+++ b/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(quoter_performance_test PUBLIC
library-cpp-getopt
cpp-testing-unittest
core-kesus-tablet
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(quoter_performance_test PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.linux.txt b/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.linux.txt
index ba3470a24ee..1917fedb4a1 100644
--- a/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.linux.txt
+++ b/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(quoter_performance_test PUBLIC
library-cpp-getopt
cpp-testing-unittest
core-kesus-tablet
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(quoter_performance_test PRIVATE
-ldl
diff --git a/ydb/core/kesus/tablet/ut/CMakeLists.darwin.txt b/ydb/core/kesus/tablet/ut/CMakeLists.darwin.txt
index 3c3ea0c5d72..ea79b18cc98 100644
--- a/ydb/core/kesus/tablet/ut/CMakeLists.darwin.txt
+++ b/ydb/core/kesus/tablet/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-kesus-tablet-ut PUBLIC
cpp-testing-unittest_main
core-kesus-tablet
cpp-testing-gmock_in_unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-kesus-tablet-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/kesus/tablet/ut/CMakeLists.linux.txt b/ydb/core/kesus/tablet/ut/CMakeLists.linux.txt
index 6cc921b804d..c9d5fdfc69a 100644
--- a/ydb/core/kesus/tablet/ut/CMakeLists.linux.txt
+++ b/ydb/core/kesus/tablet/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-kesus-tablet-ut PUBLIC
cpp-testing-unittest_main
core-kesus-tablet
cpp-testing-gmock_in_unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-kesus-tablet-ut PRIVATE
-ldl
diff --git a/ydb/core/keyvalue/ut/CMakeLists.darwin.txt b/ydb/core/keyvalue/ut/CMakeLists.darwin.txt
index 309ef9b9fc8..cfcb539eb06 100644
--- a/ydb/core/keyvalue/ut/CMakeLists.darwin.txt
+++ b/ydb/core/keyvalue/ut/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-keyvalue-ut PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-keyvalue-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/keyvalue/ut/CMakeLists.linux.txt b/ydb/core/keyvalue/ut/CMakeLists.linux.txt
index 361058b8dc9..32835181c8c 100644
--- a/ydb/core/keyvalue/ut/CMakeLists.linux.txt
+++ b/ydb/core/keyvalue/ut/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-keyvalue-ut PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-keyvalue-ut PRIVATE
-ldl
diff --git a/ydb/core/kqp/common/CMakeLists.txt b/ydb/core/kqp/common/CMakeLists.txt
index f07836ba559..c4926bd4b0f 100644
--- a/ydb/core/kqp/common/CMakeLists.txt
+++ b/ydb/core/kqp/common/CMakeLists.txt
@@ -35,6 +35,7 @@ target_sources(core-kqp-common PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/kqp_timeouts.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/kqp_lwtrace_probes.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/kqp_topic.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/kqp_types.cpp
)
generate_enum_serilization(core-kqp-common
${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/kqp_tx_info.h
diff --git a/ydb/core/kqp/common/kqp_resolve.cpp b/ydb/core/kqp/common/kqp_resolve.cpp
index b4abafc86c6..64dac311215 100644
--- a/ydb/core/kqp/common/kqp_resolve.cpp
+++ b/ydb/core/kqp/common/kqp_resolve.cpp
@@ -16,7 +16,7 @@ using namespace NMiniKQL;
using namespace NYql;
using namespace NYql::NNodes;
-TVector<TCell> MakeKeyCells(const NKikimr::NUdf::TUnboxedValue& value, const TVector<NUdf::TDataTypeId>& keyColumnTypes,
+TVector<TCell> MakeKeyCells(const NKikimr::NUdf::TUnboxedValue& value, const TVector<NScheme::TTypeInfo>& keyColumnTypes,
const TVector<ui32>& keyColumnIndices, const NMiniKQL::TTypeEnvironment& typeEnv, bool copyValues)
{
TVector<TCell> key(keyColumnTypes.size());
@@ -47,7 +47,7 @@ TTableId MakeTableId(const NKqpProto::TKqpPhyTable& table) {
}
TVector<TPartitionWithRange> GetKeyRangePartitions(const TTableRange& range,
- const TVector<TKeyDesc::TPartitionInfo>& partitions, const TVector<NUdf::TDataTypeId>& keyColumnTypes)
+ const TVector<TKeyDesc::TPartitionInfo>& partitions, const TVector<NScheme::TTypeInfo>& keyColumnTypes)
{
auto it = std::lower_bound(partitions.begin(), partitions.end(), true,
[&range, &keyColumnTypes](const auto& partition, bool) {
diff --git a/ydb/core/kqp/common/kqp_resolve.h b/ydb/core/kqp/common/kqp_resolve.h
index 517d1bc451d..f2f34e2f8a4 100644
--- a/ydb/core/kqp/common/kqp_resolve.h
+++ b/ydb/core/kqp/common/kqp_resolve.h
@@ -23,14 +23,14 @@ class TKqpTableKeys {
public:
struct TColumn {
ui32 Id;
- ui32 Type;
+ NScheme::TTypeInfo Type;
};
struct TTable {
TString Path;
TMap<TString, TColumn> Columns;
TVector<TString> KeyColumns;
- TVector<NUdf::TDataTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
ETableKind TableKind = ETableKind::Unknown;
};
@@ -72,12 +72,12 @@ private:
THashMap<TTableId, TTable> TablesById;
};
-TVector<TCell> MakeKeyCells(const NKikimr::NUdf::TUnboxedValue& value, const TVector<NUdf::TDataTypeId>& keyColumnTypes,
+TVector<TCell> MakeKeyCells(const NKikimr::NUdf::TUnboxedValue& value, const TVector<NScheme::TTypeInfo>& keyColumnTypes,
const TVector<ui32>& keyColumnIndices, const NMiniKQL::TTypeEnvironment& typeEnv, bool copyValues);
template<typename TList, typename TRangeFunc>
size_t FindKeyPartitionIndex(const TVector<TCell>& key, const TList& partitions,
- const TVector<NUdf::TDataTypeId>& keyColumnTypes, const TRangeFunc& rangeFunc)
+ const TVector<NScheme::TTypeInfo>& keyColumnTypes, const TRangeFunc& rangeFunc)
{
auto it = std::lower_bound(partitions.begin(), partitions.end(), key,
[&keyColumnTypes, &rangeFunc](const auto& partition, const auto& key) {
@@ -95,7 +95,7 @@ size_t FindKeyPartitionIndex(const TVector<TCell>& key, const TList& partitions,
template<typename TList, typename TRangeFunc>
size_t FindKeyPartitionIndex(const NMiniKQL::TTypeEnvironment& typeEnv, const NKikimr::NUdf::TUnboxedValue& value,
- const TList& partitions, const TVector<NUdf::TDataTypeId>& keyColumnTypes, const TVector<ui32>& keyColumnIndices,
+ const TList& partitions, const TVector<NScheme::TTypeInfo>& keyColumnTypes, const TVector<ui32>& keyColumnIndices,
const TRangeFunc& rangeFunc)
{
auto key = MakeKeyCells(value, keyColumnTypes, keyColumnIndices, typeEnv, /* copyValues */ true);
@@ -115,10 +115,10 @@ struct TPartitionWithRange {
};
TVector<TPartitionWithRange> GetKeyRangePartitions(const TTableRange& range,
- const TVector<TKeyDesc::TPartitionInfo>& partitions, const TVector<NUdf::TDataTypeId>& keyColumnTypes);
+ const TVector<TKeyDesc::TPartitionInfo>& partitions, const TVector<NScheme::TTypeInfo>& keyColumnTypes);
template<typename TList, typename TRangeFunc>
-void SortPartitions(TList& partitions, const TVector<NUdf::TDataTypeId>& keyColumnTypes, const TRangeFunc& rangeFunc) {
+void SortPartitions(TList& partitions, const TVector<NScheme::TTypeInfo>& keyColumnTypes, const TRangeFunc& rangeFunc) {
std::sort(partitions.begin(), partitions.end(),
[&keyColumnTypes, &rangeFunc](const auto& left, const auto& right) {
const auto& leftRange = rangeFunc(left);
diff --git a/ydb/core/kqp/common/kqp_types.cpp b/ydb/core/kqp/common/kqp_types.cpp
new file mode 100644
index 00000000000..22aed7aa5ef
--- /dev/null
+++ b/ydb/core/kqp/common/kqp_types.cpp
@@ -0,0 +1,49 @@
+#include "kqp_types.h"
+
+#include <ydb/library/yql/minikql/mkql_node_cast.h>
+#include <ydb/library/yql/utils/pg_types.h>
+
+namespace NKikimr::NScheme {
+
+void ProtoMiniKQLTypeFromTypeInfo(NKikimrMiniKQL::TType* type, const TTypeInfo typeInfo) {
+ if (typeInfo.GetTypeId() == NTypeIds::Pg) {
+ type->SetKind(NKikimrMiniKQL::Pg);
+ type->MutablePg()->Setoid(NPg::PgTypeIdFromTypeDesc(typeInfo.GetTypeDesc()));
+ } else {
+ type->SetKind(NKikimrMiniKQL::Data);
+ type->MutableData()->SetScheme(typeInfo.GetTypeId());
+ }
+}
+
+TTypeInfo TypeInfoFromProtoMiniKQLType(const NKikimrMiniKQL::TType& type) {
+ switch (type.GetKind()) {
+ case NKikimrMiniKQL::Data:
+ return TTypeInfo((NScheme::TTypeId)type.GetData().GetScheme());
+ case NKikimrMiniKQL::Pg:
+ return TTypeInfo(NScheme::NTypeIds::Pg, NPg::TypeDescFromPgTypeId(type.GetPg().Getoid()));
+ default:
+ Y_ENSURE(false, "not a data or pg type");
+ }
+}
+
+const NMiniKQL::TType* MiniKQLTypeFromTypeInfo(const TTypeInfo typeInfo, const NMiniKQL::TTypeEnvironment& env) {
+ if (typeInfo.GetTypeId() == NTypeIds::Pg) {
+ return NMiniKQL::TPgType::Create(NPg::PgTypeIdFromTypeDesc(typeInfo.GetTypeDesc()), env);
+ } else {
+ return NMiniKQL::TDataType::Create((NUdf::TDataTypeId)typeInfo.GetTypeId(), env);
+ }
+}
+
+TTypeInfo TypeInfoFromMiniKQLType(const NMiniKQL::TType* type) {
+ switch (type->GetKind()) {
+ case NMiniKQL::TType::EKind::Data:
+ return TTypeInfo((NScheme::TTypeId)AS_TYPE(NMiniKQL::TDataType, type)->GetSchemeType());
+ case NMiniKQL::TType::EKind::Pg:
+ return TTypeInfo(NScheme::NTypeIds::Pg, NPg::TypeDescFromPgTypeId(AS_TYPE(NMiniKQL::TPgType, type)->GetTypeId()));
+ default:
+ Y_ENSURE(false, "not a data or pg type");
+ }
+}
+
+} // namespace NKikimr::NScheme
+
diff --git a/ydb/core/kqp/common/kqp_types.h b/ydb/core/kqp/common/kqp_types.h
new file mode 100644
index 00000000000..1f2cc41cdd7
--- /dev/null
+++ b/ydb/core/kqp/common/kqp_types.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#include <ydb/core/scheme_types/scheme_type_info.h>
+#include <ydb/library/mkql_proto/protos/minikql.pb.h>
+#include <ydb/library/yql/minikql/mkql_node.h>
+
+namespace NKikimr::NScheme {
+
+void ProtoMiniKQLTypeFromTypeInfo(NKikimrMiniKQL::TType* type, const TTypeInfo typeInfo);
+TTypeInfo TypeInfoFromProtoMiniKQLType(const NKikimrMiniKQL::TType& type);
+
+const NMiniKQL::TType* MiniKQLTypeFromTypeInfo(const TTypeInfo typeInfo,
+ const NMiniKQL::TTypeEnvironment& env);
+TTypeInfo TypeInfoFromMiniKQLType(const NMiniKQL::TType* type);
+
+} // namespace NKikimr::NScheme
diff --git a/ydb/core/kqp/compile/kqp_compile.cpp b/ydb/core/kqp/compile/kqp_compile.cpp
index 753873491dd..a2369af7d41 100644
--- a/ydb/core/kqp/compile/kqp_compile.cpp
+++ b/ydb/core/kqp/compile/kqp_compile.cpp
@@ -109,10 +109,14 @@ void FillColumns(const TCoAtomList& columns, const TKikimrTableMetadata& tableMe
void FillLiteralKeyBound(const TCoDataCtor& literal, NKqpProto::TKqpPhyLiteralValue& proto) {
auto type = literal.Ref().GetTypeAnn();
+
+ // TODO: support pg types
+ YQL_ENSURE(type->GetKind() != ETypeAnnotationKind::Pg, "pg types are not supported");
+
auto slot = type->Cast<TDataExprType>()->GetSlot();
auto typeId = NKikimr::NUdf::GetDataTypeInfo(slot).TypeId;
- YQL_ENSURE(NScheme::NTypeIds::IsYqlType(typeId) && NSchemeShard::IsAllowedKeyType(typeId));
+ YQL_ENSURE(NScheme::NTypeIds::IsYqlType(typeId) && NSchemeShard::IsAllowedKeyType(NScheme::TTypeInfo(typeId)));
auto& protoType = *proto.MutableType();
auto& protoValue = *proto.MutableValue();
diff --git a/ydb/core/kqp/compile/kqp_mkql_compiler.cpp b/ydb/core/kqp/compile/kqp_mkql_compiler.cpp
index 04130446986..2786aca66d9 100644
--- a/ydb/core/kqp/compile/kqp_mkql_compiler.cpp
+++ b/ydb/core/kqp/compile/kqp_mkql_compiler.cpp
@@ -27,7 +27,8 @@ TVector<TKqpTableColumn> GetKqpColumns(const TKikimrTableMetadata& table, const
auto columnData = table.Columns.FindPtr(name);
if (columnData) {
columnId = columnData->Id;
- columnType = columnData->TypeId;
+ // TODO: support pg types
+ columnType = columnData->TypeInfo.GetTypeId();
notNull = columnData->NotNull;
} else if (allowSystemColumns) {
auto systemColumn = GetSystemColumns().find(name);
@@ -90,9 +91,11 @@ void ValidateColumnsType(const TStreamExprType* streamType, const TKikimrTableMe
for (auto* member : rowType->GetItems()) {
auto columnData = tableMeta.Columns.FindPtr(member->GetName());
YQL_ENSURE(columnData);
- YQL_ENSURE(columnData->TypeId);
+ auto columnDataType = columnData->TypeInfo.GetTypeId();
+ // TODO: support pg types
+ YQL_ENSURE(columnDataType != 0 && columnDataType != NScheme::NTypeIds::Pg);
- ValidateColumnType(member->GetItemType(), columnData->TypeId);
+ ValidateColumnType(member->GetItemType(), columnDataType);
}
}
@@ -103,9 +106,11 @@ void ValidateRangeBoundType(const TTupleExprType* keyTupleType, const TKikimrTab
for (ui32 i = 0; i < tableMeta.KeyColumnNames.size(); ++i) {
auto columnData = tableMeta.Columns.FindPtr(tableMeta.KeyColumnNames[i]);
YQL_ENSURE(columnData);
- YQL_ENSURE(columnData->TypeId);
+ auto columnDataType = columnData->TypeInfo.GetTypeId();
+ // TODO: support pg types
+ YQL_ENSURE(columnDataType != 0 && columnDataType != NScheme::NTypeIds::Pg);
- ValidateColumnType(keyTupleType->GetItems()[i]->Cast<TOptionalExprType>()->GetItemType(), columnData->TypeId);
+ ValidateColumnType(keyTupleType->GetItems()[i]->Cast<TOptionalExprType>()->GetItemType(), columnDataType);
}
}
@@ -143,12 +148,14 @@ TKqpKeyRange MakeKeyRange(const TKqlReadTableBase& readTable, const TKqlCompileC
auto columnData = tableMeta.Columns.FindPtr(keyColumn);
YQL_ENSURE(columnData);
- YQL_ENSURE(columnData->TypeId);
+ auto columnDataType = columnData->TypeInfo.GetTypeId();
+ // TODO: support pg types
+ YQL_ENSURE(columnDataType != 0 && columnDataType != NScheme::NTypeIds::Pg);
- auto columnType = CreateColumnType(columnData->TypeId, ctx);
+ auto columnType = CreateColumnType(columnDataType, ctx);
if (fromTuple.ArgCount() > i) {
- ValidateColumnType(fromTuple.Arg(i).Ref().GetTypeAnn(), columnData->TypeId);
+ ValidateColumnType(fromTuple.Arg(i).Ref().GetTypeAnn(), columnDataType);
fromValues.push_back(MkqlBuildExpr(fromTuple.Arg(i).Ref(), buildCtx));
} else if (fromInclusive) {
fromValues.push_back(ctx.PgmBuilder().NewEmptyOptional(
@@ -156,7 +163,7 @@ TKqpKeyRange MakeKeyRange(const TKqlReadTableBase& readTable, const TKqlCompileC
}
if (toTuple.ArgCount() > i) {
- ValidateColumnType(toTuple.Arg(i).Ref().GetTypeAnn(), columnData->TypeId);
+ ValidateColumnType(toTuple.Arg(i).Ref().GetTypeAnn(), columnDataType);
toValues.push_back(MkqlBuildExpr(toTuple.Arg(i).Ref(), buildCtx));
} else if (!toInclusive) {
toValues.push_back(ctx.PgmBuilder().NewEmptyOptional(
diff --git a/ydb/core/kqp/compute_actor/kqp_compute_state.cpp b/ydb/core/kqp/compute_actor/kqp_compute_state.cpp
index 82d98eb152d..93e311b1c1e 100644
--- a/ydb/core/kqp/compute_actor/kqp_compute_state.cpp
+++ b/ydb/core/kqp/compute_actor/kqp_compute_state.cpp
@@ -21,7 +21,7 @@ void TCommonRetriesState::ResetRetry() {
ResolveAttempt = 0;
}
-TString TShardState::PrintLastKey(TConstArrayRef<NScheme::TTypeId> keyTypes) const {
+TString TShardState::PrintLastKey(TConstArrayRef<NScheme::TTypeInfo> keyTypes) const {
if (LastKey.empty()) {
return "<none>";
}
@@ -41,7 +41,7 @@ TDuration TCommonRetriesState::CalcRetryDelay() {
return LastRetryDelay;
}
-TString TShardState::ToString(TConstArrayRef<NScheme::TTypeId> keyTypes) const {
+TString TShardState::ToString(TConstArrayRef<NScheme::TTypeInfo> keyTypes) const {
TStringBuilder sb;
sb << "TShardState{ TabletId: " << TabletId << ", State: " << State
<< ", Gen: " << Generation << ", Last Key " << TShardState::PrintLastKey(keyTypes)
@@ -58,7 +58,7 @@ TString TShardState::ToString(TConstArrayRef<NScheme::TTypeId> keyTypes) const {
return sb;
}
-const TSmallVec<TSerializedTableRange> TShardState::GetScanRanges(TConstArrayRef<NScheme::TTypeId> keyTypes) const {
+const TSmallVec<TSerializedTableRange> TShardState::GetScanRanges(TConstArrayRef<NScheme::TTypeInfo> keyTypes) const {
// No any data read previously, return all ranges
if (!LastKey.DataSize()) {
return Ranges;
@@ -97,4 +97,4 @@ TString TShardState::GetAddress() const {
sb << TabletId << "::" << ScannerIdx;
return sb;
}
-} \ No newline at end of file
+}
diff --git a/ydb/core/kqp/compute_actor/kqp_compute_state.h b/ydb/core/kqp/compute_actor/kqp_compute_state.h
index 382d0709d9a..9fb389f53fa 100644
--- a/ydb/core/kqp/compute_actor/kqp_compute_state.h
+++ b/ydb/core/kqp/compute_actor/kqp_compute_state.h
@@ -83,15 +83,15 @@ struct TShardState: public TCommonRetriesState {
TActorId ActorId;
TOwnedCellVec LastKey;
- TString PrintLastKey(TConstArrayRef<NScheme::TTypeId> keyTypes) const;
+ TString PrintLastKey(TConstArrayRef<NScheme::TTypeInfo> keyTypes) const;
TShardState(const ui64 tabletId, const ui32 scanIdx)
: TabletId(tabletId)
, ScannerIdx(scanIdx) {
}
- TString ToString(TConstArrayRef<NScheme::TTypeId> keyTypes) const;
- const TSmallVec<TSerializedTableRange> GetScanRanges(TConstArrayRef<NScheme::TTypeId> keyTypes) const;
+ TString ToString(TConstArrayRef<NScheme::TTypeInfo> keyTypes) const;
+ const TSmallVec<TSerializedTableRange> GetScanRanges(TConstArrayRef<NScheme::TTypeInfo> keyTypes) const;
TString GetAddress() const;
};
}
diff --git a/ydb/core/kqp/compute_actor/kqp_scan_compute_actor.cpp b/ydb/core/kqp/compute_actor/kqp_scan_compute_actor.cpp
index 68a4dd96fdf..b23b02f5d18 100644
--- a/ydb/core/kqp/compute_actor/kqp_scan_compute_actor.cpp
+++ b/ydb/core/kqp/compute_actor/kqp_scan_compute_actor.cpp
@@ -9,6 +9,7 @@
#include <ydb/core/kqp/runtime/kqp_channel_storage.h>
#include <ydb/core/kqp/runtime/kqp_tasks_runner.h>
#include <ydb/core/kqp/common/kqp_resolve.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/sys_view/scan.h>
#include <ydb/core/tx/datashard/datashard_kqp_compute.h>
#include <ydb/core/tx/datashard/datashard.h>
@@ -132,7 +133,10 @@ public:
YQL_ENSURE(!Meta.GetReads().empty());
YQL_ENSURE(Meta.GetTable().GetTableKind() != (ui32)ETableKind::SysView);
- KeyColumnTypes.assign(Meta.GetKeyColumnTypes().begin(), Meta.GetKeyColumnTypes().end());
+ KeyColumnTypes.reserve(Meta.GetKeyColumnTypes().size());
+ for (auto typeId : Meta.GetKeyColumnTypes()) {
+ KeyColumnTypes.push_back(NScheme::TTypeInfo((NScheme::TTypeId)typeId));
+ }
}
void DoBootstrap() {
@@ -282,9 +286,15 @@ private:
THolder<TEvDataShard::TEvKqpScan> BuildEvKqpScan(const ui32 scanId, const ui32 gen, const TSmallVec<TSerializedTableRange>& ranges) const {
auto ev = MakeHolder<TEvDataShard::TEvKqpScan>();
ev->Record.SetLocalPathId(ScanData->TableId.PathId.LocalPathId);
- for (auto& column : ScanData->GetColumns()) {
+ for (auto& column: ScanData->GetColumns()) {
ev->Record.AddColumnTags(column.Tag);
- ev->Record.AddColumnTypes(column.Type);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(column.Type);
+ ev->Record.AddColumnTypes(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *ev->Record.AddColumnTypeInfos() = *columnType.TypeInfo;
+ } else {
+ *ev->Record.AddColumnTypeInfos() = NKikimrProto::TTypeInfo();
+ }
}
ev->Record.MutableSkipNullKeys()->CopyFrom(Meta.GetSkipNullKeys());
@@ -1204,7 +1214,7 @@ private:
TIntrusivePtr<TKqpCounters> Counters;
TScannedDataStats Stats;
NKikimrTxDataShard::TKqpTransaction::TScanTaskMeta Meta;
- TVector<NScheme::TTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
NMiniKQL::TKqpScanComputeContext::TScanData* ScanData = nullptr;
std::deque<std::pair<TEvKqpCompute::TEvScanData::TPtr, TInstant>> PendingScanData;
std::deque<TShardState> PendingShards;
diff --git a/ydb/core/kqp/executer/kqp_data_executer.cpp b/ydb/core/kqp/executer/kqp_data_executer.cpp
index 584524bdba9..ce8f5060d7c 100644
--- a/ydb/core/kqp/executer/kqp_data_executer.cpp
+++ b/ydb/core/kqp/executer/kqp_data_executer.cpp
@@ -1456,7 +1456,11 @@ private:
for (auto& column : read.Columns) {
auto* protoColumn = protoReadMeta->AddColumns();
protoColumn->SetId(column.Id);
- protoColumn->SetType(column.Type);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(column.Type);
+ protoColumn->SetType(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *protoColumn->MutableTypeInfo() = *columnType.TypeInfo;
+ }
protoColumn->SetName(column.Name);
}
protoReadMeta->SetItemsLimit(task.Meta.ReadInfo.ItemsLimit);
@@ -1475,7 +1479,11 @@ private:
auto& protoColumn = *protoColumnWrite.MutableColumn();
protoColumn.SetId(columnWrite.Column.Id);
- protoColumn.SetType(columnWrite.Column.Type);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(columnWrite.Column.Type);
+ protoColumn.SetType(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *protoColumn.MutableTypeInfo() = *columnType.TypeInfo;
+ }
protoColumn.SetName(columnWrite.Column.Name);
protoColumnWrite.SetMaxValueSizeBytes(columnWrite.MaxValueSizeBytes);
@@ -1494,7 +1502,11 @@ private:
const auto& tableInfo = TableKeys.GetTable(stageInfo.Meta.TableId);
for (const auto& keyColumnName : tableInfo.KeyColumns) {
const auto& keyColumn = tableInfo.Columns.at(keyColumnName);
- protoTaskMeta.AddKeyColumnTypes(keyColumn.Type);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(keyColumn.Type);
+ protoTaskMeta.AddKeyColumnTypes(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *protoTaskMeta.AddKeyColumnTypeInfos() = *columnType.TypeInfo;
+ }
}
for (bool skipNullKey : stageInfo.Meta.SkipNullKeys) {
@@ -1507,7 +1519,11 @@ private:
for (auto& column : task.Meta.Reads->front().Columns) {
auto* protoColumn = protoTaskMeta.AddColumns();
protoColumn->SetId(column.Id);
- protoColumn->SetType(column.Type);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(column.Type);
+ protoColumn->SetType(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *protoColumn->MutableTypeInfo() = *columnType.TypeInfo;
+ }
protoColumn->SetName(column.Name);
}
@@ -1519,7 +1535,7 @@ private:
YQL_ENSURE((int) read.Columns.size() == protoTaskMeta.GetColumns().size());
for (ui64 i = 0; i < read.Columns.size(); ++i) {
YQL_ENSURE(read.Columns[i].Id == protoTaskMeta.GetColumns()[i].GetId());
- YQL_ENSURE(read.Columns[i].Type == protoTaskMeta.GetColumns()[i].GetType());
+ YQL_ENSURE(read.Columns[i].Type.GetTypeId() == protoTaskMeta.GetColumns()[i].GetType());
}
}
diff --git a/ydb/core/kqp/executer/kqp_partition_helper.cpp b/ydb/core/kqp/executer/kqp_partition_helper.cpp
index aa01c3da06c..1583ff2247a 100644
--- a/ydb/core/kqp/executer/kqp_partition_helper.cpp
+++ b/ydb/core/kqp/executer/kqp_partition_helper.cpp
@@ -2,6 +2,7 @@
#include "kqp_table_resolver.h"
#include <ydb/core/base/appdata.h>
+#include <ydb/core/kqp/common/kqp_types.h>
#include <ydb/core/tx/datashard/range_ops.h>
#include <ydb/library/mkql_proto/mkql_proto.h>
@@ -122,8 +123,8 @@ THashMap<ui64, TShardParamValuesAndRanges> PartitionParamByKeyPrefix(const NDq::
const ui64 keyLen = table.KeyColumns.size();
- TVector<NUdf::TDataTypeId> keyFullType{Reserve(keyLen)};
- TVector<NUdf::TDataTypeId> keyPrefixType{Reserve(keyLen)};
+ TVector<NScheme::TTypeInfo> keyFullType{Reserve(keyLen)};
+ TVector<NScheme::TTypeInfo> keyPrefixType{Reserve(keyLen)};
TVector<ui32> keyPrefixIndices{Reserve(keyLen)};
for (const auto& keyColumn : table.KeyColumns) {
@@ -132,8 +133,9 @@ THashMap<ui64, TShardParamValuesAndRanges> PartitionParamByKeyPrefix(const NDq::
break;
}
- keyFullType.push_back(columnInfo->GetTypeId());
- keyPrefixType.push_back(columnInfo->GetTypeId());
+ auto typeInfo = NScheme::TypeInfoFromMiniKQLType(columnInfo->Type);
+ keyFullType.push_back(typeInfo);
+ keyPrefixType.push_back(typeInfo);
keyPrefixIndices.push_back(columnInfo->Index);
}
@@ -187,7 +189,7 @@ THashMap<ui64, TShardParamValuesAndRanges> PartitionParamByKeyPrefix(const NDq::
return ret;
}
-TVector<TCell> FillKeyValues(const TVector<NUdf::TDataTypeId>& keyColumnTypes, const NKqpProto::TKqpPhyKeyBound& bound,
+TVector<TCell> FillKeyValues(const TVector<NScheme::TTypeInfo>& keyColumnTypes, const NKqpProto::TKqpPhyKeyBound& bound,
const TStageInfo& stageInfo, const NMiniKQL::THolderFactory& holderFactory, const NMiniKQL::TTypeEnvironment& typeEnv)
{
YQL_ENSURE(bound.ValuesSize() <= keyColumnTypes.size());
@@ -243,7 +245,7 @@ TVector<TCell> FillKeyValues(const TVector<NUdf::TDataTypeId>& keyColumnTypes, c
}
TSerializedPointOrRange FillOneRange(NUdf::TUnboxedValue& begin, NUdf::TUnboxedValue& end,
- const TVector<NUdf::TDataTypeId>& keyColumnTypes, const NMiniKQL::TTypeEnvironment& typeEnv)
+ const TVector<NScheme::TTypeInfo>& keyColumnTypes, const NMiniKQL::TTypeEnvironment& typeEnv)
{
const ui32 keyColumnsSize = keyColumnTypes.size();
@@ -345,7 +347,7 @@ TSerializedPointOrRange FillOneRange(NUdf::TUnboxedValue& begin, NUdf::TUnboxedV
return range;
}
-TVector<TSerializedPointOrRange> BuildFullRange(const TVector<NUdf::TDataTypeId>& keyColumnTypes) {
+TVector<TSerializedPointOrRange> BuildFullRange(const TVector<NScheme::TTypeInfo>& keyColumnTypes) {
// Build range from NULL, NULL ... NULL to +inf, +inf ... +inf
TVector<TCell> fromKeyValues(keyColumnTypes.size());
@@ -357,7 +359,7 @@ TVector<TSerializedPointOrRange> BuildFullRange(const TVector<NUdf::TDataTypeId>
return {std::move(range)};
}
-TVector<TSerializedPointOrRange> FillRangesFromParameter(const TVector<NUdf::TDataTypeId>& keyColumnTypes,
+TVector<TSerializedPointOrRange> FillRangesFromParameter(const TVector<NScheme::TTypeInfo>& keyColumnTypes,
const NKqpProto::TKqpPhyParamValue& rangesParam, const TStageInfo& stageInfo,
const NMiniKQL::THolderFactory& holderFactory, const NMiniKQL::TTypeEnvironment& typeEnv)
{
@@ -397,7 +399,7 @@ TVector<TSerializedPointOrRange> FillRangesFromParameter(const TVector<NUdf::TDa
}
template <typename PhyOpReadRanges>
-TVector<TSerializedPointOrRange> FillReadRangesInternal(const TVector<NUdf::TDataTypeId>& keyColumnTypes,
+TVector<TSerializedPointOrRange> FillReadRangesInternal(const TVector<NScheme::TTypeInfo>& keyColumnTypes,
const PhyOpReadRanges& readRanges, const TStageInfo& stageInfo,
const NMiniKQL::THolderFactory& holderFactory, const NMiniKQL::TTypeEnvironment& typeEnv)
{
@@ -412,21 +414,21 @@ TVector<TSerializedPointOrRange> FillReadRangesInternal(const TVector<NUdf::TDat
} // anonymous namespace
-TVector<TSerializedPointOrRange> FillReadRanges(const TVector<NUdf::TDataTypeId>& keyColumnTypes,
+TVector<TSerializedPointOrRange> FillReadRanges(const TVector<NScheme::TTypeInfo>& keyColumnTypes,
const NKqpProto::TKqpPhyOpReadOlapRanges& readRange, const TStageInfo& stageInfo,
const NMiniKQL::THolderFactory& holderFactory, const NMiniKQL::TTypeEnvironment& typeEnv)
{
return FillReadRangesInternal(keyColumnTypes, readRange, stageInfo, holderFactory, typeEnv);
}
-TVector<TSerializedPointOrRange> FillReadRanges(const TVector<NUdf::TDataTypeId>& keyColumnTypes,
+TVector<TSerializedPointOrRange> FillReadRanges(const TVector<NScheme::TTypeInfo>& keyColumnTypes,
const NKqpProto::TKqpPhyOpReadRanges& readRange, const TStageInfo& stageInfo,
const NMiniKQL::THolderFactory& holderFactory, const NMiniKQL::TTypeEnvironment& typeEnv)
{
return FillReadRangesInternal(keyColumnTypes, readRange, stageInfo, holderFactory, typeEnv);
}
-TSerializedTableRange MakeKeyRange(const TVector<NUdf::TDataTypeId>& keyColumnTypes,
+TSerializedTableRange MakeKeyRange(const TVector<NScheme::TTypeInfo>& keyColumnTypes,
const NKqpProto::TKqpPhyKeyRange& range, const TStageInfo& stageInfo, const NMiniKQL::THolderFactory& holderFactory,
const NMiniKQL::TTypeEnvironment& typeEnv)
{
@@ -494,7 +496,7 @@ void FillFullRange(const TStageInfo& stageInfo, THashMap<ui64, TShardInfo>& shar
}
} // anonymous namespace
-TString TShardInfo::ToString(const TVector<NScheme::TTypeId>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const
+TString TShardInfo::ToString(const TVector<NScheme::TTypeInfo>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const
{
TStringBuilder sb;
sb << "TShardInfo{ ";
diff --git a/ydb/core/kqp/executer/kqp_partition_helper.h b/ydb/core/kqp/executer/kqp_partition_helper.h
index 06913939833..d9ad7e59c23 100644
--- a/ydb/core/kqp/executer/kqp_partition_helper.h
+++ b/ydb/core/kqp/executer/kqp_partition_helper.h
@@ -24,18 +24,18 @@ struct TShardInfo {
TMaybe<TShardKeyRanges> KeyWriteRanges; // empty -> no writes
THashMap<TString, TColumnWriteInfo> ColumnWrites;
- TString ToString(const TVector<NScheme::TTypeId>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const;
+ TString ToString(const TVector<NScheme::TTypeInfo>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const;
};
-TSerializedTableRange MakeKeyRange(const TVector<NUdf::TDataTypeId>& keyColumnTypes,
+TSerializedTableRange MakeKeyRange(const TVector<NScheme::TTypeInfo>& keyColumnTypes,
const NKqpProto::TKqpPhyKeyRange& range, const TStageInfo& stageInfo, const NMiniKQL::THolderFactory& holderFactory,
const NMiniKQL::TTypeEnvironment& typeEnv);
-TVector<TSerializedPointOrRange> FillReadRanges(const TVector<NUdf::TDataTypeId>& keyColumnTypes,
+TVector<TSerializedPointOrRange> FillReadRanges(const TVector<NScheme::TTypeInfo>& keyColumnTypes,
const NKqpProto::TKqpPhyOpReadOlapRanges& readRange, const TStageInfo& stageInfo,
const NMiniKQL::THolderFactory& holderFactory, const NMiniKQL::TTypeEnvironment& typeEnv);
-TVector<TSerializedPointOrRange> FillReadRanges(const TVector<NUdf::TDataTypeId>& keyColumnTypes,
+TVector<TSerializedPointOrRange> FillReadRanges(const TVector<NScheme::TTypeInfo>& keyColumnTypes,
const NKqpProto::TKqpPhyOpReadRanges& readRange, const TStageInfo& stageInfo,
const NMiniKQL::THolderFactory& holderFactory, const NMiniKQL::TTypeEnvironment& typeEnv);
diff --git a/ydb/core/kqp/executer/kqp_scan_executer.cpp b/ydb/core/kqp/executer/kqp_scan_executer.cpp
index 45400e69f43..03739f79c0a 100644
--- a/ydb/core/kqp/executer/kqp_scan_executer.cpp
+++ b/ydb/core/kqp/executer/kqp_scan_executer.cpp
@@ -413,10 +413,11 @@ private:
if (memberType->GetKind() == NKikimr::NMiniKQL::TType::EKind::Optional) {
memberType = static_cast<NKikimr::NMiniKQL::TOptionalType*>(memberType)->GetItemType();
}
+ // TODO: support pg types
YQL_ENSURE(memberType->GetKind() == NKikimr::NMiniKQL::TType::EKind::Data,
"Expected simple data types to be read from column shard");
auto memberDataType = static_cast<NKikimr::NMiniKQL::TDataType*>(memberType);
- taskMeta.ReadInfo.ResultColumnsTypes.push_back(memberDataType->GetSchemeType());
+ taskMeta.ReadInfo.ResultColumnsTypes.push_back(NScheme::TTypeInfo(memberDataType->GetSchemeType()));
}
}
@@ -734,7 +735,13 @@ private:
const auto& tableInfo = TableKeys.GetTable(stageInfo.Meta.TableId);
for (const auto& keyColumnName : tableInfo.KeyColumns) {
const auto& keyColumn = tableInfo.Columns.at(keyColumnName);
- protoTaskMeta.AddKeyColumnTypes(keyColumn.Type);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(keyColumn.Type);
+ protoTaskMeta.AddKeyColumnTypes(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *protoTaskMeta.AddKeyColumnTypeInfos() = *columnType.TypeInfo;
+ } else {
+ *protoTaskMeta.AddKeyColumnTypeInfos() = NKikimrProto::TTypeInfo();
+ }
}
switch (tableInfo.TableKind) {
@@ -772,7 +779,11 @@ private:
for (auto columnType : task.Meta.ReadInfo.ResultColumnsTypes) {
auto* protoResultColumn = protoTaskMeta.AddResultColumns();
protoResultColumn->SetId(0);
- protoResultColumn->SetType(columnType);
+ auto protoColumnType = NScheme::ProtoColumnTypeFromTypeInfo(columnType);
+ protoResultColumn->SetType(protoColumnType.TypeId);
+ if (protoColumnType.TypeInfo) {
+ *protoResultColumn->MutableTypeInfo() = *protoColumnType.TypeInfo;
+ }
}
if (tableInfo.TableKind == ETableKind::Olap) {
@@ -791,7 +802,11 @@ private:
for (auto& column : task.Meta.Reads->front().Columns) {
auto* protoColumn = protoTaskMeta.AddColumns();
protoColumn->SetId(column.Id);
- protoColumn->SetType(column.Type);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(column.Type);
+ protoColumn->SetType(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *protoColumn->MutableTypeInfo() = *columnType.TypeInfo;
+ }
protoColumn->SetName(column.Name);
}
}
@@ -804,7 +819,7 @@ private:
YQL_ENSURE((int) read.Columns.size() == protoTaskMeta.GetColumns().size());
for (ui64 i = 0; i < read.Columns.size(); ++i) {
YQL_ENSURE(read.Columns[i].Id == protoTaskMeta.GetColumns()[i].GetId());
- YQL_ENSURE(read.Columns[i].Type == protoTaskMeta.GetColumns()[i].GetType());
+ YQL_ENSURE(read.Columns[i].Type.GetTypeId() == protoTaskMeta.GetColumns()[i].GetType());
}
nShardScans++;
diff --git a/ydb/core/kqp/executer/kqp_table_resolver.cpp b/ydb/core/kqp/executer/kqp_table_resolver.cpp
index c0f3f327b2c..d4b9d715aaf 100644
--- a/ydb/core/kqp/executer/kqp_table_resolver.cpp
+++ b/ydb/core/kqp/executer/kqp_table_resolver.cpp
@@ -123,7 +123,7 @@ private:
for (auto& [columnName, columnKey] : table->Columns) {
if (auto* systemColumn = sysColumns.FindPtr(columnName)) {
columnKey.Id = systemColumn->ColumnId;
- columnKey.Type = systemColumn->TypeId;
+ columnKey.Type = NScheme::TTypeInfo(systemColumn->TypeId);
continue;
}
diff --git a/ydb/core/kqp/executer/kqp_tasks_graph.cpp b/ydb/core/kqp/executer/kqp_tasks_graph.cpp
index 08dd6b985f7..cdab73ccfec 100644
--- a/ydb/core/kqp/executer/kqp_tasks_graph.cpp
+++ b/ydb/core/kqp/executer/kqp_tasks_graph.cpp
@@ -409,7 +409,7 @@ void TShardKeyRanges::MakeFull(TSerializedPointOrRange&& pointOrRange) {
}
-void TShardKeyRanges::MergeWritePoints(TShardKeyRanges&& other, const TVector<NScheme::TTypeId>& keyTypes) {
+void TShardKeyRanges::MergeWritePoints(TShardKeyRanges&& other, const TVector<NScheme::TTypeInfo>& keyTypes) {
#ifdef DBG_TRACE
Cerr << (TStringBuilder() << "-- merge " << ToString(keyTypes, *AppData()->TypeRegistry)
<< " with " << other.ToString(keyTypes, *AppData()->TypeRegistry) << Endl);
@@ -554,7 +554,7 @@ void TShardKeyRanges::MergeWritePoints(TShardKeyRanges&& other, const TVector<NS
#endif
}
-TString TShardKeyRanges::ToString(const TVector<NScheme::TTypeId>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const
+TString TShardKeyRanges::ToString(const TVector<NScheme::TTypeInfo>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const
{
TStringBuilder sb;
sb << "TShardKeyRanges{ ";
@@ -633,7 +633,7 @@ std::pair<const TSerializedCellVec*, bool> TShardKeyRanges::GetRightBorder() con
return !lastRange.Point ? std::make_pair(&lastRange.To, lastRange.ToInclusive) : std::make_pair(&lastRange.From, true);
}
-TString TTaskMeta::ToString(const TVector<NScheme::TTypeId>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const
+TString TTaskMeta::ToString(const TVector<NScheme::TTypeInfo>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const
{
TStringBuilder sb;
sb << "TTaskMeta{ ShardId: " << ShardId << ", Params: [";
diff --git a/ydb/core/kqp/executer/kqp_tasks_graph.h b/ydb/core/kqp/executer/kqp_tasks_graph.h
index 51da52a204d..a7d718f9254 100644
--- a/ydb/core/kqp/executer/kqp_tasks_graph.h
+++ b/ydb/core/kqp/executer/kqp_tasks_graph.h
@@ -86,9 +86,9 @@ struct TShardKeyRanges {
bool IsFullRange() const { return FullRange.has_value(); }
TVector<TSerializedPointOrRange>& GetRanges() { return Ranges; }
- void MergeWritePoints(TShardKeyRanges&& other, const TVector<NScheme::TTypeId>& keyTypes);
+ void MergeWritePoints(TShardKeyRanges&& other, const TVector<NScheme::TTypeInfo>& keyTypes);
- TString ToString(const TVector<NScheme::TTypeId>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const;
+ TString ToString(const TVector<NScheme::TTypeInfo>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const;
void SerializeTo(NKikimrTxDataShard::TKqpTransaction_TDataTaskMeta_TKeyRange* proto) const;
void SerializeTo(NKikimrTxDataShard::TKqpTransaction_TScanTaskMeta_TReadOpMeta* proto) const;
@@ -105,7 +105,7 @@ struct TTaskMeta {
struct TColumn {
ui32 Id = 0;
- ui32 Type = 0;
+ NScheme::TTypeInfo Type;
TString Name;
};
@@ -130,7 +130,7 @@ struct TTaskMeta {
bool Reverse = false;
bool Sorted = false;
TKqpOlapProgram OlapProgram;
- TVector<NUdf::TDataTypeId> ResultColumnsTypes;
+ TVector<NScheme::TTypeInfo> ResultColumnsTypes;
};
struct TWriteInfo {
@@ -157,7 +157,7 @@ struct TTaskMeta {
TMaybe<TVector<TShardReadInfo>> Reads; // if not set -> no reads
TMaybe<TWriteInfo> Writes; // if not set -> no writes
- TString ToString(const TVector<NScheme::TTypeId>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const;
+ TString ToString(const TVector<NScheme::TTypeInfo>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const;
};
using TStageInfo = NYql::NDq::TStageInfo<TStageInfoMeta>;
diff --git a/ydb/core/kqp/executer/ut/CMakeLists.darwin.txt b/ydb/core/kqp/executer/ut/CMakeLists.darwin.txt
index 6bc4f140024..c07898ed2eb 100644
--- a/ydb/core/kqp/executer/ut/CMakeLists.darwin.txt
+++ b/ydb/core/kqp/executer/ut/CMakeLists.darwin.txt
@@ -24,6 +24,7 @@ target_link_libraries(ydb-core-kqp-executer-ut PUBLIC
core-kqp-host
kqp-ut-common
cpp-client-ydb_proto
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-executer-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/kqp/executer/ut/CMakeLists.linux.txt b/ydb/core/kqp/executer/ut/CMakeLists.linux.txt
index 2847c2460a2..3ace8e1805d 100644
--- a/ydb/core/kqp/executer/ut/CMakeLists.linux.txt
+++ b/ydb/core/kqp/executer/ut/CMakeLists.linux.txt
@@ -26,6 +26,7 @@ target_link_libraries(ydb-core-kqp-executer-ut PUBLIC
core-kqp-host
kqp-ut-common
cpp-client-ydb_proto
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-executer-ut PRIVATE
-ldl
diff --git a/ydb/core/kqp/kqp_metadata_loader.cpp b/ydb/core/kqp/kqp_metadata_loader.cpp
index 79d5c5b7715..eab53a449c3 100644
--- a/ydb/core/kqp/kqp_metadata_loader.cpp
+++ b/ydb/core/kqp/kqp_metadata_loader.cpp
@@ -151,7 +151,9 @@ TTableMetadataResult GetLoadTableMetadataResult(const NSchemeCache::TSchemeCache
const auto& columnDesc = pair.second;
TString typeName;
- YQL_ENSURE(NScheme::TryGetTypeName(columnDesc.PType, typeName));
+ // TODO: support pg types
+ YQL_ENSURE(columnDesc.PType.GetTypeId() != NScheme::NTypeIds::Pg);
+ YQL_ENSURE(NScheme::TryGetTypeName(columnDesc.PType.GetTypeId(), typeName));
auto notNull = entry.NotNullColumns.contains(columnDesc.Name);
tableMeta->Columns.emplace(columnDesc.Name, NYql::TKikimrColumnMetadata(
columnDesc.Name, columnDesc.Id, typeName, notNull, columnDesc.PType));
diff --git a/ydb/core/kqp/node/ut/CMakeLists.darwin.txt b/ydb/core/kqp/node/ut/CMakeLists.darwin.txt
index 2d1867e1874..959894d5912 100644
--- a/ydb/core/kqp/node/ut/CMakeLists.darwin.txt
+++ b/ydb/core/kqp/node/ut/CMakeLists.darwin.txt
@@ -21,6 +21,7 @@ target_link_libraries(ydb-core-kqp-node-ut PUBLIC
cpp-testing-unittest_main
core-kqp-node
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-node-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/kqp/node/ut/CMakeLists.linux.txt b/ydb/core/kqp/node/ut/CMakeLists.linux.txt
index ca29c999a9a..7af039a1c5a 100644
--- a/ydb/core/kqp/node/ut/CMakeLists.linux.txt
+++ b/ydb/core/kqp/node/ut/CMakeLists.linux.txt
@@ -23,6 +23,7 @@ target_link_libraries(ydb-core-kqp-node-ut PUBLIC
cpp-testing-unittest_main
core-kqp-node
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-node-ut PRIVATE
-ldl
diff --git a/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp b/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp
index a97c65bedbc..88f103fa05c 100644
--- a/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp
+++ b/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp
@@ -348,9 +348,11 @@ bool RequireLookupPrecomputeStage(const TKqlLookupTable& lookup) {
if (tuple.Value().Maybe<TCoParameter>()) {
// pass
} else if (tuple.Value().Maybe<TCoDataCtor>()) {
+ // TODO: support pg types
auto slot = tuple.Value().Ref().GetTypeAnn()->Cast<TDataExprType>()->GetSlot();
auto typeId = NUdf::GetDataTypeInfo(slot).TypeId;
- if (NScheme::NTypeIds::IsYqlType(typeId) && NSchemeShard::IsAllowedKeyType(typeId)) {
+ auto typeInfo = NScheme::TTypeInfo(typeId);
+ if (NScheme::NTypeIds::IsYqlType(typeId) && NSchemeShard::IsAllowedKeyType(typeInfo)) {
// pass
} else {
return true;
diff --git a/ydb/core/kqp/provider/ut/CMakeLists.darwin.txt b/ydb/core/kqp/provider/ut/CMakeLists.darwin.txt
index e65803fd5a0..49a6a686d1b 100644
--- a/ydb/core/kqp/provider/ut/CMakeLists.darwin.txt
+++ b/ydb/core/kqp/provider/ut/CMakeLists.darwin.txt
@@ -22,6 +22,7 @@ target_link_libraries(ydb-core-kqp-provider-ut PUBLIC
core-kqp-provider
core-client-minikql_result_lib
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-provider-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/kqp/provider/ut/CMakeLists.linux.txt b/ydb/core/kqp/provider/ut/CMakeLists.linux.txt
index c1bba850449..6bae32f1fd3 100644
--- a/ydb/core/kqp/provider/ut/CMakeLists.linux.txt
+++ b/ydb/core/kqp/provider/ut/CMakeLists.linux.txt
@@ -24,6 +24,7 @@ target_link_libraries(ydb-core-kqp-provider-ut PUBLIC
core-kqp-provider
core-client-minikql_result_lib
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-provider-ut PRIVATE
-ldl
diff --git a/ydb/core/kqp/provider/yql_kikimr_gateway.cpp b/ydb/core/kqp/provider/yql_kikimr_gateway.cpp
index e49f84b5e1e..24e9df6fbec 100644
--- a/ydb/core/kqp/provider/yql_kikimr_gateway.cpp
+++ b/ydb/core/kqp/provider/yql_kikimr_gateway.cpp
@@ -2,6 +2,7 @@
#include <ydb/library/yql/public/issue/yql_issue_message.h>
#include <ydb/library/yql/providers/common/proto/gateways_config.pb.h>
+#include <ydb/library/yql/utils/pg_types.h>
#include <ydb/library/yql/utils/yql_panic.h>
#include <ydb/core/base/table_index.h>
@@ -274,6 +275,14 @@ EYqlIssueCode YqlStatusFromYdbStatus(ui32 ydbStatus) {
}
void SetColumnType(Ydb::Type& protoType, const TString& typeName, bool notNull) {
+ auto* typeDesc = NKikimr::NPg::TypeDescFromPgTypeName(typeName);
+ if (typeDesc) {
+ auto pg = notNull ? protoType.mutable_pg_type() :
+ protoType.mutable_optional_type()->mutable_item()->mutable_pg_type();
+ pg->set_oid(NKikimr::NPg::PgTypeIdFromTypeDesc(typeDesc));
+ return;
+ }
+
NUdf::EDataSlot dataSlot = NUdf::GetDataSlot(typeName);
if (dataSlot == NUdf::EDataSlot::Decimal) {
auto decimal = notNull ? protoType.mutable_decimal_type() :
diff --git a/ydb/core/kqp/provider/yql_kikimr_gateway.h b/ydb/core/kqp/provider/yql_kikimr_gateway.h
index 7598494a2b9..7f593978320 100644
--- a/ydb/core/kqp/provider/yql_kikimr_gateway.h
+++ b/ydb/core/kqp/provider/yql_kikimr_gateway.h
@@ -9,6 +9,7 @@
#include <ydb/library/yql/providers/result/expr_nodes/yql_res_expr_nodes.h>
// TODO: Switch to public protobufs
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/protos/kqp.pb.h>
#include <ydb/library/yql/dq/actors/protos/dq_events.pb.h>
#include <ydb/core/protos/flat_scheme_op.pb.h>
@@ -182,17 +183,17 @@ struct TKikimrColumnMetadata {
ui32 Id = 0;
TString Type;
bool NotNull = false;
- ui32 TypeId = 0;
+ NKikimr::NScheme::TTypeInfo TypeInfo;
TVector<TString> Families;
TKikimrColumnMetadata() = default;
- TKikimrColumnMetadata(const TString& name, ui32 id, const TString& type, bool notNull, ui32 typeId = 0)
+ TKikimrColumnMetadata(const TString& name, ui32 id, const TString& type, bool notNull, NKikimr::NScheme::TTypeInfo typeInfo = {})
: Name(name)
, Id(id)
, Type(type)
, NotNull(notNull)
- , TypeId(typeId)
+ , TypeInfo(typeInfo)
{}
explicit TKikimrColumnMetadata(const NKikimrKqp::TKqpColumnMetadataProto* message)
@@ -200,16 +201,22 @@ struct TKikimrColumnMetadata {
, Id(message->GetId())
, Type(message->GetType())
, NotNull(message->GetNotNull())
- , TypeId(message->GetTypeId())
, Families(message->GetFamily().begin(), message->GetFamily().end())
- {}
+ {
+ TypeInfo = NKikimr::NScheme::TypeInfoFromProtoColumnType(message->GetTypeId(),
+ message->HasTypeInfo() ? &message->GetTypeInfo() : nullptr);
+ }
void ToMessage(NKikimrKqp::TKqpColumnMetadataProto* message) const {
message->SetName(Name);
message->SetId(Id);
message->SetType(Type);
message->SetNotNull(NotNull);
- message->SetTypeId(TypeId);
+ auto columnType = NKikimr::NScheme::ProtoColumnTypeFromTypeInfo(TypeInfo);
+ message->SetTypeId(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *message->MutableTypeInfo() = *columnType.TypeInfo;
+ }
for(auto& family: Families) {
message->AddFamily(family);
}
diff --git a/ydb/core/kqp/proxy/ut/CMakeLists.darwin.txt b/ydb/core/kqp/proxy/ut/CMakeLists.darwin.txt
index 7cf2b981ee7..13fed208c6f 100644
--- a/ydb/core/kqp/proxy/ut/CMakeLists.darwin.txt
+++ b/ydb/core/kqp/proxy/ut/CMakeLists.darwin.txt
@@ -21,6 +21,7 @@ target_link_libraries(ydb-core-kqp-proxy-ut PUBLIC
cpp-testing-unittest_main
core-kqp-proxy
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-proxy-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/kqp/proxy/ut/CMakeLists.linux.txt b/ydb/core/kqp/proxy/ut/CMakeLists.linux.txt
index 757cb07b9d2..83446b90336 100644
--- a/ydb/core/kqp/proxy/ut/CMakeLists.linux.txt
+++ b/ydb/core/kqp/proxy/ut/CMakeLists.linux.txt
@@ -23,6 +23,7 @@ target_link_libraries(ydb-core-kqp-proxy-ut PUBLIC
cpp-testing-unittest_main
core-kqp-proxy
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-proxy-ut PRIVATE
-ldl
diff --git a/ydb/core/kqp/rm/ut/CMakeLists.darwin.txt b/ydb/core/kqp/rm/ut/CMakeLists.darwin.txt
index bf1a22ecb18..636534daa8c 100644
--- a/ydb/core/kqp/rm/ut/CMakeLists.darwin.txt
+++ b/ydb/core/kqp/rm/ut/CMakeLists.darwin.txt
@@ -21,6 +21,7 @@ target_link_libraries(ydb-core-kqp-rm-ut PUBLIC
cpp-testing-unittest_main
core-kqp-rm
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-rm-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/kqp/rm/ut/CMakeLists.linux.txt b/ydb/core/kqp/rm/ut/CMakeLists.linux.txt
index f7aa1aec538..f90487829b6 100644
--- a/ydb/core/kqp/rm/ut/CMakeLists.linux.txt
+++ b/ydb/core/kqp/rm/ut/CMakeLists.linux.txt
@@ -23,6 +23,7 @@ target_link_libraries(ydb-core-kqp-rm-ut PUBLIC
cpp-testing-unittest_main
core-kqp-rm
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-rm-ut PRIVATE
-ldl
diff --git a/ydb/core/kqp/runtime/kqp_compute.h b/ydb/core/kqp/runtime/kqp_compute.h
index c55a4e2a21b..ae90fd8e466 100644
--- a/ydb/core/kqp/runtime/kqp_compute.h
+++ b/ydb/core/kqp/runtime/kqp_compute.h
@@ -14,7 +14,7 @@ class TKqpComputeContextBase : public NYql::NDq::TDqComputeContextBase {
public:
struct TColumn {
NTable::TTag Tag;
- NScheme::TTypeId Type;
+ NScheme::TTypeInfo Type;
};
// used only at then building of a computation graph, to inject taskId in runtime nodes
diff --git a/ydb/core/kqp/runtime/kqp_output_stream.cpp b/ydb/core/kqp/runtime/kqp_output_stream.cpp
index b3aac31aaed..b931881f785 100644
--- a/ydb/core/kqp/runtime/kqp_output_stream.cpp
+++ b/ydb/core/kqp/runtime/kqp_output_stream.cpp
@@ -21,7 +21,7 @@ class TKqpOutputRangePartitionConsumer : public IDqOutputConsumer {
public:
TKqpOutputRangePartitionConsumer(const TTypeEnvironment& typeEnv,
TVector<NYql::NDq::IDqOutput::TPtr>&& outputs, TVector<TKqpRangePartition>&& partitions,
- TVector<TDataTypeId>&& keyColumnTypes, TVector<ui32>&& keyColumnIndices)
+ TVector<NScheme::TTypeInfo>&& keyColumnTypes, TVector<ui32>&& keyColumnIndices)
: TypeEnv(typeEnv)
, Outputs(std::move(outputs))
, Partitions(std::move(partitions))
@@ -59,7 +59,7 @@ private:
const TTypeEnvironment& TypeEnv;
TVector<NYql::NDq::IDqOutput::TPtr> Outputs;
TVector<TKqpRangePartition> Partitions;
- TVector<TDataTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
TVector<ui32> KeyColumnIndices;
};
@@ -67,7 +67,7 @@ private:
NYql::NDq::IDqOutputConsumer::TPtr CreateOutputRangePartitionConsumer(
TVector<NYql::NDq::IDqOutput::TPtr>&& outputs, TVector<TKqpRangePartition>&& partitions,
- TVector<NUdf::TDataTypeId>&& keyColumnTypes, TVector<ui32>&& keyColumnIndices,
+ TVector<NScheme::TTypeInfo>&& keyColumnTypes, TVector<ui32>&& keyColumnIndices,
const NMiniKQL::TTypeEnvironment& typeEnv)
{
return MakeIntrusive<TKqpOutputRangePartitionConsumer>(typeEnv, std::move(outputs), std::move(partitions),
diff --git a/ydb/core/kqp/runtime/kqp_read_table.cpp b/ydb/core/kqp/runtime/kqp_read_table.cpp
index efbfb2a8087..9710d154ff2 100644
--- a/ydb/core/kqp/runtime/kqp_read_table.cpp
+++ b/ydb/core/kqp/runtime/kqp_read_table.cpp
@@ -5,6 +5,8 @@
#include <ydb/library/yql/minikql/mkql_node_cast.h>
+#include <ydb/core/kqp/common/kqp_types.h>
+
namespace NKikimr {
namespace NKqp {
@@ -52,7 +54,8 @@ static TCell BuildKeyTupleCell(const TType* type, const TUnboxedValue& value, co
keyValue = value.GetOptionalValue();
}
- return MakeCell(AS_TYPE(TDataType, keyType)->GetSchemeType(), keyValue, env, true);
+ auto typeInfo = NScheme::TypeInfoFromMiniKQLType(keyType);
+ return MakeCell(typeInfo, keyValue, env, true);
}
void BuildKeyTupleCells(const TTupleType* tupleType, const TUnboxedValue& tupleValue, TVector<TCell>& cells,
@@ -72,7 +75,7 @@ void BuildKeyTupleCells(const TTupleType* tupleType, const TUnboxedValue& tupleV
void ParseReadColumns(const TType* readType, const TRuntimeNode& tagsNode,
TSmallVec<NTable::TTag>& columns, TSmallVec<NTable::TTag>& systemColumns)
{
- MKQL_ENSURE_S(readType);
+ MKQL_ENSURE_S(readType);
MKQL_ENSURE_S(readType->GetKind() == TType::EKind::Flow);
auto tags = AS_VALUE(TStructLiteral, tagsNode);
diff --git a/ydb/core/kqp/runtime/kqp_runtime_impl.h b/ydb/core/kqp/runtime/kqp_runtime_impl.h
index 004af2a5d6d..d1c504ef7c5 100644
--- a/ydb/core/kqp/runtime/kqp_runtime_impl.h
+++ b/ydb/core/kqp/runtime/kqp_runtime_impl.h
@@ -19,7 +19,7 @@ NUdf::TDataTypeId UnwrapDataTypeFromStruct(const NMiniKQL::TStructType& structTy
NYql::NDq::IDqOutputConsumer::TPtr CreateOutputRangePartitionConsumer(
TVector<NYql::NDq::IDqOutput::TPtr>&& outputs, TVector<TKqpRangePartition>&& partitions,
- TVector<NUdf::TDataTypeId>&& keyColumnTypes, TVector<ui32>&& keyColumnIndices,
+ TVector<NScheme::TTypeInfo>&& keyColumnTypes, TVector<ui32>&& keyColumnIndices,
const NMiniKQL::TTypeEnvironment& typeEnv);
NYql::NDq::IDqOutputConsumer::TPtr CreateKqpApplyEffectsConsumer(NUdf::IApplyContext* applyCtx);
diff --git a/ydb/core/kqp/runtime/kqp_scan_data.cpp b/ydb/core/kqp/runtime/kqp_scan_data.cpp
index d4e74b69c0a..2c39d685db5 100644
--- a/ydb/core/kqp/runtime/kqp_scan_data.cpp
+++ b/ydb/core/kqp/runtime/kqp_scan_data.cpp
@@ -2,6 +2,7 @@
#include <ydb/core/engine/minikql/minikql_engine_host.h>
#include <ydb/core/protos/tx_datashard.pb.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/library/yql/minikql/mkql_string_util.h>
#include <ydb/library/yql/utils/yql_panic.h>
@@ -22,12 +23,12 @@ struct TBytesStatistics {
};
-TBytesStatistics GetUnboxedValueSize(const NUdf::TUnboxedValue& value, NScheme::TTypeId type) {
+TBytesStatistics GetUnboxedValueSize(const NUdf::TUnboxedValue& value, NScheme::TTypeInfo type) {
namespace NTypeIds = NScheme::NTypeIds;
if (!value) {
return {sizeof(NUdf::TUnboxedValue), 8}; // Special value for NULL elements
}
- switch (type) {
+ switch (type.GetTypeId()) {
case NTypeIds::Bool:
case NTypeIds::Int8:
case NTypeIds::Uint8:
@@ -48,12 +49,12 @@ TBytesStatistics GetUnboxedValueSize(const NUdf::TUnboxedValue& value, NScheme::
case NTypeIds::Interval:
case NTypeIds::ActorId:
case NTypeIds::StepOrderId: {
- YQL_ENSURE(value.IsEmbedded(), "Passed wrong type: " << NScheme::TypeName(type));
+ YQL_ENSURE(value.IsEmbedded(), "Passed wrong type: " << NScheme::TypeName(type.GetTypeId()));
return {sizeof(NUdf::TUnboxedValue), sizeof(i64)};
}
case NTypeIds::Decimal:
{
- YQL_ENSURE(value.IsEmbedded(), "Passed wrong type: " << NScheme::TypeName(type));
+ YQL_ENSURE(value.IsEmbedded(), "Passed wrong type: " << NScheme::TypeName(type.GetTypeId()));
return {sizeof(NUdf::TUnboxedValue), sizeof(NYql::NDecimal::TInt128)};
}
case NTypeIds::String:
@@ -71,8 +72,12 @@ TBytesStatistics GetUnboxedValueSize(const NUdf::TUnboxedValue& value, NScheme::
}
}
+ case NTypeIds::Pg:
+ // TODO: support pg types
+ YQL_ENSURE(false, "pg types are not supported");
+
default:
- Y_VERIFY_DEBUG_S(false, "Unsupported type " << NScheme::TypeName(type));
+ Y_VERIFY_DEBUG_S(false, "Unsupported type " << NScheme::TypeName(type.GetTypeId()));
if (value.IsEmbedded()) {
return {sizeof(NUdf::TUnboxedValue), sizeof(NUdf::TUnboxedValue)};
} else {
@@ -139,7 +144,7 @@ NUdf::TUnboxedValue MakeUnboxedValueFromDecimal128Array(arrow::Array* column, ui
}
TBytesStatistics WriteColumnValuesFromArrow(const TVector<NUdf::TUnboxedValue*>& editAccessors,
- const arrow::RecordBatch& batch, i64 columnIndex, NScheme::TTypeId columnType)
+ const arrow::RecordBatch& batch, i64 columnIndex, NScheme::TTypeInfo columnType)
{
TBytesStatistics columnStats;
// Hold pointer to column until function end
@@ -151,7 +156,7 @@ TBytesStatistics WriteColumnValuesFromArrow(const TVector<NUdf::TUnboxedValue*>&
if (columnPtr->IsNull(rowIndex)) {
rowItem = NUdf::TUnboxedValue();
} else {
- switch(columnType) {
+ switch(columnType.GetTypeId()) {
case NTypeIds::Bool: {
rowItem = MakeUnboxedValue<arrow::BooleanArray, bool>(columnPtr, rowIndex);
break;
@@ -228,12 +233,16 @@ TBytesStatistics WriteColumnValuesFromArrow(const TVector<NUdf::TUnboxedValue*>&
case NTypeIds::PairUi64Ui64:
case NTypeIds::ActorId:
case NTypeIds::StepOrderId: {
- Y_VERIFY_DEBUG_S(false, "Unsupported (deprecated) type: " << NScheme::TypeName(columnType));
+ Y_VERIFY_DEBUG_S(false, "Unsupported (deprecated) type: " << NScheme::TypeName(columnType.GetTypeId()));
rowItem = MakeUnboxedValueFromFixedSizeBinaryData(columnPtr, rowIndex);
break;
}
+ case NTypeIds::Pg:
+ // TODO: support pg types
+ YQL_ENSURE(false, "Unsupported pg type at column " << columnIndex);
+
default:
- YQL_ENSURE(false, "Unsupported type: " << NScheme::TypeName(columnType) << " at column " << columnIndex);
+ YQL_ENSURE(false, "Unsupported type: " << NScheme::TypeName(columnType.GetTypeId()) << " at column " << columnIndex);
}
}
columnStats.AddStatistics(GetUnboxedValueSize(rowItem, columnType));
@@ -243,7 +252,7 @@ TBytesStatistics WriteColumnValuesFromArrow(const TVector<NUdf::TUnboxedValue*>&
} // namespace
-std::pair<ui64, ui64> GetUnboxedValueSizeForTests(const NUdf::TUnboxedValue& value, NScheme::TTypeId type) {
+std::pair<ui64, ui64> GetUnboxedValueSizeForTests(const NUdf::TUnboxedValue& value, NScheme::TTypeInfo type) {
auto sizes = GetUnboxedValueSize(value, type);
return {sizes.AllocatedBytes, sizes.DataBytes};
}
@@ -273,7 +282,8 @@ TKqpScanComputeContext::TScanData::TScanData(const NKikimrTxDataShard::TKqpTrans
for (const auto& column : meta.GetColumns()) {
NMiniKQL::TKqpScanComputeContext::TColumn c;
c.Tag = column.GetId();
- c.Type = column.GetType();
+ c.Type = NScheme::TypeInfoFromProtoColumnType(column.GetType(),
+ column.HasTypeInfo() ? &column.GetTypeInfo() : nullptr);
if (!IsSystemColumn(c.Tag)) {
Columns.emplace_back(std::move(c));
@@ -289,7 +299,8 @@ TKqpScanComputeContext::TScanData::TScanData(const NKikimrTxDataShard::TKqpTrans
for (const auto& resColumn : meta.GetResultColumns()) {
NMiniKQL::TKqpScanComputeContext::TColumn c;
c.Tag = resColumn.GetId();
- c.Type = resColumn.GetType();
+ c.Type = NScheme::TypeInfoFromProtoColumnType(resColumn.GetType(),
+ resColumn.HasTypeInfo() ? &resColumn.GetTypeInfo() : nullptr);
if (!IsSystemColumn(c.Tag)) {
ResultColumns.emplace_back(std::move(c));
diff --git a/ydb/core/kqp/runtime/kqp_scan_data.h b/ydb/core/kqp/runtime/kqp_scan_data.h
index 0b052f7a151..e365ffa0933 100644
--- a/ydb/core/kqp/runtime/kqp_scan_data.h
+++ b/ydb/core/kqp/runtime/kqp_scan_data.h
@@ -22,7 +22,7 @@ namespace NKikimrTxDataShard {
namespace NKikimr {
namespace NMiniKQL {
-std::pair<ui64, ui64> GetUnboxedValueSizeForTests(const NUdf::TUnboxedValue& value, NScheme::TTypeId type);
+std::pair<ui64, ui64> GetUnboxedValueSizeForTests(const NUdf::TUnboxedValue& value, NScheme::TTypeInfo type);
class IKqpTableReader : public TSimpleRefCount<IKqpTableReader> {
public:
diff --git a/ydb/core/kqp/runtime/kqp_scan_data_ut.cpp b/ydb/core/kqp/runtime/kqp_scan_data_ut.cpp
index 43b7c44bf26..8f977f0f198 100644
--- a/ydb/core/kqp/runtime/kqp_scan_data_ut.cpp
+++ b/ydb/core/kqp/runtime/kqp_scan_data_ut.cpp
@@ -9,30 +9,31 @@ namespace NKikimr::NMiniKQL {
namespace {
namespace NTypeIds = NScheme::NTypeIds;
using TTypeId = NScheme::TTypeId;
+using TTypeInfo = NScheme::TTypeInfo;
struct TDataRow {
TSmallVec<TKqpComputeContextBase::TColumn> Columns() {
return {
- {0, NTypeIds::Bool},
- {1, NTypeIds::Int8},
- {2, NTypeIds::Int16},
- {3, NTypeIds::Int32},
- {4, NTypeIds::Int64},
- {5, NTypeIds::Uint8},
- {6, NTypeIds::Uint16},
- {7, NTypeIds::Uint32},
- {8, NTypeIds::Uint64},
- {9, NTypeIds::Float},
- {10, NTypeIds::Double},
- {11, NTypeIds::String},
- {12, NTypeIds::Utf8},
- {13, NTypeIds::Json},
- {14, NTypeIds::Yson},
- {15, NTypeIds::Date},
- {16, NTypeIds::Datetime},
- {17, NTypeIds::Timestamp},
- {18, NTypeIds::Interval},
- {19, NTypeIds::Decimal},
+ {0, TTypeInfo(NTypeIds::Bool)},
+ {1, TTypeInfo(NTypeIds::Int8)},
+ {2, TTypeInfo(NTypeIds::Int16)},
+ {3, TTypeInfo(NTypeIds::Int32)},
+ {4, TTypeInfo(NTypeIds::Int64)},
+ {5, TTypeInfo(NTypeIds::Uint8)},
+ {6, TTypeInfo(NTypeIds::Uint16)},
+ {7, TTypeInfo(NTypeIds::Uint32)},
+ {8, TTypeInfo(NTypeIds::Uint64)},
+ {9, TTypeInfo(NTypeIds::Float)},
+ {10, TTypeInfo(NTypeIds::Double)},
+ {11, TTypeInfo(NTypeIds::String)},
+ {12, TTypeInfo(NTypeIds::Utf8)},
+ {13, TTypeInfo(NTypeIds::Json)},
+ {14, TTypeInfo(NTypeIds::Yson)},
+ {15, TTypeInfo(NTypeIds::Date)},
+ {16, TTypeInfo(NTypeIds::Datetime)},
+ {17, TTypeInfo(NTypeIds::Timestamp)},
+ {18, TTypeInfo(NTypeIds::Interval)},
+ {19, TTypeInfo(NTypeIds::Decimal)},
};
}
@@ -234,7 +235,7 @@ Y_UNIT_TEST_SUITE(TKqpScanData) {
};
for (auto& testCase: cases) {
- auto sizes = GetUnboxedValueSizeForTests(testCase.Value, testCase.Type);
+ auto sizes = GetUnboxedValueSizeForTests(testCase.Value, NScheme::TTypeInfo(testCase.Type));
UNIT_ASSERT_EQUAL_C(sizes, testCase.ExpectedSizes, "Wrong size for type " << NScheme::TypeName(testCase.Type));
}
}
@@ -293,7 +294,7 @@ Y_UNIT_TEST_SUITE(TKqpScanData) {
TSmallVec<TKqpComputeContextBase::TColumn> resultCols;
auto resCol = TKqpComputeContextBase::TColumn {
- .Type = NTypeIds::Int8
+ .Type = TTypeInfo(NTypeIds::Int8)
};
resultCols.push_back(resCol);
TKqpScanComputeContext::TScanData scanData({}, TTableRange({}), rows.front().Columns(), {}, {}, resultCols);
diff --git a/ydb/core/kqp/runtime/kqp_stream_lookup_actor.cpp b/ydb/core/kqp/runtime/kqp_stream_lookup_actor.cpp
index 103c72098bb..b440bd6e969 100644
--- a/ydb/core/kqp/runtime/kqp_stream_lookup_actor.cpp
+++ b/ydb/core/kqp/runtime/kqp_stream_lookup_actor.cpp
@@ -116,7 +116,7 @@ private:
struct TTableScheme {
TTableScheme(const THashMap<ui32, TSysTables::TTableColumnInfo>& columns) {
- std::map<ui32, NKikimr::NScheme::TTypeId> keyColumnTypesByKeyOrder;
+ std::map<ui32, NScheme::TTypeInfo> keyColumnTypesByKeyOrder;
for (const auto& [_, column] : columns) {
if (column.KeyOrder >= 0) {
keyColumnTypesByKeyOrder[column.KeyOrder] = column.PType;
@@ -132,7 +132,7 @@ private:
}
std::unordered_map<TString, TSysTables::TTableColumnInfo> ColumnsByName;
- std::vector<NKikimr::NScheme::TTypeId> KeyColumnTypes;
+ std::vector<NScheme::TTypeInfo> KeyColumnTypes;
};
private:
@@ -337,7 +337,7 @@ private:
batch.clear();
batch.reserve(Results.size());
- std::vector<NKikimr::NScheme::TTypeId> columnTypes;
+ std::vector<NKikimr::NScheme::TTypeInfo> columnTypes;
columnTypes.reserve(Columns.size());
for (const auto& column : Columns) {
auto colIt = TableScheme->ColumnsByName.find(column);
diff --git a/ydb/core/kqp/runtime/kqp_tasks_runner.cpp b/ydb/core/kqp/runtime/kqp_tasks_runner.cpp
index 2d555fbc006..223feb970ac 100644
--- a/ydb/core/kqp/runtime/kqp_tasks_runner.cpp
+++ b/ydb/core/kqp/runtime/kqp_tasks_runner.cpp
@@ -26,15 +26,17 @@ IDqOutputConsumer::TPtr KqpBuildOutputConsumer(const NDqProto::TTaskOutput& outp
{
switch (outputDesc.GetTypeCase()) {
case NDqProto::TTaskOutput::kRangePartition: {
- TVector<NUdf::TDataTypeId> keyColumnTypeIds;
- keyColumnTypeIds.reserve(outputDesc.GetRangePartition().GetKeyColumns().size());
+ TVector<NScheme::TTypeInfo> keyColumnTypeInfos;
+ keyColumnTypeInfos.reserve(outputDesc.GetRangePartition().GetKeyColumns().size());
TVector<TType*> keyColumnTypes;
TVector<ui32> keyColumnIndices;
GetColumnsInfo(type, outputDesc.GetRangePartition().GetKeyColumns(), keyColumnTypes, keyColumnIndices);
YQL_ENSURE(!keyColumnTypes.empty());
- std::transform(keyColumnTypes.begin(), keyColumnTypes.end(), back_inserter(keyColumnTypeIds), [](const auto& tyPtr) {
+ std::transform(keyColumnTypes.begin(), keyColumnTypes.end(), back_inserter(keyColumnTypeInfos), [](const auto& tyPtr) {
+ // TODO: support pg types
YQL_ENSURE(tyPtr->GetKind() == NKikimr::NMiniKQL::TType::EKind::Data);
- return static_cast<NKikimr::NMiniKQL::TDataType&>(*tyPtr).GetSchemeType();
+ auto dataTypeId = static_cast<NKikimr::NMiniKQL::TDataType&>(*tyPtr).GetSchemeType();
+ return NScheme::TTypeInfo((NScheme::TTypeId)dataTypeId);
});
TVector<TKqpRangePartition> partitions;
@@ -51,7 +53,7 @@ IDqOutputConsumer::TPtr KqpBuildOutputConsumer(const NDqProto::TTaskOutput& outp
}
return CreateOutputRangePartitionConsumer(std::move(outputs), std::move(partitions),
- std::move(keyColumnTypeIds), std::move(keyColumnIndices), typeEnv);
+ std::move(keyColumnTypeInfos), std::move(keyColumnIndices), typeEnv);
}
case NDqProto::TTaskOutput::kEffects: {
diff --git a/ydb/core/kqp/runtime/ut/CMakeLists.darwin.txt b/ydb/core/kqp/runtime/ut/CMakeLists.darwin.txt
index 877a653f444..deae8ecaa2e 100644
--- a/ydb/core/kqp/runtime/ut/CMakeLists.darwin.txt
+++ b/ydb/core/kqp/runtime/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-kqp-runtime-ut PUBLIC
cpp-testing-unittest_main
core-kqp-runtime
cpp-testing-unittest
- core-testlib-basics
+ testlib-basics-default
udf-service-exception_policy
)
target_link_options(ydb-core-kqp-runtime-ut PRIVATE
diff --git a/ydb/core/kqp/runtime/ut/CMakeLists.linux.txt b/ydb/core/kqp/runtime/ut/CMakeLists.linux.txt
index 8e5babbce0b..4c92ff9d5b3 100644
--- a/ydb/core/kqp/runtime/ut/CMakeLists.linux.txt
+++ b/ydb/core/kqp/runtime/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-kqp-runtime-ut PUBLIC
cpp-testing-unittest_main
core-kqp-runtime
cpp-testing-unittest
- core-testlib-basics
+ testlib-basics-default
udf-service-exception_policy
)
target_link_options(ydb-core-kqp-runtime-ut PRIVATE
diff --git a/ydb/core/kqp/ut/CMakeLists.darwin.txt b/ydb/core/kqp/ut/CMakeLists.darwin.txt
index f5fffdab6f6..7f2431236f4 100644
--- a/ydb/core/kqp/ut/CMakeLists.darwin.txt
+++ b/ydb/core/kqp/ut/CMakeLists.darwin.txt
@@ -8,6 +8,7 @@
add_subdirectory(common)
add_subdirectory(fat)
+add_subdirectory(pg)
add_subdirectory(spilling)
add_executable(ydb-core-kqp-ut)
@@ -31,6 +32,7 @@ target_link_libraries(ydb-core-kqp-ut PUBLIC
kqp-ut-common
cpp-client-draft
cpp-client-ydb_proto
+ yql-sql-pg_dummy
re2_udf
)
target_link_options(ydb-core-kqp-ut PRIVATE
diff --git a/ydb/core/kqp/ut/CMakeLists.linux.txt b/ydb/core/kqp/ut/CMakeLists.linux.txt
index af6b41955cb..c5fa765a09b 100644
--- a/ydb/core/kqp/ut/CMakeLists.linux.txt
+++ b/ydb/core/kqp/ut/CMakeLists.linux.txt
@@ -8,6 +8,7 @@
add_subdirectory(common)
add_subdirectory(fat)
+add_subdirectory(pg)
add_subdirectory(spilling)
add_executable(ydb-core-kqp-ut)
@@ -33,6 +34,7 @@ target_link_libraries(ydb-core-kqp-ut PUBLIC
kqp-ut-common
cpp-client-draft
cpp-client-ydb_proto
+ yql-sql-pg_dummy
re2_udf
)
target_link_options(ydb-core-kqp-ut PRIVATE
diff --git a/ydb/core/kqp/ut/fat/CMakeLists.darwin.txt b/ydb/core/kqp/ut/fat/CMakeLists.darwin.txt
index 975cf7d001a..bfc9ff61e44 100644
--- a/ydb/core/kqp/ut/fat/CMakeLists.darwin.txt
+++ b/ydb/core/kqp/ut/fat/CMakeLists.darwin.txt
@@ -25,6 +25,7 @@ target_link_libraries(ydb-core-kqp-ut-fat PUBLIC
core-kqp-host
core-kqp-provider
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-ut-fat PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/kqp/ut/fat/CMakeLists.linux.txt b/ydb/core/kqp/ut/fat/CMakeLists.linux.txt
index f372e3bf900..48c75b49f72 100644
--- a/ydb/core/kqp/ut/fat/CMakeLists.linux.txt
+++ b/ydb/core/kqp/ut/fat/CMakeLists.linux.txt
@@ -27,6 +27,7 @@ target_link_libraries(ydb-core-kqp-ut-fat PUBLIC
core-kqp-host
core-kqp-provider
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-ut-fat PRIVATE
-ldl
diff --git a/ydb/core/kqp/ut/pg/CMakeLists.darwin.txt b/ydb/core/kqp/ut/pg/CMakeLists.darwin.txt
new file mode 100644
index 00000000000..d9be4ac2454
--- /dev/null
+++ b/ydb/core/kqp/ut/pg/CMakeLists.darwin.txt
@@ -0,0 +1,51 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(ydb-core-kqp-ut-pg)
+target_compile_options(ydb-core-kqp-ut-pg PRIVATE
+ -DUSE_CURRENT_UDF_ABI_VERSION
+ -Wno-everything
+)
+target_include_directories(ydb-core-kqp-ut-pg PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/core/kqp
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/include
+)
+target_link_libraries(ydb-core-kqp-ut-pg PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ library-cpp-cpuid_check
+ cpp-testing-unittest_main
+ ydb-core-kqp
+ kqp-ut-common
+ udf-service-exception_policy
+ yql-sql-pg
+)
+target_link_options(ydb-core-kqp-ut-pg PRIVATE
+ -Wl,-no_deduplicate
+ -Wl,-sdk_version,10.15
+ -fPIC
+ -fPIC
+ -framework
+ CoreFoundation
+)
+target_sources(ydb-core-kqp-ut-pg PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp
+)
+add_test(
+ NAME
+ ydb-core-kqp-ut-pg
+ COMMAND
+ ydb-core-kqp-ut-pg
+ --print-before-suite
+ --print-before-test
+ --fork-tests
+ --print-times
+ --show-fails
+)
+vcs_info(ydb-core-kqp-ut-pg)
diff --git a/ydb/core/kqp/ut/pg/CMakeLists.linux.txt b/ydb/core/kqp/ut/pg/CMakeLists.linux.txt
new file mode 100644
index 00000000000..7508c3525ff
--- /dev/null
+++ b/ydb/core/kqp/ut/pg/CMakeLists.linux.txt
@@ -0,0 +1,55 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(ydb-core-kqp-ut-pg)
+target_compile_options(ydb-core-kqp-ut-pg PRIVATE
+ -DUSE_CURRENT_UDF_ABI_VERSION
+ -Wno-everything
+)
+target_include_directories(ydb-core-kqp-ut-pg PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/core/kqp
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/include
+)
+target_link_libraries(ydb-core-kqp-ut-pg PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ cpp-malloc-tcmalloc
+ libs-tcmalloc-no_percpu_cache
+ library-cpp-cpuid_check
+ cpp-testing-unittest_main
+ ydb-core-kqp
+ kqp-ut-common
+ udf-service-exception_policy
+ yql-sql-pg
+)
+target_link_options(ydb-core-kqp-ut-pg PRIVATE
+ -ldl
+ -lrt
+ -Wl,--no-as-needed
+ -fPIC
+ -fPIC
+ -lpthread
+ -lrt
+ -ldl
+)
+target_sources(ydb-core-kqp-ut-pg PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp
+)
+add_test(
+ NAME
+ ydb-core-kqp-ut-pg
+ COMMAND
+ ydb-core-kqp-ut-pg
+ --print-before-suite
+ --print-before-test
+ --fork-tests
+ --print-times
+ --show-fails
+)
+vcs_info(ydb-core-kqp-ut-pg)
diff --git a/ydb/core/kqp/ut/pg/CMakeLists.txt b/ydb/core/kqp/ut/pg/CMakeLists.txt
new file mode 100644
index 00000000000..79468a5d8d0
--- /dev/null
+++ b/ydb/core/kqp/ut/pg/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp
new file mode 100644
index 00000000000..a8cb5602b9b
--- /dev/null
+++ b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp
@@ -0,0 +1,162 @@
+#include <ydb/core/kqp/ut/common/kqp_ut_common.h>
+
+extern "C" {
+#include "postgres.h"
+#include "catalog/pg_type_d.h"
+}
+
+namespace NKikimr {
+namespace NKqp {
+
+using namespace NYdb;
+using namespace NYdb::NTable;
+
+Y_UNIT_TEST_SUITE(KqpPg) {
+
+ auto makePgType = [] (ui32 oid, i32 typlen = -1) { return TPgType(oid, typlen, -1); };
+
+ Y_UNIT_TEST_NEW_ENGINE(CreateTableBulkUpsertAndRead) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto builder = TTableBuilder()
+ .AddNullableColumn("boolean", makePgType(BOOLOID))
+ .AddNullableColumn("char", makePgType(CHAROID))
+ .AddNullableColumn("int2", makePgType(INT2OID))
+ .AddNullableColumn("int4", makePgType(INT4OID))
+ .AddNullableColumn("int8", makePgType(INT8OID))
+ .AddNullableColumn("float4", makePgType(FLOAT4OID))
+ .AddNullableColumn("float8", makePgType(FLOAT8OID))
+ .AddNullableColumn("text", makePgType(TEXTOID))
+ .AddNullableColumn("bytea", makePgType(BYTEAOID))
+ .AddNullableColumn("bpchar", makePgType(BPCHAROID))
+ .AddNullableColumn("varchar", makePgType(VARCHAROID))
+ .SetPrimaryKeyColumn("int2")
+ .SetPrimaryKeyColumn("int4")
+ .SetPrimaryKeyColumn("int8")
+ .SetPrimaryKeyColumn("float4")
+ .SetPrimaryKeyColumn("float8")
+ .SetPrimaryKeyColumn("text")
+ .SetPrimaryKeyColumn("bytea")
+ .SetPrimaryKeyColumn("bpchar");
+
+ auto result = session.CreateTable("/Root/Pg", builder.Build()).GetValueSync();
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
+
+ NYdb::TValueBuilder rows;
+ rows.BeginList();
+ for (size_t i = 0; i < 10; ++i) {
+ auto boolVal = true;
+ TString boolStr((const char*)&boolVal, sizeof(boolVal));
+ auto charVal = (char)i;
+ TString charStr((const char*)&charVal, sizeof(charVal));
+ auto int2Val = (i16)i;
+ TString int2Str((const char*)&int2Val, sizeof(int2Val));
+ auto int4Val = (i32)i;
+ TString int4Str((const char*)&int4Val, sizeof(int4Val));
+ auto int8Val = (i64)i;
+ TString int8Str((const char*)&int8Val, sizeof(int8Val));
+ auto float4Val = (float)i;
+ TString float4Str((const char*)&float4Val, sizeof(float4Val));
+ auto float8Val = (double)i;
+ TString float8Str((const char*)&float8Val, sizeof(float8Val));
+ TString textStr = Sprintf("text %" PRIu64, i);
+ TString byteaStr = Sprintf("bytea %" PRIu64, i);
+ TString bpcharStr = Sprintf("bpchar %" PRIu64, i);
+ TString varcharStr = Sprintf("varchar %" PRIu64, i);
+
+ rows.AddListItem()
+ .BeginStruct()
+ .AddMember("boolean").Pg(TPgValue(TPgValue::VK_BINARY, boolStr, makePgType(BOOLOID)))
+ .AddMember("char").Pg(TPgValue(TPgValue::VK_BINARY, charStr, makePgType(CHAROID)))
+ .AddMember("int2").Pg(TPgValue(TPgValue::VK_BINARY, int2Str, makePgType(INT2OID)))
+ .AddMember("int4").Pg(TPgValue(TPgValue::VK_BINARY, int4Str, makePgType(INT4OID)))
+ .AddMember("int8").Pg(TPgValue(TPgValue::VK_BINARY, int8Str, makePgType(INT8OID)))
+ .AddMember("float4").Pg(TPgValue(TPgValue::VK_BINARY, float4Str, makePgType(FLOAT4OID)))
+ .AddMember("float8").Pg(TPgValue(TPgValue::VK_BINARY, float8Str, makePgType(FLOAT8OID)))
+ .AddMember("text").Pg(TPgValue(TPgValue::VK_BINARY, textStr, makePgType(TEXTOID)))
+ .AddMember("bytea").Pg(TPgValue(TPgValue::VK_BINARY, byteaStr, makePgType(BYTEAOID)))
+ .AddMember("bpchar").Pg(TPgValue(TPgValue::VK_BINARY, bpcharStr, makePgType(BPCHAROID)))
+ .AddMember("varchar").Pg(TPgValue(TPgValue::VK_BINARY, varcharStr, makePgType(VARCHAROID)))
+ .EndStruct();
+ }
+ rows.EndList();
+
+ result = db.BulkUpsert("/Root/Pg", rows.Build()).GetValueSync();;
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
+
+ session.Close().GetValueSync();
+
+ auto readSettings = TReadTableSettings()
+ .AppendColumns("boolean")
+ .AppendColumns("char")
+ .AppendColumns("int2")
+ .AppendColumns("int4")
+ .AppendColumns("int8")
+ .AppendColumns("float4")
+ .AppendColumns("float8")
+ .AppendColumns("text")
+ .AppendColumns("bytea")
+ .AppendColumns("bpchar")
+ .AppendColumns("varchar");
+
+ auto it = session.ReadTable("/Root/Pg", readSettings).GetValueSync();
+ UNIT_ASSERT_C(it.IsSuccess(), result.GetIssues().ToString());
+
+ bool eos = false;
+ while (!eos) {
+ auto part = it.ReadNext().ExtractValueSync();
+ if (!part.IsSuccess()) {
+ eos = true;
+ UNIT_ASSERT_C(part.EOS(), result.GetIssues().ToString());
+ continue;
+ }
+ auto resultSet = part.ExtractPart();
+ TResultSetParser parser(resultSet);
+ for (size_t i = 0; parser.TryNextRow(); ++i) {
+ auto boolVal = true;
+ TString boolStr((const char*)&boolVal, sizeof(boolVal));
+ auto charVal = (char)i;
+ TString charStr((const char*)&charVal, sizeof(charVal));
+ auto int2Val = (i16)i;
+ TString int2Str((const char*)&int2Val, sizeof(int2Val));
+ auto int4Val = (i32)i;
+ TString int4Str((const char*)&int4Val, sizeof(int4Val));
+ auto int8Val = (i64)i;
+ TString int8Str((const char*)&int8Val, sizeof(int8Val));
+ auto float4Val = (float)i;
+ TString float4Str((const char*)&float4Val, sizeof(float4Val));
+ auto float8Val = (double)i;
+ TString float8Str((const char*)&float8Val, sizeof(float8Val));
+ TString textStr = Sprintf("text %" PRIu64, i);
+ TString byteaStr = Sprintf("bytea %" PRIu64, i);
+ TString bpcharStr = Sprintf("bpchar %" PRIu64, i);
+ TString varcharStr = Sprintf("varchar %" PRIu64, i);
+
+#define COLUMN(type, valStr) \
+ { \
+ auto& column = parser.ColumnParser(type); \
+ column.OpenOptional(); \
+ UNIT_ASSERT_VALUES_EQUAL(valStr, column.GetPg().Content_); \
+ column.CloseOptional(); \
+ }
+ COLUMN("boolean", boolStr);
+ COLUMN("char", charStr);
+ COLUMN("int2", int2Str);
+ COLUMN("int4", int4Str);
+ COLUMN("int8", int8Str);
+ COLUMN("float4", float4Str);
+ COLUMN("float8", float8Str);
+ COLUMN("text", textStr);
+ COLUMN("bytea", byteaStr);
+ COLUMN("bpchar", bpcharStr);
+ COLUMN("varchar", varcharStr);
+#undef COLUMN
+ }
+ }
+ }
+}
+
+} // namespace NKqp
+} // namespace NKikimr
diff --git a/ydb/core/kqp/ut/spilling/CMakeLists.darwin.txt b/ydb/core/kqp/ut/spilling/CMakeLists.darwin.txt
index 5f49554dc5b..26e90b05233 100644
--- a/ydb/core/kqp/ut/spilling/CMakeLists.darwin.txt
+++ b/ydb/core/kqp/ut/spilling/CMakeLists.darwin.txt
@@ -25,6 +25,7 @@ target_link_libraries(ydb-core-kqp-ut-spilling PUBLIC
core-kqp-host
core-kqp-provider
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-ut-spilling PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/kqp/ut/spilling/CMakeLists.linux.txt b/ydb/core/kqp/ut/spilling/CMakeLists.linux.txt
index 9821c1b0403..2ce59f032a6 100644
--- a/ydb/core/kqp/ut/spilling/CMakeLists.linux.txt
+++ b/ydb/core/kqp/ut/spilling/CMakeLists.linux.txt
@@ -27,6 +27,7 @@ target_link_libraries(ydb-core-kqp-ut-spilling PUBLIC
core-kqp-host
core-kqp-provider
kqp-ut-common
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-kqp-ut-spilling PRIVATE
-ldl
diff --git a/ydb/core/mind/address_classification/ut/CMakeLists.darwin.txt b/ydb/core/mind/address_classification/ut/CMakeLists.darwin.txt
index 40e5b3b649a..7ba877b4966 100644
--- a/ydb/core/mind/address_classification/ut/CMakeLists.darwin.txt
+++ b/ydb/core/mind/address_classification/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-mind-address_classification-ut PUBLIC
cpp-testing-unittest_main
core-mind-address_classification
cpp-actors-http
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-mind-address_classification-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/mind/address_classification/ut/CMakeLists.linux.txt b/ydb/core/mind/address_classification/ut/CMakeLists.linux.txt
index e3481d90092..98ff5aec614 100644
--- a/ydb/core/mind/address_classification/ut/CMakeLists.linux.txt
+++ b/ydb/core/mind/address_classification/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-mind-address_classification-ut PUBLIC
cpp-testing-unittest_main
core-mind-address_classification
cpp-actors-http
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-mind-address_classification-ut PRIVATE
-ldl
diff --git a/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.darwin.txt b/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.darwin.txt
index 0b9fa6d82c9..3c604e326e6 100644
--- a/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.darwin.txt
+++ b/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.darwin.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-mind-bscontroller-ut_bscontroller PUBLIC
blobstorage-dsproxy-mock
core-mind-bscontroller
ydb-core-protos
- ydb-core-testlib
+ core-testlib-default
core-testlib-basics
)
target_link_options(ydb-core-mind-bscontroller-ut_bscontroller PRIVATE
diff --git a/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.linux.txt b/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.linux.txt
index da1f7e96ede..8b6d2c3e10e 100644
--- a/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.linux.txt
+++ b/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.linux.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-mind-bscontroller-ut_bscontroller PUBLIC
blobstorage-dsproxy-mock
core-mind-bscontroller
ydb-core-protos
- ydb-core-testlib
+ core-testlib-default
core-testlib-basics
)
target_link_options(ydb-core-mind-bscontroller-ut_bscontroller PRIVATE
diff --git a/ydb/core/mind/hive/ut/CMakeLists.darwin.txt b/ydb/core/mind/hive/ut/CMakeLists.darwin.txt
index 5811cd42acc..21e6e84e0fa 100644
--- a/ydb/core/mind/hive/ut/CMakeLists.darwin.txt
+++ b/ydb/core/mind/hive/ut/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-mind-hive-ut PUBLIC
library-cpp-svnversion
ydb-core-base
ydb-core-mind
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-mind-hive-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/mind/hive/ut/CMakeLists.linux.txt b/ydb/core/mind/hive/ut/CMakeLists.linux.txt
index 6ee3abd0529..cdd5a1718c7 100644
--- a/ydb/core/mind/hive/ut/CMakeLists.linux.txt
+++ b/ydb/core/mind/hive/ut/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-mind-hive-ut PUBLIC
library-cpp-svnversion
ydb-core-base
ydb-core-mind
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-mind-hive-ut PRIVATE
-ldl
diff --git a/ydb/core/mind/ut/CMakeLists.darwin.txt b/ydb/core/mind/ut/CMakeLists.darwin.txt
index b8a7b1070e1..2e24d15e6c9 100644
--- a/ydb/core/mind/ut/CMakeLists.darwin.txt
+++ b/ydb/core/mind/ut/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-mind-ut PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-mind-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/mind/ut/CMakeLists.linux.txt b/ydb/core/mind/ut/CMakeLists.linux.txt
index bfbef7e3c7c..41d2ada1098 100644
--- a/ydb/core/mind/ut/CMakeLists.linux.txt
+++ b/ydb/core/mind/ut/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-mind-ut PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-mind-ut PRIVATE
-ldl
diff --git a/ydb/core/mind/ut_fat/CMakeLists.darwin.txt b/ydb/core/mind/ut_fat/CMakeLists.darwin.txt
index c72c32ff065..6630f84c0a6 100644
--- a/ydb/core/mind/ut_fat/CMakeLists.darwin.txt
+++ b/ydb/core/mind/ut_fat/CMakeLists.darwin.txt
@@ -29,7 +29,7 @@ target_link_libraries(ydb-core-mind-ut_fat PUBLIC
core-blobstorage-nodewarden
core-blobstorage-pdisk
blobstorage-vdisk-common
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-mind-ut_fat PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/mind/ut_fat/CMakeLists.linux.txt b/ydb/core/mind/ut_fat/CMakeLists.linux.txt
index 01bd8cc6566..e650145cefb 100644
--- a/ydb/core/mind/ut_fat/CMakeLists.linux.txt
+++ b/ydb/core/mind/ut_fat/CMakeLists.linux.txt
@@ -31,7 +31,7 @@ target_link_libraries(ydb-core-mind-ut_fat PUBLIC
core-blobstorage-nodewarden
core-blobstorage-pdisk
blobstorage-vdisk-common
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-mind-ut_fat PRIVATE
-ldl
diff --git a/ydb/core/persqueue/pq_impl.cpp b/ydb/core/persqueue/pq_impl.cpp
index 9160db6f6c7..08654c1e7ef 100644
--- a/ydb/core/persqueue/pq_impl.cpp
+++ b/ydb/core/persqueue/pq_impl.cpp
@@ -8,6 +8,7 @@
#include <ydb/core/protos/pqconfig.pb.h>
#include <ydb/core/protos/counters_keyvalue.pb.h>
#include <ydb/core/metering/metering.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/sys_view/service/sysview_service.h>
#include <ydb/core/tablet/tablet_counters.h>
#include <library/cpp/json/json_writer.h>
@@ -633,7 +634,9 @@ void TPersQueue::ApplyNewConfigAndReply(const TActorContext& ctx)
KeySchema.clear();
KeySchema.reserve(Config.PartitionKeySchemaSize());
for (const auto& component : Config.GetPartitionKeySchema()) {
- KeySchema.push_back(component.GetTypeId());
+ auto typeInfo = NScheme::TypeInfoFromProtoColumnType(component.GetTypeId(),
+ component.HasTypeInfo() ? &component.GetTypeInfo() : nullptr);
+ KeySchema.push_back(typeInfo);
}
Y_VERIFY(TopicName.size(), "Need topic name here");
@@ -749,7 +752,9 @@ void TPersQueue::ReadConfig(const NKikimrClient::TKeyValueResponse::TReadResult&
KeySchema.clear();
KeySchema.reserve(Config.PartitionKeySchemaSize());
for (const auto& component : Config.GetPartitionKeySchema()) {
- KeySchema.push_back(component.GetTypeId());
+ auto typeInfo = NScheme::TypeInfoFromProtoColumnType(component.GetTypeId(),
+ component.HasTypeInfo() ? &component.GetTypeInfo() : nullptr);
+ KeySchema.push_back(typeInfo);
}
ui32 cacheSize = CACHE_SIZE;
diff --git a/ydb/core/persqueue/pq_impl.h b/ydb/core/persqueue/pq_impl.h
index 73fa4f3cd0b..2b9c9cbe975 100644
--- a/ydb/core/persqueue/pq_impl.h
+++ b/ydb/core/persqueue/pq_impl.h
@@ -150,7 +150,7 @@ private:
NPersQueue::TTopicConverterPtr TopicConverter;
bool IsLocalDC;
TString DCId;
- TVector<NScheme::TTypeId> KeySchema;
+ TVector<NScheme::TTypeInfo> KeySchema;
NKikimrPQ::TPQTabletConfig Config;
NKikimrPQ::ETabletState TabletState;
diff --git a/ydb/core/persqueue/ut/CMakeLists.darwin.txt b/ydb/core/persqueue/ut/CMakeLists.darwin.txt
index e3ab43c227d..0bb0a158ba0 100644
--- a/ydb/core/persqueue/ut/CMakeLists.darwin.txt
+++ b/ydb/core/persqueue/ut/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-persqueue-ut PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb_persqueue_core-ut-ut_utils
library-cpp-resource
)
diff --git a/ydb/core/persqueue/ut/CMakeLists.linux.txt b/ydb/core/persqueue/ut/CMakeLists.linux.txt
index 3caed2d6a36..4bcfc755eac 100644
--- a/ydb/core/persqueue/ut/CMakeLists.linux.txt
+++ b/ydb/core/persqueue/ut/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-persqueue-ut PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb_persqueue_core-ut-ut_utils
library-cpp-resource
)
diff --git a/ydb/core/persqueue/ut_slow/CMakeLists.darwin.txt b/ydb/core/persqueue/ut_slow/CMakeLists.darwin.txt
index b4a546fecf3..a4ad0987487 100644
--- a/ydb/core/persqueue/ut_slow/CMakeLists.darwin.txt
+++ b/ydb/core/persqueue/ut_slow/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-persqueue-ut_slow PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-persqueue-ut_slow PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/persqueue/ut_slow/CMakeLists.linux.txt b/ydb/core/persqueue/ut_slow/CMakeLists.linux.txt
index 038edb3538a..302203bfa40 100644
--- a/ydb/core/persqueue/ut_slow/CMakeLists.linux.txt
+++ b/ydb/core/persqueue/ut_slow/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-persqueue-ut_slow PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-persqueue-ut_slow PRIVATE
-ldl
diff --git a/ydb/core/protos/CMakeLists.txt b/ydb/core/protos/CMakeLists.txt
index d8e4f567463..3be4b8e5c2d 100644
--- a/ydb/core/protos/CMakeLists.txt
+++ b/ydb/core/protos/CMakeLists.txt
@@ -138,6 +138,7 @@ target_proto_messages(ydb-core-protos PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/protos/tx_proxy.proto
${CMAKE_SOURCE_DIR}/ydb/core/protos/tx_scheme.proto
${CMAKE_SOURCE_DIR}/ydb/core/protos/tx_sequenceshard.proto
+ ${CMAKE_SOURCE_DIR}/ydb/core/protos/type_info.proto
${CMAKE_SOURCE_DIR}/ydb/core/protos/pdiskfit.proto
${CMAKE_SOURCE_DIR}/ydb/core/protos/pqconfig.proto
${CMAKE_SOURCE_DIR}/ydb/core/protos/auth.proto
diff --git a/ydb/core/protos/flat_scheme_op.proto b/ydb/core/protos/flat_scheme_op.proto
index fb78fceeb76..7f4d35655c5 100644
--- a/ydb/core/protos/flat_scheme_op.proto
+++ b/ydb/core/protos/flat_scheme_op.proto
@@ -1,4 +1,5 @@
import "ydb/core/protos/base.proto";
+import "ydb/core/protos/type_info.proto";
import "ydb/core/protos/bind_channel_storage_pool.proto";
import "ydb/core/protos/pqconfig.proto";
import "ydb/core/protos/replication.proto";
@@ -76,6 +77,7 @@ message TColumnDescription {
optional string Name = 1;
optional string Type = 2;
optional uint32 TypeId = 3;
+ optional NKikimrProto.TTypeInfo TypeInfo = 9;
optional uint32 Id = 4;
optional uint32 Family = 5; // On default place column to default(0) family
optional string FamilyName = 6; // set Family by name (0 - "default")
@@ -372,6 +374,7 @@ message TOlapColumnDescription {
optional string Type = 3;
optional uint32 TypeId = 4; // TypeId cannot be set explicitly, use Type
+ optional NKikimrProto.TTypeInfo TypeInfo = 6;
// TODO: Intermediate codecs such as Delta, DubleDelta, dictionary encoding, etc.
//TCompressionOptions Compression = 5;
diff --git a/ydb/core/protos/flat_tx_scheme.proto b/ydb/core/protos/flat_tx_scheme.proto
index 42cef3df5b8..ebced3f665b 100644
--- a/ydb/core/protos/flat_tx_scheme.proto
+++ b/ydb/core/protos/flat_tx_scheme.proto
@@ -1,5 +1,6 @@
import "library/cpp/actors/protos/actors.proto";
import "ydb/core/protos/base.proto";
+import "ydb/core/protos/type_info.proto";
import "ydb/core/protos/subdomains.proto";
import "ydb/core/protos/bind_channel_storage_pool.proto";
import "ydb/core/protos/flat_scheme_op.proto";
@@ -211,6 +212,7 @@ message TMigrateColumn {
optional uint32 Id = 1;
optional string Name = 2;
optional uint32 ColType = 3;
+ optional NKikimrProto.TTypeInfo ColTypeInfo = 11;
optional uint32 ColKeyOrder = 4;
optional uint64 CreateVersion = 5;
optional uint64 DeleteVersion = 6;
diff --git a/ydb/core/protos/kqp.proto b/ydb/core/protos/kqp.proto
index 56e65aa696b..8476ed6d0a0 100644
--- a/ydb/core/protos/kqp.proto
+++ b/ydb/core/protos/kqp.proto
@@ -3,6 +3,7 @@ option java_package = "ru.yandex.kikimr.proto";
option cc_enable_arenas = true;
import "library/cpp/actors/protos/actors.proto";
+import "ydb/core/protos/type_info.proto";
import "ydb/core/protos/kqp_physical.proto";
import "ydb/core/protos/kqp_stats.proto";
import "ydb/core/protos/query_stats.proto";
@@ -124,6 +125,7 @@ message TKqpColumnMetadataProto {
optional uint32 Id = 2;
optional string Type = 3;
optional uint32 TypeId = 4;
+ optional NKikimrProto.TTypeInfo TypeInfo = 7;
repeated string Family = 5;
optional bool NotNull = 6 [default = false];
};
diff --git a/ydb/core/protos/pqconfig.proto b/ydb/core/protos/pqconfig.proto
index acd2f426442..22f9d1217f1 100644
--- a/ydb/core/protos/pqconfig.proto
+++ b/ydb/core/protos/pqconfig.proto
@@ -6,6 +6,7 @@ import "ydb/core/protos/msgbus_kv.proto";
import "ydb/core/protos/node_limits.proto";
import "ydb/core/protos/netclassifier.proto";
import "ydb/core/protos/services.proto";
+import "ydb/core/protos/type_info.proto";
import "library/cpp/actors/protos/actors.proto";
@@ -299,6 +300,7 @@ message TPQTabletConfig {
message TKeyComponentSchema {
optional string Name = 1;
optional uint32 TypeId = 2;
+ optional NKikimrProto.TTypeInfo TypeInfo = 3;
}
repeated TKeyComponentSchema PartitionKeySchema = 30;
diff --git a/ydb/core/protos/scheme_log.proto b/ydb/core/protos/scheme_log.proto
index fcf4ba52b94..1507ed3cd00 100644
--- a/ydb/core/protos/scheme_log.proto
+++ b/ydb/core/protos/scheme_log.proto
@@ -1,4 +1,5 @@
import "ydb/core/protos/flat_scheme_op.proto";
+import "ydb/core/protos/type_info.proto";
package NTabletFlatScheme;
option java_package = "ru.yandex.kikimr.proto";
@@ -57,6 +58,7 @@ message TAlterRecord {
optional string ColumnName = 5;
optional uint32 ColumnType = 6;
+ optional NKikimrProto.TTypeInfo ColumnTypeInfo = 25;
optional bytes Default = 10; // Serialized default value for cell
optional bool NotNull = 24 [default = false];
diff --git a/ydb/core/protos/tx_datashard.proto b/ydb/core/protos/tx_datashard.proto
index 6ad3b0942be..f002b678fa4 100644
--- a/ydb/core/protos/tx_datashard.proto
+++ b/ydb/core/protos/tx_datashard.proto
@@ -3,6 +3,7 @@ option cc_enable_arenas = true;
import "library/cpp/actors/protos/actors.proto";
import "ydb/core/protos/base.proto";
+import "ydb/core/protos/type_info.proto";
import "ydb/core/protos/kqp.proto";
import "ydb/core/protos/ssa.proto";
import "ydb/core/protos/tablet.proto";
@@ -102,6 +103,7 @@ message TReadTableTransaction {
optional uint32 Id = 1;
optional string Name = 2;
optional uint32 TypeId = 3;
+ optional NKikimrProto.TTypeInfo TypeInfo = 4;
}
optional TTableId TableId = 1;
@@ -148,6 +150,7 @@ message TKqpTransaction {
optional uint32 Id = 1;
optional string Name = 2;
optional uint32 Type = 3;
+ optional NKikimrProto.TTypeInfo TypeInfo = 4;
}
message TColumnWriteMeta {
@@ -213,6 +216,7 @@ message TKqpTransaction {
optional TTableMeta Table = 1;
repeated TColumnMeta Columns = 2;
repeated uint32 KeyColumnTypes = 3; // for debug logs only
+ repeated NKikimrProto.TTypeInfo KeyColumnTypeInfos = 13; // for debug logs only
repeated bool SkipNullKeys = 4;
repeated TReadOpMeta Reads = 5;
optional uint64 ItemsLimit = 6;
@@ -1412,6 +1416,7 @@ message TEvKqpScan {
optional uint64 SchemaVersion = 5;
repeated uint32 ColumnTags = 6;
repeated uint32 ColumnTypes = 7;
+ repeated NKikimrProto.TTypeInfo ColumnTypeInfos = 22;
repeated bool SkipNullKeys = 8;
repeated NKikimrTx.TKeyRange Ranges = 9;
optional NKikimrKqp.TKqpSnapshot Snapshot = 10;
diff --git a/ydb/core/protos/type_info.proto b/ydb/core/protos/type_info.proto
new file mode 100644
index 00000000000..669e0f5ee7b
--- /dev/null
+++ b/ydb/core/protos/type_info.proto
@@ -0,0 +1,6 @@
+package NKikimrProto;
+option java_package = "ru.yandex.kikimr.proto";
+
+message TTypeInfo {
+ optional uint32 PgTypeId = 1;
+}
diff --git a/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.darwin.txt b/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.darwin.txt
index 1af9c185540..9dc9c7b207c 100644
--- a/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.darwin.txt
+++ b/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(quoter_service_bandwidth_test PUBLIC
ydb-core-base
core-kesus-tablet
ydb-core-quoter
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(quoter_service_bandwidth_test PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.linux.txt b/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.linux.txt
index f374fe45901..d493f1877a0 100644
--- a/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.linux.txt
+++ b/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(quoter_service_bandwidth_test PUBLIC
ydb-core-base
core-kesus-tablet
ydb-core-quoter
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(quoter_service_bandwidth_test PRIVATE
-ldl
diff --git a/ydb/core/quoter/ut/CMakeLists.darwin.txt b/ydb/core/quoter/ut/CMakeLists.darwin.txt
index 07877e85689..034a8724441 100644
--- a/ydb/core/quoter/ut/CMakeLists.darwin.txt
+++ b/ydb/core/quoter/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-quoter-ut PUBLIC
cpp-testing-unittest_main
ydb-core-quoter
cpp-testing-gmock_in_unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-quoter-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/quoter/ut/CMakeLists.linux.txt b/ydb/core/quoter/ut/CMakeLists.linux.txt
index b9b4aa78c8d..80ac2b075da 100644
--- a/ydb/core/quoter/ut/CMakeLists.linux.txt
+++ b/ydb/core/quoter/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-quoter-ut PUBLIC
cpp-testing-unittest_main
ydb-core-quoter
cpp-testing-gmock_in_unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-quoter-ut PRIVATE
-ldl
diff --git a/ydb/core/scheme/CMakeLists.txt b/ydb/core/scheme/CMakeLists.txt
index 78d15109ff4..1b70a91472d 100644
--- a/ydb/core/scheme/CMakeLists.txt
+++ b/ydb/core/scheme/CMakeLists.txt
@@ -28,4 +28,6 @@ target_sources(ydb-core-scheme PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/scheme/scheme_tablecell.cpp
${CMAKE_SOURCE_DIR}/ydb/core/scheme/scheme_tabledefs.cpp
${CMAKE_SOURCE_DIR}/ydb/core/scheme/scheme_types_defs.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/scheme/scheme_type_info.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/scheme/scheme_types_proto.cpp
)
diff --git a/ydb/core/scheme/scheme_borders.cpp b/ydb/core/scheme/scheme_borders.cpp
index f3089b53ace..b4407fafe07 100644
--- a/ydb/core/scheme/scheme_borders.cpp
+++ b/ydb/core/scheme/scheme_borders.cpp
@@ -17,7 +17,7 @@ namespace NKikimr {
}
int ComparePrefixBorders(
- TConstArrayRef<NScheme::TTypeId> keyTypes,
+ TConstArrayRef<NScheme::TTypeInfo> keyTypes,
TConstArrayRef<TCell> left, EPrefixMode leftMode,
TConstArrayRef<TCell> right, EPrefixMode rightMode)
{
diff --git a/ydb/core/scheme/scheme_borders.h b/ydb/core/scheme/scheme_borders.h
index 709af56aca8..ab9b3fa8a64 100644
--- a/ydb/core/scheme/scheme_borders.h
+++ b/ydb/core/scheme/scheme_borders.h
@@ -23,7 +23,7 @@ namespace NKikimr {
* Compares two prefix borders
*/
int ComparePrefixBorders(
- TConstArrayRef<NScheme::TTypeId> keyTypes,
+ TConstArrayRef<NScheme::TTypeInfo> keyTypes,
TConstArrayRef<TCell> left, EPrefixMode leftMode,
TConstArrayRef<TCell> right, EPrefixMode rightMode);
diff --git a/ydb/core/scheme/scheme_borders_ut.cpp b/ydb/core/scheme/scheme_borders_ut.cpp
index 59fefd3b0a0..e27367fb4ec 100644
--- a/ydb/core/scheme/scheme_borders_ut.cpp
+++ b/ydb/core/scheme/scheme_borders_ut.cpp
@@ -13,9 +13,9 @@ Y_UNIT_TEST_SUITE(SchemeBorders) {
class THelper {
public:
explicit THelper(size_t keyCount) {
- Types.resize(keyCount);
+ Types.reserve(keyCount);
for (size_t i = 0; i < keyCount; ++i) {
- Types[i] = NScheme::NTypeIds::Uint32;
+ Types.push_back(NScheme::TTypeInfo(NScheme::NTypeIds::Uint32));
}
}
@@ -127,7 +127,7 @@ Y_UNIT_TEST_SUITE(SchemeBorders) {
}
private:
- TVector<NScheme::TTypeId> Types;
+ TVector<NScheme::TTypeInfo> Types;
TVector<TCell> LeftKey;
TVector<TCell> RightKey;
};
diff --git a/ydb/core/scheme/scheme_tablecell.cpp b/ydb/core/scheme/scheme_tablecell.cpp
index c9ffaccc8e9..bd1069701a7 100644
--- a/ydb/core/scheme/scheme_tablecell.cpp
+++ b/ydb/core/scheme/scheme_tablecell.cpp
@@ -60,25 +60,32 @@ TOwnedCellVec::TInit TOwnedCellVec::Allocate(TOwnedCellVec::TCellVec cells) {
};
}
-TString DbgPrintCell(const TCell& r, NScheme::TTypeId typeId, const NScheme::TTypeRegistry &reg) {
- NScheme::ITypeSP t = reg.GetType(typeId);
+TString DbgPrintCell(const TCell& r, NScheme::TTypeInfo typeInfo, const NScheme::TTypeRegistry &reg) {
+ auto typeId = typeInfo.GetTypeId();
+ TString res;
- if (!t.IsKnownType())
- return Sprintf("Unknow typeId 0x%x", (ui32)typeId);
+ if (typeId == NScheme::NTypeIds::Pg) {
+ res = NPg::PgTypeNameFromTypeDesc(typeInfo.GetTypeDesc());
+ } else {
+ NScheme::ITypeSP t = reg.GetType(typeId);
- TString res = t->GetName();
- res += " : ";
+ if (!t.IsKnownType())
+ return Sprintf("Unknow typeId 0x%x", (ui32)typeId);
+
+ res = t->GetName();
+ }
- DbgPrintValue(res, r, typeId);
+ res += " : ";
+ DbgPrintValue(res, r, typeInfo);
return res;
}
-void DbgPrintValue(TString &res, const TCell &r, ui32 type) {
+void DbgPrintValue(TString &res, const TCell &r, NScheme::TTypeInfo typeInfo) {
if (r.IsNull()) {
res += "NULL";
} else {
- switch (type) {
+ switch (typeInfo.GetTypeId()) {
case NScheme::NTypeIds::Bool:
res += r.AsValue<bool>() ? "true" : "false";
break;
@@ -106,6 +113,9 @@ void DbgPrintValue(TString &res, const TCell &r, ui32 type) {
case NScheme::NTypeIds::ActorId:
res += ToString(r.AsValue<TActorId>());
break;
+ case NScheme::NTypeIds::Pg:
+ // TODO: support pg types
+ break;
default:
res += EscapeC(r.Data(), r.Size());
}
diff --git a/ydb/core/scheme/scheme_tablecell.h b/ydb/core/scheme/scheme_tablecell.h
index bccfdca97db..fffd827cf77 100644
--- a/ydb/core/scheme/scheme_tablecell.h
+++ b/ydb/core/scheme/scheme_tablecell.h
@@ -5,6 +5,8 @@
#include "scheme_type_order.h"
#include "scheme_types_defs.h"
+#include <ydb/library/yql/utils/pg_types.h>
+
#include <util/generic/hash.h>
#include <util/system/unaligned_mem.h>
@@ -119,7 +121,7 @@ using TCellsRef = TConstArrayRef<const TCell>;
// NULL is considered equal to another NULL and less than non-NULL
// ATTENTION!!! return value is int!! (NOT just -1,0,1)
-inline int CompareTypedCells(const TCell& a, const TCell& b, NScheme::TTypeIdOrder type) {
+inline int CompareTypedCells(const TCell& a, const TCell& b, NScheme::TTypeInfoOrder type) {
using TPair = std::pair<ui64, ui64>;
if (a.IsNull())
return b.IsNull() ? 0 : -1;
@@ -188,6 +190,14 @@ inline int CompareTypedCells(const TCell& a, const TCell& b, NScheme::TTypeIdOrd
return (va.second < vb.second) != type.IsDescending() ? -1 : 1;
}
+ case NKikimr::NScheme::NTypeIds::Pg:
+ {
+ auto typeDesc = type.GetTypeDesc();
+ Y_VERIFY(typeDesc, "no pg type descriptor");
+ int result = NPg::PgNativeBinaryCompare(a.Data(), a.Size(), b.Data(), b.Size(), typeDesc);
+ return type.IsDescending() ? -result : result;
+ }
+
default:
Y_VERIFY_DEBUG(false, "Unknown type");
};
@@ -225,11 +235,12 @@ inline int CompareTypedCellVectors(const TCell* a, const TCell* b, const TTypeCl
}
// TODO: use NYql ops when TCell and TUnboxedValuePod had merged
-inline ui64 GetValueHash(NScheme::TTypeId type, const TCell& cell) {
+inline ui64 GetValueHash(NScheme::TTypeInfo info, const TCell& cell) {
if (cell.IsNull())
return 0;
- const NYql::NProto::TypeIds yqlType = static_cast<NYql::NProto::TypeIds>(type);
+ auto typeId = info.GetTypeId();
+ const NYql::NProto::TypeIds yqlType = static_cast<NYql::NProto::TypeIds>(typeId);
switch (yqlType) {
case NYql::NProto::TypeIds::Bool:
return ((*(const ui8 *)cell.Data()) == 0) ? THash<ui8>()((ui8)0) : THash<ui8>()((ui8)1);
@@ -273,17 +284,23 @@ inline ui64 GetValueHash(NScheme::TTypeId type, const TCell& cell) {
return ComputeHash(TStringBuf{cell.Data(), cell.Size()});
default:
- Y_VERIFY_DEBUG(false, "Type not supported for user columns: %d", type);
break;
}
+ if (typeId == NKikimr::NScheme::NTypeIds::Pg) {
+ auto typeDesc = info.GetTypeDesc();
+ Y_VERIFY(typeDesc, "no pg type descriptor");
+ return NPg::PgNativeBinaryHash(cell.Data(), cell.Size(), typeDesc);
+ }
+
+ Y_VERIFY_DEBUG(false, "Type not supported for user columns: %d", typeId);
return 0;
}
// Only references a vector of cells and corresponding types
// Doesn't own the memory
struct TDbTupleRef {
- const NKikimr::NScheme::TTypeId* Types;
+ const NKikimr::NScheme::TTypeInfo* Types;
const TCell* Columns;
ui32 ColumnCount;
@@ -291,7 +308,7 @@ struct TDbTupleRef {
return { Columns, ColumnCount };
}
- TDbTupleRef(const NScheme::TTypeId* types = nullptr, const TCell* storage = nullptr, ui32 colCnt = 0)
+ TDbTupleRef(const NScheme::TTypeInfo* types = nullptr, const TCell* storage = nullptr, ui32 colCnt = 0)
: Types(types)
, Columns(storage)
, ColumnCount(colCnt)
@@ -523,8 +540,8 @@ private:
TVector<TCell> Cells;
};
-void DbgPrintValue(TString&, const TCell&, ui32 type);
-TString DbgPrintCell(const TCell& r, NScheme::TTypeId typeId, const NScheme::TTypeRegistry& typeRegistry);
+void DbgPrintValue(TString&, const TCell&, NScheme::TTypeInfo typeInfo);
+TString DbgPrintCell(const TCell& r, NScheme::TTypeInfo typeInfo, const NScheme::TTypeRegistry& typeRegistry);
TString DbgPrintTuple(const TDbTupleRef& row, const NScheme::TTypeRegistry& typeRegistry);
}
diff --git a/ydb/core/scheme/scheme_tablecell_ut.cpp b/ydb/core/scheme/scheme_tablecell_ut.cpp
index 5bd4a27ab95..0b01da964b3 100644
--- a/ydb/core/scheme/scheme_tablecell_ut.cpp
+++ b/ydb/core/scheme/scheme_tablecell_ut.cpp
@@ -9,6 +9,9 @@ Y_UNIT_TEST_SUITE(Scheme) {
using namespace NKikimr;
+ namespace NTypeIds = NScheme::NTypeIds;
+ using TTypeInfo = NScheme::TTypeInfo;
+
Y_UNIT_TEST(EmptyOwnedCellVec) {
TOwnedCellVec empty;
UNIT_ASSERT_VALUES_EQUAL(empty.size(), 0u);
@@ -68,32 +71,32 @@ Y_UNIT_TEST_SUITE(Scheme) {
double doubleVal = -0.0025;
TVector<TCell> cells;
- TVector<NScheme::TTypeId> types;
+ TVector<TTypeInfo> types;
cells.push_back(TCell((const char*)&doubleVal, sizeof(doubleVal)));
- types.push_back(NScheme::NTypeIds::Double);
+ types.push_back(TTypeInfo(NTypeIds::Double));
cells.push_back(TCell(smallStrVal, sizeof(smallStrVal)));
- types.push_back(NScheme::NTypeIds::String);
+ types.push_back(TTypeInfo(NTypeIds::String));
cells.push_back(TCell());
- types.push_back(NScheme::NTypeIds::Utf8);
+ types.push_back(TTypeInfo(NTypeIds::Utf8));
cells.push_back(TCell(smallStrVal, sizeof(smallStrVal)));
- types.push_back(NScheme::NTypeIds::Utf8);
+ types.push_back(TTypeInfo(NTypeIds::Utf8));
cells.push_back(TCell((const char*)&floatVal, sizeof(floatVal)));
- types.push_back(NScheme::NTypeIds::Float);
+ types.push_back(TTypeInfo(NTypeIds::Float));
cells.push_back(TCell());
- types.push_back(NScheme::NTypeIds::Decimal);
+ types.push_back(TTypeInfo(NTypeIds::Decimal));
cells.push_back(TCell((const char*)&intVal, sizeof(ui64)));
- types.push_back(NScheme::NTypeIds::Uint64);
+ types.push_back(TTypeInfo(NTypeIds::Uint64));
cells.push_back(TCell());
- types.push_back(NScheme::NTypeIds::Decimal);
+ types.push_back(TTypeInfo(NTypeIds::Decimal));
cells.push_back(TCell());
- types.push_back(NScheme::NTypeIds::Uint8);
+ types.push_back(TTypeInfo(NTypeIds::Uint8));
cells.push_back(TCell(bigStrVal, sizeof(bigStrVal)));
- types.push_back(NScheme::NTypeIds::Utf8);
+ types.push_back(TTypeInfo(NTypeIds::Utf8));
cells.push_back(TCell());
- types.push_back(NScheme::NTypeIds::Double);
+ types.push_back(TTypeInfo(NTypeIds::Double));
cells.push_back(TCell((const char*)&intVal, sizeof(i32)));
- types.push_back(NScheme::NTypeIds::Int32);
+ types.push_back(TTypeInfo(NTypeIds::Int32));
TSerializedCellVec vec(TSerializedCellVec::Serialize(cells));
@@ -210,10 +213,13 @@ Y_UNIT_TEST_SUITE(Scheme) {
/**
* CompareOrder test for cell1 < cell2 < cell3 given a type id
*/
- void DoTestCompareOrder(const TCell& cell1, const TCell& cell2, const TCell& cell3, NScheme::TTypeId type) {
+ void DoTestCompareOrder(const TCell& cell1, const TCell& cell2, const TCell& cell3, NScheme::TTypeId typeId) {
TCell nullCell;
- NScheme::TTypeIdOrder typeDescending(type, NScheme::EOrder::Descending);
+ NScheme::TTypeIdOrder typeIdDescending(typeId, NScheme::EOrder::Descending);
+
+ NScheme::TTypeInfo type(typeId);
+ NScheme::TTypeInfoOrder typeDescending(typeIdDescending);
// NULL is always equal to itself, both ascending and descending
UNIT_ASSERT_EQUAL(CompareTypedCells(nullCell, nullCell, type), 0);
@@ -286,38 +292,39 @@ Y_UNIT_TEST_SUITE(Scheme) {
TArrayRef<const NScheme::TTypeId> yqlIds(NScheme::NTypeIds::YqlIds);
for (NScheme::TTypeId typeId : yqlIds) {
+ NScheme::TTypeInfo typeInfo(typeId);
switch (typeId) {
case NScheme::NTypeIds::Int32:
- GetValueHash(typeId, TCell(charArr, sizeof(i32)));
- CompareTypedCells(TCell(charArr, sizeof(i32)), TCell(charArr, sizeof(i32)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(i32)));
+ CompareTypedCells(TCell(charArr, sizeof(i32)), TCell(charArr, sizeof(i32)), typeInfo);
break;
case NScheme::NTypeIds::Uint32:
- GetValueHash(typeId, TCell(charArr, sizeof(ui32)));
- CompareTypedCells(TCell(charArr, sizeof(ui32)), TCell(charArr, sizeof(ui32)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(ui32)));
+ CompareTypedCells(TCell(charArr, sizeof(ui32)), TCell(charArr, sizeof(ui32)), typeInfo);
break;
case NScheme::NTypeIds::Int64:
- GetValueHash(typeId, TCell(charArr, sizeof(i64)));
- CompareTypedCells(TCell(charArr, sizeof(i64)), TCell(charArr, sizeof(i64)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(i64)));
+ CompareTypedCells(TCell(charArr, sizeof(i64)), TCell(charArr, sizeof(i64)), typeInfo);
break;
case NScheme::NTypeIds::Uint64:
- GetValueHash(typeId, TCell(charArr, sizeof(ui64)));
- CompareTypedCells(TCell(charArr, sizeof(ui64)), TCell(charArr, sizeof(ui64)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(ui64)));
+ CompareTypedCells(TCell(charArr, sizeof(ui64)), TCell(charArr, sizeof(ui64)), typeInfo);
break;
case NScheme::NTypeIds::Byte:
- GetValueHash(typeId, TCell(charArr, sizeof(ui8)));
- CompareTypedCells(TCell(charArr, sizeof(ui8)), TCell(charArr, sizeof(ui8)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(ui8)));
+ CompareTypedCells(TCell(charArr, sizeof(ui8)), TCell(charArr, sizeof(ui8)), typeInfo);
break;
case NScheme::NTypeIds::Bool:
- GetValueHash(typeId, TCell(charArr, sizeof(ui8)));
- CompareTypedCells(TCell(charArr, sizeof(ui8)), TCell(charArr, sizeof(ui8)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(ui8)));
+ CompareTypedCells(TCell(charArr, sizeof(ui8)), TCell(charArr, sizeof(ui8)), typeInfo);
break;
case NScheme::NTypeIds::Double:
- GetValueHash(typeId, TCell(charArr, sizeof(double)));
- CompareTypedCells(TCell(charArr, sizeof(double)), TCell(charArr, sizeof(double)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(double)));
+ CompareTypedCells(TCell(charArr, sizeof(double)), TCell(charArr, sizeof(double)), typeInfo);
break;
case NScheme::NTypeIds::Float:
- GetValueHash(typeId, TCell(charArr, sizeof(float)));
- CompareTypedCells(TCell(charArr, sizeof(float)), TCell(charArr, sizeof(float)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(float)));
+ CompareTypedCells(TCell(charArr, sizeof(float)), TCell(charArr, sizeof(float)), typeInfo);
break;
case NScheme::NTypeIds::String:
case NScheme::NTypeIds::Utf8:
@@ -325,28 +332,28 @@ Y_UNIT_TEST_SUITE(Scheme) {
case NScheme::NTypeIds::Json:
case NScheme::NTypeIds::JsonDocument:
case NScheme::NTypeIds::DyNumber:
- GetValueHash(typeId, TCell(charArr, 30));
- CompareTypedCells(TCell(charArr, 30), TCell(charArr, 30), typeId);
+ GetValueHash(typeInfo, TCell(charArr, 30));
+ CompareTypedCells(TCell(charArr, 30), TCell(charArr, 30), typeInfo);
break;
case NScheme::NTypeIds::Decimal:
- GetValueHash(typeId, TCell(charArr, sizeof(ui64) * 2));
- CompareTypedCells(TCell(charArr, sizeof(ui64) * 2), TCell(charArr, sizeof(ui64) * 2), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(ui64) * 2));
+ CompareTypedCells(TCell(charArr, sizeof(ui64) * 2), TCell(charArr, sizeof(ui64) * 2), typeInfo);
break;
case NScheme::NTypeIds::Date:
- GetValueHash(typeId, TCell(charArr, sizeof(ui16)));
- CompareTypedCells(TCell(charArr, sizeof(ui16)), TCell(charArr, sizeof(ui16)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(ui16)));
+ CompareTypedCells(TCell(charArr, sizeof(ui16)), TCell(charArr, sizeof(ui16)), typeInfo);
break;
case NScheme::NTypeIds::Datetime:
- GetValueHash(typeId, TCell(charArr, sizeof(ui32)));
- CompareTypedCells(TCell(charArr, sizeof(ui32)), TCell(charArr, sizeof(ui32)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(ui32)));
+ CompareTypedCells(TCell(charArr, sizeof(ui32)), TCell(charArr, sizeof(ui32)), typeInfo);
break;
case NScheme::NTypeIds::Timestamp:
- GetValueHash(typeId, TCell(charArr, sizeof(ui64)));
- CompareTypedCells(TCell(charArr, sizeof(ui64)), TCell(charArr, sizeof(ui64)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(ui64)));
+ CompareTypedCells(TCell(charArr, sizeof(ui64)), TCell(charArr, sizeof(ui64)), typeInfo);
break;
case NScheme::NTypeIds::Interval:
- GetValueHash(typeId, TCell(charArr, sizeof(i64)));
- CompareTypedCells(TCell(charArr, sizeof(i64)), TCell(charArr, sizeof(i64)), typeId);
+ GetValueHash(typeInfo, TCell(charArr, sizeof(i64)));
+ CompareTypedCells(TCell(charArr, sizeof(i64)), TCell(charArr, sizeof(i64)), typeInfo);
break;
default:
UNIT_FAIL("undefined YQL type");
diff --git a/ydb/core/scheme/scheme_tabledefs.cpp b/ydb/core/scheme/scheme_tabledefs.cpp
index 672957e1fcc..e1d77d8dfa8 100644
--- a/ydb/core/scheme/scheme_tabledefs.cpp
+++ b/ydb/core/scheme/scheme_tabledefs.cpp
@@ -2,11 +2,11 @@
namespace NKikimr {
-bool TTableRange::IsEmptyRange(TConstArrayRef<const NScheme::TTypeId> cellTypeIds) const {
+bool TTableRange::IsEmptyRange(TConstArrayRef<const NScheme::TTypeInfo> types) const {
if (Point)
return false;
- const int compares = CompareBorders<true, false>(To, From, InclusiveTo, InclusiveFrom, cellTypeIds);
+ const int compares = CompareBorders<true, false>(To, From, InclusiveTo, InclusiveFrom, types);
return (compares < 0);
}
@@ -74,9 +74,9 @@ const char* TTableRange::IsAmbiguousReason(size_t keyColumnsCount) const noexcep
return nullptr;
}
-bool TSerializedTableRange::IsEmpty(TConstArrayRef<NScheme::TTypeId> type) const
+bool TSerializedTableRange::IsEmpty(TConstArrayRef<NScheme::TTypeInfo> types) const
{
- auto cmp = CompareBorders<true, false>(To.GetCells(), From.GetCells(), ToInclusive, FromInclusive, type);
+ auto cmp = CompareBorders<true, false>(To.GetCells(), From.GetCells(), ToInclusive, FromInclusive, types);
return (cmp < 0);
}
diff --git a/ydb/core/scheme/scheme_tabledefs.h b/ydb/core/scheme/scheme_tabledefs.h
index d7206c301f1..85ca8f929a0 100644
--- a/ydb/core/scheme/scheme_tabledefs.h
+++ b/ydb/core/scheme/scheme_tabledefs.h
@@ -179,7 +179,7 @@ public:
}
}
- bool IsEmptyRange(TConstArrayRef<const NScheme::TTypeId> cellTypeIds) const;
+ bool IsEmptyRange(TConstArrayRef<const NScheme::TTypeInfo> types) const;
bool IsFullRange(ui32 columnsCount) const;
bool IsAmbiguous(size_t keyColumnsCount) const noexcept {
@@ -248,7 +248,7 @@ public:
}
}
- bool IsEmpty(TConstArrayRef<NScheme::TTypeId> type) const;
+ bool IsEmpty(TConstArrayRef<NScheme::TTypeInfo> types) const;
TTableRange ToTableRange() const {
return TTableRange(From.GetCells(), FromInclusive, To.GetCells(), ToInclusive, Point);
@@ -297,7 +297,7 @@ int ComparePointAndRange(const TConstArrayRef<TCell>& point, const TTableRange&
// of compared borders (or in other words upper range borders are compared).
template<bool FirstLeft, bool SecondLeft>
int CompareBorders(TConstArrayRef<TCell> first, TConstArrayRef<TCell> second, bool inclusiveFirst, bool inclusiveSecond,
- TConstArrayRef<NScheme::TTypeId> cellTypes)
+ TConstArrayRef<NScheme::TTypeInfo> cellTypes)
{
const ui32 firstSize = first.size();
const ui32 secondSize = second.size();
@@ -346,7 +346,7 @@ int CompareBorders(TConstArrayRef<TCell> first, TConstArrayRef<TCell> second, bo
/// @note returns 0 on any overlap
inline int CompareRanges(const TTableRange& rangeX, const TTableRange& rangeY,
- const TConstArrayRef<NScheme::TTypeId> types)
+ const TConstArrayRef<NScheme::TTypeInfo> types)
{
Y_VERIFY(!rangeX.Point);
Y_VERIFY(!rangeY.Point);
@@ -368,8 +368,8 @@ inline int CompareRanges(const TTableRange& rangeX, const TTableRange& rangeY,
inline bool CheckRangesOverlap(
const TTableRange& rangeX,
const TTableRange& rangeY,
- const TConstArrayRef<NScheme::TTypeId> typesX,
- const TConstArrayRef<NScheme::TTypeId> typesY)
+ const TConstArrayRef<NScheme::TTypeInfo> typesX,
+ const TConstArrayRef<NScheme::TTypeInfo> typesY)
{
if (rangeX.Point && rangeY.Point) {
// Works like ComparePointKeys
@@ -635,7 +635,7 @@ public:
struct TColumnOp {
ui32 Column;
EColumnOperation Operation;
- ui32 ExpectedType;
+ NScheme::TTypeInfo ExpectedType;
ui32 InplaceUpdateMode;
ui32 ImmediateUpdateSize;
};
@@ -643,7 +643,7 @@ public:
// one column info (out)
struct TColumnInfo {
ui32 Column;
- ui32 Type;
+ NScheme::TTypeInfo Type;
ui32 AllowInplaceMode;
EStatus Status;
};
@@ -679,7 +679,7 @@ public:
const TOwnedTableRange Range;
const TRangeLimits RangeLimits;
const ERowOperation RowOperation;
- const TVector<NScheme::TTypeId> KeyColumnTypes; // For SelectRange there can be not full key
+ const TVector<NScheme::TTypeInfo> KeyColumnTypes; // For SelectRange there can be not full key
const TVector<TColumnOp> Columns;
const bool Reverse;
TReadTarget ReadTarget; // Set for Read row operation
diff --git a/ydb/core/scheme/scheme_type_info.cpp b/ydb/core/scheme/scheme_type_info.cpp
new file mode 100644
index 00000000000..4d560fdbad1
--- /dev/null
+++ b/ydb/core/scheme/scheme_type_info.cpp
@@ -0,0 +1,16 @@
+#include "scheme_type_info.h"
+
+#include <ydb/public/lib/scheme_types/scheme_type_id.h>
+#include <ydb/library/yql/utils/pg_types.h>
+
+namespace NKikimr::NScheme {
+
+const char* TypeName(const TTypeInfo typeInfo) {
+ if (typeInfo.GetTypeId() == NScheme::NTypeIds::Pg) {
+ return NPg::PgTypeNameFromTypeDesc(typeInfo.GetTypeDesc());
+ } else {
+ return TypeName(typeInfo.GetTypeId());
+ }
+}
+
+} // namespace NKikimr::NScheme
diff --git a/ydb/core/scheme/scheme_type_info.h b/ydb/core/scheme/scheme_type_info.h
new file mode 100644
index 00000000000..f36f98112a6
--- /dev/null
+++ b/ydb/core/scheme/scheme_type_info.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#include <ydb/core/scheme_types/scheme_type_info.h>
+
+namespace NKikimr::NScheme {
+
+const char* TypeName(const TTypeInfo typeInfo);
+
+} // NKikimr::NScheme
diff --git a/ydb/core/scheme/scheme_type_order.h b/ydb/core/scheme/scheme_type_order.h
index 2c1df0066d7..488ed7226f5 100644
--- a/ydb/core/scheme/scheme_type_order.h
+++ b/ydb/core/scheme/scheme_type_order.h
@@ -1,6 +1,7 @@
#pragma once
#include "scheme_type_id.h"
+#include "scheme_type_info.h"
namespace NKikimr {
namespace NScheme {
@@ -50,5 +51,48 @@ private:
ui16 Descending_ : 1;
};
+struct TTypeInfoOrder {
+ TTypeInfoOrder()
+ {}
+
+ TTypeInfoOrder(TTypeIdOrder typeIdOrder, void* typeDesc = {})
+ : TypeIdOrder(typeIdOrder)
+ , TypeDesc(typeDesc)
+ {}
+
+ TTypeInfoOrder(TTypeInfo typeInfo, EOrder order = EOrder::Ascending)
+ : TypeIdOrder(typeInfo.GetTypeId(), order)
+ , TypeDesc(typeInfo.GetTypeDesc())
+ {}
+
+ TTypeId GetTypeId() const {
+ return TypeIdOrder.GetTypeId();
+ }
+
+ EOrder GetOrder() const {
+ return TypeIdOrder.GetOrder();
+ }
+
+ bool IsAscending() const {
+ return TypeIdOrder.IsAscending();
+ }
+
+ bool IsDescending() const {
+ return TypeIdOrder.IsDescending();
+ }
+
+ void* GetTypeDesc() const {
+ return TypeDesc;
+ }
+
+ TTypeInfo ToTypeInfo() const {
+ return TTypeInfo(GetTypeId(), GetTypeDesc());
+ }
+
+private:
+ TTypeIdOrder TypeIdOrder;
+ void* TypeDesc = {};
+};
+
}
}
diff --git a/ydb/core/scheme/scheme_types_defs.cpp b/ydb/core/scheme/scheme_types_defs.cpp
index 8507a7d7df8..9014db47f00 100644
--- a/ydb/core/scheme/scheme_types_defs.cpp
+++ b/ydb/core/scheme/scheme_types_defs.cpp
@@ -15,10 +15,10 @@ namespace NNames {
::TString result;
if (value) {
- const ui32 fixedSize = GetFixedSize(value.Type());
+ const ui32 fixedSize = GetFixedSize(value.TypeInfo());
if (fixedSize > 0 && value.Size() != fixedSize) {
result = ::TStringBuilder()
- << "Value with declared type " << ui16(value.Type())
+ << "Value with declared type " << NScheme::TypeName(value.TypeInfo())
<< " has unexpected size " << value.Size()
<< " (expected " << fixedSize << ")";
}
@@ -27,14 +27,14 @@ namespace NNames {
return result;
}
- ::TString HasUnexpectedValueSize(const ::NKikimr::TCell& value, TTypeId typeId) {
+ ::TString HasUnexpectedValueSize(const ::NKikimr::TCell& value, TTypeInfo typeInfo) {
::TString result;
if (value) {
- const ui32 fixedSize = GetFixedSize(typeId);
+ const ui32 fixedSize = GetFixedSize(typeInfo);
if (fixedSize > 0 && value.Size() != fixedSize) {
result = ::TStringBuilder()
- << "Cell with declared type " << ui16(typeId)
+ << "Cell with declared type " << NScheme::TypeName(typeInfo)
<< " has unexpected size " << value.Size()
<< " (expected " << fixedSize << ")";
}
diff --git a/ydb/core/scheme/scheme_types_defs.h b/ydb/core/scheme/scheme_types_defs.h
index a0fd0f0e019..61373b59f77 100644
--- a/ydb/core/scheme/scheme_types_defs.h
+++ b/ydb/core/scheme/scheme_types_defs.h
@@ -4,6 +4,7 @@
#include <library/cpp/actors/core/actorid.h>
#include <ydb/core/scheme_types/scheme_types_defs.h>
+#include <ydb/library/yql/utils/pg_types.h>
#include <util/stream/output.h>
@@ -53,11 +54,13 @@ class TStepOrderId : public IIntegerPair<ui64, ui64, NTypeIds::StepOrderId, NNam
////////////////////////////////////////////////////////
-inline ui32 GetFixedSize(NKikimr::NScheme::TTypeId typeId) {
- switch (typeId) {
+inline ui32 GetFixedSize(TTypeInfo typeInfo) {
+ switch (typeInfo.GetTypeId()) {
#define KIKIMR_TYPE_MACRO(typeEnum, typeType, ...) case NTypeIds::typeEnum: return typeType::GetFixedSize();
KIKIMR_FOREACH_TYPE(KIKIMR_TYPE_MACRO)
#undef KIKIMR_TYPE_MACRO
+ case NTypeIds::Pg:
+ return NPg::TypeDescGetTypeLen(typeInfo.GetTypeDesc());
default:
return 0;
}
@@ -75,7 +78,7 @@ inline ui32 GetFixedSize(NKikimr::NScheme::TTypeId typeId) {
*
* Returns empty string on success or an error description in case of failure
*/
-::TString HasUnexpectedValueSize(const ::NKikimr::TCell& value, TTypeId typeId);
+::TString HasUnexpectedValueSize(const ::NKikimr::TCell& value, TTypeInfo typeInfo);
} // namespace NScheme
} // namespace NKikimr
diff --git a/ydb/core/scheme/scheme_types_proto.cpp b/ydb/core/scheme/scheme_types_proto.cpp
new file mode 100644
index 00000000000..02bfbda2551
--- /dev/null
+++ b/ydb/core/scheme/scheme_types_proto.cpp
@@ -0,0 +1,26 @@
+#include "scheme_types_proto.h"
+#include "scheme_tablecell.h"
+
+namespace NKikimr::NScheme {
+
+TProtoColumnType ProtoColumnTypeFromTypeInfo(const TTypeInfo typeInfo) {
+ TProtoColumnType columnType;
+ columnType.TypeId = (ui32)typeInfo.GetTypeId();
+ if (typeInfo.GetTypeId() == NTypeIds::Pg) {
+ Y_VERIFY(typeInfo.GetTypeDesc(), "no pg type descriptor");
+ columnType.TypeInfo = NKikimrProto::TTypeInfo();
+ columnType.TypeInfo->SetPgTypeId(NPg::PgTypeIdFromTypeDesc(typeInfo.GetTypeDesc()));
+ }
+ return columnType;
+}
+
+TTypeInfo TypeInfoFromProtoColumnType(ui32 typeId, const NKikimrProto::TTypeInfo* typeInfo) {
+ auto type = (TTypeId)typeId;
+ if (type == NTypeIds::Pg) {
+ Y_VERIFY(typeInfo);
+ return TTypeInfo(type, NPg::TypeDescFromPgTypeId(typeInfo->GetPgTypeId()));
+ }
+ return TTypeInfo(type);
+}
+
+} // namespace NKikimr::NScheme
diff --git a/ydb/core/scheme/scheme_types_proto.h b/ydb/core/scheme/scheme_types_proto.h
new file mode 100644
index 00000000000..43c8789579c
--- /dev/null
+++ b/ydb/core/scheme/scheme_types_proto.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include <ydb/core/scheme_types/scheme_type_info.h>
+#include <ydb/core/protos/type_info.pb.h>
+
+namespace NKikimr::NScheme {
+
+struct TProtoColumnType {
+ ui32 TypeId = 0;
+ std::optional<NKikimrProto::TTypeInfo> TypeInfo;
+};
+
+TProtoColumnType ProtoColumnTypeFromTypeInfo(const TTypeInfo typeInfo);
+
+TTypeInfo TypeInfoFromProtoColumnType(ui32 typeId, const NKikimrProto::TTypeInfo* typeInfo);
+
+} // namespace NKikimr::NScheme
diff --git a/ydb/core/scheme/ut/CMakeLists.darwin.txt b/ydb/core/scheme/ut/CMakeLists.darwin.txt
index b4acf0aa966..73d0828c73f 100644
--- a/ydb/core/scheme/ut/CMakeLists.darwin.txt
+++ b/ydb/core/scheme/ut/CMakeLists.darwin.txt
@@ -8,6 +8,9 @@
add_executable(ydb-core-scheme-ut)
+target_compile_options(ydb-core-scheme-ut PRIVATE
+ -DUSE_CURRENT_UDF_ABI_VERSION
+)
target_include_directories(ydb-core-scheme-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/scheme
)
@@ -17,6 +20,8 @@ target_link_libraries(ydb-core-scheme-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-core-scheme
+ udf-service-stub
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-scheme-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/scheme/ut/CMakeLists.linux.txt b/ydb/core/scheme/ut/CMakeLists.linux.txt
index 010617282f5..6061fdebdb9 100644
--- a/ydb/core/scheme/ut/CMakeLists.linux.txt
+++ b/ydb/core/scheme/ut/CMakeLists.linux.txt
@@ -8,6 +8,9 @@
add_executable(ydb-core-scheme-ut)
+target_compile_options(ydb-core-scheme-ut PRIVATE
+ -DUSE_CURRENT_UDF_ABI_VERSION
+)
target_include_directories(ydb-core-scheme-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/scheme
)
@@ -19,6 +22,8 @@ target_link_libraries(ydb-core-scheme-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-core-scheme
+ udf-service-stub
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-scheme-ut PRIVATE
-ldl
diff --git a/ydb/core/scheme_types/scheme_raw_type_value.h b/ydb/core/scheme_types/scheme_raw_type_value.h
index 1cb0946b6d7..4dea1ceda4f 100644
--- a/ydb/core/scheme_types/scheme_raw_type_value.h
+++ b/ydb/core/scheme_types/scheme_raw_type_value.h
@@ -1,6 +1,6 @@
#pragma once
-#include <ydb/public/lib/scheme_types/scheme_type_id.h>
+#include "scheme_type_info.h"
#include <util/generic/array_ref.h>
#include <util/string/builder.h>
@@ -17,23 +17,33 @@ public:
, ValueType(0)
{}
- TRawTypeValue(TArrayRef<const char> ref, NScheme::TTypeId vtype)
+ TRawTypeValue(const void* buf, ui32 bufSize, NScheme::TTypeInfo vtype)
+ : Buffer(buf)
+ , BufferSize(bufSize)
+ , ValueType(vtype)
+ {
+ Y_VERIFY_DEBUG(!buf || vtype.GetTypeId() != 0);
+ }
+
+ TRawTypeValue(TArrayRef<const char> ref, NScheme::TTypeInfo vtype)
: TRawTypeValue((void*)ref.data(), ref.size(), vtype)
{
+ }
+ TRawTypeValue(const void* buf, ui32 bufSize, NScheme::TTypeId typeId)
+ : TRawTypeValue(buf, bufSize, NScheme::TTypeInfo(typeId))
+ {
}
- TRawTypeValue(const void* buf, ui32 bufSize, NScheme::TTypeId vtype)
- : Buffer(buf)
- , BufferSize(bufSize)
- , ValueType(vtype)
+ TRawTypeValue(TArrayRef<const char> ref, NScheme::TTypeId typeId)
+ : TRawTypeValue((void*)ref.data(), ref.size(), NScheme::TTypeInfo(typeId))
{
- Y_VERIFY_DEBUG(!buf || vtype);
}
const void* Data() const { return Buffer; }
ui32 Size() const { return BufferSize; }
- NScheme::TTypeId Type() const { return ValueType; }
+ NScheme::TTypeId Type() const { return ValueType.GetTypeId(); }
+ NScheme::TTypeInfo TypeInfo() const { return ValueType; }
// we must distinguish empty raw type value (nothing, buffer == nullptr)
// and zero-length string (value exists, but zero-length)
@@ -42,7 +52,8 @@ public:
TString ToString() const {
TStringBuilder builder;
- builder << "(type:" << ValueType;
+ // TODO: support pg types
+ builder << "(type:" << ValueType.GetTypeId();
if (!IsEmpty()) {
builder << ", value:" << TString((const char*)Buffer, BufferSize).Quote();
}
@@ -61,7 +72,7 @@ public:
private:
const void* Buffer;
ui32 BufferSize;
- NScheme::TTypeId ValueType;
+ NScheme::TTypeInfo ValueType;
};
} // namspace NKikimr
diff --git a/ydb/core/scheme_types/scheme_type_info.h b/ydb/core/scheme_types/scheme_type_info.h
new file mode 100644
index 00000000000..86e8b1cedd1
--- /dev/null
+++ b/ydb/core/scheme_types/scheme_type_info.h
@@ -0,0 +1,45 @@
+#pragma once
+
+#include <ydb/public/lib/scheme_types/scheme_type_id.h>
+
+namespace NKikimr::NScheme {
+
+class TTypeInfo {
+public:
+ constexpr TTypeInfo()
+ {}
+
+ explicit constexpr TTypeInfo(TTypeId typeId, void* typeDesc = {})
+ : TypeId(typeId)
+ , TypeDesc(typeDesc)
+ {
+ if (TypeId == NTypeIds::Pg) {
+ Y_VERIFY(TypeDesc);
+ } else {
+ Y_VERIFY(!TypeDesc);
+ }
+ }
+
+ bool operator==(const TTypeInfo& other) const {
+ return TypeId == other.TypeId && TypeDesc == other.TypeDesc;
+ }
+
+ bool operator!=(const TTypeInfo& other) const {
+ return !operator==(other);
+ }
+
+ TTypeId GetTypeId() const {
+ return TypeId;
+ }
+
+ void* GetTypeDesc() const {
+ return TypeDesc;
+ }
+
+private:
+ TTypeId TypeId = 0;
+ void* TypeDesc = {};
+};
+
+} // namespace NKikimr::NScheme
+
diff --git a/ydb/core/scheme_types/scheme_types_defs.h b/ydb/core/scheme_types/scheme_types_defs.h
index bb06b097023..590f218056e 100644
--- a/ydb/core/scheme_types/scheme_types_defs.h
+++ b/ydb/core/scheme_types/scheme_types_defs.h
@@ -49,7 +49,7 @@ public:
}
TTypeId GetTypeId() const override { return TypeId; }
static TRawTypeValue ToRawTypeValue(const T& value) {
- return TRawTypeValue((void*)&value, sizeof(T), TypeId);
+ return TRawTypeValue((void*)&value, sizeof(T), TTypeInfo(TypeId));
}
static const char* TypeName() {
@@ -151,7 +151,7 @@ public:
}
static TRawTypeValue ToRawTypeValue(const ::TString& value) {
- return TRawTypeValue((const void*)value.data(), value.size(), TypeId);
+ return TRawTypeValue((const void*)value.data(), value.size(), TTypeInfo(TypeId));
}
};
@@ -198,7 +198,7 @@ public:
static TRawTypeValue ToRawTypeValue(const ::TString& value) {
Y_VERIFY(value.size() <= MaxSize);
- return TRawTypeValue((const void*)value.data(), value.size(), TypeId);
+ return TRawTypeValue((const void*)value.data(), value.size(), TTypeInfo(TypeId));
}
};
diff --git a/ydb/core/security/ut/CMakeLists.darwin.txt b/ydb/core/security/ut/CMakeLists.darwin.txt
index 52dfdab20d4..f2c4b7a21a5 100644
--- a/ydb/core/security/ut/CMakeLists.darwin.txt
+++ b/ydb/core/security/ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-security-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-core-security
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-security-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/security/ut/CMakeLists.linux.txt b/ydb/core/security/ut/CMakeLists.linux.txt
index 28829eb9f01..83b99c49ad4 100644
--- a/ydb/core/security/ut/CMakeLists.linux.txt
+++ b/ydb/core/security/ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-security-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-core-security
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-security-ut PRIVATE
-ldl
diff --git a/ydb/core/sys_view/common/schema.cpp b/ydb/core/sys_view/common/schema.cpp
index 88f852e168c..78d7c1bf81a 100644
--- a/ydb/core/sys_view/common/schema.cpp
+++ b/ydb/core/sys_view/common/schema.cpp
@@ -114,7 +114,7 @@ private:
static void Fill(TSchema& schema) {
schema.Columns[Column::ColumnId] = TSysTables::TTableColumnInfo(
Table::template TableColumns<Column>::GetColumnName(),
- Column::ColumnId, Column::ColumnType, -1);
+ Column::ColumnId, NScheme::TTypeInfo(Column::ColumnType), -1);
}
};
diff --git a/ydb/core/sys_view/common/schema.h b/ydb/core/sys_view/common/schema.h
index 77d330f2563..11954088d32 100644
--- a/ydb/core/sys_view/common/schema.h
+++ b/ydb/core/sys_view/common/schema.h
@@ -474,7 +474,7 @@ public:
struct TSchema {
THashMap<NTable::TTag, TSysTables::TTableColumnInfo> Columns;
- TVector<NScheme::TTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
};
virtual bool IsSystemViewPath(const TVector<TString>& path, TSystemViewPath& sysViewPath) const = 0;
diff --git a/ydb/core/sys_view/partition_stats/ut/CMakeLists.darwin.txt b/ydb/core/sys_view/partition_stats/ut/CMakeLists.darwin.txt
index f82873c42b4..7a83cc82ab9 100644
--- a/ydb/core/sys_view/partition_stats/ut/CMakeLists.darwin.txt
+++ b/ydb/core/sys_view/partition_stats/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-sys_view-partition_stats-ut PUBLIC
cpp-testing-unittest_main
core-sys_view-partition_stats
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-sys_view-partition_stats-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/sys_view/partition_stats/ut/CMakeLists.linux.txt b/ydb/core/sys_view/partition_stats/ut/CMakeLists.linux.txt
index 133257735a1..d9bae3acf07 100644
--- a/ydb/core/sys_view/partition_stats/ut/CMakeLists.linux.txt
+++ b/ydb/core/sys_view/partition_stats/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-sys_view-partition_stats-ut PUBLIC
cpp-testing-unittest_main
core-sys_view-partition_stats
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-sys_view-partition_stats-ut PRIVATE
-ldl
diff --git a/ydb/core/sys_view/query_stats/ut/CMakeLists.darwin.txt b/ydb/core/sys_view/query_stats/ut/CMakeLists.darwin.txt
index 3d0204c86ed..09fba86f255 100644
--- a/ydb/core/sys_view/query_stats/ut/CMakeLists.darwin.txt
+++ b/ydb/core/sys_view/query_stats/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-sys_view-query_stats-ut PUBLIC
cpp-testing-unittest_main
core-sys_view-query_stats
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-sys_view-query_stats-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/sys_view/query_stats/ut/CMakeLists.linux.txt b/ydb/core/sys_view/query_stats/ut/CMakeLists.linux.txt
index 6a4be7db09d..b0ad07f15a5 100644
--- a/ydb/core/sys_view/query_stats/ut/CMakeLists.linux.txt
+++ b/ydb/core/sys_view/query_stats/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-sys_view-query_stats-ut PUBLIC
cpp-testing-unittest_main
core-sys_view-query_stats
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-sys_view-query_stats-ut PRIVATE
-ldl
diff --git a/ydb/core/sys_view/storage/base.h b/ydb/core/sys_view/storage/base.h
index 649d08482c1..47945cbbcf7 100644
--- a/ydb/core/sys_view/storage/base.h
+++ b/ydb/core/sys_view/storage/base.h
@@ -163,7 +163,7 @@ namespace NKikimr::NSysView {
const NProtoBuf::Descriptor *desc = m->GetDescriptor();
const NProtoBuf::FieldDescriptor *fdesc = desc->FindFieldByNumber(*it);
if (std::next(it) == path.end()) { // terminal entry
- cells.push_back(ExtractCell(m, fdesc, column.Type));
+ cells.push_back(ExtractCell(m, fdesc, column.Type.GetTypeId()));
} else { // submessage
Y_VERIFY(fdesc->type() == NProtoBuf::FieldDescriptor::TYPE_MESSAGE);
m = &m->GetReflection()->GetMessage(*m, fdesc);
diff --git a/ydb/core/sys_view/ut_kqp/CMakeLists.darwin.txt b/ydb/core/sys_view/ut_kqp/CMakeLists.darwin.txt
index f4db6ac0686..7331e727891 100644
--- a/ydb/core/sys_view/ut_kqp/CMakeLists.darwin.txt
+++ b/ydb/core/sys_view/ut_kqp/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-sys_view-ut_kqp PUBLIC
cpp-testing-unittest
cpp-yson-node
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
cpp-client-draft
)
target_link_options(ydb-core-sys_view-ut_kqp PRIVATE
diff --git a/ydb/core/sys_view/ut_kqp/CMakeLists.linux.txt b/ydb/core/sys_view/ut_kqp/CMakeLists.linux.txt
index 60cbd08188a..4e7d32c305e 100644
--- a/ydb/core/sys_view/ut_kqp/CMakeLists.linux.txt
+++ b/ydb/core/sys_view/ut_kqp/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-sys_view-ut_kqp PUBLIC
cpp-testing-unittest
cpp-yson-node
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
cpp-client-draft
)
target_link_options(ydb-core-sys_view-ut_kqp PRIVATE
diff --git a/ydb/core/tablet/ut/CMakeLists.darwin.txt b/ydb/core/tablet/ut/CMakeLists.darwin.txt
index 6b9c7381921..c811e83b0de 100644
--- a/ydb/core/tablet/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tablet/ut/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tablet-ut PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tablet-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tablet/ut/CMakeLists.linux.txt b/ydb/core/tablet/ut/CMakeLists.linux.txt
index 68814cb1c61..aae920bc0e5 100644
--- a/ydb/core/tablet/ut/CMakeLists.linux.txt
+++ b/ydb/core/tablet/ut/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tablet-ut PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tablet-ut PRIVATE
-ldl
diff --git a/ydb/core/tablet_flat/CMakeLists.txt b/ydb/core/tablet_flat/CMakeLists.txt
index 05dd798c54b..3fe11bbf833 100644
--- a/ydb/core/tablet_flat/CMakeLists.txt
+++ b/ydb/core/tablet_flat/CMakeLists.txt
@@ -10,6 +10,7 @@ add_subdirectory(protos)
add_subdirectory(test)
add_subdirectory(ut)
add_subdirectory(ut_large)
+add_subdirectory(ut_pg)
add_library(ydb-core-tablet_flat)
target_compile_options(ydb-core-tablet_flat PRIVATE
diff --git a/ydb/core/tablet_flat/flat_cxx_database.h b/ydb/core/tablet_flat/flat_cxx_database.h
index dc3406f59c9..93f290712a3 100644
--- a/ydb/core/tablet_flat/flat_cxx_database.h
+++ b/ydb/core/tablet_flat/flat_cxx_database.h
@@ -2193,7 +2193,7 @@ struct TStaticSchemaFiller {
schema.Columns[Column::ColumnId] = NTable::TColumn(
TTable::template TableColumns<Column>::GetColumnName(),
Column::ColumnId,
- Column::ColumnType);
+ NScheme::TTypeInfo(Column::ColumnType));
}
};
diff --git a/ydb/core/tablet_flat/flat_cxx_database_ut.cpp b/ydb/core/tablet_flat/flat_cxx_database_ut.cpp
index 0423d82e624..876580b1af9 100644
--- a/ydb/core/tablet_flat/flat_cxx_database_ut.cpp
+++ b/ydb/core/tablet_flat/flat_cxx_database_ut.cpp
@@ -626,7 +626,7 @@ Y_UNIT_TEST_SUITE(TFlatCxxDatabaseTest) {
for (const auto& col : columns) {
ui32 id = schema.ColumnNames.at(col.first);
UNIT_ASSERT_VALUES_EQUAL(schema.Columns.at(id).Name, col.first);
- UNIT_ASSERT_VALUES_EQUAL(schema.Columns.at(id).PType, col.second);
+ UNIT_ASSERT_VALUES_EQUAL(schema.Columns.at(id).PType.GetTypeId(), col.second);
}
}
}
diff --git a/ydb/core/tablet_flat/flat_dbase_apply.cpp b/ydb/core/tablet_flat/flat_dbase_apply.cpp
index 365286d4ddf..32ec4f02df6 100644
--- a/ydb/core/tablet_flat/flat_dbase_apply.cpp
+++ b/ydb/core/tablet_flat/flat_dbase_apply.cpp
@@ -32,8 +32,9 @@ bool TSchemeModifier::Apply(const TAlterRecord &delta)
null = TCell(raw.data(), raw.size());
}
- changes = AddColumn(table, delta.GetColumnName(), delta.GetColumnId(),
- delta.GetColumnType(), delta.GetNotNull(), null);
+ ui32 pgTypeId = delta.HasColumnTypeInfo() ? delta.GetColumnTypeInfo().GetPgTypeId() : 0;
+ changes = AddPgColumn(table, delta.GetColumnName(), delta.GetColumnId(),
+ delta.GetColumnType(), pgTypeId, delta.GetNotNull(), null);
} else if (action == TAlterRecord::DropColumn) {
changes = DropColumn(table, delta.GetColumnId());
} else if (action == TAlterRecord::AddColumnToKey) {
@@ -222,11 +223,27 @@ bool TSchemeModifier::DropTable(ui32 id)
bool TSchemeModifier::AddColumn(ui32 tid, const TString &name, ui32 id, ui32 type, bool notNull, TCell null)
{
+ Y_VERIFY(type != (ui32)NScheme::NTypeIds::Pg, "No pg type data");
+ return AddPgColumn(tid, name, id, type, 0, notNull, null);
+}
+
+bool TSchemeModifier::AddPgColumn(ui32 tid, const TString &name, ui32 id, ui32 type, ui32 pgType, bool notNull, TCell null)
+{
auto *table = Table(tid);
auto it = table->Columns.find(id);
auto itName = table->ColumnNames.find(name);
+ NScheme::TTypeInfo typeInfo;
+ if (pgType != 0) {
+ Y_VERIFY((NScheme::TTypeId)type == NScheme::NTypeIds::Pg);
+ auto* typeDesc = NPg::TypeDescFromPgTypeId(pgType);
+ Y_VERIFY(typeDesc);
+ typeInfo = NScheme::TTypeInfo(type, typeDesc);
+ } else {
+ typeInfo = NScheme::TTypeInfo(type);
+ }
+
// We verify ids and types match when column with the same name already exists
if (itName != table->ColumnNames.end()) {
auto describeFailure = [&]() -> TString {
@@ -242,8 +259,9 @@ bool TSchemeModifier::AddColumn(ui32 tid, const TString &name, ui32 id, ui32 typ
Y_VERIFY_S(itName->second == id, describeFailure());
// Sanity check that this column exists and types match
Y_VERIFY(it != table->Columns.end() && it->second.Name == name);
- Y_VERIFY_S(it->second.PType == type,
- "Table " << tid << " '" << table->Name << "' column " << id << " '" << name << "' expected type " << type << ", existing type " << it->second.PType);
+ Y_VERIFY_S(it->second.PType == typeInfo,
+ "Table " << tid << " '" << table->Name << "' column " << id << " '" << name
+ << "' expected type " << NScheme::TypeName(typeInfo) << ", existing type " << NScheme::TypeName(it->second.PType));
return false;
}
@@ -251,16 +269,16 @@ bool TSchemeModifier::AddColumn(ui32 tid, const TString &name, ui32 id, ui32 typ
// We assume column is renamed when the same id already exists
if (it != table->Columns.end()) {
- Y_VERIFY_S(it->second.PType == type,
+ Y_VERIFY_S(it->second.PType == typeInfo,
"Table " << tid << " '" << table->Name << "' column " << id << " '" << it->second.Name << "' renamed to '" << name << "'"
- << " with type " << type << ", existing type " << it->second.PType);
+ << " with type " << NScheme::TypeName(typeInfo) << ", existing type " << NScheme::TypeName(it->second.PType));
table->ColumnNames.erase(it->second.Name);
it->second.Name = name;
table->ColumnNames.emplace(name, id);
return true;
}
- auto pr = table->Columns.emplace(id, TColumn(name, id, type, notNull));
+ auto pr = table->Columns.emplace(id, TColumn(name, id, typeInfo, notNull));
Y_VERIFY(pr.second);
it = pr.first;
table->ColumnNames.emplace(name, id);
diff --git a/ydb/core/tablet_flat/flat_dbase_apply.h b/ydb/core/tablet_flat/flat_dbase_apply.h
index 279a598c1f1..b9008b73abb 100644
--- a/ydb/core/tablet_flat/flat_dbase_apply.h
+++ b/ydb/core/tablet_flat/flat_dbase_apply.h
@@ -33,6 +33,7 @@ namespace NTable {
bool AddTable(const TString& name, ui32 id);
bool DropTable(ui32 id);
bool AddColumn(ui32 table, const TString& name, ui32 id, ui32 type, bool notNull, TCell null = { });
+ bool AddPgColumn(ui32 table, const TString& name, ui32 id, ui32 type, ui32 pgType, bool notNull, TCell null = { });
bool DropColumn(ui32 table, ui32 id);
bool AddColumnToFamily(ui32 table, ui32 column, ui32 family);
bool AddColumnToKey(ui32 table, ui32 column);
diff --git a/ydb/core/tablet_flat/flat_dbase_scheme.cpp b/ydb/core/tablet_flat/flat_dbase_scheme.cpp
index 61303df1049..2c973fa9044 100644
--- a/ydb/core/tablet_flat/flat_dbase_scheme.cpp
+++ b/ydb/core/tablet_flat/flat_dbase_scheme.cpp
@@ -28,7 +28,8 @@ TAutoPtr<TSchemeChanges> TScheme::GetSnapshot() const {
for(const auto& it : itTable.second.Columns) {
const auto &col = it.second;
- delta.AddColumn(table, col.Name, it.first, col.PType, col.NotNull, col.Null);
+ delta.AddPgColumn(table, col.Name, it.first, col.PType.GetTypeId(),
+ NPg::PgTypeIdFromTypeDesc(col.PType.GetTypeDesc()), col.NotNull, col.Null);
delta.AddColumnToFamily(table, it.first, col.Family);
}
@@ -97,12 +98,21 @@ TAlter& TAlter::DropTable(ui32 id)
TAlter& TAlter::AddColumn(ui32 table, const TString& name, ui32 id, ui32 type, bool notNull, TCell null)
{
+ Y_VERIFY(type != (ui32)NScheme::NTypeIds::Pg, "No pg type data");
+ return AddPgColumn(table, name, id, type, 0, notNull, null);
+}
+
+TAlter& TAlter::AddPgColumn(ui32 table, const TString& name, ui32 id, ui32 type, ui32 pgType, bool notNull, TCell null)
+{
TAlterRecord& delta = *Log.AddDelta();
delta.SetDeltaType(TAlterRecord::AddColumn);
delta.SetColumnName(name);
delta.SetTableId(table);
delta.SetColumnId(id);
delta.SetColumnType(type);
+ if (pgType != 0) {
+ delta.MutableColumnTypeInfo()->SetPgTypeId(pgType);
+ }
delta.SetNotNull(notNull);
if (!null.IsNull())
diff --git a/ydb/core/tablet_flat/flat_dbase_scheme.h b/ydb/core/tablet_flat/flat_dbase_scheme.h
index da4d0f7799f..56cc65ec94d 100644
--- a/ydb/core/tablet_flat/flat_dbase_scheme.h
+++ b/ydb/core/tablet_flat/flat_dbase_scheme.h
@@ -22,7 +22,6 @@ using TCompactionPolicy = NLocalDb::TCompactionPolicy;
class TScheme {
public:
- using TTypeId = ui32;
using ECache = NPage::ECache;
enum EDefault {
@@ -248,6 +247,7 @@ public:
TAlter& AddTable(const TString& name, ui32 id);
TAlter& DropTable(ui32 id);
TAlter& AddColumn(ui32 table, const TString& name, ui32 id, ui32 type, bool notNull, TCell null = { });
+ TAlter& AddPgColumn(ui32 table, const TString& name, ui32 id, ui32 type, ui32 pgType, bool notNull, TCell null = { });
TAlter& DropColumn(ui32 table, ui32 id);
TAlter& AddColumnToFamily(ui32 table, ui32 column, ui32 family);
TAlter& AddFamily(ui32 table, ui32 family, ui32 room);
diff --git a/ydb/core/tablet_flat/flat_executor.cpp b/ydb/core/tablet_flat/flat_executor.cpp
index 4e9719940a8..8e88e6ccd10 100644
--- a/ydb/core/tablet_flat/flat_executor.cpp
+++ b/ydb/core/tablet_flat/flat_executor.cpp
@@ -3977,7 +3977,7 @@ void TExecutor::RenderHtmlPage(NMon::TEvRemoteHttpInfo::TPtr &ev) const {
TABLER() {
TABLED() {str << col.Name;}
TABLED() {str << col.Id;}
- TABLED() {str << tr.GetTypeName(col.PType);}
+ TABLED() {str << tr.GetTypeName(col.PType.GetTypeId());}
TABLED() {str << (isKey ? ToString(col.KeyOrder) : "");}
}
}
diff --git a/ydb/core/tablet_flat/flat_executor_db_mon.cpp b/ydb/core/tablet_flat/flat_executor_db_mon.cpp
index d5353747beb..50b8e7c32f9 100644
--- a/ydb/core/tablet_flat/flat_executor_db_mon.cpp
+++ b/ydb/core/tablet_flat/flat_executor_db_mon.cpp
@@ -78,7 +78,7 @@ public:
break;
}
const auto& columnInfo = tableInfo->Columns.find(*itColumn)->second;
- auto type = columnInfo.PType;
+ auto type = columnInfo.PType.GetTypeId();
switch (type) {
case NScheme::NTypeIds::Uint32:
{
@@ -150,7 +150,7 @@ public:
if (data == nullptr) {
str << "<i>&lt;null&gt;</i>";
} else {
- switch(tuple.Types[i]) {
+ switch(tuple.Types[i].GetTypeId()) {
case NScheme::NTypeIds::Int8:
str << *(i8*)data;
break;
@@ -221,8 +221,12 @@ public:
str << "(DyNumber) " << number;
break;
}
+ case NScheme::NTypeIds::Pg: {
+ str << "(Pg) " << NPg::PgTypeNameFromTypeDesc(tuple.Types[i].GetTypeDesc());
+ break;
+ }
default:
- str << "<i>unknown type " << tuple.Types[i] << "</i>";
+ str << "<i>unknown type " << tuple.Types[i].GetTypeId() << "</i>";
break;
}
}
diff --git a/ydb/core/tablet_flat/flat_executor_ut.cpp b/ydb/core/tablet_flat/flat_executor_ut.cpp
index 2a3d9dcf90e..c5b3b298a88 100644
--- a/ydb/core/tablet_flat/flat_executor_ut.cpp
+++ b/ydb/core/tablet_flat/flat_executor_ut.cpp
@@ -2781,7 +2781,7 @@ Y_UNIT_TEST_SUITE(TFlatTableExecutorKeepEraseMarkers) {
}
TString value;
- DbgPrintValue(value, row.Get(0), NScheme::TString::TypeId);
+ DbgPrintValue(value, row.Get(0), NScheme::TTypeInfo(NScheme::TString::TypeId));
builder << "Key " << keyId << " = " << row.GetRowState()
<< " value = " << NTable::ECellOp(row.GetCellOp(0)) << " " << value << Endl;
@@ -3039,10 +3039,10 @@ Y_UNIT_TEST_SUITE(TFlatTableExecutorMoveTableData) {
const auto& row = it->Row();
TString key;
- DbgPrintValue(key, row.Get(0), NScheme::TUint64::TypeId);
+ DbgPrintValue(key, row.Get(0), NScheme::TTypeInfo(NScheme::TUint64::TypeId));
TString value;
- DbgPrintValue(value, row.Get(1), NScheme::TString::TypeId);
+ DbgPrintValue(value, row.Get(1), NScheme::TTypeInfo(NScheme::TString::TypeId));
builder << "Key " << key << " = " << row.GetRowState()
<< " value = " << NTable::ECellOp(row.GetCellOp(1)) << " " << value << Endl;
@@ -3352,10 +3352,10 @@ Y_UNIT_TEST_SUITE(TFlatTableExecutorFollower) {
const auto& row = it->Row();
TString key;
- DbgPrintValue(key, row.Get(0), NScheme::TUint64::TypeId);
+ DbgPrintValue(key, row.Get(0), NScheme::TTypeInfo(NScheme::TUint64::TypeId));
TString value;
- DbgPrintValue(value, row.Get(1), NScheme::TString::TypeId);
+ DbgPrintValue(value, row.Get(1), NScheme::TTypeInfo(NScheme::TString::TypeId));
builder << "Key " << key << " = " << row.GetRowState()
<< " value = " << NTable::ECellOp(row.GetCellOp(1)) << " " << value << Endl;
@@ -4129,13 +4129,13 @@ Y_UNIT_TEST_SUITE(TFlatTableLongTx) {
const auto& row = it->Row();
TString key;
- DbgPrintValue(key, row.Get(0), NScheme::TUint64::TypeId);
+ DbgPrintValue(key, row.Get(0), NScheme::TTypeInfo(NScheme::TUint64::TypeId));
TString value;
- DbgPrintValue(value, row.Get(1), NScheme::TString::TypeId);
+ DbgPrintValue(value, row.Get(1), NScheme::TTypeInfo(NScheme::TString::TypeId));
TString value2;
- DbgPrintValue(value2, row.Get(2), NScheme::TString::TypeId);
+ DbgPrintValue(value2, row.Get(2), NScheme::TTypeInfo(NScheme::TString::TypeId));
builder << "Key " << key << " = " << row.GetRowState()
<< " value = " << NTable::ECellOp(row.GetCellOp(1)) << " " << value
@@ -4181,13 +4181,13 @@ Y_UNIT_TEST_SUITE(TFlatTableLongTx) {
const auto& row = it->Row();
TString key;
- DbgPrintValue(key, row.Get(0), NScheme::TUint64::TypeId);
+ DbgPrintValue(key, row.Get(0), NScheme::TTypeInfo(NScheme::TUint64::TypeId));
TString value;
- DbgPrintValue(value, row.Get(1), NScheme::TString::TypeId);
+ DbgPrintValue(value, row.Get(1), NScheme::TTypeInfo(NScheme::TString::TypeId));
TString value2;
- DbgPrintValue(value2, row.Get(2), NScheme::TString::TypeId);
+ DbgPrintValue(value2, row.Get(2), NScheme::TTypeInfo(NScheme::TString::TypeId));
builder << "Key " << key << " = " << row.GetRowState()
<< " value = " << NTable::ECellOp(row.GetCellOp(1)) << " " << value
@@ -4230,13 +4230,13 @@ Y_UNIT_TEST_SUITE(TFlatTableLongTx) {
const auto& row = it->Row();
TString key;
- DbgPrintValue(key, row.Get(0), NScheme::TUint64::TypeId);
+ DbgPrintValue(key, row.Get(0), NScheme::TTypeInfo(NScheme::TUint64::TypeId));
TString value;
- DbgPrintValue(value, row.Get(1), NScheme::TString::TypeId);
+ DbgPrintValue(value, row.Get(1), NScheme::TTypeInfo(NScheme::TString::TypeId));
TString value2;
- DbgPrintValue(value2, row.Get(2), NScheme::TString::TypeId);
+ DbgPrintValue(value2, row.Get(2), NScheme::TTypeInfo(NScheme::TString::TypeId));
builder << "Key " << key << " = " << row.GetRowState()
<< " value = " << NTable::ECellOp(row.GetCellOp(1)) << " " << value
diff --git a/ydb/core/tablet_flat/flat_executor_ut_large.cpp b/ydb/core/tablet_flat/flat_executor_ut_large.cpp
index 0a163e6bc62..38e6359a131 100644
--- a/ydb/core/tablet_flat/flat_executor_ut_large.cpp
+++ b/ydb/core/tablet_flat/flat_executor_ut_large.cpp
@@ -122,13 +122,13 @@ Y_UNIT_TEST_SUITE(TFlatTableLongTxLarge) {
const auto& row = it->Row();
TString key;
- DbgPrintValue(key, row.Get(0), NScheme::TUint64::TypeId);
+ DbgPrintValue(key, row.Get(0), NScheme::TTypeInfo(NScheme::TUint64::TypeId));
TString value;
- DbgPrintValue(value, row.Get(1), NScheme::TString::TypeId);
+ DbgPrintValue(value, row.Get(1), NScheme::TTypeInfo(NScheme::TString::TypeId));
TString value2;
- DbgPrintValue(value2, row.Get(2), NScheme::TString::TypeId);
+ DbgPrintValue(value2, row.Get(2), NScheme::TTypeInfo(NScheme::TString::TypeId));
builder << "Key " << key << " = " << row.GetRowState()
<< " value = " << NTable::ECellOp(row.GetCellOp(1)) << " " << value
diff --git a/ydb/core/tablet_flat/flat_iterator.h b/ydb/core/tablet_flat/flat_iterator.h
index 9565082a30d..8ecd0cd4763 100644
--- a/ydb/core/tablet_flat/flat_iterator.h
+++ b/ydb/core/tablet_flat/flat_iterator.h
@@ -360,7 +360,7 @@ private:
};
struct TComparator {
- TComparator(TArrayRef<const NScheme::TTypeIdOrder> types)
+ TComparator(TArrayRef<const NScheme::TTypeInfoOrder> types)
: Types(types)
{}
@@ -379,7 +379,7 @@ private:
return a.IteratorId.Epoch < b.IteratorId.Epoch;
}
- const TArrayRef<const NScheme::TTypeIdOrder> Types;
+ const TArrayRef<const NScheme::TTypeInfoOrder> Types;
};
static TIteratorIndex IteratorIndexFromSize(size_t size) {
diff --git a/ydb/core/tablet_flat/flat_iterator_ops.h b/ydb/core/tablet_flat/flat_iterator_ops.h
index fadddafccf4..67a6ccccb52 100644
--- a/ydb/core/tablet_flat/flat_iterator_ops.h
+++ b/ydb/core/tablet_flat/flat_iterator_ops.h
@@ -9,7 +9,7 @@ namespace NTable {
struct TTableItOps {
static inline int CompareKeys(
- TArrayRef<const NScheme::TTypeIdOrder> types,
+ TArrayRef<const NScheme::TTypeInfoOrder> types,
TArrayRef<const TCell> a,
TArrayRef<const TCell> b) noexcept
{
@@ -158,7 +158,7 @@ struct TTableItOps {
struct TTableItReverseOps {
static int CompareKeys(
- TArrayRef<const NScheme::TTypeIdOrder> types,
+ TArrayRef<const NScheme::TTypeInfoOrder> types,
TArrayRef<const TCell> a,
TArrayRef<const TCell> b) noexcept
{
diff --git a/ydb/core/tablet_flat/flat_mem_warm.cpp b/ydb/core/tablet_flat/flat_mem_warm.cpp
index c4b4d5cac4b..bd59853e161 100644
--- a/ydb/core/tablet_flat/flat_mem_warm.cpp
+++ b/ydb/core/tablet_flat/flat_mem_warm.cpp
@@ -128,10 +128,10 @@ void TMemTable::DebugDump(IOutputStream& str, const NScheme::TTypeRegistry& type
for (ui32 i = 0; i < row->Items; ++i) {
TTag colId = row->Ops()[i].Tag;
if (Scheme->ColInfo(colId)) {
- NScheme::TTypeId typeId = Scheme->ColInfo(colId)->TypeId;
+ auto typeInfo = Scheme->ColInfo(colId)->TypeInfo;
auto &op = row->Ops()[i];
- str << EOpToStr(ECellOp(op.Op)) << " " << op.Tag << " " << DbgPrintCell(op.Value, typeId, typeRegistry);
+ str << EOpToStr(ECellOp(op.Op)) << " " << op.Tag << " " << DbgPrintCell(op.Value, typeInfo, typeRegistry);
} else {
str << "unknown column " << colId;
}
diff --git a/ydb/core/tablet_flat/flat_mem_warm.h b/ydb/core/tablet_flat/flat_mem_warm.h
index 4682a7ffcac..065bf486315 100644
--- a/ydb/core/tablet_flat/flat_mem_warm.h
+++ b/ydb/core/tablet_flat/flat_mem_warm.h
@@ -36,7 +36,7 @@ namespace NMem {
};
struct TKeyCmp {
- const NScheme::TTypeIdOrder* Types;
+ const NScheme::TTypeInfoOrder* Types;
const ui32 Count;
explicit TKeyCmp(const TRowScheme& rowScheme)
@@ -362,9 +362,9 @@ namespace NMem {
*/
} else if (TCellOp::HaveNoPayload(ops[it].NormalizedCellOp())) {
/* Payloadless ECellOp types may have zero type value */
- } else if (info->TypeId != ops[it].Value.Type()) {
+ } else if (info->TypeInfo.GetTypeId() != ops[it].Value.Type()) {
Y_FAIL("Got an unexpected column type %" PRIu16 " in cell update for tag %" PRIu32 " (expected %" PRIu16 ")",
- ops[it].Value.Type(), ops[it].Tag, info->TypeId);
+ ops[it].Value.Type(), ops[it].Tag, info->TypeInfo.GetTypeId());
}
auto cell = ops[it].AsCell();
diff --git a/ydb/core/tablet_flat/flat_part_dump.cpp b/ydb/core/tablet_flat/flat_part_dump.cpp
index f78a07e8dfd..44f7da969a4 100644
--- a/ydb/core/tablet_flat/flat_part_dump.cpp
+++ b/ydb/core/tablet_flat/flat_part_dump.cpp
@@ -103,7 +103,7 @@ namespace {
for (auto off : xrange(part.Scheme->Groups[0].KeyTypes.size())) {
Out << (off ? ", " : "");
- TName(part.Scheme->Groups[0].KeyTypes[off]);
+ TName(part.Scheme->Groups[0].KeyTypes[off].GetTypeId());
}
Out << ")" << Endl;
@@ -184,11 +184,11 @@ namespace {
if (op == ELargeObj::Inline) {
Out
- << DbgPrintCell(iter->Cell(info), info.TypeId, *Reg);
+ << DbgPrintCell(iter->Cell(info), info.TypeInfo, *Reg);
} else {
const auto ref = iter->Cell(info).AsValue<ui64>();
- TName(info.TypeId);
+ TName(info.TypeInfo.GetTypeId());
const auto frame = GetFrame(part, ref, op);
const auto blob = Env->Locate(&part, ref, op);
diff --git a/ydb/core/tablet_flat/flat_part_scheme.h b/ydb/core/tablet_flat/flat_part_scheme.h
index 543df5fcaca..f92f87827f6 100644
--- a/ydb/core/tablet_flat/flat_part_scheme.h
+++ b/ydb/core/tablet_flat/flat_part_scheme.h
@@ -41,7 +41,7 @@ namespace NTable {
/* Data page key layout */
TVector<TColumn> ColsKeyData;
- TVector<NScheme::TTypeId> KeyTypes;
+ TVector<NScheme::TTypeInfo> KeyTypes;
/* Index page layout settings */
TPgSize IdxRecFixedSize;
diff --git a/ydb/core/tablet_flat/flat_range_cache.h b/ydb/core/tablet_flat/flat_range_cache.h
index 95fd100cdf4..c8046a85931 100644
--- a/ydb/core/tablet_flat/flat_range_cache.h
+++ b/ydb/core/tablet_flat/flat_range_cache.h
@@ -40,7 +40,7 @@ class TKeyRangeEntryCompare {
public:
typedef void is_transparent;
- explicit TKeyRangeEntryCompare(TArrayRef<const NScheme::TTypeIdOrder> keyTypes)
+ explicit TKeyRangeEntryCompare(TArrayRef<const NScheme::TTypeInfoOrder> keyTypes)
: KeyTypes(keyTypes)
{ }
@@ -119,7 +119,7 @@ public:
}
private:
- const TArrayRef<const NScheme::TTypeIdOrder> KeyTypes;
+ const TArrayRef<const NScheme::TTypeInfoOrder> KeyTypes;
};
struct TKeyRangeEntryLRU
diff --git a/ydb/core/tablet_flat/flat_range_cache_ut.cpp b/ydb/core/tablet_flat/flat_range_cache_ut.cpp
index f518a8a1f74..2674e00212c 100644
--- a/ydb/core/tablet_flat/flat_range_cache_ut.cpp
+++ b/ydb/core/tablet_flat/flat_range_cache_ut.cpp
@@ -44,8 +44,8 @@ Y_UNIT_TEST_SUITE(TFlatEraseCacheTest) {
*/
size_t GetNodeSize() {
// Construct fake TKeyCellDefaults
- TVector<NScheme::TTypeIdOrder> types;
- types.emplace_back(NScheme::NTypeIds::Uint64);
+ TVector<NScheme::TTypeInfoOrder> types;
+ types.emplace_back(NScheme::TTypeInfo(NScheme::NTypeIds::Uint64));
TVector<TCell> defs(1);
TIntrusiveConstPtr<TKeyCellDefaults> keyDefaults = TKeyCellDefaults::Make(types, defs);
// Empty default config
diff --git a/ydb/core/tablet_flat/flat_row_column.h b/ydb/core/tablet_flat/flat_row_column.h
index 391196d3f21..e6b1d403518 100644
--- a/ydb/core/tablet_flat/flat_row_column.h
+++ b/ydb/core/tablet_flat/flat_row_column.h
@@ -1,7 +1,7 @@
#pragma once
#include "flat_row_eggs.h"
-#include <ydb/core/scheme/scheme_type_id.h>
+#include <ydb/core/scheme_types/scheme_type_info.h>
namespace NKikimr {
namespace NTable {
@@ -42,7 +42,7 @@ namespace NTable {
return Key != Max<TPos>();
}
- NScheme::TTypeId TypeId = 0;
+ NScheme::TTypeInfo TypeInfo;
TTag Tag = Max<TTag>();
TPos Pos = Max<TPos>(); /* Position in physical layout */
TPos Key = Max<TPos>(); /* key column sequence number */
diff --git a/ydb/core/tablet_flat/flat_row_misc.h b/ydb/core/tablet_flat/flat_row_misc.h
index 4fbfe0de995..9eac844ccf6 100644
--- a/ydb/core/tablet_flat/flat_row_misc.h
+++ b/ydb/core/tablet_flat/flat_row_misc.h
@@ -13,7 +13,7 @@ namespace NFmt {
struct TCells {
using TReg = NScheme::TTypeRegistry;
using TCellsRef = TArrayRef<const TCell>;
- using TTypesRef = TArrayRef<const NScheme::TTypeId>;
+ using TTypesRef = TArrayRef<const NScheme::TTypeInfo>;
TCells(TCellsRef cells, const NTable::TRemap &remap, const TReg *reg)
: TCells(cells, remap.Types(), reg)
diff --git a/ydb/core/tablet_flat/flat_row_nulls.h b/ydb/core/tablet_flat/flat_row_nulls.h
index c53cf73aede..c731e4100c1 100644
--- a/ydb/core/tablet_flat/flat_row_nulls.h
+++ b/ydb/core/tablet_flat/flat_row_nulls.h
@@ -12,8 +12,8 @@ namespace NTable {
class TCellDefaults: public TAtomicRefCount<TCellDefaults, NUtil::TDtorDel<TCellDefaults>> {
protected:
- using TType = NScheme::TTypeId;
- using TOrder = NScheme::TTypeIdOrder;
+ using TType = NScheme::TTypeInfo;
+ using TOrder = NScheme::TTypeInfoOrder;
TCellDefaults(TArrayRef<const TType> types, TArrayRef<const TCell> defs)
: Types(types)
@@ -154,7 +154,7 @@ namespace NTable {
TStackVec<TType> types;
types.reserve(order.size());
for (TOrder typeOrder : order) {
- types.push_back(typeOrder.GetTypeId());
+ types.push_back(NScheme::TTypeInfo(typeOrder.GetTypeId(), typeOrder.GetTypeDesc()));
}
return TCellDefaults::Make<TKeyCellDefaults>(types, order, defs);
}
diff --git a/ydb/core/tablet_flat/flat_row_remap.h b/ydb/core/tablet_flat/flat_row_remap.h
index f948e82e3ac..e14e1c3bfa0 100644
--- a/ydb/core/tablet_flat/flat_row_remap.h
+++ b/ydb/core/tablet_flat/flat_row_remap.h
@@ -39,7 +39,7 @@ namespace NTable {
TRemap(const TRowScheme& scheme, TTagsRef tags)
: Tags(tags.begin(), tags.end())
- , Types_(tags.size(), 0)
+ , Types_(tags.size())
{
Tag2Pos.reserve(tags.size());
CellDefaults_.reserve(tags.size());
@@ -47,7 +47,7 @@ namespace NTable {
for (TPos on = 0; on < tags.size(); on++) {
const auto *info = scheme.ColInfo(tags[on]);
Y_VERIFY(info, "Column %" PRIu32 " does not exist", tags[on]);
- Types_[on] = info->TypeId;
+ Types_[on] = info->TypeInfo;
CellDefaults_.emplace_back((*scheme.RowCellDefaults)[info->Pos]);
@@ -59,7 +59,7 @@ namespace NTable {
}
}
- TArrayRef<const NScheme::TTypeId> Types() const noexcept
+ TArrayRef<const NScheme::TTypeInfo> Types() const noexcept
{
return Types_;
}
@@ -90,7 +90,7 @@ namespace NTable {
const TSmallVec<TTag> Tags;
private:
TSmallVec<TPin> KeyPins_;
- TSmallVec<NScheme::TTypeId> Types_;
+ TSmallVec<NScheme::TTypeInfo> Types_;
TSmallVec<TCell> CellDefaults_;
THashMap<TTag, TPos> Tag2Pos;
};
diff --git a/ydb/core/tablet_flat/flat_row_scheme.h b/ydb/core/tablet_flat/flat_row_scheme.h
index 4ee03bea873..19cc387d480 100644
--- a/ydb/core/tablet_flat/flat_row_scheme.h
+++ b/ydb/core/tablet_flat/flat_row_scheme.h
@@ -66,8 +66,8 @@ namespace NTable {
keyCount += (meta.KeyOrder == Max<TPos>() ? 0 : 1);
}
- TNullsCook<TKeyCellDefaults, NScheme::TTypeIdOrder> keys(keyCount);
- TNullsCook<TRowCellDefaults, NScheme::TTypeId> vals(cols.size());
+ TNullsCook<TKeyCellDefaults, NScheme::TTypeInfoOrder> keys(keyCount);
+ TNullsCook<TRowCellDefaults, NScheme::TTypeInfo> vals(cols.size());
TVector<TColInfo> info;
info.reserve(cols.size());
@@ -82,15 +82,15 @@ namespace NTable {
Y_VERIFY(familyIt != families.end() && *familyIt == meta.Family);
col.Tag = meta.Id;
- col.TypeId = meta.PType;
+ col.TypeInfo = meta.PType;
col.Key = meta.KeyOrder;
col.Pos = info.size() - 1;
col.Group = familyIt - families.begin();
- vals.Set(col.Pos, col.TypeId, meta.Null);
+ vals.Set(col.Pos, col.TypeInfo, meta.Null);
if (col.IsKey())
- keys.Set(col.Key, col.TypeId, meta.Null);
+ keys.Set(col.Key, col.TypeInfo, meta.Null);
}
return new TRowScheme(std::move(info), *keys, *vals, std::move(families));
@@ -128,7 +128,7 @@ namespace NTable {
Y_FAIL("Key column dropping ins't supported");
} else if (other == nullptr) {
/* It is ok to drop non-key columns */
- } else if (col.TypeId != other->TypeId) {
+ } else if (col.TypeInfo != other->TypeInfo) {
Y_FAIL("Column type alteration is not supproted");
} else if (col.Key != other->Key) {
Y_FAIL("Cannot alter keys order or move col to keys");
@@ -142,8 +142,7 @@ namespace NTable {
} else {
auto &null = (*scheme.RowCellDefaults)[other->Pos];
-
- if (CompareTypedCells(null, (*RowCellDefaults)[col.Pos], col.TypeId))
+ if (CompareTypedCells(null, (*RowCellDefaults)[col.Pos], col.TypeInfo))
Y_FAIL("Cannot alter existing columnt default value");
}
}
diff --git a/ydb/core/tablet_flat/flat_table_column.h b/ydb/core/tablet_flat/flat_table_column.h
index 2f9791a6363..49f8fb7a9d0 100644
--- a/ydb/core/tablet_flat/flat_table_column.h
+++ b/ydb/core/tablet_flat/flat_table_column.h
@@ -15,7 +15,7 @@ namespace NTable {
TColumn() = default;
- TColumn(const TString& name, TTag tag, NScheme::TTypeId type, bool notNull = false)
+ TColumn(const TString& name, TTag tag, NScheme::TTypeInfo type, bool notNull = false)
: Id(tag)
, PType(type)
, Name(name)
@@ -47,7 +47,7 @@ namespace NTable {
}
NTable::TTag Id = Max<TTag>();
- NScheme::TTypeId PType = 0;
+ NScheme::TTypeInfo PType;
TString Name;
ui32 Family = LeaderFamily;
NTable::TPos KeyOrder = Max<TPos>();
diff --git a/ydb/core/tablet_flat/flat_table_part.cpp b/ydb/core/tablet_flat/flat_table_part.cpp
index 0e55e1b42ea..ff042b266ff 100644
--- a/ydb/core/tablet_flat/flat_table_part.cpp
+++ b/ydb/core/tablet_flat/flat_table_part.cpp
@@ -4,6 +4,7 @@
#include "util_basics.h"
#include <ydb/core/util/pb.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/tablet_flat/protos/flat_table_part.pb.h>
#include <library/cpp/containers/stack_vector/stack_vec.h>
#include <util/generic/map.h>
@@ -52,7 +53,8 @@ TIntrusiveConstPtr<TPartScheme> TPartScheme::Parse(TArrayRef<const char> raw, bo
cols.emplace_back();
cols.back().Tag = one.GetTag();
- cols.back().TypeId = one.GetType();
+ cols.back().TypeInfo = NScheme::TypeInfoFromProtoColumnType(one.GetType(),
+ one.HasTypeInfo() ? &one.GetTypeInfo() : nullptr);
cols.back().Pos = cols.size() - 1;
cols.back().Group = one.GetGroup();
@@ -96,10 +98,10 @@ void TPartScheme::FillKeySlots()
void TPartScheme::FillHistoricSlots()
{
// Synthetic (rowid, step, txid) key used during history searches
- TStackVec<NScheme::TTypeIdOrder, 3> types;
- types.emplace_back(NScheme::NTypeIds::Uint64, NScheme::EOrder::Ascending);
- types.emplace_back(NScheme::NTypeIds::Uint64, NScheme::EOrder::Descending);
- types.emplace_back(NScheme::NTypeIds::Uint64, NScheme::EOrder::Descending);
+ TStackVec<NScheme::TTypeInfoOrder, 3> types;
+ types.emplace_back(NScheme::TTypeInfo(NScheme::NTypeIds::Uint64), NScheme::EOrder::Ascending);
+ types.emplace_back(NScheme::TTypeInfo(NScheme::NTypeIds::Uint64), NScheme::EOrder::Descending);
+ types.emplace_back(NScheme::TTypeInfo(NScheme::NTypeIds::Uint64), NScheme::EOrder::Descending);
TStackVec<TCell, 3> defs;
defs.resize(3);
HistoryKeys = TKeyCellDefaults::Make(types, defs);
@@ -109,7 +111,7 @@ void TPartScheme::FillHistoricSlots()
for (ui32 keyIdx = 0; keyIdx < HistoryKeys->Types.size(); ++keyIdx) {
auto& col = HistoryGroup.Columns.emplace_back();
col.Key = keyIdx;
- col.TypeId = HistoryKeys->Types[keyIdx].GetTypeId();
+ col.TypeInfo = HistoryKeys->Types[keyIdx].ToTypeInfo();
}
// All non-key columns go after synthetic key
@@ -157,7 +159,7 @@ void TPartScheme::InitGroup(TGroupInfo& group)
std::sort(group.ColsKeyData.begin(), group.ColsKeyData.end(), byKey);
for (auto& col : group.ColsKeyData) {
- group.KeyTypes.push_back(col.TypeId);
+ group.KeyTypes.push_back(col.TypeInfo);
}
group.ColsKeyIdx = group.ColsKeyData;
@@ -172,7 +174,7 @@ size_t TPartScheme::InitInfo(TVector<TColumn>& cols, TPgSize headerSize)
size_t offset = 0;
for (auto &col: cols) {
- const ui32 fixed = NScheme::GetFixedSize(col.TypeId);
+ const ui32 fixed = NScheme::GetFixedSize(col.TypeInfo);
col.Offset = offset;
col.IsFixed = fixed > 0;
@@ -191,7 +193,11 @@ TSharedData TPartScheme::Serialize() const
for (const auto& col : AllColumns) {
auto* pb = proto.AddColumns();
pb->SetTag(col.Tag);
- pb->SetType(col.TypeId);
+ auto protoType = NScheme::ProtoColumnTypeFromTypeInfo(col.TypeInfo);
+ pb->SetType(protoType.TypeId);
+ if (protoType.TypeInfo) {
+ *pb->MutableTypeInfo() = *protoType.TypeInfo;
+ }
pb->SetGroup(col.Group);
if (col.IsKey()) {
diff --git a/ydb/core/tablet_flat/protos/flat_table_part.proto b/ydb/core/tablet_flat/protos/flat_table_part.proto
index 61fa39e9573..53892fabfe0 100644
--- a/ydb/core/tablet_flat/protos/flat_table_part.proto
+++ b/ydb/core/tablet_flat/protos/flat_table_part.proto
@@ -1,4 +1,5 @@
import "ydb/core/protos/base.proto";
+import "ydb/core/protos/type_info.proto";
package NKikimr.NTable.NProto;
option java_package = "ru.yandex.kikimr.proto";
@@ -11,6 +12,7 @@ message TEvol {
message TPartColumn {
optional uint32 Tag = 1;
optional uint32 Type = 2;
+ optional NKikimrProto.TTypeInfo TypeInfo = 5;
optional uint32 Key = 3;
optional uint32 Group = 4;
}
diff --git a/ydb/core/tablet_flat/test/libs/rows/all.cpp b/ydb/core/tablet_flat/test/libs/rows/all.cpp
index 796b82e0031..a6e0c8b0096 100644
--- a/ydb/core/tablet_flat/test/libs/rows/all.cpp
+++ b/ydb/core/tablet_flat/test/libs/rows/all.cpp
@@ -19,7 +19,7 @@ const NScheme::TTypeRegistry* DbgRegistry()
TString PrintValue(const TCell& r, NScheme::TTypeId typeId)
{
- return DbgPrintCell(r, typeId, TypeRegistry);
+ return DbgPrintCell(r, NScheme::TTypeInfo(typeId), TypeRegistry);
}
}
diff --git a/ydb/core/tablet_flat/test/libs/rows/layout.h b/ydb/core/tablet_flat/test/libs/rows/layout.h
index 36e64feac08..6657b4fd08a 100644
--- a/ydb/core/tablet_flat/test/libs/rows/layout.h
+++ b/ydb/core/tablet_flat/test/libs/rows/layout.h
@@ -22,7 +22,8 @@ namespace NTest{
{
Tags_.push_back(tag);
- Cols.emplace_back("", tag, type);
+ // pg types are not supported
+ Cols.emplace_back("", tag, NScheme::TTypeInfo(type));
Cols.back().Family = group;
Cols.back().SetDefault(null);
diff --git a/ydb/core/tablet_flat/test/libs/rows/tool.h b/ydb/core/tablet_flat/test/libs/rows/tool.h
index 18485858665..ac746d3702c 100644
--- a/ydb/core/tablet_flat/test/libs/rows/tool.h
+++ b/ydb/core/tablet_flat/test/libs/rows/tool.h
@@ -123,7 +123,7 @@ namespace NTest {
} else if (val.Op == ECellOp::Empty || val.Op == ECellOp::Reset) {
if (ECellOp(val.Op) != state.GetCellOp(pos))
return false;
- } else if (CompareTypedCells(val.Cell, cell, info->TypeId)) {
+ } else if (CompareTypedCells(val.Cell, cell, info->TypeInfo)) {
return false; /* Literal comparison has been failed */
}
@@ -172,11 +172,11 @@ namespace NTest {
} else if (value.Cell.IsNull() && value.Type == 0) {
/* null values should be passed without type */
- } else if (info->TypeId != value.Type) {
+ } else if (info->TypeInfo.GetTypeId() != value.Type) {
ythrow
yexception()
<< "Col{" << info->Pos << ", Tag " << info->Tag
- << ", type " << info->TypeId << "}"
+ << ", type " << info->TypeInfo.GetTypeId() << "}"
<< ", got type " << value.Type << " { "
<< PrintValue(value.Cell, value.Type) << " }";
}
diff --git a/ydb/core/tablet_flat/ut/CMakeLists.darwin.txt b/ydb/core/tablet_flat/ut/CMakeLists.darwin.txt
index de5d414efea..2d562ed938e 100644
--- a/ydb/core/tablet_flat/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tablet_flat/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-tablet_flat-ut PUBLIC
ydb-core-scheme
test-libs-exec
test-libs-table
- ydb-core-testlib
+ core-testlib-default
udf-service-exception_policy
)
target_link_options(ydb-core-tablet_flat-ut PRIVATE
diff --git a/ydb/core/tablet_flat/ut/CMakeLists.linux.txt b/ydb/core/tablet_flat/ut/CMakeLists.linux.txt
index 846c4ab036a..d1cf46b8bf1 100644
--- a/ydb/core/tablet_flat/ut/CMakeLists.linux.txt
+++ b/ydb/core/tablet_flat/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tablet_flat-ut PUBLIC
ydb-core-scheme
test-libs-exec
test-libs-table
- ydb-core-testlib
+ core-testlib-default
udf-service-exception_policy
)
target_link_options(ydb-core-tablet_flat-ut PRIVATE
diff --git a/ydb/core/tablet_flat/ut/flat_test_db.cpp b/ydb/core/tablet_flat/ut/flat_test_db.cpp
index b65757d4bbd..31d950ab36a 100644
--- a/ydb/core/tablet_flat/ut/flat_test_db.cpp
+++ b/ydb/core/tablet_flat/ut/flat_test_db.cpp
@@ -26,7 +26,8 @@ struct TFakeKeyComparator {
if (bv.IsEmpty())
return false;
Y_ASSERT(av.Type() == bv.Type());
- int res = CompareTypedCells(TCell(&av), TCell(&bv), av.Type());
+ // pg types are not supported
+ int res = CompareTypedCells(TCell(&av), TCell(&bv), NScheme::TTypeInfo(av.Type(), {}));
if (res)
return res < 0;
}
@@ -76,10 +77,10 @@ class TFakeDbIterator : public ITestIterator {
TFakeTable::const_iterator RowIt;
TFakeTable::const_iterator RowEnd;
- TVector<NScheme::TTypeId> KeyTypes;
+ TVector<NScheme::TTypeInfo> KeyTypes;
TVector<TCell> KeyCells;
- TVector<NScheme::TTypeId> ValueTypes;
+ TVector<NScheme::TTypeInfo> ValueTypes;
TVector<TCell> ValueCells;
bool First = true;
diff --git a/ydb/core/tablet_flat/ut/flat_test_db_helpers.h b/ydb/core/tablet_flat/ut/flat_test_db_helpers.h
index d75e08e3867..7c8c87159b9 100644
--- a/ydb/core/tablet_flat/ut/flat_test_db_helpers.h
+++ b/ydb/core/tablet_flat/ut/flat_test_db_helpers.h
@@ -146,7 +146,7 @@ public:
Y_VERIFY(tagId, "Unknown column \"%s\" in table %u", tagName.data(), GetRoot());
const auto *colInfo = Scheme.GetColumnInfo(GetRoot(), *tagId);
Y_VERIFY(colInfo, "Column info not found for table id %u, column id %u", GetRoot(), *tagId);
- NScheme::TTypeId type = colInfo->PType;
+ NScheme::TTypeId type = colInfo->PType.GetTypeId();
TagOps[*tagId] = FromVal(type, val);
return *this;
}
@@ -180,7 +180,7 @@ template <typename T, typename... Tt>
void AppendKeyColumn(ui32 root, const TScheme& scheme, TVector<TFakeTableCell>& tuple, T t, Tt... tt) {
ui32 pos = tuple.size();
ui32 tag = scheme.GetTableInfo(root)->KeyColumns[pos];
- NScheme::TTypeId type = scheme.GetColumnInfo(root, tag)->PType;
+ NScheme::TTypeId type = scheme.GetColumnInfo(root, tag)->PType.GetTypeId();
tuple.push_back(FromVal(type, t));
AppendKeyColumn(root, scheme, tuple, tt...);
}
diff --git a/ydb/core/tablet_flat/ut/ut_db_scheme.cpp b/ydb/core/tablet_flat/ut/ut_db_scheme.cpp
index ee12efa9032..981c77243d5 100644
--- a/ydb/core/tablet_flat/ut/ut_db_scheme.cpp
+++ b/ydb/core/tablet_flat/ut/ut_db_scheme.cpp
@@ -41,8 +41,8 @@ namespace {
bld.AddFamily(TableId, GroupId1, StoreIdDef);
bld.SetFamily(TableId, GroupId1, ECache::Ever, ECodec::LZ4);
bld.AddFamily(TableId, GroupId2, StoreIdOut);
- bld.AddColumn(TableId, "key", ColId1, NScheme::TSmallBoundedString::TypeId, { });
- bld.AddColumn(TableId, "value", ColId2, NScheme::TUint32::TypeId, { });
+ bld.AddColumn(TableId, "key", ColId1, NScheme::TSmallBoundedString::TypeId, false);
+ bld.AddColumn(TableId, "value", ColId2, NScheme::TUint32::TypeId, false);
bld.AddColumnToKey(TableId, ColId1);
bld.AddColumnToFamily(TableId, ColId1, GroupId1);
bld.AddColumnToFamily(TableId, ColId2, GroupId2);
diff --git a/ydb/core/tablet_flat/ut_pg/CMakeLists.darwin.txt b/ydb/core/tablet_flat/ut_pg/CMakeLists.darwin.txt
new file mode 100644
index 00000000000..38b07eaf3fc
--- /dev/null
+++ b/ydb/core/tablet_flat/ut_pg/CMakeLists.darwin.txt
@@ -0,0 +1,52 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(ydb-core-tablet_flat-ut_pg)
+target_compile_options(ydb-core-tablet_flat-ut_pg PRIVATE
+ -DUSE_CURRENT_UDF_ABI_VERSION
+ -Wno-everything
+)
+target_include_directories(ydb-core-tablet_flat-ut_pg PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/include
+)
+target_link_libraries(ydb-core-tablet_flat-ut_pg PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ library-cpp-cpuid_check
+ cpp-testing-unittest_main
+ ydb-core-tablet_flat
+ ydb-core-scheme
+ test-libs-table
+ udf-service-exception_policy
+ yql-sql-pg
+)
+target_link_options(ydb-core-tablet_flat-ut_pg PRIVATE
+ -Wl,-no_deduplicate
+ -Wl,-sdk_version,10.15
+ -fPIC
+ -fPIC
+ -framework
+ CoreFoundation
+)
+target_sources(ydb-core-tablet_flat-ut_pg PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/ut_pg/flat_database_pg_ut.cpp
+)
+add_test(
+ NAME
+ ydb-core-tablet_flat-ut_pg
+ COMMAND
+ ydb-core-tablet_flat-ut_pg
+ --print-before-suite
+ --print-before-test
+ --fork-tests
+ --print-times
+ --show-fails
+)
+vcs_info(ydb-core-tablet_flat-ut_pg)
diff --git a/ydb/core/tablet_flat/ut_pg/CMakeLists.linux.txt b/ydb/core/tablet_flat/ut_pg/CMakeLists.linux.txt
new file mode 100644
index 00000000000..bb90d54f095
--- /dev/null
+++ b/ydb/core/tablet_flat/ut_pg/CMakeLists.linux.txt
@@ -0,0 +1,56 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(ydb-core-tablet_flat-ut_pg)
+target_compile_options(ydb-core-tablet_flat-ut_pg PRIVATE
+ -DUSE_CURRENT_UDF_ABI_VERSION
+ -Wno-everything
+)
+target_include_directories(ydb-core-tablet_flat-ut_pg PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/include
+)
+target_link_libraries(ydb-core-tablet_flat-ut_pg PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ cpp-malloc-tcmalloc
+ libs-tcmalloc-no_percpu_cache
+ library-cpp-cpuid_check
+ cpp-testing-unittest_main
+ ydb-core-tablet_flat
+ ydb-core-scheme
+ test-libs-table
+ udf-service-exception_policy
+ yql-sql-pg
+)
+target_link_options(ydb-core-tablet_flat-ut_pg PRIVATE
+ -ldl
+ -lrt
+ -Wl,--no-as-needed
+ -fPIC
+ -fPIC
+ -lpthread
+ -lrt
+ -ldl
+)
+target_sources(ydb-core-tablet_flat-ut_pg PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/ut_pg/flat_database_pg_ut.cpp
+)
+add_test(
+ NAME
+ ydb-core-tablet_flat-ut_pg
+ COMMAND
+ ydb-core-tablet_flat-ut_pg
+ --print-before-suite
+ --print-before-test
+ --fork-tests
+ --print-times
+ --show-fails
+)
+vcs_info(ydb-core-tablet_flat-ut_pg)
diff --git a/ydb/core/tablet_flat/ut_pg/CMakeLists.txt b/ydb/core/tablet_flat/ut_pg/CMakeLists.txt
new file mode 100644
index 00000000000..79468a5d8d0
--- /dev/null
+++ b/ydb/core/tablet_flat/ut_pg/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/ydb/core/tablet_flat/ut_pg/flat_database_pg_ut.cpp b/ydb/core/tablet_flat/ut_pg/flat_database_pg_ut.cpp
new file mode 100644
index 00000000000..4abd5e70191
--- /dev/null
+++ b/ydb/core/tablet_flat/ut_pg/flat_database_pg_ut.cpp
@@ -0,0 +1,142 @@
+#include <library/cpp/testing/unittest/registar.h>
+#include <ydb/core/tablet_flat/test/libs/table/test_dbase.h>
+
+extern "C" {
+#include "postgres.h"
+#include "catalog/pg_type_d.h"
+}
+
+namespace NKikimr {
+namespace NTable {
+
+Y_UNIT_TEST_SUITE(TFlatDatabasePgTest) {
+
+ Y_UNIT_TEST(BasicTypes) {
+ constexpr ui32 tableId = 1;
+
+ enum EColumnIds : ui32 {
+ IdBool = 1,
+ IdChar = 2,
+ IdInt2 = 3,
+ IdInt4 = 4,
+ IdInt8 = 5,
+ IdFloat4 = 6,
+ IdFloat8 = 7,
+ IdText = 8,
+ IdBytea = 9,
+ IdBpchar = 10,
+ };
+
+ NTest::TDbExec db;
+
+ auto makePgType = [] (ui32 oid) {
+ return NScheme::TTypeInfo(NScheme::NTypeIds::Pg, NPg::TypeDescFromPgTypeId(oid));
+ };
+
+ db.Begin();
+ db->Alter()
+ .AddTable("TestTable", tableId)
+ .AddPgColumn(tableId, "boolean", IdBool, NScheme::NTypeIds::Pg, BOOLOID, false)
+ .AddPgColumn(tableId, "char", IdChar, NScheme::NTypeIds::Pg, CHAROID, false)
+ .AddPgColumn(tableId, "int2", IdInt2, NScheme::NTypeIds::Pg, INT2OID, false)
+ .AddPgColumn(tableId, "int4", IdInt4, NScheme::NTypeIds::Pg, INT4OID, false)
+ .AddPgColumn(tableId, "int8", IdInt8, NScheme::NTypeIds::Pg, INT8OID, false)
+ .AddPgColumn(tableId, "float4", IdFloat4, NScheme::NTypeIds::Pg, FLOAT4OID, false)
+ .AddPgColumn(tableId, "float8", IdFloat8, NScheme::NTypeIds::Pg, FLOAT8OID, false)
+ .AddPgColumn(tableId, "text", IdText, NScheme::NTypeIds::Pg, TEXTOID, false)
+ .AddPgColumn(tableId, "bytea", IdBytea, NScheme::NTypeIds::Pg, BYTEAOID, false)
+ .AddPgColumn(tableId, "bpchar", IdBpchar, NScheme::NTypeIds::Pg, BPCHAROID, false)
+ .AddColumnToKey(tableId, IdText)
+ .AddColumnToKey(tableId, IdBytea)
+ .AddColumnToKey(tableId, IdInt2)
+ .AddColumnToKey(tableId, IdFloat4);
+ db.Commit();
+
+ bool boolVal = true;
+ char charVal = 'a';
+ i16 i16Val = 2;
+ i32 i32Val = 3;
+ i64 i64Val = 4;
+ float floatVal = 5.f;
+ double doubleVal = 6.;
+ auto strText = TString("abc");
+ auto strBytea = TString("bytea");
+ auto strBpchar = TString("bpchar");
+
+ for (int i = 1; i <= 10; ++i) {
+ db.Begin();
+
+ TVector<TRawTypeValue> key;
+ key.emplace_back(strText.data(), strText.size(), makePgType(TEXTOID));
+ key.emplace_back(strBytea.data(), strBytea.size(), makePgType(BYTEAOID));
+ key.emplace_back(&i16Val, sizeof(i16), makePgType(INT2OID));
+ float f = (float)i;
+ key.emplace_back(&f, sizeof(float), makePgType(FLOAT4OID));
+
+ TVector<NTable::TUpdateOp> ops;
+ ops.emplace_back(IdBool, NTable::ECellOp::Set,
+ TRawTypeValue(&boolVal, sizeof(bool), makePgType(BOOLOID)));
+ ops.emplace_back(IdChar, NTable::ECellOp::Set,
+ TRawTypeValue(&charVal, sizeof(char), makePgType(CHAROID)));
+ ops.emplace_back(IdInt4, NTable::ECellOp::Set,
+ TRawTypeValue(&i32Val, sizeof(i32), makePgType(INT4OID)));
+ ops.emplace_back(IdInt8, NTable::ECellOp::Set,
+ TRawTypeValue(&i64Val, sizeof(i64), makePgType(INT8OID)));
+ ops.emplace_back(IdFloat8, NTable::ECellOp::Set,
+ TRawTypeValue(&doubleVal, sizeof(double), makePgType(FLOAT8OID)));
+ ops.emplace_back(IdBpchar, NTable::ECellOp::Set,
+ TRawTypeValue(strBpchar.data(), strBpchar.size(), makePgType(BPCHAROID)));
+
+ db->Update(tableId, NTable::ERowOp::Upsert, key, ops);
+
+ db.Commit();
+ }
+
+ TVector<NTable::TTag> tags;
+ for (NTable::TTag t = 1; t <= 10; ++t) {
+ tags.push_back(t);
+ }
+
+ auto readDatabase = [&] () {
+ db.Begin();
+
+ TVector<TRawTypeValue> key;
+ key.emplace_back(strText.data(), strText.size(), makePgType(TEXTOID));
+ key.emplace_back(strBytea.data(), strBytea.size(), makePgType(BYTEAOID));
+ key.emplace_back(&i16Val, sizeof(i16), makePgType(INT2OID));
+ key.emplace_back(&floatVal, sizeof(float), makePgType(FLOAT4OID));
+
+ auto it = db->Iterate(tableId, key, tags, ELookup::GreaterThan);
+ size_t count = 0;
+ while (it->Next(NTable::ENext::All) == NTable::EReady::Data) {
+ auto key = it->GetKey();
+ auto value = it->GetValues();
+ UNIT_ASSERT_VALUES_EQUAL(key.ColumnCount, 4);
+ UNIT_ASSERT_VALUES_EQUAL(value.ColumnCount, 10);
+
+ UNIT_ASSERT_VALUES_EQUAL(value.Columns[0].AsValue<bool>(), boolVal);
+ UNIT_ASSERT_VALUES_EQUAL(value.Columns[1].AsValue<char>(), charVal);
+ UNIT_ASSERT_VALUES_EQUAL(value.Columns[2].AsValue<i16>(), i16Val);
+ UNIT_ASSERT_VALUES_EQUAL(value.Columns[3].AsValue<i32>(), i32Val);
+ UNIT_ASSERT_VALUES_EQUAL(value.Columns[4].AsValue<i64>(), i64Val);
+ UNIT_ASSERT(value.Columns[5].AsValue<float>() > floatVal);
+ UNIT_ASSERT_VALUES_EQUAL(value.Columns[6].AsValue<double>(), doubleVal);
+ UNIT_ASSERT(std::memcmp(value.Columns[7].Data(), strText.data(), value.Columns[7].Size()) == 0);
+ UNIT_ASSERT(std::memcmp(value.Columns[8].Data(), strBytea.data(), value.Columns[8].Size()) == 0);
+ UNIT_ASSERT(std::memcmp(value.Columns[9].Data(), strBpchar.data(), value.Columns[9].Size()) == 0);
+ ++count;
+ }
+
+ db.Commit();
+ };
+
+ readDatabase();
+
+ db.Snap(tableId).Compact(tableId, false);
+
+ readDatabase();
+ }
+}
+
+}
+}
diff --git a/ydb/core/tablet_flat/util_fmt_cell.h b/ydb/core/tablet_flat/util_fmt_cell.h
index d1f647a3ddf..f530b06d360 100644
--- a/ydb/core/tablet_flat/util_fmt_cell.h
+++ b/ydb/core/tablet_flat/util_fmt_cell.h
@@ -9,7 +9,7 @@ namespace NFmt {
class TPrintableTypedCells {
public:
- TPrintableTypedCells(TArrayRef<const TCell> cells, TArrayRef<const NScheme::TTypeId> types)
+ TPrintableTypedCells(TArrayRef<const TCell> cells, TArrayRef<const NScheme::TTypeInfo> types)
: Cells(cells)
, Types(types)
{
@@ -33,7 +33,7 @@ public:
private:
const TArrayRef<const TCell> Cells;
- const TArrayRef<const NScheme::TTypeId> Types;
+ const TArrayRef<const NScheme::TTypeInfo> Types;
};
}
diff --git a/ydb/core/testlib/CMakeLists.txt b/ydb/core/testlib/CMakeLists.txt
index 104f9124f7b..98c3ba82f14 100644
--- a/ydb/core/testlib/CMakeLists.txt
+++ b/ydb/core/testlib/CMakeLists.txt
@@ -8,6 +8,8 @@
add_subdirectory(actors)
add_subdirectory(basics)
+add_subdirectory(default)
+add_subdirectory(pg)
add_library(ydb-core-testlib)
target_compile_options(ydb-core-testlib PRIVATE
diff --git a/ydb/core/testlib/basics/CMakeLists.txt b/ydb/core/testlib/basics/CMakeLists.txt
index c968c145732..4703caf15ee 100644
--- a/ydb/core/testlib/basics/CMakeLists.txt
+++ b/ydb/core/testlib/basics/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(default)
add_library(core-testlib-basics)
target_compile_options(core-testlib-basics PRIVATE
@@ -34,7 +35,6 @@ target_link_libraries(core-testlib-basics PUBLIC
ydb-core-util
yql-minikql-invoke_builtins
udf-service-exception_policy
- yql-sql-pg_dummy
)
target_sources(core-testlib-basics PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/testlib/basics/appdata.cpp
diff --git a/ydb/core/testlib/basics/default/CMakeLists.txt b/ydb/core/testlib/basics/default/CMakeLists.txt
new file mode 100644
index 00000000000..6339cd1b4b7
--- /dev/null
+++ b/ydb/core/testlib/basics/default/CMakeLists.txt
@@ -0,0 +1,16 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(testlib-basics-default INTERFACE)
+target_link_libraries(testlib-basics-default INTERFACE
+ contrib-libs-cxxsupp
+ yutil
+ core-testlib-basics
+ yql-sql-pg_dummy
+)
diff --git a/ydb/core/testlib/default/CMakeLists.txt b/ydb/core/testlib/default/CMakeLists.txt
new file mode 100644
index 00000000000..7f271a88a68
--- /dev/null
+++ b/ydb/core/testlib/default/CMakeLists.txt
@@ -0,0 +1,16 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(core-testlib-default INTERFACE)
+target_link_libraries(core-testlib-default INTERFACE
+ contrib-libs-cxxsupp
+ yutil
+ ydb-core-testlib
+ yql-sql-pg_dummy
+)
diff --git a/ydb/core/testlib/pg/CMakeLists.txt b/ydb/core/testlib/pg/CMakeLists.txt
new file mode 100644
index 00000000000..262e65a2606
--- /dev/null
+++ b/ydb/core/testlib/pg/CMakeLists.txt
@@ -0,0 +1,16 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(core-testlib-pg INTERFACE)
+target_link_libraries(core-testlib-pg INTERFACE
+ contrib-libs-cxxsupp
+ yutil
+ ydb-core-testlib
+ yql-sql-pg
+)
diff --git a/ydb/core/tx/balance_coverage/ut/CMakeLists.darwin.txt b/ydb/core/tx/balance_coverage/ut/CMakeLists.darwin.txt
index b4f3bbee631..8bca67bafb8 100644
--- a/ydb/core/tx/balance_coverage/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tx/balance_coverage/ut/CMakeLists.darwin.txt
@@ -18,7 +18,7 @@ target_link_libraries(ydb-core-tx-balance_coverage-ut PUBLIC
cpp-testing-unittest_main
core-tx-balance_coverage
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tx-balance_coverage-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/balance_coverage/ut/CMakeLists.linux.txt b/ydb/core/tx/balance_coverage/ut/CMakeLists.linux.txt
index bd6824df917..540643cb5e7 100644
--- a/ydb/core/tx/balance_coverage/ut/CMakeLists.linux.txt
+++ b/ydb/core/tx/balance_coverage/ut/CMakeLists.linux.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-tx-balance_coverage-ut PUBLIC
cpp-testing-unittest_main
core-tx-balance_coverage
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tx-balance_coverage-ut PRIVATE
-ldl
diff --git a/ydb/core/tx/columnshard/columnshard__scan.cpp b/ydb/core/tx/columnshard/columnshard__scan.cpp
index 01a26bc26f6..41245654f76 100644
--- a/ydb/core/tx/columnshard/columnshard__scan.cpp
+++ b/ydb/core/tx/columnshard/columnshard__scan.cpp
@@ -474,8 +474,8 @@ private:
ui32 ReadMetadataIndex;
std::unique_ptr<TScanIteratorBase> ScanIterator;
- TVector<std::pair<TString, NScheme::TTypeId>> ResultYqlSchema;
- TVector<std::pair<TString, NScheme::TTypeId>> KeyYqlSchema;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> ResultYqlSchema;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> KeyYqlSchema;
const TSerializedTableRange TableRange;
const TSmallVec<bool> SkipNullKeys;
const TInstant Deadline;
@@ -496,7 +496,7 @@ private:
};
static void FillPredicatesFromRange(TReadDescription& read, const ::NKikimrTx::TKeyRange& keyRange,
- const TVector<std::pair<TString, NScheme::TTypeId>>& ydbPk, ui64 tabletId) {
+ const TVector<std::pair<TString, NScheme::TTypeInfo>>& ydbPk, ui64 tabletId) {
TSerializedTableRange range(keyRange);
read.GreaterPredicate = std::make_shared<NOlap::TPredicate>();
diff --git a/ydb/core/tx/columnshard/columnshard_common.cpp b/ydb/core/tx/columnshard/columnshard_common.cpp
index 25337a206fe..7c81aabe334 100644
--- a/ydb/core/tx/columnshard/columnshard_common.cpp
+++ b/ydb/core/tx/columnshard/columnshard_common.cpp
@@ -6,8 +6,8 @@ namespace NKikimr::NColumnShard {
namespace {
-TVector<NScheme::TTypeId> ExtractTypes(const TVector<std::pair<TString, NScheme::TTypeId>>& columns) {
- TVector<NScheme::TTypeId> types;
+TVector<NScheme::TTypeInfo> ExtractTypes(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns) {
+ TVector<NScheme::TTypeInfo> types;
types.reserve(columns.size());
for (auto& [name, type] : columns) {
types.push_back(type);
@@ -15,13 +15,13 @@ TVector<NScheme::TTypeId> ExtractTypes(const TVector<std::pair<TString, NScheme:
return types;
}
-TString FromCells(const TConstArrayRef<TCell>& cells, const TVector<std::pair<TString, NScheme::TTypeId>>& columns) {
+TString FromCells(const TConstArrayRef<TCell>& cells, const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns) {
Y_VERIFY(cells.size() == columns.size());
if (cells.empty()) {
return {};
}
- TVector<NScheme::TTypeId> types = ExtractTypes(columns);
+ TVector<NScheme::TTypeInfo> types = ExtractTypes(columns);
NArrow::TArrowBatchBuilder batchBuilder;
batchBuilder.Reserve(1);
@@ -338,9 +338,9 @@ using EOperation = NArrow::EOperation;
using TPredicate = NOlap::TPredicate;
std::pair<TPredicate, TPredicate> RangePredicates(const TSerializedTableRange& range,
- const TVector<std::pair<TString, NScheme::TTypeId>>& columns) {
+ const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns) {
TVector<TCell> leftCells;
- TVector<std::pair<TString, NScheme::TTypeId>> leftColumns;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> leftColumns;
bool leftTrailingNull = false;
{
TConstArrayRef<TCell> cells = range.From.GetCells();
@@ -360,7 +360,7 @@ std::pair<TPredicate, TPredicate> RangePredicates(const TSerializedTableRange& r
}
TVector<TCell> rightCells;
- TVector<std::pair<TString, NScheme::TTypeId>> rightColumns;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> rightColumns;
bool rightTrailingNull = false;
{
TConstArrayRef<TCell> cells = range.To.GetCells();
diff --git a/ydb/core/tx/columnshard/columnshard_common.h b/ydb/core/tx/columnshard/columnshard_common.h
index fb515945dc5..6eabb89910e 100644
--- a/ydb/core/tx/columnshard/columnshard_common.h
+++ b/ydb/core/tx/columnshard/columnshard_common.h
@@ -15,7 +15,7 @@ namespace NKikimr::NColumnShard {
using NOlap::TWriteId;
std::pair<NOlap::TPredicate, NOlap::TPredicate>
-RangePredicates(const TSerializedTableRange& range, const TVector<std::pair<TString, NScheme::TTypeId>>& columns);
+RangePredicates(const TSerializedTableRange& range, const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns);
class IColumnResolver {
public:
diff --git a/ydb/core/tx/columnshard/columnshard_impl.cpp b/ydb/core/tx/columnshard/columnshard_impl.cpp
index efb22ed74e7..b0cb8d70e1a 100644
--- a/ydb/core/tx/columnshard/columnshard_impl.cpp
+++ b/ydb/core/tx/columnshard/columnshard_impl.cpp
@@ -1,5 +1,6 @@
#include "columnshard_impl.h"
#include "columnshard_schema.h"
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/tx/columnshard/engines/column_engine_logs.h>
#include <ydb/core/tablet/tablet_counters_protobuf.h>
@@ -809,8 +810,9 @@ NOlap::TIndexInfo TColumnShard::ConvertSchema(const NKikimrSchemeOp::TColumnTabl
for (const auto& col : schema.GetColumns()) {
const ui32 id = col.GetId();
const TString& name = col.GetName();
-
- indexInfo.Columns[id] = NTable::TColumn(name, id, col.GetTypeId());
+ auto typeInfo = NScheme::TypeInfoFromProtoColumnType(col.GetTypeId(),
+ col.HasTypeInfo() ? &col.GetTypeInfo() : nullptr);
+ indexInfo.Columns[id] = NTable::TColumn(name, id, typeInfo);
indexInfo.ColumnNames[name] = id;
}
diff --git a/ydb/core/tx/columnshard/columnshard_ut_common.cpp b/ydb/core/tx/columnshard/columnshard_ut_common.cpp
index ef849697feb..786359eb054 100644
--- a/ydb/core/tx/columnshard/columnshard_ut_common.cpp
+++ b/ydb/core/tx/columnshard/columnshard_ut_common.cpp
@@ -4,6 +4,7 @@
#include <ydb/core/base/tablet.h>
#include <ydb/core/base/tablet_resolver.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <library/cpp/testing/unittest/registar.h>
namespace NKikimr::NTxUT {
@@ -101,7 +102,13 @@ void ScanIndexStats(TTestBasicRuntime& runtime, TActorId& sender, const TVector<
auto ydbSchema = PrimaryIndexStatsSchema;
for (const auto& col : ydbSchema.Columns) {
record.AddColumnTags(col.second.Id);
- record.AddColumnTypes(col.second.PType);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(col.second.PType);
+ record.AddColumnTypes(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *record.AddColumnTypeInfos() = *columnType.TypeInfo;
+ } else {
+ *record.AddColumnTypeInfos() = NKikimrProto::TTypeInfo();
+ }
}
for (ui64 pathId : pathIds) {
@@ -155,11 +162,12 @@ void PlanCommit(TTestBasicRuntime& runtime, TActorId& sender, ui64 planStep, con
}
}
-TVector<TCell> MakeTestCells(const TVector<TTypeId>& types, ui32 value, TVector<TString>& mem) {
+TVector<TCell> MakeTestCells(const TVector<TTypeInfo>& types, ui32 value, TVector<TString>& mem) {
TVector<TCell> cells;
cells.reserve(types.size());
- for (auto& type : types) {
+ for (auto& typeInfo : types) {
+ auto type = typeInfo.GetTypeId();
if (type == NTypeIds::Utf8 ||
type == NTypeIds::String ||
type == NTypeIds::String4k ||
@@ -196,7 +204,7 @@ TVector<TCell> MakeTestCells(const TVector<TTypeId>& types, ui32 value, TVector<
return cells;
}
-TString MakeTestBlob(std::pair<ui64, ui64> range, const TVector<std::pair<TString, TTypeId>>& columns,
+TString MakeTestBlob(std::pair<ui64, ui64> range, const TVector<std::pair<TString, TTypeInfo>>& columns,
const THashSet<TString>& nullColumns) {
TString err;
NArrow::TArrowBatchBuilder batchBuilder(arrow::Compression::LZ4_FRAME);
@@ -210,7 +218,7 @@ TString MakeTestBlob(std::pair<ui64, ui64> range, const TVector<std::pair<TStrin
}
TVector<TString> mem;
- TVector<TTypeId> types = TTestSchema::ExtractTypes(columns);
+ TVector<TTypeInfo> types = TTestSchema::ExtractTypes(columns);
// insert, not ordered
for (size_t i = range.first; i < range.second; i += 2) {
TVector<TCell> cells = MakeTestCells(types, i, mem);
@@ -240,9 +248,9 @@ TString MakeTestBlob(std::pair<ui64, ui64> range, const TVector<std::pair<TStrin
}
TSerializedTableRange MakeTestRange(std::pair<ui64, ui64> range, bool inclusiveFrom, bool inclusiveTo,
- const TVector<std::pair<TString, TTypeId>>& columns) {
+ const TVector<std::pair<TString, TTypeInfo>>& columns) {
TVector<TString> mem;
- TVector<TTypeId> types = TTestSchema::ExtractTypes(columns);
+ TVector<TTypeInfo> types = TTestSchema::ExtractTypes(columns);
TVector<TCell> cellsFrom = MakeTestCells(types, range.first, mem);
TVector<TCell> cellsTo = MakeTestCells(types, range.second, mem);
diff --git a/ydb/core/tx/columnshard/columnshard_ut_common.h b/ydb/core/tx/columnshard/columnshard_ut_common.h
index 2fdb5c12a99..5cb92a8ae83 100644
--- a/ydb/core/tx/columnshard/columnshard_ut_common.h
+++ b/ydb/core/tx/columnshard/columnshard_ut_common.h
@@ -5,6 +5,7 @@
#include <ydb/core/formats/arrow_batch_builder.h>
#include <ydb/core/scheme/scheme_tabledefs.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/testlib/tablet_helpers.h>
#include <ydb/core/testlib/test_client.h>
#include <library/cpp/testing/unittest/registar.h>
@@ -21,6 +22,7 @@ public:
namespace NTypeIds = NScheme::NTypeIds;
using TTypeId = NScheme::TTypeId;
+using TTypeInfo = NScheme::TTypeInfo;
struct TTestSchema {
static const constexpr char * DefaultTtlColumn = "saved_at";
@@ -87,93 +89,97 @@ struct TTestSchema {
};
static auto YdbSchema() {
- TVector<std::pair<TString, TTypeId>> schema = {
+ TVector<std::pair<TString, TTypeInfo>> schema = {
// PK
- {"timestamp", NTypeIds::Timestamp },
- {"resource_type", NTypeIds::Utf8 },
- {"resource_id", NTypeIds::Utf8 },
- {"uid", NTypeIds::Utf8 },
+ {"timestamp", TTypeInfo(NTypeIds::Timestamp) },
+ {"resource_type", TTypeInfo(NTypeIds::Utf8) },
+ {"resource_id", TTypeInfo(NTypeIds::Utf8) },
+ {"uid", TTypeInfo(NTypeIds::Utf8) },
//
- {"level", NTypeIds::Int32 },
- {"message", NTypeIds::Utf8 },
- {"json_payload", NTypeIds::Json },
- {"ingested_at", NTypeIds::Timestamp },
- {"saved_at", NTypeIds::Timestamp },
- {"request_id", NTypeIds::Utf8 }
+ {"level", TTypeInfo(NTypeIds::Int32) },
+ {"message", TTypeInfo(NTypeIds::Utf8) },
+ {"json_payload", TTypeInfo(NTypeIds::Json) },
+ {"ingested_at", TTypeInfo(NTypeIds::Timestamp) },
+ {"saved_at", TTypeInfo(NTypeIds::Timestamp) },
+ {"request_id", TTypeInfo(NTypeIds::Utf8) }
};
return schema;
};
static auto YdbExoticSchema() {
- TVector<std::pair<TString, TTypeId>> schema = {
+ TVector<std::pair<TString, TTypeInfo>> schema = {
// PK
- {"timestamp", NTypeIds::Timestamp },
- {"resource_type", NTypeIds::Utf8 },
- {"resource_id", NTypeIds::Utf8 },
- {"uid", NTypeIds::Utf8 },
+ {"timestamp", TTypeInfo(NTypeIds::Timestamp) },
+ {"resource_type", TTypeInfo(NTypeIds::Utf8) },
+ {"resource_id", TTypeInfo(NTypeIds::Utf8) },
+ {"uid", TTypeInfo(NTypeIds::Utf8) },
//
- {"level", NTypeIds::Int32 },
- {"message", NTypeIds::String4k },
- {"json_payload", NTypeIds::JsonDocument },
- {"ingested_at", NTypeIds::Timestamp },
- {"saved_at", NTypeIds::Timestamp },
- {"request_id", NTypeIds::Yson }
+ {"level", TTypeInfo(NTypeIds::Int32) },
+ {"message", TTypeInfo(NTypeIds::String4k) },
+ {"json_payload", TTypeInfo(NTypeIds::JsonDocument) },
+ {"ingested_at", TTypeInfo(NTypeIds::Timestamp) },
+ {"saved_at", TTypeInfo(NTypeIds::Timestamp) },
+ {"request_id", TTypeInfo(NTypeIds::Yson) }
};
return schema;
};
static auto YdbPkSchema() {
- TVector<std::pair<TString, TTypeId>> schema = {
- {"timestamp", NTypeIds::Timestamp },
- {"resource_type", NTypeIds::Utf8 },
- {"resource_id", NTypeIds::Utf8 },
- {"uid", NTypeIds::Utf8 }
+ TVector<std::pair<TString, TTypeInfo>> schema = {
+ {"timestamp", TTypeInfo(NTypeIds::Timestamp) },
+ {"resource_type", TTypeInfo(NTypeIds::Utf8) },
+ {"resource_id", TTypeInfo(NTypeIds::Utf8) },
+ {"uid", TTypeInfo(NTypeIds::Utf8) }
};
return schema;
}
static auto YdbAllTypesSchema() {
- TVector<std::pair<TString, TTypeId>> schema = {
- { "ts", NTypeIds::Timestamp },
-
- { "i8", NTypeIds::Int8 },
- { "i16", NTypeIds::Int16 },
- { "i32", NTypeIds::Int32 },
- { "i64", NTypeIds::Int64 },
- { "u8", NTypeIds::Uint8 },
- { "u16", NTypeIds::Uint16 },
- { "u32", NTypeIds::Uint32 },
- { "u64", NTypeIds::Uint64 },
- { "float", NTypeIds::Float },
- { "double", NTypeIds::Double },
-
- { "byte", NTypeIds::Byte },
- //{ "bool", NTypeIds::Bool },
- //{ "decimal", NTypeIds::Decimal },
- //{ "dynum", NTypeIds::DyNumber },
-
- { "date", NTypeIds::Date },
- { "datetime", NTypeIds::Datetime },
- //{ "interval", NTypeIds::Interval },
-
- {"text", NTypeIds::Text },
- {"bytes", NTypeIds::Bytes },
- {"yson", NTypeIds::Yson },
- {"json", NTypeIds::Json },
- {"jsondoc", NTypeIds::JsonDocument }
+ TVector<std::pair<TString, TTypeInfo>> schema = {
+ { "ts", TTypeInfo(NTypeIds::Timestamp) },
+
+ { "i8", TTypeInfo(NTypeIds::Int8) },
+ { "i16", TTypeInfo(NTypeIds::Int16) },
+ { "i32", TTypeInfo(NTypeIds::Int32) },
+ { "i64", TTypeInfo(NTypeIds::Int64) },
+ { "u8", TTypeInfo(NTypeIds::Uint8) },
+ { "u16", TTypeInfo(NTypeIds::Uint16) },
+ { "u32", TTypeInfo(NTypeIds::Uint32) },
+ { "u64", TTypeInfo(NTypeIds::Uint64) },
+ { "float", TTypeInfo(NTypeIds::Float) },
+ { "double", TTypeInfo(NTypeIds::Double) },
+
+ { "byte", TTypeInfo(NTypeIds::Byte) },
+ //{ "bool", TTypeInfo(NTypeIds::Bool) },
+ //{ "decimal", TTypeInfo(NTypeIds::Decimal) },
+ //{ "dynum", TTypeInfo(NTypeIds::DyNumber) },
+
+ { "date", TTypeInfo(NTypeIds::Date) },
+ { "datetime", TTypeInfo(NTypeIds::Datetime) },
+ //{ "interval", TTypeInfo(NTypeIds::Interval) },
+
+ {"text", TTypeInfo(NTypeIds::Text) },
+ {"bytes", TTypeInfo(NTypeIds::Bytes) },
+ {"yson", TTypeInfo(NTypeIds::Yson) },
+ {"json", TTypeInfo(NTypeIds::Json) },
+ {"jsondoc", TTypeInfo(NTypeIds::JsonDocument) }
};
return schema;
};
- static NKikimrSchemeOp::TOlapColumnDescription CreateColumn(ui32 id, const TString& name, TTypeId type) {
+ static NKikimrSchemeOp::TOlapColumnDescription CreateColumn(ui32 id, const TString& name, TTypeInfo type) {
NKikimrSchemeOp::TOlapColumnDescription col;
col.SetId(id);
col.SetName(name);
- col.SetTypeId(type);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(type);
+ col.SetTypeId(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *col.MutableTypeInfo() = *columnType.TypeInfo;
+ }
return col;
}
- static TString CreateTableTxBody(ui64 pathId, const TVector<std::pair<TString, TTypeId>>& columns,
+ static TString CreateTableTxBody(ui64 pathId, const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns,
const TTableSpecials& specials = {}) {
NKikimrTxColumnShard::TSchemaTxBody tx;
auto* table = tx.MutableEnsureTables()->AddTables();
@@ -310,7 +316,7 @@ struct TTestSchema {
return txBody;
}
- static TVector<TString> ExtractNames(const TVector<std::pair<TString, TTypeId>>& columns) {
+ static TVector<TString> ExtractNames(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns) {
TVector<TString> out;
out.reserve(columns.size());
for (auto& col : columns) {
@@ -319,8 +325,8 @@ struct TTestSchema {
return out;
}
- static TVector<TTypeId> ExtractTypes(const TVector<std::pair<TString, TTypeId>>& columns) {
- TVector<TTypeId> types;
+ static TVector<NScheme::TTypeInfo> ExtractTypes(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns) {
+ TVector<NScheme::TTypeInfo> types;
types.reserve(columns.size());
for (auto& [name, type] : columns) {
types.push_back(type);
@@ -344,9 +350,9 @@ inline void PlanCommit(TTestBasicRuntime& runtime, TActorId& sender, ui64 planSt
PlanCommit(runtime, sender, planStep, ids);
}
-TString MakeTestBlob(std::pair<ui64, ui64> range, const TVector<std::pair<TString, TTypeId>>& columns,
+TString MakeTestBlob(std::pair<ui64, ui64> range, const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns,
const THashSet<TString>& nullColumns = {});
TSerializedTableRange MakeTestRange(std::pair<ui64, ui64> range, bool inclusiveFrom, bool inclusiveTo,
- const TVector<std::pair<TString, TTypeId>>& columns);
+ const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns);
}
diff --git a/ydb/core/tx/columnshard/engines/index_info.cpp b/ydb/core/tx/columnshard/engines/index_info.cpp
index f13157b96cb..e7400f255ab 100644
--- a/ydb/core/tx/columnshard/engines/index_info.cpp
+++ b/ydb/core/tx/columnshard/engines/index_info.cpp
@@ -97,6 +97,7 @@ TVector<TRawTypeValue> TIndexInfo::ExtractKey(const THashMap<ui32, TCell>& field
const TCell& cell = it->second;
Y_VERIFY(allowNulls || !cell.IsNull());
+
key.emplace_back(TRawTypeValue(cell.AsRef(), column.PType));
}
diff --git a/ydb/core/tx/columnshard/engines/index_info.h b/ydb/core/tx/columnshard/engines/index_info.h
index ffb108c68b9..7484a05c9a9 100644
--- a/ydb/core/tx/columnshard/engines/index_info.h
+++ b/ydb/core/tx/columnshard/engines/index_info.h
@@ -40,9 +40,9 @@ static std::shared_ptr<arrow::Schema> MakeArrowSchema(const NTable::TScheme::TTa
}
inline
-TVector<std::pair<TString, NScheme::TTypeId>>
+TVector<std::pair<TString, NScheme::TTypeInfo>>
GetColumns(const NTable::TScheme::TTableSchema& tableSchema, const TVector<ui32>& ids) {
- TVector<std::pair<TString, NScheme::TTypeId>> out;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> out;
out.reserve(ids.size());
for (ui32 id : ids) {
Y_VERIFY(tableSchema.Columns.count(id));
@@ -127,17 +127,17 @@ struct TIndexInfo : public NTable::TScheme::TTableSchema {
return out;
}
- TVector<std::pair<TString, NScheme::TTypeId>> GetColumns(const TVector<ui32>& ids) const {
+ TVector<std::pair<TString, NScheme::TTypeInfo>> GetColumns(const TVector<ui32>& ids) const {
return NOlap::GetColumns(*this, ids);
}
// Traditional Primary Key (includes uniqueness, search and sorting logic)
- TVector<std::pair<TString, NScheme::TTypeId>> GetPK() const {
+ TVector<std::pair<TString, NScheme::TTypeInfo>> GetPK() const {
return GetColumns(KeyColumns);
}
- static TVector<std::pair<TString, NScheme::TTypeId>> SchemaIndexStats(ui32 version = 0);
- static TVector<std::pair<TString, NScheme::TTypeId>> SchemaIndexStatsKey(ui32 version = 0);
+ static TVector<std::pair<TString, NScheme::TTypeInfo>> SchemaIndexStats(ui32 version = 0);
+ static TVector<std::pair<TString, NScheme::TTypeInfo>> SchemaIndexStatsKey(ui32 version = 0);
ui32 GetPKFirstColumnId() const {
Y_VERIFY(KeyColumns.size());
@@ -153,7 +153,7 @@ struct TIndexInfo : public NTable::TScheme::TTableSchema {
const std::shared_ptr<arrow::Schema>& GetIndexKey() const { return IndexKey; }
void SetAllKeys(const TVector<TString>& columns, const TVector<int>& indexKeyPos);
- void SetAllKeys(const TVector<std::pair<TString, NScheme::TTypeId>>& columns, const TVector<int>& indexKeyPos) {
+ void SetAllKeys(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns, const TVector<int>& indexKeyPos) {
SetAllKeys(NamesOnly(columns), indexKeyPos);
}
@@ -261,7 +261,7 @@ private:
}
}
- static TVector<TString> NamesOnly(const TVector<std::pair<TString, NScheme::TTypeId>>& columns) {
+ static TVector<TString> NamesOnly(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns) {
TVector<TString> out;
out.reserve(columns.size());
for (auto& [name, type] : columns) {
diff --git a/ydb/core/tx/columnshard/engines/indexed_read_data.cpp b/ydb/core/tx/columnshard/engines/indexed_read_data.cpp
index bbc8823f095..4b98d5329cc 100644
--- a/ydb/core/tx/columnshard/engines/indexed_read_data.cpp
+++ b/ydb/core/tx/columnshard/engines/indexed_read_data.cpp
@@ -128,11 +128,11 @@ std::unique_ptr<NColumnShard::TScanIteratorBase> TReadMetadata::StartScan() cons
}
-TVector<std::pair<TString, NScheme::TTypeId>> TReadStatsMetadata::GetResultYqlSchema() const {
+TVector<std::pair<TString, NScheme::TTypeInfo>> TReadStatsMetadata::GetResultYqlSchema() const {
return NOlap::GetColumns(NColumnShard::PrimaryIndexStatsSchema, ResultColumnIds);
}
-TVector<std::pair<TString, NScheme::TTypeId>> TReadStatsMetadata::GetKeyYqlSchema() const {
+TVector<std::pair<TString, NScheme::TTypeInfo>> TReadStatsMetadata::GetKeyYqlSchema() const {
return NOlap::GetColumns(NColumnShard::PrimaryIndexStatsSchema, NColumnShard::PrimaryIndexStatsSchema.KeyColumns);
}
diff --git a/ydb/core/tx/columnshard/engines/indexed_read_data.h b/ydb/core/tx/columnshard/engines/indexed_read_data.h
index 0c7818bbbab..ecb594caa11 100644
--- a/ydb/core/tx/columnshard/engines/indexed_read_data.h
+++ b/ydb/core/tx/columnshard/engines/indexed_read_data.h
@@ -56,8 +56,8 @@ struct TReadMetadataBase {
bool IsSorted() const { return IsAscSorted() || IsDescSorted(); }
void SetDescSorting() { Sorting = ESorting::DESC; }
- virtual TVector<std::pair<TString, NScheme::TTypeId>> GetResultYqlSchema() const = 0;
- virtual TVector<std::pair<TString, NScheme::TTypeId>> GetKeyYqlSchema() const = 0;
+ virtual TVector<std::pair<TString, NScheme::TTypeInfo>> GetResultYqlSchema() const = 0;
+ virtual TVector<std::pair<TString, NScheme::TTypeInfo>> GetKeyYqlSchema() const = 0;
virtual std::unique_ptr<NColumnShard::TScanIteratorBase> StartScan() const = 0;
virtual void Dump(IOutputStream& out) const { Y_UNUSED(out); };
@@ -102,7 +102,7 @@ struct TReadMetadata : public TReadMetadataBase, public std::enable_shared_from_
return IndexInfo.GetReplaceKey();
}
- TVector<std::pair<TString, NScheme::TTypeId>> GetResultYqlSchema() const override {
+ TVector<std::pair<TString, NScheme::TTypeInfo>> GetResultYqlSchema() const override {
TVector<NTable::TTag> columnIds;
columnIds.reserve(ResultSchema->num_fields());
for (const auto& field: ResultSchema->fields()) {
@@ -112,7 +112,7 @@ struct TReadMetadata : public TReadMetadataBase, public std::enable_shared_from_
return IndexInfo.GetColumns(columnIds);
}
- TVector<std::pair<TString, NScheme::TTypeId>> GetKeyYqlSchema() const override {
+ TVector<std::pair<TString, NScheme::TTypeInfo>> GetKeyYqlSchema() const override {
return IndexInfo.GetPK();
}
@@ -165,9 +165,9 @@ struct TReadStatsMetadata : public TReadMetadataBase, public std::enable_shared_
: TabletId(tabletId)
{}
- TVector<std::pair<TString, NScheme::TTypeId>> GetResultYqlSchema() const override;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> GetResultYqlSchema() const override;
- TVector<std::pair<TString, NScheme::TTypeId>> GetKeyYqlSchema() const override;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> GetKeyYqlSchema() const override;
std::unique_ptr<NColumnShard::TScanIteratorBase> StartScan() const override;
};
diff --git a/ydb/core/tx/columnshard/engines/ut_logs_engine.cpp b/ydb/core/tx/columnshard/engines/ut_logs_engine.cpp
index fb3546293ce..953e700a5d6 100644
--- a/ydb/core/tx/columnshard/engines/ut_logs_engine.cpp
+++ b/ydb/core/tx/columnshard/engines/ut_logs_engine.cpp
@@ -8,6 +8,7 @@ namespace NKikimr {
using namespace NOlap;
namespace NTypeIds = NScheme::NTypeIds;
using TTypeId = NScheme::TTypeId;
+using TTypeInfo = NScheme::TTypeInfo;
namespace {
@@ -153,21 +154,21 @@ private:
THashMap<ui32, TIndex> Indices;
};
-static const TVector<std::pair<TString, TTypeId>> testColumns = {
+static const TVector<std::pair<TString, TTypeInfo>> testColumns = {
// PK
- {"timestamp", NTypeIds::Timestamp },
- {"resource_type", NTypeIds::Utf8 },
- {"resource_id", NTypeIds::Utf8 },
- {"uid", NTypeIds::Utf8 },
+ {"timestamp", TTypeInfo(NTypeIds::Timestamp) },
+ {"resource_type", TTypeInfo(NTypeIds::Utf8) },
+ {"resource_id", TTypeInfo(NTypeIds::Utf8) },
+ {"uid", TTypeInfo(NTypeIds::Utf8) },
//
- {"message", NTypeIds::Utf8 }
+ {"message", TTypeInfo(NTypeIds::Utf8) }
};
-static const TVector<std::pair<TString, TTypeId>> testKey = {
- {"timestamp", NTypeIds::Timestamp },
- {"resource_type", NTypeIds::Utf8 },
- {"resource_id", NTypeIds::Utf8 },
- {"uid", NTypeIds::Utf8 }
+static const TVector<std::pair<TString, TTypeInfo>> testKey = {
+ {"timestamp", TTypeInfo(NTypeIds::Timestamp) },
+ {"resource_type", TTypeInfo(NTypeIds::Utf8) },
+ {"resource_id", TTypeInfo(NTypeIds::Utf8) },
+ {"uid", TTypeInfo(NTypeIds::Utf8) }
};
TIndexInfo TestTableInfo() {
diff --git a/ydb/core/tx/columnshard/ut/CMakeLists.darwin.txt b/ydb/core/tx/columnshard/ut/CMakeLists.darwin.txt
index 64503d0cb59..e61780de694 100644
--- a/ydb/core/tx/columnshard/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tx/columnshard/ut/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-columnshard-ut PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
public-lib-yson_value
)
diff --git a/ydb/core/tx/columnshard/ut/CMakeLists.linux.txt b/ydb/core/tx/columnshard/ut/CMakeLists.linux.txt
index 254a9058ecc..62ba940e34b 100644
--- a/ydb/core/tx/columnshard/ut/CMakeLists.linux.txt
+++ b/ydb/core/tx/columnshard/ut/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-columnshard-ut PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
public-lib-yson_value
)
diff --git a/ydb/core/tx/columnshard/ut_columnshard_read_write.cpp b/ydb/core/tx/columnshard/ut_columnshard_read_write.cpp
index 2a28f40711a..7dda4cdcdb8 100644
--- a/ydb/core/tx/columnshard/ut_columnshard_read_write.cpp
+++ b/ydb/core/tx/columnshard/ut_columnshard_read_write.cpp
@@ -16,9 +16,10 @@ namespace
namespace NTypeIds = NScheme::NTypeIds;
using TTypeId = NScheme::TTypeId;
+using TTypeInfo = NScheme::TTypeInfo;
-static const TVector<std::pair<TString, TTypeId>> testYdbSchema = TTestSchema::YdbSchema();
-static const TVector<std::pair<TString, TTypeId>> testYdbPkSchema = TTestSchema::YdbPkSchema();
+static const TVector<std::pair<TString, TTypeInfo>> testYdbSchema = TTestSchema::YdbSchema();
+static const TVector<std::pair<TString, TTypeInfo>> testYdbPkSchema = TTestSchema::YdbPkSchema();
bool DataHas(const TVector<TString>& blobs, const TString& srtSchema, std::pair<ui64, ui64> range,
bool requireUniq = false) {
@@ -210,7 +211,7 @@ bool CheckColumns(const TString& blob, const NKikimrTxColumnShard::TMetadata& me
}
void SetupSchema(TTestBasicRuntime& runtime, TActorId& sender, ui64 pathId,
- const TVector<std::pair<TString, TTypeId>>& schema = TTestSchema::YdbSchema(),
+ const TVector<std::pair<TString, TTypeInfo>>& schema = TTestSchema::YdbSchema(),
NOlap::TSnapshot snap = {10, 10}, TString codec = "") {
bool ok = ProposeSchemaTx(runtime, sender,
TTestSchema::CreateTableTxBody(pathId, schema,
@@ -220,7 +221,7 @@ void SetupSchema(TTestBasicRuntime& runtime, TActorId& sender, ui64 pathId,
PlanSchemaTx(runtime, sender, snap);
}
-void TestWrite(const TVector<std::pair<TString, TTypeId>>& ydbSchema) {
+void TestWrite(const TVector<std::pair<TString, TTypeInfo>>& ydbSchema) {
TTestBasicRuntime runtime;
TTester::Setup(runtime);
@@ -241,7 +242,7 @@ void TestWrite(const TVector<std::pair<TString, TTypeId>>& ydbSchema) {
bool ok = WriteData(runtime, sender, metaShard, writeId, tableId, MakeTestBlob({0, 100}, ydbSchema));
UNIT_ASSERT(ok);
- TVector<std::pair<TString, TTypeId>> schema = ydbSchema;
+ TVector<std::pair<TString, TTypeInfo>> schema = ydbSchema;
// no data
@@ -263,29 +264,29 @@ void TestWrite(const TVector<std::pair<TString, TTypeId>>& ydbSchema) {
// TODO: better check (it probably does not work in general case)
schema = ydbSchema;
- schema[1].second = NTypeIds::Int32;
+ schema[1].second = TTypeInfo(NTypeIds::Int32);
ok = WriteData(runtime, sender, metaShard, writeId, tableId, MakeTestBlob({0, 100}, schema));
UNIT_ASSERT(!ok);
schema = ydbSchema;
- schema[1].second = NTypeIds::Utf8;
- schema[5].second = NTypeIds::Int32;
+ schema[1].second = TTypeInfo(NTypeIds::Utf8);
+ schema[5].second = TTypeInfo(NTypeIds::Int32);
ok = WriteData(runtime, sender, metaShard, writeId, tableId, MakeTestBlob({0, 100}, schema));
UNIT_ASSERT(!ok);
// reordered columns
schema.resize(0);
- schema.push_back({"level", NTypeIds::Int32 });
- schema.push_back({"timestamp", NTypeIds::Timestamp });
- schema.push_back({"uid", NTypeIds::Utf8 });
- schema.push_back({"resource_id", NTypeIds::Utf8 });
- schema.push_back({"resource_type", NTypeIds::Utf8 });
- schema.push_back({"message", NTypeIds::Utf8 });
- schema.push_back({"request_id", NTypeIds::Utf8 });
- schema.push_back({"saved_at", NTypeIds::Timestamp });
- schema.push_back({"ingested_at", NTypeIds::Timestamp });
- schema.push_back({"json_payload", NTypeIds::Json });
+ schema.push_back({"level", TTypeInfo(NTypeIds::Int32) });
+ schema.push_back({"timestamp", TTypeInfo(NTypeIds::Timestamp) });
+ schema.push_back({"uid", TTypeInfo(NTypeIds::Utf8) });
+ schema.push_back({"resource_id", TTypeInfo(NTypeIds::Utf8) });
+ schema.push_back({"resource_type", TTypeInfo(NTypeIds::Utf8) });
+ schema.push_back({"message", TTypeInfo(NTypeIds::Utf8) });
+ schema.push_back({"request_id", TTypeInfo(NTypeIds::Utf8) });
+ schema.push_back({"saved_at", TTypeInfo(NTypeIds::Timestamp) });
+ schema.push_back({"ingested_at", TTypeInfo(NTypeIds::Timestamp) });
+ schema.push_back({"json_payload", TTypeInfo(NTypeIds::Json) });
ok = WriteData(runtime, sender, metaShard, writeId, tableId, MakeTestBlob({0, 100}, schema));
UNIT_ASSERT(!ok);
@@ -363,7 +364,7 @@ void TestWriteReadDup() {
}
}
-void TestWriteRead(bool reboots, const TVector<std::pair<TString, TTypeId>>& ydbSchema = TTestSchema::YdbSchema(),
+void TestWriteRead(bool reboots, const TVector<std::pair<TString, TTypeInfo>>& ydbSchema = TTestSchema::YdbSchema(),
TString codec = "") {
TTestBasicRuntime runtime;
TTester::Setup(runtime);
@@ -1084,7 +1085,7 @@ NKikimrSSA::TProgram MakeSelectAggregatesWithFilter(ui32 columnId, ui32 filterCo
return ssa;
}
-void TestReadWithProgram(const TVector<std::pair<TString, TTypeId>>& ydbSchema = TTestSchema::YdbSchema())
+void TestReadWithProgram(const TVector<std::pair<TString, TTypeInfo>>& ydbSchema = TTestSchema::YdbSchema())
{
TTestBasicRuntime runtime;
TTester::Setup(runtime);
@@ -1219,7 +1220,7 @@ struct TReadAggregateResult {
std::vector<int64_t> Counts = {100};
};
-void TestReadAggregate(const TVector<std::pair<TString, TTypeId>>& ydbSchema, const TString& testDataBlob,
+void TestReadAggregate(const TVector<std::pair<TString, TTypeInfo>>& ydbSchema, const TString& testDataBlob,
bool addProjection, const std::vector<ui32>& aggKeys = {},
const TReadAggregateResult& expectedResult = {},
const TReadAggregateResult& expectedFiltered = {1, {1}, {1}, {1}}) {
@@ -1266,8 +1267,8 @@ void TestReadAggregate(const TVector<std::pair<TString, TTypeId>>& ydbSchema, co
ui32 prog = 0;
for (ui32 i = 0; i < ydbSchema.size(); ++i, ++prog) {
- if (intTypes.count(ydbSchema[i].second) ||
- strTypes.count(ydbSchema[i].second)) {
+ if (intTypes.count(ydbSchema[i].second.GetTypeId()) ||
+ strTypes.count(ydbSchema[i].second.GetTypeId())) {
checkResult.insert(prog);
}
@@ -1283,8 +1284,8 @@ void TestReadAggregate(const TVector<std::pair<TString, TTypeId>>& ydbSchema, co
for (ui32 i = 0; i < ydbSchema.size(); ++i, ++prog) {
isFiltered.insert(prog);
- if (intTypes.count(ydbSchema[i].second) ||
- strTypes.count(ydbSchema[i].second)) {
+ if (intTypes.count(ydbSchema[i].second.GetTypeId()) ||
+ strTypes.count(ydbSchema[i].second.GetTypeId())) {
checkResult.insert(prog);
}
@@ -1445,7 +1446,7 @@ Y_UNIT_TEST_SUITE(TColumnShardTestReadWrite) {
Cerr << "-- group by key: " << key << "\n";
// the type has the same values in test batch so result would be grouped in one row
- if (sameValTypes.count(schema[key].second)) {
+ if (sameValTypes.count(schema[key].second.GetTypeId())) {
TestReadAggregate(schema, testBlob, (key % 2), {key}, resGrouped, resFiltered);
} else {
TestReadAggregate(schema, testBlob, (key % 2), {key}, resDefault, resFiltered);
@@ -1453,8 +1454,8 @@ Y_UNIT_TEST_SUITE(TColumnShardTestReadWrite) {
}
for (ui32 key = 0; key < schema.size() - 1; ++key) {
Cerr << "-- group by key: " << key << ", " << key + 1 << "\n";
- if (sameValTypes.count(schema[key].second) &&
- sameValTypes.count(schema[key + 1].second)) {
+ if (sameValTypes.count(schema[key].second.GetTypeId()) &&
+ sameValTypes.count(schema[key + 1].second.GetTypeId())) {
TestReadAggregate(schema, testBlob, (key % 2), {key, key + 1}, resGrouped, resFiltered);
} else {
TestReadAggregate(schema, testBlob, (key % 2), {key, key + 1}, resDefault, resFiltered);
@@ -1462,9 +1463,9 @@ Y_UNIT_TEST_SUITE(TColumnShardTestReadWrite) {
}
for (ui32 key = 0; key < schema.size() - 2; ++key) {
Cerr << "-- group by key: " << key << ", " << key + 1 << ", " << key + 2 << "\n";
- if (sameValTypes.count(schema[key].second) &&
- sameValTypes.count(schema[key + 1].second) &&
- sameValTypes.count(schema[key + 1].second)) {
+ if (sameValTypes.count(schema[key].second.GetTypeId()) &&
+ sameValTypes.count(schema[key + 1].second.GetTypeId()) &&
+ sameValTypes.count(schema[key + 1].second.GetTypeId())) {
TestReadAggregate(schema, testBlob, (key % 2), {key, key + 1, key + 2}, resGrouped, resFiltered);
} else {
TestReadAggregate(schema, testBlob, (key % 2), {key, key + 1, key + 2}, resDefault, resFiltered);
diff --git a/ydb/core/tx/columnshard/ut_columnshard_schema.cpp b/ydb/core/tx/columnshard/ut_columnshard_schema.cpp
index 18ca9b217df..ecf54d53e54 100644
--- a/ydb/core/tx/columnshard/ut_columnshard_schema.cpp
+++ b/ydb/core/tx/columnshard/ut_columnshard_schema.cpp
@@ -11,7 +11,7 @@ using NWrappers::NTestHelpers::TS3Mock;
namespace {
-static const TVector<std::pair<TString, TTypeId>> testYdbSchema = TTestSchema::YdbSchema();
+static const TVector<std::pair<TString, TTypeInfo>> testYdbSchema = TTestSchema::YdbSchema();
std::shared_ptr<arrow::RecordBatch> UpdateColumn(std::shared_ptr<arrow::RecordBatch> batch, TString columnName, i64 seconds) {
std::string name(columnName.c_str(), columnName.size());
diff --git a/ydb/core/tx/coordinator/ut/CMakeLists.darwin.txt b/ydb/core/tx/coordinator/ut/CMakeLists.darwin.txt
index 56e660d083a..f536fdf3527 100644
--- a/ydb/core/tx/coordinator/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tx/coordinator/ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-tx-coordinator-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-coordinator
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
)
target_link_options(ydb-core-tx-coordinator-ut PRIVATE
diff --git a/ydb/core/tx/coordinator/ut/CMakeLists.linux.txt b/ydb/core/tx/coordinator/ut/CMakeLists.linux.txt
index f1e03b81d94..5c6ce8891b1 100644
--- a/ydb/core/tx/coordinator/ut/CMakeLists.linux.txt
+++ b/ydb/core/tx/coordinator/ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-tx-coordinator-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-coordinator
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
)
target_link_options(ydb-core-tx-coordinator-ut PRIVATE
diff --git a/ydb/core/tx/datashard/build_distributed_erase_tx_out_rs_unit.cpp b/ydb/core/tx/datashard/build_distributed_erase_tx_out_rs_unit.cpp
index ee90c2fc2b8..aea50ffbe3c 100644
--- a/ydb/core/tx/datashard/build_distributed_erase_tx_out_rs_unit.cpp
+++ b/ydb/core/tx/datashard/build_distributed_erase_tx_out_rs_unit.cpp
@@ -61,8 +61,7 @@ class TBuildDistributedEraseTxOutRSUnit : public TExecutionUnit {
for (ui32 pos = 0; pos < expectedValue.size(); ++pos) {
const auto& expected = expectedValue.at(pos);
const auto& actual = actualValue.at(pos);
-
- if (0 != CompareTypedCells(actual, expected.AsRef(), expected.Type())) {
+ if (0 != CompareTypedCells(actual, expected.AsRef(), expected.TypeInfo())) {
return false;
}
}
@@ -113,9 +112,8 @@ public:
TVector<TRawTypeValue> key;
for (ui32 pos = 0; pos < tableInfo.KeyColumnTypes.size(); ++pos) {
- const NScheme::TTypeId type = tableInfo.KeyColumnTypes[pos];
+ const NScheme::TTypeInfo type = tableInfo.KeyColumnTypes[pos];
const TCell& cell = keyCells.GetCells()[pos];
-
key.emplace_back(TRawTypeValue(cell.AsRef(), type));
}
@@ -130,7 +128,7 @@ public:
auto it = tableInfo.Columns.find(eraseTx->GetIndexColumnIds().Get(pos));
Y_VERIFY(it != tableInfo.Columns.end());
- const NScheme::TTypeId type = it->second.Type;
+ const NScheme::TTypeInfo type = it->second.Type;
const TCell& cell = indexCells.GetCells()[pos];
indexTypedVals.emplace_back(TRawTypeValue(cell.AsRef(), type));
diff --git a/ydb/core/tx/datashard/change_collector_async_index.cpp b/ydb/core/tx/datashard/change_collector_async_index.cpp
index d012f961899..d2f5400366b 100644
--- a/ydb/core/tx/datashard/change_collector_async_index.cpp
+++ b/ydb/core/tx/datashard/change_collector_async_index.cpp
@@ -237,7 +237,7 @@ TArrayRef<TTag> TAsyncIndexChangeCollector::GetTagsToSelect(const TTableId& tabl
}
}
-void TAsyncIndexChangeCollector::FillKeyFromRowState(TTag tag, TPos pos, const TRowState& rowState, NScheme::TTypeId type) {
+void TAsyncIndexChangeCollector::FillKeyFromRowState(TTag tag, TPos pos, const TRowState& rowState, NScheme::TTypeInfo type) {
Y_VERIFY(pos < rowState.Size());
IndexKeyVals.emplace_back(rowState.Get(pos).AsRef(), type);
@@ -267,7 +267,7 @@ void TAsyncIndexChangeCollector::FillKeyFromUpdate(TTag tag, TPos pos, TArrayRef
TagsSeen.insert(tag);
}
-void TAsyncIndexChangeCollector::FillKeyWithNull(TTag tag, NScheme::TTypeId type) {
+void TAsyncIndexChangeCollector::FillKeyWithNull(TTag tag, NScheme::TTypeInfo type) {
IndexKeyVals.emplace_back(TRawTypeValue({}, type));
IndexKeyTags.emplace_back(tag);
TagsSeen.insert(tag);
@@ -282,7 +282,7 @@ void TAsyncIndexChangeCollector::FillDataFromUpdate(TTag tag, TPos pos, TArrayRe
IndexDataVals.emplace_back(tag, ECellOp::Set, update.Value);
}
-void TAsyncIndexChangeCollector::FillDataWithNull(TTag tag, NScheme::TTypeId type) {
+void TAsyncIndexChangeCollector::FillDataWithNull(TTag tag, NScheme::TTypeInfo type) {
IndexDataVals.emplace_back(tag, ECellOp::Set, TRawTypeValue({}, type));
}
diff --git a/ydb/core/tx/datashard/change_collector_async_index.h b/ydb/core/tx/datashard/change_collector_async_index.h
index c6404f03f96..273e2316015 100644
--- a/ydb/core/tx/datashard/change_collector_async_index.h
+++ b/ydb/core/tx/datashard/change_collector_async_index.h
@@ -35,12 +35,12 @@ class TAsyncIndexChangeCollector: public TBaseChangeCollector {
const THashMap<NTable::TTag, NTable::TPos>& GetKeyTagToPos(const TTableId& tableId) const;
TArrayRef<NTable::TTag> GetTagsToSelect(const TTableId& tableId, NTable::ERowOp rop) const;
- void FillKeyFromRowState(NTable::TTag tag, NTable::TPos pos, const NTable::TRowState& rowState, NScheme::TTypeId type);
+ void FillKeyFromRowState(NTable::TTag tag, NTable::TPos pos, const NTable::TRowState& rowState, NScheme::TTypeInfo type);
void FillKeyFromKey(NTable::TTag tag, NTable::TPos pos, TArrayRef<const TRawTypeValue> key);
void FillKeyFromUpdate(NTable::TTag tag, NTable::TPos pos, TArrayRef<const NTable::TUpdateOp> updates);
- void FillKeyWithNull(NTable::TTag tag, NScheme::TTypeId type);
+ void FillKeyWithNull(NTable::TTag tag, NScheme::TTypeInfo type);
void FillDataFromUpdate(NTable::TTag tag, NTable::TPos pos, TArrayRef<const NTable::TUpdateOp> updates);
- void FillDataWithNull(NTable::TTag tag, NScheme::TTypeId type);
+ void FillDataWithNull(NTable::TTag tag, NScheme::TTypeInfo type);
void Persist(const TTableId& tableId, const TPathId& pathId, NTable::ERowOp rop,
TArrayRef<const TRawTypeValue> key, TArrayRef<const NTable::TTag> keyTags,
diff --git a/ydb/core/tx/datashard/change_record.cpp b/ydb/core/tx/datashard/change_record.cpp
index 1ec9cb145e1..622b6fcb4af 100644
--- a/ydb/core/tx/datashard/change_record.cpp
+++ b/ydb/core/tx/datashard/change_record.cpp
@@ -48,12 +48,12 @@ static NJson::TJsonValue YsonToJson(TStringBuf in) {
return result;
}
-static NJson::TJsonValue ToJson(const TCell& cell, NScheme::TTypeId type) {
+static NJson::TJsonValue ToJson(const TCell& cell, NScheme::TTypeInfo type) {
if (cell.IsNull()) {
return NJson::TJsonValue(NJson::JSON_NULL);
}
- switch (type) {
+ switch (type.GetTypeId()) {
case NScheme::NTypeIds::Bool:
return NJson::TJsonValue(cell.AsValue<bool>());
case NScheme::NTypeIds::Int8:
@@ -100,6 +100,9 @@ static NJson::TJsonValue ToJson(const TCell& cell, NScheme::TTypeId type) {
return StringToJson(NBinaryJson::SerializeToJson(cell.AsBuf()));
case NScheme::NTypeIds::Yson:
return YsonToJson(cell.AsBuf());
+ case NScheme::NTypeIds::Pg:
+ // TODO: support pg types
+ Y_FAIL("pg types are not supported");
default:
Y_FAIL("Unexpected type");
}
diff --git a/ydb/core/tx/datashard/change_sender_async_index.cpp b/ydb/core/tx/datashard/change_sender_async_index.cpp
index 12c357d7dc5..bc1d87abe85 100644
--- a/ydb/core/tx/datashard/change_sender_async_index.cpp
+++ b/ydb/core/tx/datashard/change_sender_async_index.cpp
@@ -513,7 +513,7 @@ class TAsyncIndexChangeSenderMain: public TActorBootstrapped<TAsyncIndexChangeSe
}
TagMap.clear();
- TVector<NYql::NUdf::TDataTypeId> keyColumnTypes;
+ TVector<NScheme::TTypeInfo> keyColumnTypes;
for (const auto& [tag, column] : entry.Columns) {
auto it = MainColumnToTag.find(column.Name);
diff --git a/ydb/core/tx/datashard/change_sender_cdc_stream.cpp b/ydb/core/tx/datashard/change_sender_cdc_stream.cpp
index 145778306e4..73fe7d13fc0 100644
--- a/ydb/core/tx/datashard/change_sender_cdc_stream.cpp
+++ b/ydb/core/tx/datashard/change_sender_cdc_stream.cpp
@@ -270,9 +270,9 @@ class TCdcChangeSenderMain: public TActorBootstrapped<TCdcChangeSenderMain>
TPartitionKeyRange KeyRange;
struct TLess {
- TConstArrayRef<NScheme::TTypeId> Schema;
+ TConstArrayRef<NScheme::TTypeInfo> Schema;
- TLess(const TVector<NScheme::TTypeId>& schema)
+ TLess(const TVector<NScheme::TTypeInfo>& schema)
: Schema(schema)
{
}
@@ -323,7 +323,7 @@ class TCdcChangeSenderMain: public TActorBootstrapped<TCdcChangeSenderMain>
}; // TPartitionInfo
- TVector<NScheme::TTypeId> Schema;
+ TVector<NScheme::TTypeInfo> Schema;
TVector<TPartitionInfo> Partitions;
}; // TKeyDesc
@@ -550,7 +550,8 @@ class TCdcChangeSenderMain: public TActorBootstrapped<TCdcChangeSenderMain>
KeyDesc->Schema.reserve(pqConfig.PartitionKeySchemaSize());
for (const auto& keySchema : pqConfig.GetPartitionKeySchema()) {
- KeyDesc->Schema.push_back(keySchema.GetTypeId());
+ // TODO: support pg types
+ KeyDesc->Schema.push_back(NScheme::TTypeInfo(keySchema.GetTypeId()));
}
TSet<TPQPartitionInfo, TPQPartitionInfo::TLess> partitions(KeyDesc->Schema);
diff --git a/ydb/core/tx/datashard/check_scheme_tx_unit.cpp b/ydb/core/tx/datashard/check_scheme_tx_unit.cpp
index c42c0f5c9b9..2182381c0ba 100644
--- a/ydb/core/tx/datashard/check_scheme_tx_unit.cpp
+++ b/ydb/core/tx/datashard/check_scheme_tx_unit.cpp
@@ -502,7 +502,8 @@ bool TCheckSchemeTxUnit::CheckAlter(TActiveTransaction *activeTx)
if (table.Columns.contains(colId)) {
const TUserTable::TUserColumn &column = table.Columns.at(colId);
Y_VERIFY(column.Name == col.GetName());
- Y_VERIFY(column.Type == col.GetTypeId());
+ // TODO: support pg types
+ Y_VERIFY(column.Type.GetTypeId() == col.GetTypeId());
Y_VERIFY(col.HasFamily());
}
}
diff --git a/ydb/core/tx/datashard/datashard.cpp b/ydb/core/tx/datashard/datashard.cpp
index 887d71410d3..9a9b30fbe69 100644
--- a/ydb/core/tx/datashard/datashard.cpp
+++ b/ydb/core/tx/datashard/datashard.cpp
@@ -2761,7 +2761,6 @@ void TDataShard::ResolveTablePath(const TActorContext &ctx)
void TDataShard::SerializeHistogram(const TUserTable &tinfo,
const NTable::THistogram &histogram,
- const NScheme::TTypeRegistry &typeRegistry,
NKikimrTxDataShard::TEvGetDataHistogramResponse::THistogram &hist)
{
for (auto &item : histogram) {
@@ -2770,15 +2769,13 @@ void TDataShard::SerializeHistogram(const TUserTable &tinfo,
TSerializedCellVec key(item.EndKey);
for (ui32 ki = 0; ki < tinfo.KeyColumnIds.size(); ++ki) {
- NScheme::ITypeSP t = typeRegistry.GetType(tinfo.KeyColumnTypes[ki]);
- DbgPrintValue(*rec.AddKeyValues(), key.GetCells()[ki], t.GetTypeId());
+ DbgPrintValue(*rec.AddKeyValues(), key.GetCells()[ki], tinfo.KeyColumnTypes[ki]);
}
}
}
void TDataShard::SerializeKeySample(const TUserTable &tinfo,
const NTable::TKeyAccessSample &keySample,
- const NScheme::TTypeRegistry &typeRegistry,
NKikimrTxDataShard::TEvGetDataHistogramResponse::THistogram &hist)
{
THashMap<TString, ui64> accessCounts;
@@ -2794,8 +2791,7 @@ void TDataShard::SerializeKeySample(const TUserTable &tinfo,
TSerializedCellVec key(item.first);
for (ui32 ki = 0; ki < tinfo.KeyColumnIds.size() && ki < key.GetCells().size(); ++ki) {
- NScheme::ITypeSP t = typeRegistry.GetType(tinfo.KeyColumnTypes[ki]);
- DbgPrintValue(*rec.AddKeyValues(), key.GetCells()[ki], t.GetTypeId());
+ DbgPrintValue(*rec.AddKeyValues(), key.GetCells()[ki], tinfo.KeyColumnTypes[ki]);
}
}
Sort(hist.MutableItems()->begin(), hist.MutableItems()->end(),
@@ -2867,7 +2863,6 @@ void TDataShard::Handle(TEvDataShard::TEvGetDataHistogramRequest::TPtr &ev,
}
}
- auto &reg = *AppData(ctx)->TypeRegistry;
for (const auto &pr : TableInfos) {
const auto &tinfo = *pr.second;
const NTable::TStats &stats = tinfo.Stats.DataStats;
@@ -2876,9 +2871,9 @@ void TDataShard::Handle(TEvDataShard::TEvGetDataHistogramRequest::TPtr &ev,
hist.SetTableName(pr.second->Name);
for (ui32 ki : tinfo.KeyColumnIds)
hist.AddKeyNames(tinfo.Columns.FindPtr(ki)->Name);
- SerializeHistogram(tinfo, stats.DataSizeHistogram, reg, *hist.MutableSizeHistogram());
- SerializeHistogram(tinfo, stats.RowCountHistogram, reg, *hist.MutableCountHistogram());
- SerializeKeySample(tinfo, tinfo.Stats.AccessStats, reg, *hist.MutableKeyAccessSample());
+ SerializeHistogram(tinfo, stats.DataSizeHistogram, *hist.MutableSizeHistogram());
+ SerializeHistogram(tinfo, stats.RowCountHistogram, *hist.MutableCountHistogram());
+ SerializeKeySample(tinfo, tinfo.Stats.AccessStats, *hist.MutableKeyAccessSample());
}
ctx.Send(ev->Sender, response);
diff --git a/ydb/core/tx/datashard/datashard__build_index.cpp b/ydb/core/tx/datashard/datashard__build_index.cpp
index dbf29287a1a..b2fc2cf6118 100644
--- a/ydb/core/tx/datashard/datashard__build_index.cpp
+++ b/ydb/core/tx/datashard/datashard__build_index.cpp
@@ -7,6 +7,7 @@
#include <ydb/core/base/counters.h>
#include <ydb/core/scheme/scheme_tablecell.h>
#include <ydb/core/tablet_flat/flat_row_state.h>
+#include <ydb/core/kqp/common/kqp_types.h>
#include <ydb/core/tx/tx_proxy/proxy.h>
#include <ydb/core/tx/tx_proxy/upload_rows.h>
@@ -20,7 +21,7 @@ namespace NKikimr {
namespace NDataShard {
using TColumnsTags = THashMap<TString, NTable::TTag>;
-using TColumnsTypes = THashMap<TString, NScheme::TTypeId>;
+using TColumnsTypes = THashMap<TString, NScheme::TTypeInfo>;
using TTypes = TVector<std::pair<TString, Ydb::Type>>;
using TTags = TVector<NTable::TTag>;
@@ -62,6 +63,13 @@ static TTags BuildTags(const TColumnsTags& allTags, const TVector<TString>& inde
return result;
}
+static void ProtoYdbTypeFromTypeInfo(Ydb::Type* type, const NScheme::TTypeInfo typeInfo) {
+ if (typeInfo.GetTypeId() == NScheme::NTypeIds::Pg) {
+ type->mutable_pg_type()->set_oid(NPg::PgTypeIdFromTypeDesc(typeInfo.GetTypeDesc()));
+ } else {
+ type->set_type_id((Ydb::Type::PrimitiveTypeId)typeInfo.GetTypeId());
+ }
+}
static std::shared_ptr<TTypes> BuildTypes(const TColumnsTypes& types, const TVector<TString>& indexColumns, const TVector<TString>& dataColumns) {
auto result = std::make_shared<TTypes>();
@@ -69,13 +77,13 @@ static std::shared_ptr<TTypes> BuildTypes(const TColumnsTypes& types, const TVec
for (const auto& colName: indexColumns) {
Ydb::Type type;
- type.set_type_id(static_cast<Ydb::Type_PrimitiveTypeId>(types.at(colName)));
+ ProtoYdbTypeFromTypeInfo(&type, types.at(colName));
result->emplace_back(colName, type);
}
for (const auto& colName: dataColumns) {
Ydb::Type type;
- type.set_type_id(static_cast<Ydb::Type_PrimitiveTypeId>(types.at(colName)));
+ ProtoYdbTypeFromTypeInfo(&type, types.at(colName));
result->emplace_back(colName, type);
}
@@ -201,7 +209,7 @@ class TBuildIndexScan : public TActor<TBuildIndexScan>, public NTable::IScan {
const ui32 TargetDataColumnPos; // positon of first data column in target table
const TTags KeyColumnIds;
- const TVector<NScheme::TTypeId> KeyTypes;
+ const TVector<NScheme::TTypeInfo> KeyTypes;
const TSerializedTableRange TableRange;
const TSerializedTableRange RequestedRange;
diff --git a/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp b/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp
index 04135da2148..7f10ef955e3 100644
--- a/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp
+++ b/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp
@@ -464,8 +464,8 @@ static TIndexes GetIndexes(const NKikimrTxDataShard::TEvConditionalEraseRowsRequ
return result;
}
-static bool CheckUnit(NScheme::TTypeId type, NKikimrSchemeOp::TTTLSettings::EUnit unit, TString& error) {
- switch (type) {
+static bool CheckUnit(NScheme::TTypeInfo type, NKikimrSchemeOp::TTTLSettings::EUnit unit, TString& error) {
+ switch (type.GetTypeId()) {
case NScheme::NTypeIds::Date:
case NScheme::NTypeIds::Datetime:
case NScheme::NTypeIds::Timestamp:
@@ -496,7 +496,7 @@ static bool CheckUnit(NScheme::TTypeId type, NKikimrSchemeOp::TTTLSettings::EUni
break;
default:
- error = TStringBuilder() << "Unsupported type: " << static_cast<ui32>(type);
+ error = TStringBuilder() << "Unsupported type: " << static_cast<ui32>(type.GetTypeId());
return false;
}
}
diff --git a/ydb/core/tx/datashard/datashard__engine_host.cpp b/ydb/core/tx/datashard/datashard__engine_host.cpp
index ddc9e83714c..825422d3d58 100644
--- a/ydb/core/tx/datashard/datashard__engine_host.cpp
+++ b/ydb/core/tx/datashard/datashard__engine_host.cpp
@@ -26,7 +26,7 @@ using namespace NTabletFlatExecutor;
namespace {
NUdf::TUnboxedValue CreateRow(const TVector<TCell>& inRow,
- const TVector<NScheme::TTypeId>& inType,
+ const TVector<NScheme::TTypeInfo>& inType,
const THolderFactory& holderFactory) {
NUdf::TUnboxedValue* rowItems = nullptr;
auto row = holderFactory.CreateDirectArrayHolder(inRow.size(), rowItems);
@@ -43,10 +43,10 @@ NUdf::TUnboxedValue CreateRow(const TVector<TCell>& inRow,
///
struct ItemInfo {
ui32 ColumnId;
- NScheme::TTypeId SchemeType;
+ NScheme::TTypeInfo SchemeType;
TOptionalType* OptType;
- ItemInfo(ui32 colId, NScheme::TTypeId schemeType, TOptionalType* optType)
+ ItemInfo(ui32 colId, NScheme::TTypeInfo schemeType, TOptionalType* optType)
: ColumnId(colId)
, SchemeType(schemeType)
, OptType(optType)
@@ -88,7 +88,7 @@ struct TRowResultInfo {
// reorder columns
TVector<TCell> outRow(Reserve(ItemInfos.size()));
- TVector<NScheme::TTypeId> outTypes(Reserve(ItemInfos.size()));
+ TVector<NScheme::TTypeInfo> outTypes(Reserve(ItemInfos.size()));
for (ui32 i = 0; i < ItemInfos.size(); ++i) {
ui32 colId = ItemInfos[i].ColumnId;
outRow.emplace_back(std::move(inRow[colId]));
@@ -100,93 +100,6 @@ struct TRowResultInfo {
};
///
-struct TRangeResultInfo {
- TStructType* ResultType;
- TStructType* RowType;
- TSmallVec<ItemInfo> ItemInfos;
- mutable ui64 Bytes = 0;
- TDefaultListRepresentation Rows;
- TString FirstKey;
-
- // optimisation: reuse vectors
- TVector<TCell> TmpRow;
- TVector<NScheme::TTypeId> TmpTypes;
-
- TListType* RowsListType() const { return AS_TYPE(TListType, ResultType->GetMemberType(0)); }
- TDataType* TruncType() const { return AS_TYPE(TDataType, ResultType->GetMemberType(1)); }
-
- TRangeResultInfo(const TStructLiteral* columnIds, const THashMap<ui32, TSysTables::TTableColumnInfo>& columns,
- TStructType* returnType)
- {
- ResultType = AS_TYPE(TStructType, returnType);
- Y_VERIFY_DEBUG(ResultType->GetMembersCount() == 2);
- Y_VERIFY_DEBUG(ResultType->GetMemberName(0) == "List");
- Y_VERIFY_DEBUG(ResultType->GetMemberName(1) == "Truncated");
-
- RowType = AS_TYPE(TStructType, RowsListType()->GetItemType());
-
- ItemInfos.reserve(columnIds->GetValuesCount());
- for (ui32 i = 0; i < columnIds->GetValuesCount(); ++i) {
- TOptionalType * optType = AS_TYPE(TOptionalType, RowType->GetMemberType(i));
- TDataLiteral* literal = AS_VALUE(TDataLiteral, columnIds->GetValue(i));
- ui32 colId = literal->AsValue().Get<ui32>();
-
- const TSysTables::TTableColumnInfo * colInfo = columns.FindPtr(colId);
- Y_VERIFY(colInfo && (colInfo->Id == colId), "No column info for column");
- ItemInfos.emplace_back(ItemInfo(colId, colInfo->PType, optType));
- }
- }
-
- static TString Serialize(const TVector<TCell>& row, const TVector<NScheme::TTypeId>& types) {
- Y_VERIFY(row.size() == types.size());
-
- ui32 count = row.size();
- TString str((const char*)&count, sizeof(ui32));
- str.append((const char*)&types[0], count * sizeof(NScheme::TTypeId));
-
- TConstArrayRef<TCell> array(&row[0], row.size());
- return str + TSerializedCellVec::Serialize(array);
- }
-
- void AppendRow(const TVector<TCell>& inRow, const THolderFactory& holderFactory) {
- if (inRow.empty())
- return;
-
- Y_VERIFY(inRow.size() >= ItemInfos.size());
-
- TmpRow.clear();
- TmpTypes.clear();
- TmpRow.reserve(ItemInfos.size());
- TmpTypes.reserve(ItemInfos.size());
-
- for (ui32 i = 0; i < ItemInfos.size(); ++i) {
- ui32 colId = ItemInfos[i].ColumnId;
- TmpRow.push_back(inRow[colId]);
- TmpTypes.push_back(ItemInfos[i].SchemeType);
- }
-
- Bytes += 8; // per row overhead
- Rows = Rows.Append(CreateRow(TmpRow, TmpTypes, holderFactory));
-
- if (!FirstKey) {
- FirstKey = Serialize(TmpRow, TmpTypes);
- }
- }
-
- NUdf::TUnboxedValue CreateResult(const THolderFactory& holderFactory) {
- NUdf::TUnboxedValue* resultItems = nullptr;
- auto result = holderFactory.CreateDirectArrayHolder(4, resultItems);
-
- resultItems[0] = holderFactory.CreateDirectListHolder(std::move(Rows));
- resultItems[1] = NUdf::TUnboxedValuePod(false);
- resultItems[2] = MakeString(FirstKey);
- resultItems[3] = NUdf::TUnboxedValuePod(Bytes);
-
- return std::move(result);
- }
-};
-
-///
class TDataShardSysTable {
public:
using TUpdateCommand = IEngineFlatHost::TUpdateCommand;
@@ -249,7 +162,7 @@ private:
const TTableId TableId;
TDataShard* Self;
THashMap<ui32, TSysTables::TTableColumnInfo> Columns;
- TVector<ui32> KeyTypes;
+ TVector<NScheme::TTypeInfo> KeyTypes;
};
@@ -797,7 +710,7 @@ TEngineBay::~TEngineBay() {
}
void TEngineBay::AddReadRange(const TTableId& tableId, const TVector<NTable::TColumn>& columns,
- const TTableRange& range, const TVector<NScheme::TTypeId>& keyTypes, ui64 itemsLimit, bool reverse)
+ const TTableRange& range, const TVector<NScheme::TTypeInfo>& keyTypes, ui64 itemsLimit, bool reverse)
{
TVector<TKeyDesc::TColumnOp> columnOps;
columnOps.reserve(columns.size());
@@ -821,7 +734,7 @@ void TEngineBay::AddReadRange(const TTableId& tableId, const TVector<NTable::TCo
}
void TEngineBay::AddWriteRange(const TTableId& tableId, const TTableRange& range,
- const TVector<NScheme::TTypeId>& keyTypes, const TVector<TColumnWriteMeta>& columns,
+ const TVector<NScheme::TTypeInfo>& keyTypes, const TVector<TColumnWriteMeta>& columns,
bool isPureEraseOp)
{
TVector<TKeyDesc::TColumnOp> columnOps;
diff --git a/ydb/core/tx/datashard/datashard__engine_host.h b/ydb/core/tx/datashard/datashard__engine_host.h
index 06ddf773c14..588d7d940c0 100644
--- a/ydb/core/tx/datashard/datashard__engine_host.h
+++ b/ydb/core/tx/datashard/datashard__engine_host.h
@@ -66,9 +66,9 @@ public:
}
void AddReadRange(const TTableId& tableId, const TVector<NTable::TColumn>& columns, const TTableRange& range,
- const TVector<NScheme::TTypeId>& keyTypes, ui64 itemsLimit = 0, bool reverse = false);
+ const TVector<NScheme::TTypeInfo>& keyTypes, ui64 itemsLimit = 0, bool reverse = false);
- void AddWriteRange(const TTableId& tableId, const TTableRange& range, const TVector<NScheme::TTypeId>& keyTypes,
+ void AddWriteRange(const TTableId& tableId, const TTableRange& range, const TVector<NScheme::TTypeInfo>& keyTypes,
const TVector<TColumnWriteMeta>& columns, bool isPureEraseOp);
void MarkTxLoaded() {
diff --git a/ydb/core/tx/datashard/datashard__kqp_scan.cpp b/ydb/core/tx/datashard/datashard__kqp_scan.cpp
index 8b993322d40..95f172421c3 100644
--- a/ydb/core/tx/datashard/datashard__kqp_scan.cpp
+++ b/ydb/core/tx/datashard/datashard__kqp_scan.cpp
@@ -59,7 +59,7 @@ public:
{
if (DataFormat == NKikimrTxDataShard::EScanDataFormat::ARROW) {
BatchBuilder = MakeHolder<NArrow::TArrowBatchBuilder>();
- TVector<std::pair<TString, NScheme::TTypeId>> schema;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> schema;
if (!Tags.empty()) {
Types.reserve(Tags.size());
schema.reserve(Tags.size());
@@ -511,7 +511,7 @@ private:
const TSmallVec<TSerializedTableRange> TableRanges;
ui32 CurrentRange;
const TSmallVec<NTable::TTag> Tags;
- TSmallVec<NScheme::TTypeId> Types;
+ TSmallVec<NScheme::TTypeInfo> Types;
const TSmallVec<bool> SkipNullKeys;
const NYql::NDqProto::EDqStatsMode StatsMode;
const TInstant Deadline;
@@ -575,7 +575,6 @@ void TDataShard::Handle(TEvDataShard::TEvKqpScan::TPtr& ev, const TActorContext&
return;
}
-
for (int i = 0; i < request.GetColumnTags().size(); ++i) {
auto* column = tableColumns.FindPtr(request.GetColumnTags(i));
if (!column) {
@@ -585,7 +584,8 @@ void TDataShard::Handle(TEvDataShard::TEvKqpScan::TPtr& ev, const TActorContext&
return;
}
- if (column->Type != request.GetColumnTypes(i)) {
+ // TODO: support pg types
+ if (column->Type.GetTypeId() != request.GetColumnTypes(i)) {
reportError(request.GetTablePath(), TStringBuilder() << "TxId: " << request.GetTxId() << "."
<< " Table '" << request.GetTablePath() << "'"
<< " column " << request.GetColumnTags(i) << " type mismatch at " << TabletID());
diff --git a/ydb/core/tx/datashard/datashard__read_columns.cpp b/ydb/core/tx/datashard/datashard__read_columns.cpp
index 6b7200f552b..983abe32f79 100644
--- a/ydb/core/tx/datashard/datashard__read_columns.cpp
+++ b/ydb/core/tx/datashard/datashard__read_columns.cpp
@@ -42,7 +42,7 @@ class TReadColumnsScan : public INoTxScan {
const TKeyBoundary From;
const TKeyBoundary To;
const TVector<NTable::TTag> ValueColumns;
- const TVector<NScheme::TTypeId> ValueColumnTypes;
+ const TVector<NScheme::TTypeInfo> ValueColumnTypes;
const ui64 RowsLimit = 100000;
const ui64 BytesLimit = 1024*1024;
const TKeyBoundary ShardEnd;
@@ -62,7 +62,7 @@ public:
TReadColumnsScan(const TKeyBoundary& keyFrom,
const TKeyBoundary& keyTo,
const TVector<NTable::TTag>& valueColumns,
- const TVector<NScheme::TTypeId> valueColumnTypes,
+ const TVector<NScheme::TTypeInfo> valueColumnTypes,
std::unique_ptr<IBlockBuilder>&& blockBuilder,
ui64 rowsLimit, ui64 bytesLimit,
const TKeyBoundary& shardEnd,
@@ -342,8 +342,8 @@ public:
}
TVector<NTable::TTag> valueColumns;
- TVector<NScheme::TTypeId> valueColumnTypes;
- TVector<std::pair<TString, NScheme::TTypeId>> columns;
+ TVector<NScheme::TTypeInfo> valueColumnTypes;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> columns;
if (Ev->Get()->Record.GetColumns().empty()) {
SetError(NKikimrTxDataShard::TError::BAD_ARGUMENT, "Empty column list");
diff --git a/ydb/core/tx/datashard/datashard__read_iterator.cpp b/ydb/core/tx/datashard/datashard__read_iterator.cpp
index f33e816d9c4..6b35b2b68ed 100644
--- a/ydb/core/tx/datashard/datashard__read_iterator.cpp
+++ b/ydb/core/tx/datashard/datashard__read_iterator.cpp
@@ -20,7 +20,7 @@ constexpr ui64 MinRowsPerCheck = 1000;
class TCellBlockBuilder : public IBlockBuilder {
public:
bool Start(
- const TVector<std::pair<TString, NScheme::TTypeId>>& columns,
+ const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns,
ui64 maxRowsInBlock,
ui64 maxBytesInBlock,
TString& err) override
@@ -49,7 +49,7 @@ public:
TVector<TOwnedCellVec> FlushBatch() { return std::move(Rows); }
private:
- TVector<std::pair<TString, NScheme::TTypeId>> Columns;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> Columns;
TVector<TOwnedCellVec> Rows;
ui64 BytesCount = 0;
@@ -61,10 +61,10 @@ private:
struct TShortColumnInfo {
NTable::TTag Tag;
- NScheme::TTypeId Type;
+ NScheme::TTypeInfo Type;
TString Name;
- TShortColumnInfo(NTable::TTag tag, NScheme::TTypeId type, const TString& name)
+ TShortColumnInfo(NTable::TTag tag, NScheme::TTypeInfo type, const TString& name)
: Tag(tag)
, Type(type)
, Name(name)
@@ -72,7 +72,8 @@ struct TShortColumnInfo {
TString Dump() const {
TStringStream ss;
- ss << "{Tag: " << Tag << ", Type: " << Type << ", Name: " << Name << "}";
+ // TODO: support pg types
+ ss << "{Tag: " << Tag << ", Type: " << Type.GetTypeId() << ", Name: " << Name << "}";
return ss.Str();
}
};
@@ -98,13 +99,13 @@ struct TShortTableInfo {
KeyColumnCount = schema.Keys->Types.size();
KeyColumnTypes.reserve(KeyColumnCount);
for (auto type: schema.Keys->Types) {
- KeyColumnTypes.push_back(type.GetTypeId());
+ KeyColumnTypes.push_back(type.ToTypeInfo());
}
// note that we don't have column names here, but
// for cellvec we will not need them at all
for (const auto& col: schema.Cols) {
- Columns.emplace(col.Tag, TShortColumnInfo(col.Tag, col.TypeId, ""));
+ Columns.emplace(col.Tag, TShortColumnInfo(col.Tag, col.TypeInfo, ""));
}
}
@@ -123,15 +124,15 @@ struct TShortTableInfo {
ui32 LocalTid = 0;
ui64 SchemaVersion = 0;
size_t KeyColumnCount = 0;
- TVector<NScheme::TTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
TMap<NTable::TTag, TShortColumnInfo> Columns;
};
-TVector<std::pair<TString, NScheme::TTypeId>> GetNameTypeColumns(
+TVector<std::pair<TString, NScheme::TTypeInfo>> GetNameTypeColumns(
const std::vector<NTable::TTag>& tags,
const TShortTableInfo& tableInfo)
{
- TVector<std::pair<TString, NScheme::TTypeId>> result;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> result;
for (auto tag: tags) {
auto it = tableInfo.Columns.find(tag);
if (it == tableInfo.Columns.end()) {
@@ -227,7 +228,7 @@ class TReader {
const TShortTableInfo& TableInfo;
TDataShard* Self;
- std::vector<NKikimr::NScheme::TTypeId> ColumnTypes;
+ std::vector<NScheme::TTypeInfo> ColumnTypes;
ui32 FirstUnprocessedQuery;
TString LastProcessedKey;
@@ -1305,7 +1306,7 @@ private:
void PrepareValidationInfo(const TActorContext&, const TReadIteratorState& state) {
TTableId tableId(state.PathId.OwnerId, state.PathId.LocalPathId, state.SchemaVersion);
- TVector<NScheme::TTypeId> keyTypes;
+ TVector<NScheme::TTypeInfo> keyTypes;
TVector<TKeyDesc::TColumnOp> columnOps;
columnOps.reserve(TableInfo.Columns.size());
diff --git a/ydb/core/tx/datashard/datashard__s3.cpp b/ydb/core/tx/datashard/datashard__s3.cpp
index f5dfe0d65e7..fa3b7d94f6f 100644
--- a/ydb/core/tx/datashard/datashard__s3.cpp
+++ b/ydb/core/tx/datashard/datashard__s3.cpp
@@ -163,7 +163,7 @@ public:
prefixColumns.GetCells().size()),
"Unexpected out of range key returned from iterator");
- Y_VERIFY(currentKey.Types[pathColPos] == NScheme::NTypeIds::Utf8);
+ Y_VERIFY(currentKey.Types[pathColPos].GetTypeId() == NScheme::NTypeIds::Utf8);
const TCell& pathCell = currentKey.Cells()[pathColPos];
TString path = TString((const char*)pathCell.Data(), pathCell.Size());
diff --git a/ydb/core/tx/datashard/datashard_change_receiving.cpp b/ydb/core/tx/datashard/datashard_change_receiving.cpp
index 0cc14c5f178..eb7ab505929 100644
--- a/ydb/core/tx/datashard/datashard_change_receiving.cpp
+++ b/ydb/core/tx/datashard/datashard_change_receiving.cpp
@@ -188,7 +188,7 @@ class TDataShard::TTxApplyChangeRecords: public TTransactionBase<TDataShard> {
const auto type = tableInfo.KeyColumnTypes.at(i);
const auto& cell = KeyCells.GetCells().at(i);
- if (type == NScheme::NTypeIds::Uint8 && !cell.IsNull() && cell.AsValue<ui8>() > 127) {
+ if (type.GetTypeId() == NScheme::NTypeIds::Uint8 && !cell.IsNull() && cell.AsValue<ui8>() > 127) {
AddRecordStatus(ctx, record.GetOrder(), NKikimrChangeExchange::TEvStatus::STATUS_REJECT,
NKikimrChangeExchange::TEvStatus::REASON_SCHEME_ERROR,
"Keys with Uint8 column values >127 are currently prohibited");
diff --git a/ydb/core/tx/datashard/datashard_common_upload.cpp b/ydb/core/tx/datashard/datashard_common_upload.cpp
index dd138f7de82..3501f8d7cb2 100644
--- a/ydb/core/tx/datashard/datashard_common_upload.cpp
+++ b/ydb/core/tx/datashard/datashard_common_upload.cpp
@@ -72,7 +72,7 @@ bool TCommonUploadOps<TEvRequest, TEvResponse>::Execute(TDataShard* self, TTrans
// Prepare (id, Type) vector for value columns
TVector<NTable::TTag> tagsForSelect;
- TVector<std::pair<ui32, NScheme::TTypeId>> valueCols;
+ TVector<std::pair<ui32, NScheme::TTypeInfo>> valueCols;
for (const auto& colId : record.GetRowScheme().GetValueColumnIds()) {
if (readForTableShadow) {
tagsForSelect.push_back(colId);
@@ -114,7 +114,7 @@ bool TCommonUploadOps<TEvRequest, TEvResponse>::Execute(TDataShard* self, TTrans
ui64 keyBytes = 0;
for (const auto& kt : tableInfo.KeyColumnTypes) {
const TCell& c = keyCells.GetCells()[ki];
- if (kt == NScheme::NTypeIds::Uint8 && !c.IsNull() && c.AsValue<ui8>() > 127) {
+ if (kt.GetTypeId() == NScheme::NTypeIds::Uint8 && !c.IsNull() && c.AsValue<ui8>() > 127) {
SetError(NKikimrTxDataShard::TError::BAD_ARGUMENT, "Keys with Uint8 column values >127 are currently prohibited");
return true;
}
diff --git a/ydb/core/tx/datashard/datashard_direct_erase.cpp b/ydb/core/tx/datashard/datashard_direct_erase.cpp
index 054bedfc2b8..2014d71bc2a 100644
--- a/ydb/core/tx/datashard/datashard_direct_erase.cpp
+++ b/ydb/core/tx/datashard/datashard_direct_erase.cpp
@@ -98,7 +98,7 @@ TDirectTxErase::EStatus TDirectTxErase::CheckedExecute(
const auto& kt = tableInfo.KeyColumnTypes[ki];
const TCell& cell = keyCells.GetCells()[ki];
- if (kt == NScheme::NTypeIds::Uint8 && !cell.IsNull() && cell.AsValue<ui8>() > 127) {
+ if (kt.GetTypeId() == NScheme::NTypeIds::Uint8 && !cell.IsNull() && cell.AsValue<ui8>() > 127) {
status = NKikimrTxDataShard::TEvEraseRowsResponse::BAD_REQUEST;
error = "Keys with Uint8 column values >127 are currently prohibited";
return EStatus::Error;
diff --git a/ydb/core/tx/datashard/datashard_distributed_erase.cpp b/ydb/core/tx/datashard/datashard_distributed_erase.cpp
index e7a15a9eabd..4c14de3c1d7 100644
--- a/ydb/core/tx/datashard/datashard_distributed_erase.cpp
+++ b/ydb/core/tx/datashard/datashard_distributed_erase.cpp
@@ -74,8 +74,8 @@ class TDistEraser: public TActorBootstrapped<TDistEraser> {
});
}
- static TVector<NUdf::TDataTypeId> MakeKeyColumnTypes(const TNavigate::TEntry& entry) {
- return MakeKeyColumnSmth<NUdf::TDataTypeId>(entry, [](auto column) {
+ static TVector<NScheme::TTypeInfo> MakeKeyColumnTypes(const TNavigate::TEntry& entry) {
+ return MakeKeyColumnSmth<NScheme::TTypeInfo>(entry, [](auto column) {
return column.PType;
});
}
@@ -87,7 +87,7 @@ class TDistEraser: public TActorBootstrapped<TDistEraser> {
}
static THolder<TKeyDesc> MakeKeyDesc(const TNavigate::TEntry& entry) {
- const TVector<NUdf::TDataTypeId> keyColumnTypes = MakeKeyColumnTypes(entry);
+ const TVector<NScheme::TTypeInfo> keyColumnTypes = MakeKeyColumnTypes(entry);
return MakeHolder<TKeyDesc>(
entry.TableId,
GetFullRange(keyColumnTypes.size()).ToTableRange(),
diff --git a/ydb/core/tx/datashard/datashard_impl.h b/ydb/core/tx/datashard/datashard_impl.h
index c2332ff3b9a..2ec648f65af 100644
--- a/ydb/core/tx/datashard/datashard_impl.h
+++ b/ydb/core/tx/datashard/datashard_impl.h
@@ -2655,11 +2655,9 @@ protected:
bool OnRenderAppHtmlPage(NMon::TEvRemoteHttpInfo::TPtr ev, const TActorContext &ctx) override;
void SerializeHistogram(const TUserTable &tinfo,
const NTable::THistogram &histogram,
- const NScheme::TTypeRegistry &typeRegistry,
NKikimrTxDataShard::TEvGetDataHistogramResponse::THistogram &hist);
void SerializeKeySample(const TUserTable &tinfo,
const NTable::TKeyAccessSample &keySample,
- const NScheme::TTypeRegistry &typeRegistry,
NKikimrTxDataShard::TEvGetDataHistogramResponse::THistogram &hist);
bool ByKeyFilterDisabled() const;
diff --git a/ydb/core/tx/datashard/datashard_kqp.cpp b/ydb/core/tx/datashard/datashard_kqp.cpp
index 92fbe03e4b7..01c51025612 100644
--- a/ydb/core/tx/datashard/datashard_kqp.cpp
+++ b/ydb/core/tx/datashard/datashard_kqp.cpp
@@ -4,6 +4,7 @@
#include <ydb/core/kqp/kqp.h>
#include <ydb/core/kqp/runtime/kqp_tasks_runner.h>
#include <ydb/core/scheme/scheme_tablecell.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/tx/datashard/datashard_locks.h>
#include <ydb/core/tx/datashard/datashard_user_table.h>
#include <ydb/core/tx/datashard/range_ops.h>
@@ -300,7 +301,9 @@ using TWriteOpMeta = NKikimrTxDataShard::TKqpTransaction::TDataTaskMeta::TWriteO
using TColumnMeta = NKikimrTxDataShard::TKqpTransaction::TColumnMeta;
NTable::TColumn GetColumn(const TColumnMeta& columnMeta) {
- return NTable::TColumn(columnMeta.GetName(), columnMeta.GetId(), columnMeta.GetType());
+ auto typeInfo = NScheme::TypeInfoFromProtoColumnType(columnMeta.GetType(),
+ columnMeta.HasTypeInfo() ? &columnMeta.GetTypeInfo() : nullptr);
+ return NTable::TColumn(columnMeta.GetName(), columnMeta.GetId(), typeInfo);
}
TVector<NTable::TColumn> GetColumns(const TReadOpMeta& readMeta) {
@@ -451,9 +454,11 @@ void KqpSetTxLocksKeys(const NKikimrTxDataShard::TKqpLocks& locks, const TSysLoc
}
static TTableId sysLocksTableId = TTableId(TSysTables::SysSchemeShard, TSysTables::SysTableLocks2);
- static TVector<NScheme::TTypeId> lockRowType = {
- NScheme::TUint64::TypeId, NScheme::TUint64::TypeId,
- NScheme::TUint64::TypeId, NScheme::TUint64::TypeId,
+ static TVector<NScheme::TTypeInfo> lockRowType = {
+ NScheme::TTypeInfo(NScheme::TUint64::TypeId),
+ NScheme::TTypeInfo(NScheme::TUint64::TypeId),
+ NScheme::TTypeInfo(NScheme::TUint64::TypeId),
+ NScheme::TTypeInfo(NScheme::TUint64::TypeId),
};
for (auto& lock : locks.GetLocks()) {
diff --git a/ydb/core/tx/datashard/datashard_kqp_compute.cpp b/ydb/core/tx/datashard/datashard_kqp_compute.cpp
index 50662025ef1..8bd347f5b61 100644
--- a/ydb/core/tx/datashard/datashard_kqp_compute.cpp
+++ b/ydb/core/tx/datashard/datashard_kqp_compute.cpp
@@ -100,14 +100,14 @@ const NDataShard::TUserTable::TUserColumn& TKqpDatashardComputeContext::GetKeyCo
return col;
}
-THashMap<TString, NScheme::TTypeId> TKqpDatashardComputeContext::GetKeyColumnsMap(const TTableId &tableId) const {
+THashMap<TString, NScheme::TTypeInfo> TKqpDatashardComputeContext::GetKeyColumnsMap(const TTableId &tableId) const {
MKQL_ENSURE_S(Shard);
const NDataShard::TUserTable::TCPtr* tablePtr = Shard->GetUserTables().FindPtr(tableId.PathId.LocalPathId);
MKQL_ENSURE_S(tablePtr);
const NDataShard::TUserTable::TCPtr table = *tablePtr;
MKQL_ENSURE_S(table);
- THashMap<TString, NScheme::TTypeId> columnsMap;
+ THashMap<TString, NScheme::TTypeInfo> columnsMap;
for (size_t i = 0 ; i < table->KeyColumnTypes.size(); i++) {
auto col = table->Columns.at(table->KeyColumnIds[i]);
MKQL_ENSURE_S(col.IsKey);
@@ -425,7 +425,7 @@ bool TKqpDatashardComputeContext::ReadRow(const TTableId& tableId, TArrayRef<con
MKQL_ENSURE_S(columnTags.size() == dbRow.Size(), "Invalid local db row size.");
- TVector<NScheme::TTypeId> types(columnTags.size());
+ TVector<NScheme::TTypeInfo> types(columnTags.size());
for (size_t i = 0; i < columnTags.size(); ++i) {
types[i] = tableInfo->Columns.at(columnTags[i]).PType;
}
diff --git a/ydb/core/tx/datashard/datashard_kqp_compute.h b/ydb/core/tx/datashard/datashard_kqp_compute.h
index 5e0fc52e70c..de6d81372ab 100644
--- a/ydb/core/tx/datashard/datashard_kqp_compute.h
+++ b/ydb/core/tx/datashard/datashard_kqp_compute.h
@@ -35,7 +35,7 @@ public:
const NDataShard::TUserTable::TUserColumn& GetKeyColumnInfo(
const NDataShard::TUserTable& table, ui32 keyIndex) const;
- THashMap<TString, NScheme::TTypeId> GetKeyColumnsMap(const TTableId &tableId) const;
+ THashMap<TString, NScheme::TTypeInfo> GetKeyColumnsMap(const TTableId &tableId) const;
void SetHasPersistentChannels(bool value) { PersistentChannels = value; }
bool HasPersistentChannels() const { return PersistentChannels; }
diff --git a/ydb/core/tx/datashard/datashard_kqp_delete_rows.cpp b/ydb/core/tx/datashard/datashard_kqp_delete_rows.cpp
index f03e13ddf39..f73be2d14a2 100644
--- a/ydb/core/tx/datashard/datashard_kqp_delete_rows.cpp
+++ b/ydb/core/tx/datashard/datashard_kqp_delete_rows.cpp
@@ -94,7 +94,7 @@ public:
public:
TKqpDeleteRowsWrapper(TComputationMutables& mutables, TKqpDatashardComputeContext& computeCtx,
- const TTableId& tableId, IComputationNode* rowsNode, TVector<NUdf::TDataTypeId> rowTypes, TVector<ui32> keyIndices, const TTypeEnvironment& env)
+ const TTableId& tableId, IComputationNode* rowsNode, TVector<NScheme::TTypeInfo> rowTypes, TVector<ui32> keyIndices, const TTypeEnvironment& env)
: TBase(mutables)
, TableId(tableId)
, RowsNode(rowsNode)
@@ -112,7 +112,7 @@ private:
private:
TTableId TableId;
IComputationNode* RowsNode;
- const TVector<NUdf::TDataTypeId> RowTypes;
+ const TVector<NScheme::TTypeInfo> RowTypes;
const TVector<ui32> KeyIndices;
const TTypeEnvironment& Env;
TKqpTableStats& ShardTableStats;
@@ -139,7 +139,7 @@ IComputationNode* WrapKqpDeleteRows(TCallable& callable, const TComputationNodeF
<< ", actual: " << rowType->GetMembersCount());
THashMap<TString, ui32> inputIndex;
- TVector<NUdf::TDataTypeId> rowTypes(rowType->GetMembersCount());
+ TVector<NScheme::TTypeInfo> rowTypes(rowType->GetMembersCount());
for (ui32 i = 0; i < rowType->GetMembersCount(); ++i) {
const auto& name = rowType->GetMemberName(i);
MKQL_ENSURE_S(inputIndex.emplace(TString(name), i).second);
@@ -149,7 +149,8 @@ IComputationNode* WrapKqpDeleteRows(TCallable& callable, const TComputationNodeF
? AS_TYPE(TDataType, AS_TYPE(TOptionalType, memberType)->GetItemType())->GetSchemeType()
: AS_TYPE(TDataType, memberType)->GetSchemeType();
- rowTypes[i] = typeId;
+ // TODO: support pg types
+ rowTypes[i] = NScheme::TTypeInfo(typeId);
}
TVector<ui32> keyIndices(tableInfo->KeyColumnIds.size());
@@ -160,8 +161,8 @@ IComputationNode* WrapKqpDeleteRows(TCallable& callable, const TComputationNodeF
MKQL_ENSURE_S(rowTypes[it->second] == columnInfo.Type, "Key type mismatch"
<< ", column: " << columnInfo.Name
- << ", expected: " << columnInfo.Type
- << ", actual: " << rowTypes[it->second]);
+ << ", expected: " << NScheme::TypeName(columnInfo.Type)
+ << ", actual: " << NScheme::TypeName(rowTypes[it->second]));
keyIndices[i] = it->second;
}
diff --git a/ydb/core/tx/datashard/datashard_kqp_lookup_table.cpp b/ydb/core/tx/datashard/datashard_kqp_lookup_table.cpp
index 8cd0d4de4a8..eb50e43406e 100644
--- a/ydb/core/tx/datashard/datashard_kqp_lookup_table.cpp
+++ b/ydb/core/tx/datashard/datashard_kqp_lookup_table.cpp
@@ -17,14 +17,14 @@ struct TParseLookupTableResult {
TTableId TableId;
TRuntimeNode LookupKeys;
TVector<ui32> KeyIndices;
- TVector<NUdf::TDataTypeId> KeyTypes;
+ TVector<NScheme::TTypeInfo> KeyTypes;
TSmallVec<NTable::TTag> Columns;
TSmallVec<NTable::TTag> SystemColumns;
TSmallVec<bool> SkipNullKeys;
};
-void ValidateLookupKeys(const TType* inputType, const THashMap<TString, NScheme::TTypeId>& keyColumns) {
+void ValidateLookupKeys(const TType* inputType, const THashMap<TString, NScheme::TTypeInfo>& keyColumns) {
MKQL_ENSURE_S(inputType);
auto rowType = AS_TYPE(TStructType, AS_TYPE(TStreamType, inputType)->GetItemType());
@@ -34,7 +34,9 @@ void ValidateLookupKeys(const TType* inputType, const THashMap<TString, NScheme:
auto columnType = keyColumns.FindPtr(name);
MKQL_ENSURE_S(columnType);
- MKQL_ENSURE_S(dataType == *columnType, "Key column type mismatch, column: " << name);
+
+ // TODO: support pg types
+ MKQL_ENSURE_S(dataType == columnType->GetTypeId(), "Key column type mismatch, column: " << name);
}
}
@@ -63,12 +65,17 @@ TParseLookupTableResult ParseLookupTable(TCallable& callable) {
auto keyTypes = AS_TYPE(TStructType, AS_TYPE(TStreamType, keysNode.GetStaticType())->GetItemType());
result.KeyTypes.resize(keyTypes->GetMembersCount());
for (ui32 i = 0; i < result.KeyTypes.size(); ++i) {
+ // TODO: support pg types
if (keyTypes->GetMemberType(i)->IsOptional()) {
- auto type = AS_TYPE(TDataType, AS_TYPE(TOptionalType, keyTypes->GetMemberType(i))->GetItemType());
- result.KeyTypes[i] = type->GetSchemeType();
+ auto type = AS_TYPE(TOptionalType, keyTypes->GetMemberType(i))->GetItemType();
+ MKQL_ENSURE(type->GetKind() != TType::EKind::Pg, "pg types are not supported");
+ auto dataType = AS_TYPE(TDataType, type);
+ result.KeyTypes[i] = NScheme::TTypeInfo(dataType->GetSchemeType());
} else {
- auto type = AS_TYPE(TDataType, keyTypes->GetMemberType(i));
- result.KeyTypes[i] = type->GetSchemeType();
+ auto type = keyTypes->GetMemberType(i);
+ MKQL_ENSURE(type->GetKind() != TType::EKind::Pg, "pg types are not supported");
+ auto dataType = AS_TYPE(TDataType, type);
+ result.KeyTypes[i] = NScheme::TTypeInfo(dataType->GetSchemeType());
}
}
diff --git a/ydb/core/tx/datashard/datashard_kqp_read_table.cpp b/ydb/core/tx/datashard/datashard_kqp_read_table.cpp
index 2054daaadec..bf87ae31b31 100644
--- a/ydb/core/tx/datashard/datashard_kqp_read_table.cpp
+++ b/ydb/core/tx/datashard/datashard_kqp_read_table.cpp
@@ -16,16 +16,18 @@ using namespace NUdf;
namespace {
-void ValidateKeyType(const TType* keyType, NScheme::TTypeId expectedType) {
+void ValidateKeyType(const TType* keyType, NScheme::TTypeInfo expectedType) {
auto type = keyType;
if (type->IsOptional()) {
type = AS_TYPE(TOptionalType, type)->GetItemType();
}
+ // TODO: support pg types
+ MKQL_ENSURE_S(type->GetKind() != TType::EKind::Pg, "pg types are not supported");
auto dataType = AS_TYPE(TDataType, type)->GetSchemeType();
- MKQL_ENSURE_S(dataType == expectedType);
+ MKQL_ENSURE_S(dataType == expectedType.GetTypeId());
}
void ValidateKeyTuple(const TTupleType* tupleType, const NDataShard::TUserTable& tableInfo,
@@ -116,7 +118,10 @@ TSerializedTableRange BuildRange(const TTupleType* fromType, const NUdf::TUnboxe
}
}
- cells.emplace_back(MakeCell(AS_TYPE(TDataType, type)->GetSchemeType(), value, typeEnv, /* copy */ true));
+ // TODO: support pg types
+ MKQL_ENSURE_S(type->GetKind() != TType::EKind::Pg, "pg types are not supported");
+ auto typeInfo = NScheme::TTypeInfo(AS_TYPE(TDataType, type)->GetSchemeType());
+ cells.emplace_back(MakeCell(typeInfo, value, typeEnv, /* copy */ true));
}
return cells;
diff --git a/ydb/core/tx/datashard/datashard_kqp_upsert_rows.cpp b/ydb/core/tx/datashard/datashard_kqp_upsert_rows.cpp
index 8e6e3ba023f..5abccb769c3 100644
--- a/ydb/core/tx/datashard/datashard_kqp_upsert_rows.cpp
+++ b/ydb/core/tx/datashard/datashard_kqp_upsert_rows.cpp
@@ -63,11 +63,13 @@ public:
command.Operation = TKeyDesc::EColumnOperation::Set;
auto rowIndex = upsertColumn.RowIndex;
- NUdf::TDataTypeId type = Owner.RowTypes[rowIndex];
+ NScheme::TTypeInfo type = Owner.RowTypes[rowIndex];
NUdf::TUnboxedValue value = Row.GetElement(rowIndex);
if (value) {
- auto slot = NUdf::GetDataSlot(type);
+ // TODO: support pg types
+ Y_VERIFY(type.GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+ auto slot = NUdf::GetDataSlot(type.GetTypeId());
MKQL_ENSURE(IsValidValue(slot, value),
"Malformed value for type: " << NUdf::GetDataTypeInfo(slot).Name << ", " << value);
}
@@ -127,7 +129,7 @@ public:
public:
TKqpUpsertRowsWrapper(TComputationMutables& mutables, TKqpDatashardComputeContext& computeCtx,
- const TTableId& tableId, IComputationNode* rowsNode, TVector<NUdf::TDataTypeId>&& rowTypes,
+ const TTableId& tableId, IComputationNode* rowsNode, TVector<NScheme::TTypeInfo>&& rowTypes,
TVector<ui32>&& keyIndices, TVector<TUpsertColumn>&& upsertColumns, const TTypeEnvironment& env)
: TBase(mutables)
, TableId(tableId)
@@ -147,7 +149,7 @@ private:
private:
TTableId TableId;
IComputationNode* RowsNode;
- TVector<NUdf::TDataTypeId> RowTypes;
+ TVector<NScheme::TTypeInfo> RowTypes;
TVector<ui32> KeyIndices;
TVector<TUpsertColumn> UpsertColumns;
const TTypeEnvironment& Env;
@@ -176,11 +178,12 @@ IComputationNode* WrapKqpUpsertRows(TCallable& callable, const TComputationNodeF
"not enough columns in the runtime node");
THashMap<TStringBuf, ui32> inputIndex;
- TVector<NUdf::TDataTypeId> rowTypes(rowType->GetMembersCount());
+ TVector<NScheme::TTypeInfo> rowTypes(rowType->GetMembersCount());
for (ui32 i = 0; i < rowTypes.size(); ++i) {
const auto& name = rowType->GetMemberName(i);
MKQL_ENSURE_S(inputIndex.emplace(name, i).second);
- rowTypes[i] = NKqp::UnwrapDataTypeFromStruct(*rowType, i);
+ // TODO: support pg types
+ rowTypes[i] = NScheme::TTypeInfo(NKqp::UnwrapDataTypeFromStruct(*rowType, i));
}
TVector<ui32> keyIndices(tableInfo->KeyColumnIds.size());
@@ -190,7 +193,8 @@ IComputationNode* WrapKqpUpsertRows(TCallable& callable, const TComputationNodeF
auto it = inputIndex.find(columnInfo.Name);
MKQL_ENSURE_S(it != inputIndex.end());
auto typeId = NKqp::UnwrapDataTypeFromStruct(*rowType, it->second);
- MKQL_ENSURE_S(typeId == columnInfo.Type, "row key type missmatch with table key type");
+ // TODO: support pg types
+ MKQL_ENSURE_S(typeId == columnInfo.Type.GetTypeId(), "row key type missmatch with table key type");
keyIndices[i] = it->second;
}
diff --git a/ydb/core/tx/datashard/datashard_locks.h b/ydb/core/tx/datashard/datashard_locks.h
index 5acb2690e07..d5c910fb4eb 100644
--- a/ydb/core/tx/datashard/datashard_locks.h
+++ b/ydb/core/tx/datashard/datashard_locks.h
@@ -408,12 +408,12 @@ public:
return KeyColumnTypes.size();
}
- NScheme::TTypeId GetKeyColumnType(ui32 pos) const {
+ NScheme::TTypeInfo GetKeyColumnType(ui32 pos) const {
Y_VERIFY(pos < KeyColumnTypes.size());
return KeyColumnTypes[pos];
}
- void UpdateKeyColumnsTypes(const TVector<NScheme::TTypeId>& keyTypes) {
+ void UpdateKeyColumnsTypes(const TVector<NScheme::TTypeInfo>& keyTypes) {
Y_VERIFY(KeyColumnTypes.size() <= keyTypes.size());
if (KeyColumnTypes.size() < keyTypes.size()) {
KeyColumnTypes = keyTypes;
@@ -433,7 +433,7 @@ public:
private:
const TPathId TableId;
- TVector<NScheme::TTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
TRangeTreap<TLockInfo*> Ranges;
THashSet<TLockInfo*> ShardLocks;
THashSet<TLockInfo*> WriteLocks;
diff --git a/ydb/core/tx/datashard/datashard_repl_offsets.cpp b/ydb/core/tx/datashard/datashard_repl_offsets.cpp
index 176a6ba0318..5e37ab5a3c8 100644
--- a/ydb/core/tx/datashard/datashard_repl_offsets.cpp
+++ b/ydb/core/tx/datashard/datashard_repl_offsets.cpp
@@ -57,7 +57,7 @@ namespace NKikimr::NDataShard {
const TPathId& pathId,
const ui64 id,
const TString& name,
- const TVector<NScheme::TTypeId>* keyColumnTypes)
+ const TVector<NScheme::TTypeInfo>* keyColumnTypes)
: PathId(pathId)
, Id(id)
, Name(name)
@@ -247,7 +247,7 @@ namespace NKikimr::NDataShard {
TReplicatedTableState::TReplicatedTableState(
const TPathId& pathId,
- const TVector<NScheme::TTypeId>& keyColumnTypes)
+ const TVector<NScheme::TTypeInfo>& keyColumnTypes)
: PathId(pathId)
, KeyColumnTypes(keyColumnTypes)
{ }
diff --git a/ydb/core/tx/datashard/datashard_repl_offsets.h b/ydb/core/tx/datashard/datashard_repl_offsets.h
index 7377d0c01b6..73c33d46acd 100644
--- a/ydb/core/tx/datashard/datashard_repl_offsets.h
+++ b/ydb/core/tx/datashard/datashard_repl_offsets.h
@@ -41,7 +41,7 @@ namespace NKikimr::NDataShard {
struct TLessByKeyPrefix {
// Points to vector in TReplicatedTableState
- const TVector<NScheme::TTypeId>* KeyColumnTypes;
+ const TVector<NScheme::TTypeInfo>* KeyColumnTypes;
using is_transparent = void;
@@ -72,7 +72,7 @@ namespace NKikimr::NDataShard {
const TPathId& pathId,
const ui64 id,
const TString& name,
- const TVector<NScheme::TTypeId>* keyColumnTypes);
+ const TVector<NScheme::TTypeInfo>* keyColumnTypes);
ui64 CalcStatBytes(const TOffsetState& state) const;
void AddStatBytes(const TOffsetState& state);
@@ -99,14 +99,14 @@ namespace NKikimr::NDataShard {
class TReplicatedTableState {
public:
const TPathId PathId;
- TVector<NScheme::TTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
TMap<ui64, TReplicationSourceState> SourceById;
THashMap<TString, TReplicationSourceState*> Sources;
ui64 NextSourceId = 1;
TReplicatedTableState(
const TPathId& pathId,
- const TVector<NScheme::TTypeId>& keyColumnTypes);
+ const TVector<NScheme::TTypeInfo>& keyColumnTypes);
TReplicationSourceState* FindSource(ui64 sourceId);
TReplicationSourceState& LoadSource(ui64 sourceId, const TString& sourceName);
diff --git a/ydb/core/tx/datashard/datashard_split_dst.cpp b/ydb/core/tx/datashard/datashard_split_dst.cpp
index 9cb70cdbd74..24e741dd7b9 100644
--- a/ydb/core/tx/datashard/datashard_split_dst.cpp
+++ b/ydb/core/tx/datashard/datashard_split_dst.cpp
@@ -361,7 +361,7 @@ public:
auto itUserTables = userTables.find(msg->PathId.LocalPathId);
Y_VERIFY(itUserTables != userTables.end());
TUserTable::TCPtr tableInfo = itUserTables->second;
- TConstArrayRef<NScheme::TTypeId> keyColumnTypes = tableInfo->KeyColumnTypes;
+ TConstArrayRef<NScheme::TTypeInfo> keyColumnTypes = tableInfo->KeyColumnTypes;
auto* replTable = Self->EnsureReplicatedTable(msg->PathId);
Y_VERIFY(replTable);
diff --git a/ydb/core/tx/datashard/datashard_user_table.cpp b/ydb/core/tx/datashard/datashard_user_table.cpp
index b7112cd6f9a..c78cac2c911 100644
--- a/ydb/core/tx/datashard/datashard_user_table.cpp
+++ b/ydb/core/tx/datashard/datashard_user_table.cpp
@@ -1,6 +1,7 @@
#include "datashard_user_table.h"
#include <ydb/core/base/path.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/tablet_flat/flat_cxx_database.h>
#include <ydb/core/tablet_flat/tablet_flat_executed.h>
#include <ydb/core/tablet_flat/tablet_flat_executor.h>
@@ -218,7 +219,9 @@ void TUserTable::ParseProto(const NKikimrSchemeOp::TTableDescription& descr)
for (const auto& col : descr.GetColumns()) {
TUserColumn& column = Columns[col.GetId()];
if (column.Name.empty()) {
- column = TUserColumn(col.GetTypeId(), col.GetName());
+ auto typeInfo = NScheme::TypeInfoFromProtoColumnType(col.GetTypeId(),
+ col.HasTypeInfo() ? &col.GetTypeInfo() : nullptr);
+ column = TUserColumn(typeInfo, col.GetName());
}
column.Family = col.GetFamily();
column.NotNull = col.GetNotNull();
@@ -289,7 +292,7 @@ void TUserTable::CheckSpecialColumns() {
const ui32 colId = xpair.first;
const auto &column = xpair.second;
- if (column.IsKey || column.Type != NScheme::NTypeIds::Uint64)
+ if (column.IsKey || column.Type.GetTypeId() != NScheme::NTypeIds::Uint64)
continue;
if (column.Name == "__tablet")
@@ -331,7 +334,11 @@ void TUserTable::AlterSchema() {
auto descr = schema.AddColumns();
descr->SetName(column.Name);
descr->SetId(col.first);
- descr->SetTypeId(column.Type);
+ auto protoType = NScheme::ProtoColumnTypeFromTypeInfo(column.Type);
+ descr->SetTypeId(protoType.TypeId);
+ if (protoType.TypeInfo) {
+ *descr->MutableTypeInfo() = *protoType.TypeInfo;
+ }
descr->SetFamily(column.Family);
descr->SetNotNull(column.NotNull);
}
@@ -390,7 +397,9 @@ void TUserTable::DoApplyCreate(
ui32 columnId = col.first;
const TUserColumn& column = col.second;
- alter.AddColumn(tid, column.Name, columnId, column.Type, column.NotNull);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(column.Type);
+ ui32 pgTypeId = columnType.TypeInfo ? columnType.TypeInfo->GetPgTypeId() : 0;
+ alter.AddPgColumn(tid, column.Name, columnId, columnType.TypeId, pgTypeId, column.NotNull);
alter.AddColumnToFamily(tid, columnId, column.Family);
}
@@ -492,7 +501,9 @@ void TUserTable::ApplyAlter(
if (!oldTable.Columns.contains(colId)) {
for (ui32 tid : tids) {
- alter.AddColumn(tid, column.Name, colId, column.Type, column.NotNull);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(column.Type);
+ ui32 pgTypeId = columnType.TypeInfo ? columnType.TypeInfo->GetPgTypeId() : 0;
+ alter.AddPgColumn(tid, column.Name, colId, columnType.TypeId, pgTypeId, column.NotNull);
}
}
diff --git a/ydb/core/tx/datashard/datashard_user_table.h b/ydb/core/tx/datashard/datashard_user_table.h
index f3b6f8112c4..3ffd499d372 100644
--- a/ydb/core/tx/datashard/datashard_user_table.h
+++ b/ydb/core/tx/datashard/datashard_user_table.h
@@ -232,13 +232,13 @@ struct TUserTable : public TThrRefBase {
};
struct TUserColumn {
- NScheme::TTypeId Type;
+ NScheme::TTypeInfo Type;
TString Name;
bool IsKey;
ui32 Family = 0;
bool NotNull = false;
- TUserColumn(NScheme::TTypeId type, TString name, bool isKey = false)
+ TUserColumn(NScheme::TTypeInfo type, TString name, bool isKey = false)
: Type(type)
, Name(name)
, IsKey(isKey)
@@ -351,7 +351,7 @@ struct TUserTable : public TThrRefBase {
TMap<ui32, TStorageRoom::TPtr> Rooms;
TMap<ui32, TUserFamily> Families;
TMap<ui32, TUserColumn> Columns;
- TVector<NScheme::TTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
TVector<ui32> KeyColumnIds;
TSerializedTableRange Range;
bool IsBackup = false;
diff --git a/ydb/core/tx/datashard/datashard_ut_common.cpp b/ydb/core/tx/datashard/datashard_ut_common.cpp
index 8954f967bc7..83554e0834c 100644
--- a/ydb/core/tx/datashard/datashard_ut_common.cpp
+++ b/ydb/core/tx/datashard/datashard_ut_common.cpp
@@ -3,6 +3,7 @@
#include <ydb/core/base/tablet.h>
#include <ydb/core/base/tablet_resolver.h>
#include <ydb/core/scheme/scheme_types_defs.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/tablet_flat/flat_bio_events.h>
#include <ydb/core/tablet_flat/shared_cache_events.h>
#include <ydb/core/testlib/basics/appdata.h>
@@ -198,7 +199,9 @@ void TTester::RegisterTableInResolver(const TString& schemeText)
keyIdx = ki;
}
}
- table.Columns.insert(std::make_pair(c.GetName(), TColumn{c.GetId(), keyIdx, c.GetTypeId(), 0, EColumnTypeConstraint::Nullable}));
+ auto typeInfo = NScheme::TypeInfoFromProtoColumnType(c.GetTypeId(),
+ c.HasTypeInfo() ? &c.GetTypeInfo() : nullptr);
+ table.Columns.insert(std::make_pair(c.GetName(), TColumn{c.GetId(), keyIdx, typeInfo, 0, EColumnTypeConstraint::Nullable}));
}
DbSchemeResolver.AddTable(table);
}
diff --git a/ydb/core/tx/datashard/datashard_ut_locks.cpp b/ydb/core/tx/datashard/datashard_ut_locks.cpp
index 8f15575378a..b334d4400f7 100644
--- a/ydb/core/tx/datashard/datashard_ut_locks.cpp
+++ b/ydb/core/tx/datashard/datashard_ut_locks.cpp
@@ -55,7 +55,7 @@ namespace NTest {
void InitSchema() {
TableInfos[EUserTableId].LocalTid = EUserTableId;
TableInfos[EUserTableId].Name = "user____Table";
- TableInfos[EUserTableId].KeyColumnTypes.push_back(NScheme::NTypeIds::Uint32);
+ TableInfos[EUserTableId].KeyColumnTypes.push_back(NScheme::TTypeInfo(NScheme::NTypeIds::Uint32));
NTable::TAlter delta;
diff --git a/ydb/core/tx/datashard/datashard_ut_range_ops.cpp b/ydb/core/tx/datashard/datashard_ut_range_ops.cpp
index 681749709bd..053f25b85dc 100644
--- a/ydb/core/tx/datashard/datashard_ut_range_ops.cpp
+++ b/ydb/core/tx/datashard/datashard_ut_range_ops.cpp
@@ -29,7 +29,7 @@ Y_UNIT_TEST_SUITE(RangeOps) {
return TSerializedTableRange(from, to, fromInclusive, toInclusive);
}
- void CheckRange(TConstArrayRef<NScheme::TTypeId> types,
+ void CheckRange(TConstArrayRef<NScheme::TTypeInfo> types,
const TTableRange& first, const TTableRange& second) {
if (first.IsEmptyRange(types)) {
Y_ASSERT(second.IsEmptyRange(types));
@@ -56,8 +56,9 @@ Y_UNIT_TEST_SUITE(RangeOps) {
auto typeRegistry = MakeHolder<NScheme::TKikimrTypeRegistry>();
typeRegistry->CalculateMetadataEtag();
- const TVector<NKikimr::NScheme::TTypeId> valueType = {NScheme::NTypeIds::Uint64};
- const TVector<NKikimr::NScheme::TTypeId> pairType = {NScheme::NTypeIds::Uint64, NScheme::NTypeIds::Uint64};
+ auto typeInfoUi64 = NScheme::TTypeInfo(NScheme::NTypeIds::Uint64);
+ const TVector<NScheme::TTypeInfo> valueType = {typeInfoUi64};
+ const TVector<NScheme::TTypeInfo> pairType = {typeInfoUi64, typeInfoUi64};
const auto emptyRange = MakeRange(
MakePoint({20}), true,
diff --git a/ydb/core/tx/datashard/datashard_ut_read_iterator.cpp b/ydb/core/tx/datashard/datashard_ut_read_iterator.cpp
index 19de40a2b51..dc39356ec0d 100644
--- a/ydb/core/tx/datashard/datashard_ut_read_iterator.cpp
+++ b/ydb/core/tx/datashard/datashard_ut_read_iterator.cpp
@@ -76,7 +76,7 @@ struct TRowWriter : public NArrow::IRowWriter {
};
std::vector<TOwnedCellVec> GetRows(
- const TVector<std::pair<TString, NScheme::TTypeId>>& batchSchema,
+ const TVector<std::pair<TString, NScheme::TTypeInfo>>& batchSchema,
const TEvDataShard::TEvReadResult& result)
{
UNIT_ASSERT(result.ArrowBatch);
@@ -94,7 +94,7 @@ std::vector<TOwnedCellVec> GetRows(
void CheckRow(
const TConstArrayRef<TCell>& row,
const TCellVec& gold,
- const std::vector<NScheme::TTypeIdOrder>& goldTypes)
+ const std::vector<NScheme::TTypeInfoOrder>& goldTypes)
{
UNIT_ASSERT_VALUES_EQUAL(row.size(), gold.size());
for (size_t i: xrange(row.size())) {
@@ -107,7 +107,7 @@ template <typename TCellVecType>
void CheckRows(
const std::vector<TCellVecType>& rows,
const std::vector<TCellVec>& gold,
- const std::vector<NScheme::TTypeIdOrder>& goldTypes)
+ const std::vector<NScheme::TTypeInfoOrder>& goldTypes)
{
UNIT_ASSERT_VALUES_EQUAL(rows.size(), gold.size());
for (size_t i: xrange(rows.size())) {
@@ -119,7 +119,7 @@ void CheckResultCellVec(
const NKikimrTxDataShard::TEvGetInfoResponse::TUserTable& userTable,
const TEvDataShard::TEvReadResult& result,
const std::vector<TCellVec>& gold,
- const std::vector<NScheme::TTypeIdOrder>& goldTypes,
+ const std::vector<NScheme::TTypeInfoOrder>& goldTypes,
std::vector<NTable::TTag> columns = {})
{
Y_UNUSED(userTable);
@@ -142,13 +142,13 @@ void CheckResultArrow(
const NKikimrTxDataShard::TEvGetInfoResponse::TUserTable& userTable,
const TEvDataShard::TEvReadResult& result,
const std::vector<TCellVec>& gold,
- const std::vector<NScheme::TTypeIdOrder>& goldTypes,
+ const std::vector<NScheme::TTypeInfoOrder>& goldTypes,
std::vector<NTable::TTag> columns = {})
{
UNIT_ASSERT(!gold.empty());
UNIT_ASSERT(result.ArrowBatch);
- TVector<std::pair<TString, NScheme::TTypeId>> batchSchema;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> batchSchema;
const auto& description = userTable.GetDescription();
if (columns.empty()) {
batchSchema.reserve(description.ColumnsSize());
@@ -175,7 +175,7 @@ void CheckResult(
const NKikimrTxDataShard::TEvGetInfoResponse::TUserTable& userTable,
const TEvDataShard::TEvReadResult& result,
const std::vector<TCellVec>& gold,
- const std::vector<NScheme::TTypeIdOrder>& goldTypes,
+ const std::vector<NScheme::TTypeInfoOrder>& goldTypes,
std::vector<NTable::TTag> columns = {})
{
const auto& record = result.Record;
@@ -211,12 +211,12 @@ void CheckResult(
const std::vector<std::vector<ui32>>& gold,
std::vector<NTable::TTag> columns = {})
{
- std::vector<NScheme::TTypeIdOrder> types;
+ std::vector<NScheme::TTypeInfoOrder> types;
if (!gold.empty() && !gold[0].empty()) {
types.reserve(gold[0].size());
for (auto i: xrange(gold[0].size())) {
Y_UNUSED(i);
- types.emplace_back(NScheme::NTypeIds::Uint32);
+ types.emplace_back(NScheme::TTypeInfo(NScheme::NTypeIds::Uint32));
}
}
diff --git a/ydb/core/tx/datashard/datashard_ut_snapshot.cpp b/ydb/core/tx/datashard/datashard_ut_snapshot.cpp
index b75720bb163..d63d3774c73 100644
--- a/ydb/core/tx/datashard/datashard_ut_snapshot.cpp
+++ b/ydb/core/tx/datashard/datashard_ut_snapshot.cpp
@@ -23,7 +23,7 @@ namespace {
class TTextFormatBuilder : public IBlockBuilder {
public:
bool Start(
- const TVector<std::pair<TString, NScheme::TTypeId>>& columns,
+ const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns,
ui64 maxRowsInBlock,
ui64 maxBytesInBlock,
TString& err) override
@@ -65,7 +65,7 @@ namespace {
}
private:
- TVector<std::pair<TString, NScheme::TTypeId>> Columns;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> Columns;
TString Buffer;
};
diff --git a/ydb/core/tx/datashard/erase_rows_condition.cpp b/ydb/core/tx/datashard/erase_rows_condition.cpp
index d6960773513..e7b06ce59cf 100644
--- a/ydb/core/tx/datashard/erase_rows_condition.cpp
+++ b/ydb/core/tx/datashard/erase_rows_condition.cpp
@@ -131,7 +131,8 @@ public:
Pos = remapPos.GetOrElse(columnInfo->Pos);
Y_VERIFY(Pos < scheme->Tags().size());
- Type = columnInfo->TypeId;
+ Type = columnInfo->TypeInfo.GetTypeId();
+ Y_VERIFY(Type != NScheme::NTypeIds::Pg, "pg types are not supported");
}
bool Check(const NTable::TRowState& row) const override {
diff --git a/ydb/core/tx/datashard/execute_distributed_erase_tx_unit.cpp b/ydb/core/tx/datashard/execute_distributed_erase_tx_unit.cpp
index 0059180e3ae..6e68eabd848 100644
--- a/ydb/core/tx/datashard/execute_distributed_erase_tx_unit.cpp
+++ b/ydb/core/tx/datashard/execute_distributed_erase_tx_unit.cpp
@@ -119,7 +119,6 @@ public:
for (size_t ki : xrange(tableInfo.KeyColumnTypes.size())) {
const auto& kt = tableInfo.KeyColumnTypes[ki];
const TCell& cell = keyCells.GetCells()[ki];
-
key.emplace_back(TRawTypeValue(cell.AsRef(), kt));
}
diff --git a/ydb/core/tx/datashard/export_s3_buffer_raw.cpp b/ydb/core/tx/datashard/export_s3_buffer_raw.cpp
index 1ad77ed46d1..f5b0efbd2f6 100644
--- a/ydb/core/tx/datashard/export_s3_buffer_raw.cpp
+++ b/ydb/core/tx/datashard/export_s3_buffer_raw.cpp
@@ -57,7 +57,7 @@ void TS3BufferRaw::Collect(const NTable::IScan::TRow& row, IOutputStream& out) {
continue;
}
- switch (column.Type) {
+ switch (column.Type.GetTypeId()) {
case NScheme::NTypeIds::Int32:
out << cell.AsValue<i32>();
break;
@@ -121,6 +121,9 @@ void TS3BufferRaw::Collect(const NTable::IScan::TRow& row, IOutputStream& out) {
case NScheme::NTypeIds::JsonDocument:
out << '"' << CGIEscapeRet(NBinaryJson::SerializeToJson(cell.AsBuf())) << '"';
break;
+ case NScheme::NTypeIds::Pg:
+ // TODO: support pg types
+ Y_FAIL("Unsupported pg type");
default:
Y_FAIL("Unsupported type");
}
diff --git a/ydb/core/tx/datashard/import_common.h b/ydb/core/tx/datashard/import_common.h
index a7cb38b18e7..7ae51dfbfb2 100644
--- a/ydb/core/tx/datashard/import_common.h
+++ b/ydb/core/tx/datashard/import_common.h
@@ -81,7 +81,7 @@ public:
return ColumnNameIndex.contains(name);
}
- NScheme::TTypeId GetColumnType(const TString& name) const {
+ NScheme::TTypeInfo GetColumnType(const TString& name) const {
auto it = ColumnNameIndex.find(name);
Y_VERIFY(it != ColumnNameIndex.end());
return it->second->second.Type;
diff --git a/ydb/core/tx/datashard/import_s3.cpp b/ydb/core/tx/datashard/import_s3.cpp
index 975e8a226df..7a592b1b150 100644
--- a/ydb/core/tx/datashard/import_s3.cpp
+++ b/ydb/core/tx/datashard/import_s3.cpp
@@ -9,6 +9,7 @@
#include <ydb/core/base/appdata.h>
#include <ydb/core/protos/flat_scheme_op.pb.h>
#include <ydb/core/protos/services.pb.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/tablet/resource_broker.h>
#include <ydb/core/wrappers/s3_wrapper.h>
#include <ydb/core/wrappers/s3_storage.h>
@@ -496,11 +497,13 @@ class TS3Downloader: public TActorBootstrapped<TS3Downloader> {
return false;
}
- std::vector<std::pair<i32, ui32>> columnOrderTypes; // {keyOrder, PType}
+ std::vector<std::pair<i32, NScheme::TTypeInfo>> columnOrderTypes; // {keyOrder, PType}
columnOrderTypes.reserve(Scheme.GetColumns().size());
for (const auto& column : Scheme.GetColumns()) {
- columnOrderTypes.emplace_back(TableInfo.KeyOrder(column.GetName()), column.GetTypeId());
+ auto typeInfo = NScheme::TypeInfoFromProtoColumnType(column.GetTypeId(),
+ column.HasTypeInfo() ? &column.GetTypeInfo() : nullptr);
+ columnOrderTypes.emplace_back(TableInfo.KeyOrder(column.GetName()), typeInfo);
}
TVector<TCell> keys;
@@ -596,12 +599,14 @@ class TS3Downloader: public TActorBootstrapped<TS3Downloader> {
<< ": name# " << column.GetName());
}
- const NScheme::TTypeId type = TableInfo.GetColumnType(column.GetName());
- if (type != static_cast<NScheme::TTypeId>(column.GetTypeId())) {
+ const auto typeInfo = TableInfo.GetColumnType(column.GetName());
+ auto columnTypeInfo = NScheme::TypeInfoFromProtoColumnType(column.GetTypeId(),
+ column.HasTypeInfo() ? &column.GetTypeInfo() : nullptr);
+ if (typeInfo != columnTypeInfo) {
return finish(TStringBuilder() << "Scheme mismatch: column type mismatch"
<< ": name# " << column.GetName()
- << ", expected# " << type
- << ", got# " << static_cast<NScheme::TTypeId>(column.GetTypeId()));
+ << ", expected# " << NScheme::TypeName(typeInfo)
+ << ", got# " << NScheme::TypeName(columnTypeInfo));
}
}
diff --git a/ydb/core/tx/datashard/range_avl_tree_ut.cpp b/ydb/core/tx/datashard/range_avl_tree_ut.cpp
index ae88374addb..012c980cd6e 100644
--- a/ydb/core/tx/datashard/range_avl_tree_ut.cpp
+++ b/ydb/core/tx/datashard/range_avl_tree_ut.cpp
@@ -9,10 +9,11 @@ namespace NDataShard {
namespace {
- TVector<NScheme::TTypeId> CreateSchema(size_t n) {
- TVector<NScheme::TTypeId> schema;
+ TVector<NScheme::TTypeInfo> CreateSchema(size_t n) {
+ TVector<NScheme::TTypeInfo> schema;
+ auto type = NScheme::TTypeInfo(NScheme::NTypeIds::Uint64);
for (size_t i = 0; i < n; ++i) {
- schema.emplace_back(NScheme::NTypeIds::Uint64);
+ schema.emplace_back(type);
}
return schema;
}
diff --git a/ydb/core/tx/datashard/range_ops.cpp b/ydb/core/tx/datashard/range_ops.cpp
index 8566740c387..fd39536029b 100644
--- a/ydb/core/tx/datashard/range_ops.cpp
+++ b/ydb/core/tx/datashard/range_ops.cpp
@@ -1,6 +1,6 @@
#include "range_ops.h"
-NKikimr::TTableRange NKikimr::Intersect(TConstArrayRef<NScheme::TTypeId> types, const TTableRange& first, const TTableRange& second)
+NKikimr::TTableRange NKikimr::Intersect(TConstArrayRef<NScheme::TTypeInfo> types, const TTableRange& first, const TTableRange& second)
{
// all variants
//=================
@@ -196,7 +196,7 @@ NKikimr::TTableRange NKikimr::Intersect(TConstArrayRef<NScheme::TTypeId> types,
}
}
-TString NKikimr::DebugPrintRange(TConstArrayRef<NScheme::TTypeId> types, const NKikimr::TTableRange &range,
+TString NKikimr::DebugPrintRange(TConstArrayRef<NScheme::TTypeInfo> types, const NKikimr::TTableRange &range,
const NScheme::TTypeRegistry& typeRegistry)
{
if (range.Point) {
@@ -211,7 +211,7 @@ TString NKikimr::DebugPrintRange(TConstArrayRef<NScheme::TTypeId> types, const N
<< (range.InclusiveTo ? "]" : ")");
}
-TString NKikimr::DebugPrintRanges(TConstArrayRef<NScheme::TTypeId> types,
+TString NKikimr::DebugPrintRanges(TConstArrayRef<NScheme::TTypeInfo> types,
const TSmallVec<TSerializedTableRange>& ranges, const NScheme::TTypeRegistry& typeRegistry)
{
auto out = TStringBuilder();
@@ -223,7 +223,7 @@ TString NKikimr::DebugPrintRanges(TConstArrayRef<NScheme::TTypeId> types,
return out;
}
-TString NKikimr::DebugPrintPoint(TConstArrayRef<NScheme::TTypeId> types, const TConstArrayRef<TCell> &point, const NScheme::TTypeRegistry& typeRegistry) {
+TString NKikimr::DebugPrintPoint(TConstArrayRef<NScheme::TTypeInfo> types, const TConstArrayRef<TCell> &point, const NScheme::TTypeRegistry& typeRegistry) {
Y_VERIFY(types.size() >= point.size());
TDbTupleRef pointRef(types.data(), point.data(), point.size());
@@ -231,7 +231,7 @@ TString NKikimr::DebugPrintPoint(TConstArrayRef<NScheme::TTypeId> types, const T
}
TString NKikimr::DebugPrintPartitionInfo(const TKeyDesc::TPartitionInfo& partition,
- const TVector<NScheme::TTypeId>& keyTypes, const NScheme::TTypeRegistry& typeRegistry)
+ const TVector<NScheme::TTypeInfo>& keyTypes, const NScheme::TTypeRegistry& typeRegistry)
{
TStringBuilder range;
if (partition.Range) {
diff --git a/ydb/core/tx/datashard/range_ops.h b/ydb/core/tx/datashard/range_ops.h
index a7098dd893c..b93ee8a48a8 100644
--- a/ydb/core/tx/datashard/range_ops.h
+++ b/ydb/core/tx/datashard/range_ops.h
@@ -6,13 +6,13 @@
namespace NKikimr {
-TTableRange Intersect(TConstArrayRef<NScheme::TTypeId> types, const TTableRange& first, const TTableRange& second);
+TTableRange Intersect(TConstArrayRef<NScheme::TTypeInfo> types, const TTableRange& first, const TTableRange& second);
-TString DebugPrintRange(TConstArrayRef<NScheme::TTypeId> types, const TTableRange& range, const NScheme::TTypeRegistry& typeRegistry);
-TString DebugPrintRanges(TConstArrayRef<NScheme::TTypeId> types, const TSmallVec<TSerializedTableRange>& ranges, const NScheme::TTypeRegistry& typeRegistry);
-TString DebugPrintPoint(TConstArrayRef<NScheme::TTypeId> types, const TConstArrayRef<TCell>& point, const NScheme::TTypeRegistry& typeRegistry);
+TString DebugPrintRange(TConstArrayRef<NScheme::TTypeInfo> types, const TTableRange& range, const NScheme::TTypeRegistry& typeRegistry);
+TString DebugPrintRanges(TConstArrayRef<NScheme::TTypeInfo> types, const TSmallVec<TSerializedTableRange>& ranges, const NScheme::TTypeRegistry& typeRegistry);
+TString DebugPrintPoint(TConstArrayRef<NScheme::TTypeInfo> types, const TConstArrayRef<TCell>& point, const NScheme::TTypeRegistry& typeRegistry);
-TString DebugPrintPartitionInfo(const TKeyDesc::TPartitionInfo& partition, const TVector<NScheme::TTypeId>& keyTypes,
+TString DebugPrintPartitionInfo(const TKeyDesc::TPartitionInfo& partition, const TVector<NScheme::TTypeInfo>& keyTypes,
const NScheme::TTypeRegistry& typeRegistry);
}
diff --git a/ydb/core/tx/datashard/range_treap_ut.cpp b/ydb/core/tx/datashard/range_treap_ut.cpp
index d9b481b8468..aa4717e3e56 100644
--- a/ydb/core/tx/datashard/range_treap_ut.cpp
+++ b/ydb/core/tx/datashard/range_treap_ut.cpp
@@ -9,10 +9,11 @@ namespace NDataShard {
namespace {
- TVector<NScheme::TTypeId> CreateSchema(size_t n) {
- TVector<NScheme::TTypeId> schema;
+ TVector<NScheme::TTypeInfo> CreateSchema(size_t n) {
+ TVector<NScheme::TTypeInfo> schema;
+ auto type = NScheme::TTypeInfo(NScheme::NTypeIds::Uint64);
for (size_t i = 0; i < n; ++i) {
- schema.emplace_back(NScheme::NTypeIds::Uint64);
+ schema.emplace_back(type);
}
return schema;
}
diff --git a/ydb/core/tx/datashard/range_tree_base.h b/ydb/core/tx/datashard/range_tree_base.h
index 58a66669f05..62191566185 100644
--- a/ydb/core/tx/datashard/range_tree_base.h
+++ b/ydb/core/tx/datashard/range_tree_base.h
@@ -70,7 +70,7 @@ namespace NDataShard {
}
public:
- void SetKeyTypes(const TVector<NScheme::TTypeId>& keyTypes) {
+ void SetKeyTypes(const TVector<NScheme::TTypeInfo>& keyTypes) {
Y_VERIFY(keyTypes.size() >= KeyTypes.size(), "Number of key columns must not decrease over time");
KeyTypes = keyTypes;
}
@@ -109,7 +109,7 @@ namespace NDataShard {
protected:
size_t Size_ = 0;
mutable TStats Stats_;
- TVector<NScheme::TTypeId> KeyTypes;
+ TVector<NScheme::TTypeInfo> KeyTypes;
};
} // namespace NDataShard
diff --git a/ydb/core/tx/datashard/read_table_scan.cpp b/ydb/core/tx/datashard/read_table_scan.cpp
index 3eb3ac30482..33b2a65aad1 100644
--- a/ydb/core/tx/datashard/read_table_scan.cpp
+++ b/ydb/core/tx/datashard/read_table_scan.cpp
@@ -5,6 +5,7 @@
#include <ydb/core/engine/mkql_proto.h>
#include <ydb/core/protos/counters_datashard.pb.h>
#include <ydb/core/protos/ydb_result_set_old.pb.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/library/binary_json/read.h>
#include <ydb/library/dynumber/dynumber.h>
@@ -20,7 +21,7 @@ using NTable::EScan;
//YdbOld and Ydb.v1 have same value representation
template<typename TOutValue>
-Y_FORCE_INLINE void AddCell(TOutValue& row, NScheme::TTypeId type, const TCell &cell)
+Y_FORCE_INLINE void AddCell(TOutValue& row, NScheme::TTypeInfo type, const TCell &cell)
{
auto &val = *row.add_items();
@@ -29,7 +30,7 @@ Y_FORCE_INLINE void AddCell(TOutValue& row, NScheme::TTypeId type, const TCell &
return;
}
- switch (type) {
+ switch (type.GetTypeId()) {
case NUdf::TDataType<bool>::Id:
val.set_bool_value(cell.AsValue<bool>());
break;
@@ -105,6 +106,10 @@ Y_FORCE_INLINE void AddCell(TOutValue& row, NScheme::TTypeId type, const TCell &
val.set_text_value(*number);
break;
}
+ case NScheme::NTypeIds::Pg: {
+ val.set_bytes_value(cell.Data(), cell.Size());
+ break;
+ }
default:
val.set_bytes_value(cell.Data(), cell.Size());
}
@@ -117,8 +122,11 @@ public:
, ReservedSize(0)
, ResultStream(ResultString)
{
- for (auto &col : request.GetColumns())
- ColTypes.push_back(col.GetTypeId());
+ for (auto &col : request.GetColumns()) {
+ auto typeInfo = NScheme::TypeInfoFromProtoColumnType(col.GetTypeId(),
+ col.HasTypeInfo() ? &col.GetTypeInfo() : nullptr);
+ ColTypes.push_back(typeInfo);
+ }
}
virtual ~TRowsToResult() = default;
@@ -170,7 +178,7 @@ private:
protected:
TStringOutput ResultStream;
- TVector<NScheme::TTypeId> ColTypes;
+ TVector<NScheme::TTypeInfo> ColTypes;
TVector<ui32> RowOffsets;
TString ResultCommon;
};
@@ -248,15 +256,26 @@ private:
for (auto &col : request.GetColumns()) {
auto *meta = res.add_columns();
meta->set_name(col.GetName());
- auto id = static_cast<NYql::NProto::TypeIds>(col.GetTypeId());
- if (id == NYql::NProto::Decimal) {
- auto decimalType = meta->mutable_type()->mutable_optional_type()->mutable_item()->mutable_decimal_type();
- //TODO: Pass decimal params here
- decimalType->set_precision(22);
- decimalType->set_scale(9);
+
+ auto typeInfo = NScheme::TypeInfoFromProtoColumnType(col.GetTypeId(),
+ col.HasTypeInfo() ? &col.GetTypeInfo() : nullptr);
+
+ if (col.GetTypeId() == NScheme::NTypeIds::Pg) {
+ auto pgType = meta->mutable_type()->mutable_optional_type()->mutable_item()
+ ->mutable_pg_type();
+ pgType->set_oid(NPg::PgTypeIdFromTypeDesc(typeInfo.GetTypeDesc()));
} else {
- meta->mutable_type()->mutable_optional_type()->mutable_item()
+ auto id = static_cast<NYql::NProto::TypeIds>(col.GetTypeId());
+ if (id == NYql::NProto::Decimal) {
+ auto decimalType = meta->mutable_type()->mutable_optional_type()->mutable_item()
+ ->mutable_decimal_type();
+ //TODO: Pass decimal params here
+ decimalType->set_precision(22);
+ decimalType->set_scale(9);
+ } else {
+ meta->mutable_type()->mutable_optional_type()->mutable_item()
->set_type_id(static_cast<Ydb::Type::PrimitiveTypeId>(id));
+ }
}
}
res.set_truncated(true);
diff --git a/ydb/core/tx/datashard/sys_tables.h b/ydb/core/tx/datashard/sys_tables.h
index e9887bd8dbb..ff02286561b 100644
--- a/ydb/core/tx/datashard/sys_tables.h
+++ b/ydb/core/tx/datashard/sys_tables.h
@@ -10,12 +10,12 @@ struct TSysTables {
struct TTableColumnInfo {
TString Name;
ui32 Id = 0;
- ui32 PType = 0;
+ NScheme::TTypeInfo PType;
i32 KeyOrder = -1;
TTableColumnInfo() = default;
- TTableColumnInfo(TString name, ui32 colId, ui32 type, i32 keyOrder = -1)
+ TTableColumnInfo(TString name, ui32 colId, NScheme::TTypeInfo type, i32 keyOrder = -1)
: Name(name)
, Id(colId)
, PType(type)
@@ -113,12 +113,14 @@ struct TSysTables {
return "";
}
- static void GetInfo(THashMap<ui32, TTableColumnInfo>& columns, TVector<ui32>& keyTypes, bool v2) {
+ static void GetInfo(THashMap<ui32, TTableColumnInfo>& columns, TVector<NScheme::TTypeInfo>& keyTypes, bool v2) {
/// @warning Generation is uint32. Don't ask me why
- auto type = NScheme::TUint64::TypeId;
+ auto type = NScheme::TTypeInfo(NScheme::TUint64::TypeId);
+ auto typeUi32 = NScheme::TTypeInfo(NScheme::TUint32::TypeId);
+
columns[0] = TTableColumnInfo(GetColName(EColumns::LockId), (ui32)EColumns::LockId, type, 0);
columns[1] = TTableColumnInfo(GetColName(EColumns::DataShard), (ui32)EColumns::DataShard, type, 1);
- columns[2] = TTableColumnInfo(GetColName(EColumns::Generation), (ui32)EColumns::Generation, NScheme::TUint32::TypeId);
+ columns[2] = TTableColumnInfo(GetColName(EColumns::Generation), (ui32)EColumns::Generation, typeUi32);
columns[3] = TTableColumnInfo(GetColName(EColumns::Counter), (ui32)EColumns::Counter, type);
keyTypes.push_back(type);
diff --git a/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.darwin.txt
index b104ecc1fcf..b386be8852f 100644
--- a/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_background_compaction PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.linux.txt
index b5005b509eb..029e91f0e2e 100644
--- a/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_background_compaction PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_build_index/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_build_index/CMakeLists.darwin.txt
index b6be99c3710..f93c32d2c27 100644
--- a/ydb/core/tx/datashard/ut_build_index/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_build_index/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_build_index PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_build_index/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_build_index/CMakeLists.linux.txt
index 9ae52ff09bc..9009d8b9366 100644
--- a/ydb/core/tx/datashard/ut_build_index/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_build_index/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_build_index PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_change_collector/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_change_collector/CMakeLists.darwin.txt
index 35a98725ccf..8d6ae9f7ac8 100644
--- a/ydb/core/tx/datashard/ut_change_collector/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_change_collector/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_change_collector PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_change_collector/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_change_collector/CMakeLists.linux.txt
index 7edc6b3b6e2..fdde2d95960 100644
--- a/ydb/core/tx/datashard/ut_change_collector/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_change_collector/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_change_collector PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.darwin.txt
index 2575fb01829..fc4f7e8fb9c 100644
--- a/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_change_exchange PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.linux.txt
index 080f09525d2..ebcee72d391 100644
--- a/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_change_exchange PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_compaction/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_compaction/CMakeLists.darwin.txt
index edb9f97cb29..f8d4b47d5f3 100644
--- a/ydb/core/tx/datashard/ut_compaction/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_compaction/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_compaction PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_compaction/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_compaction/CMakeLists.linux.txt
index f3f2e18d4df..7c0dfdea781 100644
--- a/ydb/core/tx/datashard/ut_compaction/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_compaction/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_compaction PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.darwin.txt
index fb8a69abdbc..038bf6b917b 100644
--- a/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_erase_rows PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.linux.txt
index c1a7bf2ffa5..0df88745a34 100644
--- a/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_erase_rows PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_followers/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_followers/CMakeLists.darwin.txt
index 6023c95cbff..da51f3fc236 100644
--- a/ydb/core/tx/datashard/ut_followers/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_followers/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_followers PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_followers/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_followers/CMakeLists.linux.txt
index 17960aacb4e..10449720728 100644
--- a/ydb/core/tx/datashard/ut_followers/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_followers/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_followers PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_init/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_init/CMakeLists.darwin.txt
index 92caa4797cc..381cd4c7af5 100644
--- a/ydb/core/tx/datashard/ut_init/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_init/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_init PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_init/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_init/CMakeLists.linux.txt
index b92c03f3e33..629d5296e31 100644
--- a/ydb/core/tx/datashard/ut_init/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_init/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_init PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_keys/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_keys/CMakeLists.darwin.txt
index c0ce3408aa5..1d407b2e0a0 100644
--- a/ydb/core/tx/datashard/ut_keys/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_keys/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_keys PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_keys/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_keys/CMakeLists.linux.txt
index ed082308602..57605524693 100644
--- a/ydb/core/tx/datashard/ut_keys/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_keys/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_keys PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_kqp/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_kqp/CMakeLists.darwin.txt
index 9bd12cd511f..1131f0a23c3 100644
--- a/ydb/core/tx/datashard/ut_kqp/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_kqp/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_kqp PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_kqp/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_kqp/CMakeLists.linux.txt
index 1bb08498b77..e3d62e8852b 100644
--- a/ydb/core/tx/datashard/ut_kqp/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_kqp/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_kqp PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.darwin.txt
index 29cb81173ad..b54fcb8d461 100644
--- a/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_kqp_errors PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.linux.txt
index 575e718b784..3ecd1fe6adb 100644
--- a/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_kqp_errors PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.darwin.txt
index 4d8841b86b7..f158976859d 100644
--- a/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_kqp_scan PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.linux.txt
index 765928910a2..5f104aac3cb 100644
--- a/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_kqp_scan PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_locks/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_locks/CMakeLists.darwin.txt
index 17033fa45e8..a4f0177cb78 100644
--- a/ydb/core/tx/datashard/ut_locks/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_locks/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_locks PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_locks/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_locks/CMakeLists.linux.txt
index 7ae79cc1a90..28630f9a16b 100644
--- a/ydb/core/tx/datashard/ut_locks/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_locks/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_locks PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_minikql/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_minikql/CMakeLists.darwin.txt
index 0dac58cfd59..67298af265e 100644
--- a/ydb/core/tx/datashard/ut_minikql/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_minikql/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_minikql PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_minikql/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_minikql/CMakeLists.linux.txt
index cf7fb8a1ac3..6f65f05c353 100644
--- a/ydb/core/tx/datashard/ut_minikql/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_minikql/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_minikql PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_minstep/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_minstep/CMakeLists.darwin.txt
index 7d72df2143c..8a450055ae0 100644
--- a/ydb/core/tx/datashard/ut_minstep/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_minstep/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_minstep PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_minstep/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_minstep/CMakeLists.linux.txt
index 2d059a7cc0e..6664ad7149e 100644
--- a/ydb/core/tx/datashard/ut_minstep/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_minstep/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_minstep PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_order/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_order/CMakeLists.darwin.txt
index 67dfe0c599c..15fa08f39ba 100644
--- a/ydb/core/tx/datashard/ut_order/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_order/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_order PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_order/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_order/CMakeLists.linux.txt
index 113f8e99af2..0ffaf5df0fa 100644
--- a/ydb/core/tx/datashard/ut_order/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_order/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_order PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.darwin.txt
index b9e791805f9..6c024b31fbe 100644
--- a/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_range_avl_tree PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.linux.txt
index 5b681c6d4fc..2da2776d944 100644
--- a/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_range_avl_tree PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_range_ops/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_range_ops/CMakeLists.darwin.txt
index 74a1e43f6cb..7db2547942c 100644
--- a/ydb/core/tx/datashard/ut_range_ops/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_range_ops/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_range_ops PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_range_ops/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_range_ops/CMakeLists.linux.txt
index 000000f3ff0..e5289e40580 100644
--- a/ydb/core/tx/datashard/ut_range_ops/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_range_ops/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_range_ops PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_range_treap/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_range_treap/CMakeLists.darwin.txt
index cb9b857279f..d26018dac2f 100644
--- a/ydb/core/tx/datashard/ut_range_treap/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_range_treap/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_range_treap PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_range_treap/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_range_treap/CMakeLists.linux.txt
index 50c069dfa39..0f19a2ab9dc 100644
--- a/ydb/core/tx/datashard/ut_range_treap/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_range_treap/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_range_treap PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.darwin.txt
index 4b5bdd56590..fd9b6038695 100644
--- a/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_read_iterator PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.linux.txt
index 3c691ff53e1..8d626fb960b 100644
--- a/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_read_iterator PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_read_table/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_read_table/CMakeLists.darwin.txt
index 466b28d9660..bef1935e6a2 100644
--- a/ydb/core/tx/datashard/ut_read_table/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_read_table/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_read_table PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_read_table/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_read_table/CMakeLists.linux.txt
index a077aaaa1ac..1a648658c6f 100644
--- a/ydb/core/tx/datashard/ut_read_table/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_read_table/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_read_table PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_reassign/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_reassign/CMakeLists.darwin.txt
index cd0f71d633d..f1abbc8858b 100644
--- a/ydb/core/tx/datashard/ut_reassign/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_reassign/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_reassign PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_reassign/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_reassign/CMakeLists.linux.txt
index 3e2b02d7739..454fadd175d 100644
--- a/ydb/core/tx/datashard/ut_reassign/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_reassign/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_reassign PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_replication/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_replication/CMakeLists.darwin.txt
index 9a3069b16e2..5b8312a5501 100644
--- a/ydb/core/tx/datashard/ut_replication/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_replication/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_replication PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_replication/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_replication/CMakeLists.linux.txt
index 7363d477d11..c49b07f1197 100644
--- a/ydb/core/tx/datashard/ut_replication/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_replication/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_replication PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_rs/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_rs/CMakeLists.darwin.txt
index 51235842961..b3bc6b645ce 100644
--- a/ydb/core/tx/datashard/ut_rs/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_rs/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_rs PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_rs/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_rs/CMakeLists.linux.txt
index 85271f600f5..fa3ae763dbb 100644
--- a/ydb/core/tx/datashard/ut_rs/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_rs/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_rs PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_snapshot/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_snapshot/CMakeLists.darwin.txt
index 13574753b6f..f4b25a7759d 100644
--- a/ydb/core/tx/datashard/ut_snapshot/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_snapshot/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_snapshot PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_snapshot/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_snapshot/CMakeLists.linux.txt
index 8591db0cba4..3687aad13e0 100644
--- a/ydb/core/tx/datashard/ut_snapshot/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_snapshot/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_snapshot PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_stats/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_stats/CMakeLists.darwin.txt
index 247bbc51beb..ea7263a71e8 100644
--- a/ydb/core/tx/datashard/ut_stats/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_stats/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_stats PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_stats/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_stats/CMakeLists.linux.txt
index c8bc90d9258..8240a451a19 100644
--- a/ydb/core/tx/datashard/ut_stats/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_stats/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_stats PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_testload/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_testload/CMakeLists.darwin.txt
index 5e53efa7975..b81f59a7042 100644
--- a/ydb/core/tx/datashard/ut_testload/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_testload/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_testload PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_testload/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_testload/CMakeLists.linux.txt
index d42847ee463..47cde6912cd 100644
--- a/ydb/core/tx/datashard/ut_testload/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_testload/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_testload PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.darwin.txt
index 5b64904b2dd..f266426caa5 100644
--- a/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_upload_rows PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.linux.txt
index 581b4a31611..14bf513ff14 100644
--- a/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_upload_rows PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
public-lib-yson_value
diff --git a/ydb/core/tx/long_tx_service/ut/CMakeLists.darwin.txt b/ydb/core/tx/long_tx_service/ut/CMakeLists.darwin.txt
index 5e64a14d4cb..f877946598a 100644
--- a/ydb/core/tx/long_tx_service/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tx/long_tx_service/ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-tx-long_tx_service-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-long_tx_service
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tx-long_tx_service-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/long_tx_service/ut/CMakeLists.linux.txt b/ydb/core/tx/long_tx_service/ut/CMakeLists.linux.txt
index e085e604a31..7750816d62e 100644
--- a/ydb/core/tx/long_tx_service/ut/CMakeLists.linux.txt
+++ b/ydb/core/tx/long_tx_service/ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-tx-long_tx_service-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-long_tx_service
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tx-long_tx_service-ut PRIVATE
-ldl
diff --git a/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.darwin.txt b/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.darwin.txt
index b0c45e4dffb..bacc77648a2 100644
--- a/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-tx-replication-ydb_proxy-ut PUBLIC
cpp-testing-unittest_main
tx-replication-ydb_proxy
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tx-replication-ydb_proxy-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.linux.txt b/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.linux.txt
index 60b2eed84eb..58000fe54be 100644
--- a/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.linux.txt
+++ b/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-replication-ydb_proxy-ut PUBLIC
cpp-testing-unittest_main
tx-replication-ydb_proxy
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tx-replication-ydb_proxy-ut PRIVATE
-ldl
diff --git a/ydb/core/tx/scheme_board/cache.cpp b/ydb/core/tx/scheme_board/cache.cpp
index 5eec5b9e11d..f862770500a 100644
--- a/ydb/core/tx/scheme_board/cache.cpp
+++ b/ydb/core/tx/scheme_board/cache.cpp
@@ -14,6 +14,7 @@
#include <ydb/core/protos/flat_tx_scheme.pb.h>
#include <ydb/core/protos/services.pb.h>
#include <ydb/core/scheme/scheme_tabledefs.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/sys_view/common/schema.h>
#include <ydb/core/tx/schemeshard/schemeshard_types.h>
#include <ydb/core/util/yverify_stream.h>
@@ -744,8 +745,8 @@ class TSchemeCache: public TMonitorableActor<TSchemeCache> {
auto& column = Columns[columnDesc.GetId()];
column.Id = columnDesc.GetId();
column.Name = columnDesc.GetName();
- column.PType = columnDesc.GetTypeId();
-
+ column.PType = NScheme::TypeInfoFromProtoColumnType(columnDesc.GetTypeId(),
+ columnDesc.HasTypeInfo() ? &columnDesc.GetTypeInfo() : nullptr);
if (columnDesc.GetNotNull()) {
NotNullColumns.insert(columnDesc.GetName());
}
@@ -805,7 +806,8 @@ class TSchemeCache: public TMonitorableActor<TSchemeCache> {
auto& column = Columns[columnDesc.GetId()];
column.Id = columnDesc.GetId();
column.Name = columnDesc.GetName();
- column.PType = columnDesc.GetTypeId();
+ column.PType = NScheme::TypeInfoFromProtoColumnType(columnDesc.GetTypeId(),
+ columnDesc.HasTypeInfo() ? &columnDesc.GetTypeInfo() : nullptr);
nameToId[column.Name] = column.Id;
}
@@ -1130,7 +1132,7 @@ class TSchemeCache: public TMonitorableActor<TSchemeCache> {
columns.BeginObject()
.WriteKey("Id").WriteULongLong(column.Id)
.WriteKey("Name").WriteString(column.Name)
- .WriteKey("Type").WriteULongLong(column.PType)
+ .WriteKey("Type").WriteULongLong(column.PType.GetTypeId()) // TODO: support pg types
.WriteKey("KeyOrder").WriteInt(column.KeyOrder)
.EndObject();
}
@@ -1313,9 +1315,9 @@ class TSchemeCache: public TMonitorableActor<TSchemeCache> {
PathId = TPathId(TSysTables::SysSchemeShard, v2 ? TSysTables::SysTableLocks2 : TSysTables::SysTableLocks);
Path = v2 ? "/sys/locks2" : "/sys/locks";
- TVector<ui32> keyColumnTypes;
+ TVector<NScheme::TTypeInfo> keyColumnTypes;
TSysTables::TLocksTable::GetInfo(Columns, keyColumnTypes, v2);
- for (ui32 type : keyColumnTypes) {
+ for (auto type : keyColumnTypes) {
KeyColumnTypes.push_back(type);
}
@@ -1728,7 +1730,7 @@ class TSchemeCache: public TMonitorableActor<TSchemeCache> {
}
bool CheckColumns(TResolveContext* context, TResolve::TEntry& entry,
- const TVector<NScheme::TTypeId>& keyColumnTypes,
+ const TVector<NScheme::TTypeInfo>& keyColumnTypes,
const THashMap<ui32, TSysTables::TTableColumnInfo>& columns) const
{
TKeyDesc& keyDesc = *entry.KeyDescription;
@@ -1765,7 +1767,7 @@ class TSchemeCache: public TMonitorableActor<TSchemeCache> {
entry.Status = TResolve::EStatus::TypeCheckError;
keyDesc.Status = TKeyDesc::EStatus::TypeCheckFailed;
keyDesc.ColumnInfos.push_back({
- columnOp.Column, 0, 0, TKeyDesc::EStatus::NotExists
+ columnOp.Column, NScheme::TTypeInfo(), 0, TKeyDesc::EStatus::NotExists
});
continue;
}
@@ -1963,7 +1965,7 @@ class TSchemeCache: public TMonitorableActor<TSchemeCache> {
// table specific
THashMap<ui32, TSysTables::TTableColumnInfo> Columns;
- TVector<NScheme::TTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
THashSet<TString> NotNullColumns;
TVector<NKikimrSchemeOp::TIndexDescription> Indexes;
TVector<NKikimrSchemeOp::TCdcStreamDescription> CdcStreams;
diff --git a/ydb/core/tx/scheme_board/cache_ut.cpp b/ydb/core/tx/scheme_board/cache_ut.cpp
index 67bc8b04b23..3b92d1a922a 100644
--- a/ydb/core/tx/scheme_board/cache_ut.cpp
+++ b/ydb/core/tx/scheme_board/cache_ut.cpp
@@ -428,7 +428,7 @@ TResolve::TEntry TCacheTest::TestResolve(const TTableId& tableId, TResolve::ESta
tableId,
TTableRange({}),
TKeyDesc::ERowOperation::Unknown,
- TVector<NScheme::TTypeId>(), TVector<TKeyDesc::TColumnOp>()
+ TVector<NScheme::TTypeInfo>(), TVector<TKeyDesc::TColumnOp>()
);
request->ResultSet.emplace_back(std::move(keyDesc));
diff --git a/ydb/core/tx/scheme_board/ut_cache/CMakeLists.darwin.txt b/ydb/core/tx/scheme_board/ut_cache/CMakeLists.darwin.txt
index cdf6d444b22..265960eda82 100644
--- a/ydb/core/tx/scheme_board/ut_cache/CMakeLists.darwin.txt
+++ b/ydb/core/tx/scheme_board/ut_cache/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-tx-scheme_board-ut_cache PUBLIC
cpp-testing-unittest_main
core-tx-scheme_board
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
core-tx-schemeshard
tx-schemeshard-ut_helpers
)
diff --git a/ydb/core/tx/scheme_board/ut_cache/CMakeLists.linux.txt b/ydb/core/tx/scheme_board/ut_cache/CMakeLists.linux.txt
index 1253a08e080..7396d937be2 100644
--- a/ydb/core/tx/scheme_board/ut_cache/CMakeLists.linux.txt
+++ b/ydb/core/tx/scheme_board/ut_cache/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-scheme_board-ut_cache PUBLIC
cpp-testing-unittest_main
core-tx-scheme_board
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
core-tx-schemeshard
tx-schemeshard-ut_helpers
)
diff --git a/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.darwin.txt b/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.darwin.txt
index 47cc57f6e6c..41461692b2c 100644
--- a/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.darwin.txt
+++ b/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.darwin.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-tx-scheme_board-ut_monitoring PUBLIC
core-tx-scheme_board
cpp-actors-core
cpp-testing-unittest
- core-testlib-basics
+ testlib-basics-default
)
target_link_options(ydb-core-tx-scheme_board-ut_monitoring PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.linux.txt b/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.linux.txt
index b74296f1d28..ad52c42a4d6 100644
--- a/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.linux.txt
+++ b/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.linux.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-scheme_board-ut_monitoring PUBLIC
core-tx-scheme_board
cpp-actors-core
cpp-testing-unittest
- core-testlib-basics
+ testlib-basics-default
)
target_link_options(ydb-core-tx-scheme_board-ut_monitoring PRIVATE
-ldl
diff --git a/ydb/core/tx/scheme_board/ut_populator/CMakeLists.darwin.txt b/ydb/core/tx/scheme_board/ut_populator/CMakeLists.darwin.txt
index a98d48e6c2d..56348f4ed28 100644
--- a/ydb/core/tx/scheme_board/ut_populator/CMakeLists.darwin.txt
+++ b/ydb/core/tx/scheme_board/ut_populator/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-tx-scheme_board-ut_populator PUBLIC
cpp-testing-unittest_main
core-tx-scheme_board
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
core-tx-schemeshard
tx-schemeshard-ut_helpers
core-tx-tx_allocator
diff --git a/ydb/core/tx/scheme_board/ut_populator/CMakeLists.linux.txt b/ydb/core/tx/scheme_board/ut_populator/CMakeLists.linux.txt
index eaac0ff6808..b53993b76a8 100644
--- a/ydb/core/tx/scheme_board/ut_populator/CMakeLists.linux.txt
+++ b/ydb/core/tx/scheme_board/ut_populator/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-scheme_board-ut_populator PUBLIC
cpp-testing-unittest_main
core-tx-scheme_board
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
core-tx-schemeshard
tx-schemeshard-ut_helpers
core-tx-tx_allocator
diff --git a/ydb/core/tx/scheme_board/ut_replica/CMakeLists.darwin.txt b/ydb/core/tx/scheme_board/ut_replica/CMakeLists.darwin.txt
index 0b7fc0d976d..9998d46b575 100644
--- a/ydb/core/tx/scheme_board/ut_replica/CMakeLists.darwin.txt
+++ b/ydb/core/tx/scheme_board/ut_replica/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-core-tx-scheme_board-ut_replica PUBLIC
cpp-testing-unittest_main
core-tx-scheme_board
cpp-testing-unittest
- core-testlib-basics
+ testlib-basics-default
)
target_link_options(ydb-core-tx-scheme_board-ut_replica PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/scheme_board/ut_replica/CMakeLists.linux.txt b/ydb/core/tx/scheme_board/ut_replica/CMakeLists.linux.txt
index 1e0b47b40b1..b6ad9ee7123 100644
--- a/ydb/core/tx/scheme_board/ut_replica/CMakeLists.linux.txt
+++ b/ydb/core/tx/scheme_board/ut_replica/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-scheme_board-ut_replica PUBLIC
cpp-testing-unittest_main
core-tx-scheme_board
cpp-testing-unittest
- core-testlib-basics
+ testlib-basics-default
)
target_link_options(ydb-core-tx-scheme_board-ut_replica PRIVATE
-ldl
diff --git a/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.darwin.txt b/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.darwin.txt
index 0c183334b78..24b5ef04efc 100644
--- a/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.darwin.txt
+++ b/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.darwin.txt
@@ -22,8 +22,7 @@ target_link_libraries(ydb-core-tx-scheme_board-ut_subscriber PUBLIC
core-tx-scheme_board
cpp-actors-interconnect
cpp-testing-unittest
- core-testlib-basics
- yql-sql-pg_dummy
+ testlib-basics-default
)
target_link_options(ydb-core-tx-scheme_board-ut_subscriber PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.linux.txt b/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.linux.txt
index bb9271a895e..7b3531c00a8 100644
--- a/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.linux.txt
+++ b/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.linux.txt
@@ -24,8 +24,7 @@ target_link_libraries(ydb-core-tx-scheme_board-ut_subscriber PUBLIC
core-tx-scheme_board
cpp-actors-interconnect
cpp-testing-unittest
- core-testlib-basics
- yql-sql-pg_dummy
+ testlib-basics-default
)
target_link_options(ydb-core-tx-scheme_board-ut_subscriber PRIVATE
-ldl
diff --git a/ydb/core/tx/schemeshard/schemeshard__init.cpp b/ydb/core/tx/schemeshard/schemeshard__init.cpp
index 2f478464b36..94517ae74ea 100644
--- a/ydb/core/tx/schemeshard/schemeshard__init.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__init.cpp
@@ -1,5 +1,6 @@
#include "schemeshard_impl.h"
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/tablet/tablet_exception.h>
#include <ydb/core/tablet_flat/flat_cxx_database.h>
#include <ydb/core/util/pb.h>
@@ -385,7 +386,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
return true;
}
- typedef std::tuple<TPathId, ui32, TString, NScheme::TTypeId, ui32, ui64, ui64, ui32, ETableColumnDefaultKind, TString, bool> TColumnRec;
+ typedef std::tuple<TPathId, ui32, TString, NScheme::TTypeInfo, ui32, ui64, ui64, ui32, ETableColumnDefaultKind, TString, bool> TColumnRec;
typedef TDeque<TColumnRec> TColumnRows;
bool LoadColumns(NIceDb::TNiceDb& db, TColumnRows& columnRows) const {
@@ -401,6 +402,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
ui32 colId = rowSet.GetValue<Schema::Columns::ColId>();
TString colName = rowSet.GetValue<Schema::Columns::ColName>();
NScheme::TTypeId typeId = (NScheme::TTypeId)rowSet.GetValue<Schema::Columns::ColType>();
+ TString typeData = rowSet.GetValueOrDefault<Schema::Columns::ColTypeData>("");
ui32 keyOrder = rowSet.GetValue<Schema::Columns::ColKeyOrder>();
ui64 createVersion = rowSet.GetValueOrDefault<Schema::Columns::CreateVersion>(0);
ui64 deleteVersion = rowSet.GetValueOrDefault<Schema::Columns::DeleteVersion>(-1);
@@ -409,8 +411,17 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
auto defaultValue = rowSet.GetValue<Schema::Columns::DefaultValue>();
auto notNull = rowSet.GetValueOrDefault<Schema::Columns::NotNull>(false);
+ NScheme::TTypeInfo typeInfo;
+ if (typeData) {
+ NKikimrProto::TTypeInfo protoType;
+ Y_VERIFY(ParseFromStringNoSizeLimit(protoType, typeData));
+ typeInfo = NScheme::TypeInfoFromProtoColumnType(typeId, &protoType);
+ } else {
+ typeInfo = NScheme::TTypeInfo(typeId);
+ }
+
columnRows.emplace_back(pathId, colId,
- colName, typeId, keyOrder, createVersion, deleteVersion,
+ colName, typeInfo, keyOrder, createVersion, deleteVersion,
family, defaultKind, defaultValue, notNull);
if (!rowSet.Next()) {
@@ -433,6 +444,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
ui32 colId = rowSet.GetValue<Schema::MigratedColumns::ColId>();
TString colName = rowSet.GetValue<Schema::MigratedColumns::ColName>();
NScheme::TTypeId typeId = (NScheme::TTypeId)rowSet.GetValue<Schema::MigratedColumns::ColType>();
+ TString typeData = rowSet.GetValueOrDefault<Schema::MigratedColumns::ColTypeData>("");
ui32 keyOrder = rowSet.GetValue<Schema::MigratedColumns::ColKeyOrder>();
ui64 createVersion = rowSet.GetValueOrDefault<Schema::MigratedColumns::CreateVersion>(0);
ui64 deleteVersion = rowSet.GetValueOrDefault<Schema::MigratedColumns::DeleteVersion>(-1);
@@ -441,8 +453,17 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
auto defaultValue = rowSet.GetValue<Schema::MigratedColumns::DefaultValue>();
auto notNull = rowSet.GetValueOrDefault<Schema::MigratedColumns::NotNull>(false);
+ NScheme::TTypeInfo typeInfo;
+ if (typeData) {
+ NKikimrProto::TTypeInfo protoType;
+ Y_VERIFY(ParseFromStringNoSizeLimit(protoType, typeData));
+ typeInfo = NScheme::TypeInfoFromProtoColumnType(typeId, &protoType);
+ } else {
+ typeInfo = NScheme::TTypeInfo(typeId);
+ }
+
columnRows.emplace_back(pathId, colId,
- colName, typeId, keyOrder, createVersion, deleteVersion,
+ colName, typeInfo, keyOrder, createVersion, deleteVersion,
family, defaultKind, defaultValue, notNull);
if (!rowSet.Next()) {
@@ -467,6 +488,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
ui32 colId = rowSet.GetValue<Schema::ColumnAlters::ColId>();
TString colName = rowSet.GetValue<Schema::ColumnAlters::ColName>();
NScheme::TTypeId typeId = (NScheme::TTypeId)rowSet.GetValue<Schema::ColumnAlters::ColType>();
+ TString typeData = rowSet.GetValue<Schema::ColumnAlters::ColTypeData>();
ui32 keyOrder = rowSet.GetValue<Schema::ColumnAlters::ColKeyOrder>();
ui64 createVersion = rowSet.GetValueOrDefault<Schema::ColumnAlters::CreateVersion>(0);
ui64 deleteVersion = rowSet.GetValueOrDefault<Schema::ColumnAlters::DeleteVersion>(-1);
@@ -475,8 +497,17 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
auto defaultValue = rowSet.GetValue<Schema::ColumnAlters::DefaultValue>();
auto notNull = rowSet.GetValueOrDefault<Schema::ColumnAlters::NotNull>(false);
+ NScheme::TTypeInfo typeInfo;
+ if (typeData) {
+ NKikimrProto::TTypeInfo protoType;
+ Y_VERIFY(ParseFromStringNoSizeLimit(protoType, typeData));
+ typeInfo = NScheme::TypeInfoFromProtoColumnType(typeId, &protoType);
+ } else {
+ typeInfo = NScheme::TTypeInfo(typeId);
+ }
+
columnRows.emplace_back(pathId, colId,
- colName, typeId, keyOrder, createVersion, deleteVersion,
+ colName, typeInfo, keyOrder, createVersion, deleteVersion,
family, defaultKind, defaultValue, notNull);
if (!rowSet.Next()) {
@@ -499,6 +530,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
ui32 colId = rowSet.GetValue<Schema::MigratedColumnAlters::ColId>();
TString colName = rowSet.GetValue<Schema::MigratedColumnAlters::ColName>();
NScheme::TTypeId typeId = (NScheme::TTypeId)rowSet.GetValue<Schema::MigratedColumnAlters::ColType>();
+ TString typeData = rowSet.GetValueOrDefault<Schema::MigratedColumnAlters::ColTypeData>("");
ui32 keyOrder = rowSet.GetValue<Schema::MigratedColumnAlters::ColKeyOrder>();
ui64 createVersion = rowSet.GetValueOrDefault<Schema::MigratedColumnAlters::CreateVersion>(0);
ui64 deleteVersion = rowSet.GetValueOrDefault<Schema::MigratedColumnAlters::DeleteVersion>(-1);
@@ -507,8 +539,17 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
auto defaultValue = rowSet.GetValue<Schema::MigratedColumnAlters::DefaultValue>();
auto notNull = rowSet.GetValueOrDefault<Schema::MigratedColumnAlters::NotNull>(false);
+ NScheme::TTypeInfo typeInfo;
+ if (typeData) {
+ NKikimrProto::TTypeInfo protoType;
+ Y_VERIFY(ParseFromStringNoSizeLimit(protoType, typeData));
+ typeInfo = NScheme::TypeInfoFromProtoColumnType(typeId, &protoType);
+ } else {
+ typeInfo = NScheme::TTypeInfo(typeId);
+ }
+
columnRows.emplace_back(pathId, colId,
- colName, typeId, keyOrder, createVersion, deleteVersion,
+ colName, typeInfo, keyOrder, createVersion, deleteVersion,
family, defaultKind, defaultValue, notNull);
if (!rowSet.Next()) {
@@ -1851,7 +1892,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
TPathId pathId = std::get<0>(rec);
ui32 colId = std::get<1>(rec);
TString colName = std::get<2>(rec);
- NScheme::TTypeId typeId = std::get<3>(rec);
+ NScheme::TTypeInfo typeInfo = std::get<3>(rec);
ui32 keyOrder = std::get<4>(rec);
ui64 createVersion = std::get<5>(rec);
ui64 deleteVersion = std::get<6>(rec);
@@ -1869,7 +1910,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
<< ", columnId: " << colId
<< ", NextColId: " << tableInfo->NextColumnId);
- TTableInfo::TColumn colInfo(colName, colId, typeId);
+ TTableInfo::TColumn colInfo(colName, colId, typeInfo);
colInfo.KeyOrder = keyOrder;
colInfo.CreateVersion = createVersion;
colInfo.DeleteVersion = deleteVersion;
@@ -1903,7 +1944,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
TPathId pathId = std::get<0>(rec);
ui32 colId = std::get<1>(rec);
TString colName = std::get<2>(rec);
- NScheme::TTypeId typeId = std::get<3>(rec);
+ NScheme::TTypeInfo typeInfo = std::get<3>(rec);
ui32 keyOrder = std::get<4>(rec);
ui64 createVersion = std::get<5>(rec);
ui64 deleteVersion = std::get<6>(rec);
@@ -1923,7 +1964,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
tableInfo->AlterData->NextColumnId = colId + 1; // calc next NextColumnId
}
- TTableInfo::TColumn colInfo(colName, colId, typeId);
+ TTableInfo::TColumn colInfo(colName, colId, typeInfo);
colInfo.KeyOrder = keyOrder;
colInfo.CreateVersion = createVersion;
colInfo.DeleteVersion = deleteVersion;
diff --git a/ydb/core/tx/schemeshard/schemeshard__monitoring.cpp b/ydb/core/tx/schemeshard/schemeshard__monitoring.cpp
index 6b0f1f7eb1d..5b87929a81a 100644
--- a/ydb/core/tx/schemeshard/schemeshard__monitoring.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__monitoring.cpp
@@ -760,7 +760,7 @@ private:
}
- TVector<ui16> keyTypes;
+ TVector<NScheme::TTypeInfo> keyTypes;
if (Self->Tables.contains(info->TablePathId)) {
TTableInfo::TPtr tableInfo = Self->Tables.at(info->TablePathId);
for (ui32 keyPos: tableInfo->KeyColumnIds) {
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_alter_olap_table.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_alter_olap_table.cpp
index 75b65912fe1..275428e540c 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_alter_olap_table.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_alter_olap_table.cpp
@@ -2,6 +2,8 @@
#include "schemeshard__operation_common.h"
#include "schemeshard_impl.h"
+#include <ydb/core/scheme/scheme_types_proto.h>
+
namespace {
using namespace NKikimr;
@@ -57,7 +59,9 @@ TColumnTableInfo::TPtr ParseParams(
for (const auto& col : tableSchema->GetColumns()) {
ui32 id = col.GetId();
TString name = col.GetName();
- columns[id] = TOlapSchema::TColumn{id, name, static_cast<NScheme::TTypeId>(col.GetTypeId()), Max<ui32>()};
+ auto typeInfo = NScheme::TypeInfoFromProtoColumnType(col.GetTypeId(),
+ col.HasTypeInfo() ? &col.GetTypeInfo() : nullptr);
+ columns[id] = TOlapSchema::TColumn{id, name, typeInfo, Max<ui32>()};
columnsByName[name] = id;
}
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp
index d2a08fc11cf..bb9f55b837f 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp
@@ -4,6 +4,7 @@
#include <ydb/core/engine/mkql_proto.h>
#include <ydb/core/persqueue/writer/source_id_encoding.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#define LOG_D(stream) LOG_DEBUG_S (context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, "[" << context.SS->TabletID() << "] " << stream)
#define LOG_I(stream) LOG_INFO_S (context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, "[" << context.SS->TabletID() << "] " << stream)
@@ -675,7 +676,11 @@ TVector<ISubOperationBase::TPtr> CreateNewCdcStream(TOperationId opId, const TTx
auto& keyComponent = *pqConfig.AddPartitionKeySchema();
keyComponent.SetName(column.Name);
- keyComponent.SetTypeId(column.PType);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(column.PType);
+ keyComponent.SetTypeId(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *keyComponent.MutableTypeInfo() = *columnType.TypeInfo;
+ }
}
auto& bootstrapConfig = *desc.MutableBootstrapConfig();
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_olap_store.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_olap_store.cpp
index ffa94ef3191..a8b814ee5d4 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_create_olap_store.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_olap_store.cpp
@@ -3,6 +3,7 @@
#include "schemeshard_impl.h"
#include <ydb/core/base/subdomain.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/tx/columnshard/columnshard.h>
#include <ydb/core/mind/hive/hive.h>
@@ -56,12 +57,24 @@ bool PrepareSchema(NKikimrSchemeOp::TColumnTableSchema& proto, TOlapSchema& sche
auto typeName = NMiniKQL::AdaptLegacyYqlType(colProto.GetType());
const NScheme::IType* type = typeRegistry->GetType(typeName);
- if (!type || !NScheme::NTypeIds::IsYqlType(type->GetTypeId())) {
- errStr = Sprintf("Type '%s' specified for column '%s' is not supported", colProto.GetType().c_str(), col.Name.c_str());
- return false;
+ if (type) {
+ if (!NScheme::NTypeIds::IsYqlType(type->GetTypeId())) {
+ errStr = Sprintf("Type '%s' specified for column '%s' is not supported", colProto.GetType().c_str(), col.Name.c_str());
+ return false;
+ }
+ col.Type = NScheme::TTypeInfo(type->GetTypeId());
+ } else {
+ auto* typeDesc = NPg::TypeDescFromPgTypeName(typeName);
+ if (!typeDesc) {
+ errStr = Sprintf("Type '%s' specified for column '%s' is not supported", colProto.GetType().c_str(), col.Name.c_str());
+ }
+ col.Type = NScheme::TTypeInfo(NScheme::NTypeIds::Pg, typeDesc);
+ }
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(col.Type);
+ colProto.SetTypeId(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *colProto.MutableTypeInfo() = *columnType.TypeInfo;
}
- colProto.SetTypeId(type->GetTypeId());
- col.TypeId = type->GetTypeId();
if (schema.ColumnsByName.contains(col.Name)) {
errStr = Sprintf("Duplicate column '%s'", col.Name.c_str());
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_olap_table.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_olap_table.cpp
index 9ae12a29f7b..40e92d9f0fc 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_create_olap_table.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_olap_table.cpp
@@ -123,14 +123,21 @@ TColumnTableInfo::TPtr CreateColumnTable(
auto typeName = NMiniKQL::AdaptLegacyYqlType(colProto.GetType());
const NScheme::IType* type = typeRegistry->GetType(typeName);
+ NScheme::TTypeInfo typeInfo;
if (!type || !NScheme::NTypeIds::IsYqlType(type->GetTypeId())) {
- status = NKikimrScheme::StatusSchemeError;
- errStr = TStringBuilder()
- << "Type '" << colProto.GetType() << "' specified for column '" << colName << "' is not supported";
- return nullptr;
+ auto* typeDesc = NPg::TypeDescFromPgTypeName(typeName);
+ if (!typeDesc) {
+ status = NKikimrScheme::StatusSchemeError;
+ errStr = TStringBuilder()
+ << "Type '" << colProto.GetType() << "' specified for column '" << colName << "' is not supported";
+ return nullptr;
+ }
+ typeInfo = NScheme::TTypeInfo(NScheme::NTypeIds::Pg, typeDesc);
+ } else {
+ typeInfo = NScheme::TTypeInfo(type->GetTypeId());
}
- if (type->GetTypeId() != col->TypeId) {
+ if (typeInfo != col->Type) {
status = NKikimrScheme::StatusSchemeError;
errStr = TStringBuilder()
<< "Type '" << colProto.GetType() << "' specified for column '" << colName
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_table.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_table.cpp
index 7dd80607321..df7e92d9691 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_create_table.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_table.cpp
@@ -44,7 +44,7 @@ bool CheckColumnTypesConstraints(NKikimrSchemeOp::TTableDescription& desc, TStri
bool InitPartitioning(const NKikimrSchemeOp::TTableDescription& op,
const NScheme::TTypeRegistry* typeRegistry,
const TVector<ui32>& keyColIds,
- const TVector<NScheme::TTypeId>& keyColTypeIds,
+ const TVector<NScheme::TTypeInfo>& keyColTypeIds,
TString& errStr,
TVector<TTableShardInfo>& partitions,
const TSchemeLimits& limits) {
@@ -63,7 +63,7 @@ bool InitPartitioning(const NKikimrSchemeOp::TTableDescription& op,
TVector<TString> rangeEnds;
if (op.HasUniformPartitionsCount()) {
Y_VERIFY(!keyColIds.empty());
- NScheme::TTypeId firstKeyColType = keyColTypeIds[0];
+ auto firstKeyColType = keyColTypeIds[0];
if (!TSchemeShard::FillUniformPartitioning(rangeEnds, keyColIds.size(), firstKeyColType, partitionCount, typeRegistry, errStr)) {
return false;
}
@@ -106,17 +106,17 @@ bool DoInitPartitioning(TTableInfo::TPtr tableInfo,
return false;
}
- TVector<NScheme::TTypeId> keyColTypeIds;
+ TVector<NScheme::TTypeInfo> keyColTypeIds;
for (ui32 ki : keyColIds) {
- NScheme::TTypeId typeId = tableInfo->Columns[ki].PType;
+ auto type = tableInfo->Columns[ki].PType;
- if (!IsAllowedKeyType(typeId)) {
+ if (!IsAllowedKeyType(type)) {
errStr = Sprintf("Column %s has wrong key type %s",
- tableInfo->Columns[ki].Name.c_str(), NScheme::GetTypeName(typeId).c_str());
+ tableInfo->Columns[ki].Name.c_str(), NScheme::TypeName(type));
return false;
}
- keyColTypeIds.push_back(typeId);
+ keyColTypeIds.push_back(type);
}
if (!InitPartitioning(op, typeRegistry, keyColIds, keyColTypeIds, errStr, partitions, limits)) {
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_split_merge.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_split_merge.cpp
index ace2f95390d..ca1c88bc964 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_split_merge.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_split_merge.cpp
@@ -664,7 +664,7 @@ public:
datashardInfo.BindedChannels = channels;
// Build vector of key column types
- TVector<NScheme::TTypeId> keyColTypeIds;
+ TVector<NScheme::TTypeInfo> keyColTypeIds;
for (const auto& col : tableInfo->Columns) {
if (!col.second.IsKey())
continue;
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_upgrade_subdomain.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_upgrade_subdomain.cpp
index b83f4e60283..b3fa178cd91 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_upgrade_subdomain.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_upgrade_subdomain.cpp
@@ -4,6 +4,7 @@
#include "schemeshard_impl.h"
#include <ydb/core/base/subdomain.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
namespace {
@@ -219,7 +220,11 @@ public:
auto colDescr = descr.AddColumns();
colDescr->SetId(columnId);
colDescr->SetName(column.Name);
- colDescr->SetColType(column.PType);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(column.PType);
+ colDescr->SetColType(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *colDescr->MutableColTypeInfo() = *columnType.TypeInfo;
+ }
colDescr->SetColKeyOrder(column.KeyOrder);
colDescr->SetCreateVersion(column.CreateVersion);
colDescr->SetDeleteVersion(column.DeleteVersion);
diff --git a/ydb/core/tx/schemeshard/schemeshard__table_stats_histogram.cpp b/ydb/core/tx/schemeshard/schemeshard__table_stats_histogram.cpp
index 1001f22c761..efdd914cec5 100644
--- a/ydb/core/tx/schemeshard/schemeshard__table_stats_histogram.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__table_stats_histogram.cpp
@@ -5,8 +5,9 @@
namespace NKikimr {
namespace NSchemeShard {
-static bool IsIntegerType(NScheme::TTypeId typeId) {
- switch (typeId) {
+static bool IsIntegerType(NScheme::TTypeInfo type) {
+ // TODO: support pg types
+ switch (type.GetTypeId()) {
case NScheme::NTypeIds::Bool:
case NScheme::NTypeIds::Int8:
@@ -29,7 +30,7 @@ static bool IsIntegerType(NScheme::TTypeId typeId) {
}
}
-TSerializedCellVec ChooseSplitKeyByHistogram(const NKikimrTableStats::THistogram& histogram, const TConstArrayRef<NScheme::TTypeId> &keyColumnTypes) {
+TSerializedCellVec ChooseSplitKeyByHistogram(const NKikimrTableStats::THistogram& histogram, const TConstArrayRef<NScheme::TTypeInfo> &keyColumnTypes) {
ui64 bucketsCount = histogram.BucketsSize();
ui64 idxLo = bucketsCount * 0.33;
ui64 idxMed = bucketsCount * 0.5;
@@ -42,7 +43,7 @@ TSerializedCellVec ChooseSplitKeyByHistogram(const NKikimrTableStats::THistogram
TVector<TCell> splitKey(keyMed.GetCells().size());
for (size_t i = 0; i < keyMed.GetCells().size(); ++i) {
- NScheme::TTypeId columnType = keyColumnTypes[i];
+ auto columnType = keyColumnTypes[i];
if (0 == CompareTypedCells(keyLo.GetCells()[i], keyHi.GetCells()[i], columnType)) {
// lo == hi, so we add this value and proceed to the next column
@@ -88,7 +89,7 @@ TSerializedCellVec ChooseSplitKeyByHistogram(const NKikimrTableStats::THistogram
}
TSerializedCellVec DoFindSplitKey(const TVector<std::pair<TSerializedCellVec, ui64>>& keysHist,
- const TConstArrayRef<NScheme::TTypeId>& keyColumnTypes,
+ const TConstArrayRef<NScheme::TTypeInfo>& keyColumnTypes,
const size_t prefixSize)
{
ui64 total = keysHist.back().second;
@@ -123,7 +124,7 @@ TSerializedCellVec DoFindSplitKey(const TVector<std::pair<TSerializedCellVec, ui
return TSerializedCellVec(TSerializedCellVec::Serialize(splitKey));
}
-TSerializedCellVec ChooseSplitKeyByKeySample(const NKikimrTableStats::THistogram& keySample, const TConstArrayRef<NScheme::TTypeId>& keyColumnTypes) {
+TSerializedCellVec ChooseSplitKeyByKeySample(const NKikimrTableStats::THistogram& keySample, const TConstArrayRef<NScheme::TTypeInfo>& keyColumnTypes) {
TVector<std::pair<TSerializedCellVec, ui64>> keysHist;
for (const auto& s : keySample.GetBuckets()) {
keysHist.emplace_back(std::make_pair(TSerializedCellVec(s.GetKey()), s.GetValue()));
@@ -327,7 +328,7 @@ bool TTxPartitionHistogram::Execute(TTransactionContext& txc, const TActorContex
return true;
}
- TSmallVec<NScheme::TTypeId> keyColumnTypes(table->KeyColumnIds.size());
+ TSmallVec<NScheme::TTypeInfo> keyColumnTypes(table->KeyColumnIds.size());
for (size_t ki = 0; ki < table->KeyColumnIds.size(); ++ki) {
keyColumnTypes[ki] = table->Columns.FindPtr(table->KeyColumnIds[ki])->PType;
}
diff --git a/ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp b/ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp
index 50e484da109..1ca5ec73285 100644
--- a/ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp
@@ -675,7 +675,7 @@ public:
if (shardStatus.LastKeyAck) {
//check that all LastKeyAcks are monotonously increase
TTableInfo::TPtr tableInfo = Self->Tables.at(buildInfo->TablePathId);
- TVector<ui16> keyTypes;
+ TVector<NScheme::TTypeInfo> keyTypes;
for (ui32 keyPos: tableInfo->KeyColumnIds) {
keyTypes.push_back(tableInfo->Columns.at(keyPos).PType);
}
diff --git a/ydb/core/tx/schemeshard/schemeshard_impl.cpp b/ydb/core/tx/schemeshard/schemeshard_impl.cpp
index d22c965885f..bb35512dd97 100644
--- a/ydb/core/tx/schemeshard/schemeshard_impl.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_impl.cpp
@@ -9,6 +9,7 @@
#include <ydb/core/base/tx_processing.h>
#include <ydb/core/engine/mkql_proto.h>
#include <ydb/core/sys_view/partition_stats/partition_stats.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/library/yql/minikql/mkql_type_ops.h>
namespace NKikimr {
@@ -2288,10 +2289,16 @@ void TSchemeShard::PersistTableAltered(NIceDb::TNiceDb& db, const TPathId pathId
for (auto col : tableInfo->Columns) {
ui32 colId = col.first;
const TTableInfo::TColumn& cinfo = col.second;
+ TString typeData;
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(cinfo.PType);
+ if (columnType.TypeInfo) {
+ Y_VERIFY(columnType.TypeInfo->SerializeToString(&typeData));
+ }
if (pathId.OwnerId == TabletID()) {
db.Table<Schema::Columns>().Key(pathId.LocalPathId, colId).Update(
NIceDb::TUpdate<Schema::Columns::ColName>(cinfo.Name),
- NIceDb::TUpdate<Schema::Columns::ColType>((ui32)cinfo.PType),
+ NIceDb::TUpdate<Schema::Columns::ColType>((ui32)columnType.TypeId),
+ NIceDb::TUpdate<Schema::Columns::ColTypeData>(typeData),
NIceDb::TUpdate<Schema::Columns::ColKeyOrder>(cinfo.KeyOrder),
NIceDb::TUpdate<Schema::Columns::CreateVersion>(cinfo.CreateVersion),
NIceDb::TUpdate<Schema::Columns::DeleteVersion>(cinfo.DeleteVersion),
@@ -2304,7 +2311,8 @@ void TSchemeShard::PersistTableAltered(NIceDb::TNiceDb& db, const TPathId pathId
} else {
db.Table<Schema::MigratedColumns>().Key(pathId.OwnerId, pathId.LocalPathId, colId).Update(
NIceDb::TUpdate<Schema::MigratedColumns::ColName>(cinfo.Name),
- NIceDb::TUpdate<Schema::MigratedColumns::ColType>((ui32)cinfo.PType),
+ NIceDb::TUpdate<Schema::MigratedColumns::ColType>((ui32)columnType.TypeId),
+ NIceDb::TUpdate<Schema::MigratedColumns::ColTypeData>(typeData),
NIceDb::TUpdate<Schema::MigratedColumns::ColKeyOrder>(cinfo.KeyOrder),
NIceDb::TUpdate<Schema::MigratedColumns::CreateVersion>(cinfo.CreateVersion),
NIceDb::TUpdate<Schema::MigratedColumns::DeleteVersion>(cinfo.DeleteVersion),
@@ -2339,10 +2347,16 @@ void TSchemeShard::PersistAddAlterTable(NIceDb::TNiceDb& db, TPathId pathId, con
for (auto col : alter->Columns) {
ui32 colId = col.first;
const TTableInfo::TColumn& cinfo = col.second;
+ TString typeData;
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(cinfo.PType);
+ if (columnType.TypeInfo) {
+ Y_VERIFY(columnType.TypeInfo->SerializeToString(&typeData));
+ }
if (pathId.OwnerId == TabletID()) {
db.Table<Schema::ColumnAlters>().Key(pathId.LocalPathId, colId).Update(
NIceDb::TUpdate<Schema::ColumnAlters::ColName>(cinfo.Name),
- NIceDb::TUpdate<Schema::ColumnAlters::ColType>((ui32)cinfo.PType),
+ NIceDb::TUpdate<Schema::ColumnAlters::ColType>((ui32)columnType.TypeId),
+ NIceDb::TUpdate<Schema::ColumnAlters::ColTypeData>(typeData),
NIceDb::TUpdate<Schema::ColumnAlters::ColKeyOrder>(cinfo.KeyOrder),
NIceDb::TUpdate<Schema::ColumnAlters::CreateVersion>(cinfo.CreateVersion),
NIceDb::TUpdate<Schema::ColumnAlters::DeleteVersion>(cinfo.DeleteVersion),
@@ -2353,7 +2367,8 @@ void TSchemeShard::PersistAddAlterTable(NIceDb::TNiceDb& db, TPathId pathId, con
} else {
db.Table<Schema::MigratedColumnAlters>().Key(pathId.OwnerId, pathId.LocalPathId, colId).Update(
NIceDb::TUpdate<Schema::MigratedColumnAlters::ColName>(cinfo.Name),
- NIceDb::TUpdate<Schema::MigratedColumnAlters::ColType>((ui32)cinfo.PType),
+ NIceDb::TUpdate<Schema::MigratedColumnAlters::ColType>((ui32)columnType.TypeId),
+ NIceDb::TUpdate<Schema::MigratedColumnAlters::ColTypeData>(typeData),
NIceDb::TUpdate<Schema::MigratedColumnAlters::ColKeyOrder>(cinfo.KeyOrder),
NIceDb::TUpdate<Schema::MigratedColumnAlters::CreateVersion>(cinfo.CreateVersion),
NIceDb::TUpdate<Schema::MigratedColumnAlters::DeleteVersion>(cinfo.DeleteVersion),
@@ -5715,12 +5730,20 @@ TString TSchemeShard::FillAlterTableTxBody(TPathId pathId, TShardIdx shardIdx, T
auto descr = proto->AddDropColumns();
descr->SetName(colInfo.Name);
descr->SetId(colInfo.Id);
- descr->SetTypeId(colInfo.PType);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(colInfo.PType);
+ descr->SetTypeId(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *descr->MutableTypeInfo() = *columnType.TypeInfo;
+ }
} else {
auto descr = proto->AddColumns();
descr->SetName(colInfo.Name);
descr->SetId(colInfo.Id);
- descr->SetTypeId(colInfo.PType);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(colInfo.PType);
+ descr->SetTypeId(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *descr->MutableTypeInfo() = *columnType.TypeInfo;
+ }
descr->SetFamily(colInfo.Family);
}
}
@@ -5742,7 +5765,7 @@ TString TSchemeShard::FillAlterTableTxBody(TPathId pathId, TShardIdx shardIdx, T
return txBody;
}
-bool TSchemeShard::FillSplitPartitioning(TVector<TString>& rangeEnds, const TConstArrayRef<NScheme::TTypeId>& keyColTypes,
+bool TSchemeShard::FillSplitPartitioning(TVector<TString>& rangeEnds, const TConstArrayRef<NScheme::TTypeInfo>& keyColTypes,
const::google::protobuf::RepeatedPtrField<NKikimrSchemeOp::TSplitBoundary> &boundaries,
TString& errStr) {
for (int i = 0; i < boundaries.size(); ++i) {
@@ -5899,7 +5922,7 @@ void TSchemeShard::FillTableDescription(TPathId tableId, ui32 partitionIdx, ui64
FillTableSchemaVersion(schemaVersion, tableDescr);
}
-bool TSchemeShard::FillUniformPartitioning(TVector<TString>& rangeEnds, ui32 keySize, NScheme::TTypeId firstKeyColType, ui32 partitionCount, const NScheme::TTypeRegistry* typeRegistry, TString& errStr) {
+bool TSchemeShard::FillUniformPartitioning(TVector<TString>& rangeEnds, ui32 keySize, NScheme::TTypeInfo firstKeyColType, ui32 partitionCount, const NScheme::TTypeRegistry* typeRegistry, TString& errStr) {
if (partitionCount > 1) {
// RangeEnd key will have first cell with non-NULL value and rest of the cells with NULLs
TVector<TCell> rangeEnd(keySize);
@@ -5907,7 +5930,8 @@ bool TSchemeShard::FillUniformPartitioning(TVector<TString>& rangeEnds, ui32 key
ui32 valSz = 0;
// Check that first key column has integer type
- switch(firstKeyColType) {
+ auto typeId = firstKeyColType.GetTypeId();
+ switch(typeId) {
case NScheme::NTypeIds::Uint32:
maxVal = Max<ui32>();
valSz = 4;
@@ -5917,7 +5941,7 @@ bool TSchemeShard::FillUniformPartitioning(TVector<TString>& rangeEnds, ui32 key
valSz = 8;
break;
default:
- errStr = TStringBuilder() << "Unsupported first key column type " << typeRegistry->GetTypeName(firstKeyColType) << ", only Uint32 and Uint64 are supported";
+ errStr = TStringBuilder() << "Unsupported first key column type " << typeRegistry->GetTypeName(typeId) << ", only Uint32 and Uint64 are supported";
return false;
}
diff --git a/ydb/core/tx/schemeshard/schemeshard_impl.h b/ydb/core/tx/schemeshard/schemeshard_impl.h
index 168998c3490..becaf324976 100644
--- a/ydb/core/tx/schemeshard/schemeshard_impl.h
+++ b/ydb/core/tx/schemeshard/schemeshard_impl.h
@@ -869,9 +869,9 @@ public:
bool rangeBeginInclusive, bool rangeEndInclusive,
bool newTable = false);
void FillTableDescription(TPathId tableId, ui32 partitionIdx, ui64 schemaVersion, NKikimrSchemeOp::TTableDescription* tableDescr);
- static bool FillUniformPartitioning(TVector<TString>& rangeEnds, ui32 keySize, NScheme::TTypeId firstKeyColType,
+ static bool FillUniformPartitioning(TVector<TString>& rangeEnds, ui32 keySize, NScheme::TTypeInfo firstKeyColType,
ui32 partitionCount, const NScheme::TTypeRegistry* typeRegistry, TString& errStr);
- static bool FillSplitPartitioning(TVector<TString>& rangeEnds, const TConstArrayRef<NScheme::TTypeId>& keyColTypes,
+ static bool FillSplitPartitioning(TVector<TString>& rangeEnds, const TConstArrayRef<NScheme::TTypeInfo>& keyColTypes,
const ::google::protobuf::RepeatedPtrField<NKikimrSchemeOp::TSplitBoundary>& boundaries,
TString& errStr);
diff --git a/ydb/core/tx/schemeshard/schemeshard_info_types.cpp b/ydb/core/tx/schemeshard/schemeshard_info_types.cpp
index 5fcd1204e8a..01985b866ce 100644
--- a/ydb/core/tx/schemeshard/schemeshard_info_types.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_info_types.cpp
@@ -6,6 +6,7 @@
#include <ydb/core/base/tx_processing.h>
#include <ydb/core/engine/minikql/flat_local_tx_factory.h>
#include <ydb/core/engine/mkql_proto.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/tablet/tablet_counters_aggregator.h>
#include <ydb/core/tablet/tablet_counters_protobuf.h>
#include <ydb/core/util/pb.h>
@@ -120,15 +121,21 @@ TTableInfo::TAlterDataPtr TTableInfo::CreateAlterData(
return nullptr;
}
- if (!type) {
- errStr = Sprintf("Type '%s' specified for column '%s' is not supported by storage", col.GetType().data(), colName.data());
- return nullptr;
- }
-
- // Only allow YQL types
- if (!NScheme::NTypeIds::IsYqlType(type->GetTypeId())) {
- errStr = Sprintf("Type '%s' specified for column '%s' is no longer supported", col.GetType().data(), colName.data());
- return nullptr;
+ NScheme::TTypeInfo typeInfo;
+ if (type) {
+ // Only allow YQL types
+ if (!NScheme::NTypeIds::IsYqlType(type->GetTypeId())) {
+ errStr = Sprintf("Type '%s' specified for column '%s' is no longer supported", col.GetType().data(), colName.data());
+ return nullptr;
+ }
+ typeInfo = NScheme::TTypeInfo(type->GetTypeId());
+ } else {
+ auto* typeDesc = NPg::TypeDescFromPgTypeName(typeName);
+ if (!typeDesc) {
+ errStr = Sprintf("Type '%s' specified for column '%s' is not supported by storage", col.GetType().data(), colName.data());
+ return nullptr;
+ }
+ typeInfo = NScheme::TTypeInfo(NScheme::NTypeIds::Pg, typeDesc);
}
ui32 colId = col.HasId() ? col.GetId() : alterData->NextColumnId;
@@ -146,7 +153,7 @@ TTableInfo::TAlterDataPtr TTableInfo::CreateAlterData(
colName2Id[colName] = colId;
TTableInfo::TColumn& column = alterData->Columns[colId];
- column = TTableInfo::TColumn(colName, colId, type->GetTypeId());
+ column = TTableInfo::TColumn(colName, colId, typeInfo);
column.Family = columnFamily ? columnFamily->GetId() : 0;
column.NotNull = col.GetNotNull();
if (source)
@@ -310,7 +317,11 @@ TVector<ui32> TTableInfo::FillDescriptionCache(TPathElement::TPtr pathInfo) {
auto colDescr = TableDescription.AddColumns();
colDescr->SetName(column.Name);
colDescr->SetId(column.Id);
- colDescr->SetTypeId(column.PType);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(column.PType);
+ colDescr->SetTypeId(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *colDescr->MutableTypeInfo() = *columnType.TypeInfo;
+ }
colDescr->SetFamily(column.Family);
}
for (auto ci : keyColumnIds) {
@@ -1836,14 +1847,15 @@ bool TPersQueueGroupInfo::FillKeySchema(const NKikimrPQ::TPQTabletConfig& tablet
KeySchema.reserve(tabletConfig.PartitionKeySchemaSize());
for (const auto& component : tabletConfig.GetPartitionKeySchema()) {
- if (!NScheme::NTypeIds::IsYqlType(component.GetTypeId())) {
+ // TODO: support pg types
+ auto typeId = component.GetTypeId();
+ if (!NScheme::NTypeIds::IsYqlType(typeId)) {
error = TStringBuilder() << "TypeId is not supported"
- << ": typeId# " << component.GetTypeId()
+ << ": typeId# " << typeId
<< ", component# " << component.GetName();
return false;
}
-
- KeySchema.push_back(component.GetTypeId());
+ KeySchema.push_back(NScheme::TTypeInfo(typeId));
}
return true;
@@ -1980,7 +1992,8 @@ TOlapStoreInfo::TOlapStoreInfo(
auto& col = preset.Columns[colProto.GetId()];
col.Id = colProto.GetId();
col.Name = colProto.GetName();
- col.TypeId = colProto.GetTypeId();
+ col.Type = NScheme::TypeInfoFromProtoColumnType(colProto.GetTypeId(),
+ colProto.HasTypeInfo() ? &colProto.GetTypeInfo() : nullptr);
preset.ColumnsByName[col.Name] = col.Id;
}
for (const auto& keyName : presetProto.GetSchema().GetKeyColumnNames()) {
diff --git a/ydb/core/tx/schemeshard/schemeshard_info_types.h b/ydb/core/tx/schemeshard/schemeshard_info_types.h
index 4595022733a..e9845105bd3 100644
--- a/ydb/core/tx/schemeshard/schemeshard_info_types.h
+++ b/ydb/core/tx/schemeshard/schemeshard_info_types.h
@@ -313,7 +313,7 @@ struct TTableInfo : public TSimpleRefCount<TTableInfo> {
TString DefaultValue;
bool NotNull = false;
- TColumn(const TString& name, ui32 id, NScheme::TTypeId type)
+ TColumn(const TString& name, ui32 id, NScheme::TTypeInfo type)
: NTable::TScheme::TColumn(name, id, type)
, CreateVersion(0)
, DeleteVersion(Max<ui64>())
@@ -789,7 +789,7 @@ struct TOlapSchema {
struct TColumn {
ui32 Id = Max<ui32>();
TString Name;
- NScheme::TTypeId TypeId = 0;
+ NScheme::TTypeInfo Type;
ui32 KeyOrder = Max<ui32>();
// TODO: per-column ACL?
@@ -901,7 +901,7 @@ struct TColumnTableInfo : TSimpleRefCount<TColumnTableInfo> {
struct TPQShardInfo : TSimpleRefCount<TPQShardInfo> {
using TPtr = TIntrusivePtr<TPQShardInfo>;
- using TKeySchema = TVector<NScheme::TTypeId>;
+ using TKeySchema = TVector<NScheme::TTypeInfo>;
struct TKeyRange {
TMaybe<TString> FromBound;
diff --git a/ydb/core/tx/schemeshard/schemeshard_path_describer.cpp b/ydb/core/tx/schemeshard/schemeshard_path_describer.cpp
index 53406550528..85934c644a5 100644
--- a/ydb/core/tx/schemeshard/schemeshard_path_describer.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_path_describer.cpp
@@ -3,6 +3,7 @@
#include <ydb/core/base/appdata.h>
#include <ydb/core/engine/mkql_proto.h>
#include <ydb/core/protos/flat_tx_scheme.pb.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <util/stream/format.h>
@@ -907,8 +908,12 @@ void TSchemeShard::DescribeTable(const TTableInfo::TPtr tableInfo, const NScheme
auto colDescr = entry->AddColumns();
colDescr->SetName(cinfo.Name);
- colDescr->SetType(typeRegistry->GetTypeName(cinfo.PType));
- colDescr->SetTypeId(cinfo.PType);
+ colDescr->SetType(typeRegistry->GetTypeName(cinfo.PType.GetTypeId())); // TODO: no pg type details in string type
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(cinfo.PType);
+ colDescr->SetTypeId(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *colDescr->MutableTypeInfo() = *columnType.TypeInfo;
+ }
colDescr->SetId(cinfo.Id);
colDescr->SetNotNull(cinfo.NotNull);
@@ -1121,8 +1126,8 @@ void TSchemeShard::FillTableBoundaries(const TTableInfo::TPtr tableInfo, google:
auto boundary = boundaries.Add()->MutableKeyPrefix();
for (ui32 ki = 0; ki < endKey.GetCells().size(); ++ki){
const auto& c = endKey.GetCells()[ki];
- ui32 typeId = tableInfo->Columns[tableInfo->KeyColumnIds[ki]].PType;
- bool ok = NMiniKQL::CellToValue(typeId, c, *boundary->AddTuple(), errStr);
+ auto type = tableInfo->Columns[tableInfo->KeyColumnIds[ki]].PType;
+ bool ok = NMiniKQL::CellToValue(type, c, *boundary->AddTuple(), errStr);
Y_VERIFY(ok, "Failed to build key tuple at postition %" PRIu32 " error: %s", ki, errStr.data());
}
}
diff --git a/ydb/core/tx/schemeshard/schemeshard_schema.h b/ydb/core/tx/schemeshard/schemeshard_schema.h
index fce0f91dc31..76160368e86 100644
--- a/ydb/core/tx/schemeshard/schemeshard_schema.h
+++ b/ydb/core/tx/schemeshard/schemeshard_schema.h
@@ -167,6 +167,7 @@ struct Schema : NIceDb::Schema {
struct ColId : Column<2, NScheme::NTypeIds::Uint32> {};
struct ColName : Column<3, NScheme::NTypeIds::Utf8> {};
struct ColType : Column<4, NScheme::NTypeIds::Uint32> {};
+ struct ColTypeData : Column<12, NScheme::NTypeIds::String> {};
struct ColKeyOrder : Column<5, NScheme::NTypeIds::Uint32> {};
struct CreateVersion : Column<6, NScheme::NTypeIds::Uint64> {};
struct DeleteVersion : Column<7, NScheme::NTypeIds::Uint64> {};
@@ -178,7 +179,7 @@ struct Schema : NIceDb::Schema {
using TKey = TableKey<TabId, ColId>;
using TColumns = TableColumns<TabId,
ColId, ColName, ColType, ColKeyOrder, CreateVersion, DeleteVersion,
- Family, DefaultKind, DefaultValue, NotNull>;
+ Family, DefaultKind, DefaultValue, NotNull, ColTypeData>;
};
struct MigratedColumns : Table<55> {
@@ -188,6 +189,7 @@ struct Schema : NIceDb::Schema {
struct ColName : Column<4, NScheme::NTypeIds::Utf8> {};
struct ColType : Column<5, NScheme::NTypeIds::Uint32> {};
+ struct ColTypeData : Column<13, NScheme::NTypeIds::String> {};
struct ColKeyOrder : Column<6, NScheme::NTypeIds::Uint32> {};
struct CreateVersion : Column<7, NScheme::NTypeIds::Uint64> {};
struct DeleteVersion : Column<8, NScheme::NTypeIds::Uint64> {};
@@ -199,7 +201,7 @@ struct Schema : NIceDb::Schema {
using TKey = TableKey<OwnerPathId, LocalPathId, ColId>;
using TColumns = TableColumns<OwnerPathId, LocalPathId, ColId,
ColName, ColType, ColKeyOrder, CreateVersion, DeleteVersion,
- Family, DefaultKind, DefaultValue, NotNull>;
+ Family, DefaultKind, DefaultValue, NotNull, ColTypeData>;
};
struct ColumnAlters : Table<13> {
@@ -207,6 +209,7 @@ struct Schema : NIceDb::Schema {
struct ColId : Column<2, NScheme::NTypeIds::Uint32> {};
struct ColName : Column<3, NScheme::NTypeIds::Utf8> {};
struct ColType : Column<4, NScheme::NTypeIds::Uint32> {};
+ struct ColTypeData : Column<12, NScheme::NTypeIds::String> {};
struct ColKeyOrder : Column<5, NScheme::NTypeIds::Uint32> {};
struct CreateVersion : Column<6, NScheme::NTypeIds::Uint64> {};
struct DeleteVersion : Column<7, NScheme::NTypeIds::Uint64> {};
@@ -217,7 +220,7 @@ struct Schema : NIceDb::Schema {
using TKey = TableKey<TabId, ColId>;
using TColumns = TableColumns<TabId, ColId, ColName, ColType, ColKeyOrder, CreateVersion, DeleteVersion,
- Family, DefaultKind, DefaultValue, NotNull>;
+ Family, DefaultKind, DefaultValue, NotNull, ColTypeData>;
};
struct MigratedColumnAlters : Table<63> {
@@ -227,6 +230,7 @@ struct Schema : NIceDb::Schema {
struct ColName : Column<4, NScheme::NTypeIds::Utf8> {};
struct ColType : Column<5, NScheme::NTypeIds::Uint32> {};
+ struct ColTypeData : Column<13, NScheme::NTypeIds::String> {};
struct ColKeyOrder : Column<6, NScheme::NTypeIds::Uint32> {};
struct CreateVersion : Column<7, NScheme::NTypeIds::Uint64> {};
struct DeleteVersion : Column<8, NScheme::NTypeIds::Uint64> {};
@@ -237,7 +241,7 @@ struct Schema : NIceDb::Schema {
using TKey = TableKey<OwnerPathId, LocalPathId, ColId>;
using TColumns = TableColumns<OwnerPathId, LocalPathId, ColId, ColName, ColType, ColKeyOrder, CreateVersion, DeleteVersion,
- Family, DefaultKind, DefaultValue, NotNull>;
+ Family, DefaultKind, DefaultValue, NotNull, ColTypeData>;
};
struct Shards : Table<7> {
diff --git a/ydb/core/tx/schemeshard/schemeshard_utils.cpp b/ydb/core/tx/schemeshard/schemeshard_utils.cpp
index e4ea14dfa40..f061c18e03d 100644
--- a/ydb/core/tx/schemeshard/schemeshard_utils.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_utils.cpp
@@ -289,7 +289,9 @@ NKikimrSchemeOp::TTableDescription CalcImplTableDesc(
auto item = result.AddColumns();
item->SetName(column.Name);
- item->SetType(appData->TypeRegistry->GetTypeName(column.PType));
+ // TODO: support pg types
+ Y_VERIFY(column.PType.GetTypeId() != NScheme::NTypeIds::Pg);
+ item->SetType(appData->TypeRegistry->GetTypeName(column.PType.GetTypeId()));
ui32 order = Max<ui32>();
if (implKeyToImplColumn.contains(column.Name)) {
@@ -473,7 +475,7 @@ NKikimrSchemeOp::TPartitionConfig PartitionConfigForIndexes(
return PartitionConfigForIndexes(baseTableDesrc.GetPartitionConfig(), indexTableDesc);
}
-bool ExtractTypes(const NKikimrSchemeOp::TTableDescription& baseTableDesrc, TColumnTypes& columsTypes, TString& explain) {
+bool ExtractTypes(const NKikimrSchemeOp::TTableDescription& baseTableDesrc, TColumnTypes& columnTypes, TString& explain) {
const NScheme::TTypeRegistry* typeRegistry = AppData()->TypeRegistry;
Y_VERIFY(typeRegistry);
@@ -482,11 +484,15 @@ bool ExtractTypes(const NKikimrSchemeOp::TTableDescription& baseTableDesrc, TCol
auto typeName = NMiniKQL::AdaptLegacyYqlType(column.GetType());
const NScheme::IType* type = typeRegistry->GetType(typeName);
if (!type) {
- explain += TStringBuilder() << "Type '" << column.GetType() << "' specified for column '" << columnName << "' is not supported by storage";
- return false;
+ auto* typeDesc = NPg::TypeDescFromPgTypeName(typeName);
+ if (!typeDesc) {
+ explain += TStringBuilder() << "Type '" << column.GetType() << "' specified for column '" << columnName << "' is not supported by storage";
+ return false;
+ }
+ columnTypes[columnName] = NScheme::TTypeInfo(NScheme::NTypeIds::Pg, typeDesc);
+ } else {
+ columnTypes[columnName] = NScheme::TTypeInfo(type->GetTypeId());
}
- auto typeId = type->GetTypeId();
- columsTypes[columnName] = typeId;
}
return true;
@@ -503,7 +509,7 @@ TColumnTypes ExtractTypes(const NSchemeShard::TTableInfo::TPtr& baseTableInfo) {
}
bool IsCompatibleKeyTypes(
- const TColumnTypes& baseTableColumsTypes,
+ const TColumnTypes& baseTableColumnTypes,
const TTableColumns& implTableColumns,
bool uniformTable,
TString& explain)
@@ -511,41 +517,49 @@ bool IsCompatibleKeyTypes(
const NScheme::TTypeRegistry* typeRegistry = AppData()->TypeRegistry;
Y_VERIFY(typeRegistry);
- for (const auto& item: baseTableColumsTypes) {
+ for (const auto& item: baseTableColumnTypes) {
auto& columnName = item.first;
- auto& typeId = item.second;
+ auto typeId = item.second.GetTypeId();
- auto typeSP = typeRegistry->GetType(typeId);
- if (!typeSP) {
- explain += TStringBuilder() << "unknown typeId '" << typeId << "' for column '" << columnName << "'";
- return false;
- }
+ if (typeId == NScheme::NTypeIds::Pg) {
+ if (!item.second.GetTypeDesc()) {
+ explain += TStringBuilder() << "unknown pg type for column '" << columnName << "'";
+ return false;
+ }
- if (!NScheme::NTypeIds::IsYqlType(typeId)) {
- explain += TStringBuilder() << "Type '" << typeId << "' specified for column '" << columnName << "' is no longer supported";
- return false;
+ } else {
+ auto typeSP = typeRegistry->GetType(typeId);
+ if (!typeSP) {
+ explain += TStringBuilder() << "unknown typeId '" << typeId << "' for column '" << columnName << "'";
+ return false;
+ }
+
+ if (!NScheme::NTypeIds::IsYqlType(typeId)) {
+ explain += TStringBuilder() << "Type '" << typeId << "' specified for column '" << columnName << "' is no longer supported";
+ return false;
+ }
}
}
for (auto& keyName: implTableColumns.Keys) {
- Y_VERIFY(baseTableColumsTypes.contains(keyName));
- auto typeId = baseTableColumsTypes.at(keyName);
+ Y_VERIFY(baseTableColumnTypes.contains(keyName));
+ auto typeInfo = baseTableColumnTypes.at(keyName);
if (uniformTable) {
- switch (typeId) {
+ switch (typeInfo.GetTypeId()) {
case NScheme::NTypeIds::Uint32:
case NScheme::NTypeIds::Uint64:
break;
default:
explain += TStringBuilder() << "Column '" << keyName << "' has wrong key type "
- << NScheme::GetTypeName(typeId) << " for being key of table with uniform partitioning";
+ << NScheme::TypeName(typeInfo) << " for being key of table with uniform partitioning";
return false;
}
}
- if (!NSchemeShard::IsAllowedKeyType(typeId)) {
- explain += TStringBuilder() << "Column '" << keyName << "' has wrong key type " << NScheme::GetTypeName(typeId) << " for being key";
+ if (!NSchemeShard::IsAllowedKeyType(typeInfo)) {
+ explain += TStringBuilder() << "Column '" << keyName << "' has wrong key type " << NScheme::TypeName(typeInfo) << " for being key";
return false;
}
}
diff --git a/ydb/core/tx/schemeshard/schemeshard_utils.h b/ydb/core/tx/schemeshard/schemeshard_utils.h
index de7d17f316f..684b3f94ef9 100644
--- a/ydb/core/tx/schemeshard/schemeshard_utils.h
+++ b/ydb/core/tx/schemeshard/schemeshard_utils.h
@@ -21,14 +21,16 @@
namespace NKikimr {
namespace NSchemeShard {
-inline bool IsAllowedKeyType(NScheme::TTypeId typeId) {
- switch (typeId) {
+inline bool IsAllowedKeyType(NScheme::TTypeInfo typeInfo) {
+ switch (typeInfo.GetTypeId()) {
case NScheme::NTypeIds::Json:
case NScheme::NTypeIds::Yson:
case NScheme::NTypeIds::Float:
case NScheme::NTypeIds::Double:
case NScheme::NTypeIds::JsonDocument:
return false;
+ case NScheme::NTypeIds::Pg:
+ return NPg::TypeDescIsComparable(typeInfo.GetTypeDesc());
default:
return true;
}
@@ -52,7 +54,7 @@ inline NKikimrSchemeOp::TModifyScheme TransactionTemplate(const TString& working
}
TSerializedCellVec ChooseSplitKeyByHistogram(const NKikimrTableStats::THistogram& histogram,
- const TConstArrayRef<NScheme::TTypeId>& keyColumnTypes);
+ const TConstArrayRef<NScheme::TTypeInfo>& keyColumnTypes);
class TShardDeleter {
struct TPerHiveDeletions {
@@ -147,7 +149,7 @@ TTableColumns ExtractInfo(const NKikimrSchemeOp::TTableDescription& tableDesrc);
TIndexColumns ExtractInfo(const NKikimrSchemeOp::TIndexCreationConfig& indexDesc);
TTableColumns ExtractInfo(const NSchemeShard::TTableInfo::TPtr& tableInfo);
-using TColumnTypes = THashMap<TString, NScheme::TTypeId>;
+using TColumnTypes = THashMap<TString, NScheme::TTypeInfo>;
bool ExtractTypes(const NKikimrSchemeOp::TTableDescription& baseTableDesrc, TColumnTypes& columsTypes, TString& explain);
TColumnTypes ExtractTypes(const NSchemeShard::TTableInfo::TPtr& baseTableInfo);
diff --git a/ydb/core/tx/schemeshard/schemeshard_validate_ttl.cpp b/ydb/core/tx/schemeshard/schemeshard_validate_ttl.cpp
index 58cc395905c..b209f7e43c1 100644
--- a/ydb/core/tx/schemeshard/schemeshard_validate_ttl.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_validate_ttl.cpp
@@ -14,7 +14,8 @@ namespace {
inline
ui32 GetType(const TOlapSchema::TColumn& col) {
- return col.TypeId;
+ Y_VERIFY(col.Type.GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+ return col.Type.GetTypeId();
}
inline
@@ -24,7 +25,8 @@ namespace {
inline
ui32 GetType(const TTableInfo::TColumn& col) {
- return col.PType;
+ Y_VERIFY(col.PType.GetTypeId() != NScheme::NTypeIds::Pg, "pg types are not supported");
+ return col.PType.GetTypeId();
}
}
@@ -144,7 +146,7 @@ static bool ValidateColumnTableTtl(const NKikimrSchemeOp::TColumnDataLifeCycle::
}
// TODO: Support TTL for types other than Timestamp
- if (alterColumns.FindPtr(colId)->TypeId != NScheme::NTypeIds::Timestamp) {
+ if (alterColumns.FindPtr(colId)->Type.GetTypeId() != NScheme::NTypeIds::Timestamp) {
errStr = "Currently TTL is only supported on columns of Timestamp type";
return false;
}
diff --git a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.darwin.txt
index 8a721b87617..68213fe33e4 100644
--- a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_async_index PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-schemeshard
- ydb-core-testlib
+ core-testlib-default
tx-schemeshard-ut_helpers
)
target_link_options(ydb-core-tx-schemeshard-ut_async_index PRIVATE
diff --git a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux.txt
index 3308fce5eab..8dd7481038c 100644
--- a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_async_index PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-schemeshard
- ydb-core-testlib
+ core-testlib-default
tx-schemeshard-ut_helpers
)
target_link_options(ydb-core-tx-schemeshard-ut_async_index PRIVATE
diff --git a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.darwin.txt
index 74529d7845c..ac9af780e94 100644
--- a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_backup PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux.txt
index 0215b366f17..ab326902116 100644
--- a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_backup PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_base.cpp b/ydb/core/tx/schemeshard/ut_base.cpp
index 970fdf18808..8c147d0f113 100644
--- a/ydb/core/tx/schemeshard/ut_base.cpp
+++ b/ydb/core/tx/schemeshard/ut_base.cpp
@@ -9669,13 +9669,13 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) {
}
- class TSchemaHelpler {
+ class TSchemaHelper {
private:
NScheme::TTypeRegistry TypeRegistry;
- const TVector<NKikimr::NScheme::TTypeId> KeyColumnTypes;
+ const TVector<NKikimr::NScheme::TTypeInfo> KeyColumnTypes;
public:
- explicit TSchemaHelpler(const TArrayRef<NKikimr::NScheme::TTypeId>& keyColumnTypes)
+ explicit TSchemaHelper(const TArrayRef<NKikimr::NScheme::TTypeInfo>& keyColumnTypes)
: KeyColumnTypes(keyColumnTypes.begin(), keyColumnTypes.end())
{}
@@ -9694,7 +9694,7 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) {
if (tuple[i] == "NULL") {
cells.push_back(NKikimr::TCell());
} else {
- switch (KeyColumnTypes[i]) {
+ switch (KeyColumnTypes[i].GetTypeId()) {
#define ADD_CELL_FROM_STRING(ydbType, cppType) \
case NKikimr::NScheme::NTypeIds::ydbType: { \
cppType val = FromString<cppType>(tuple[i]); \
@@ -9750,13 +9750,13 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) {
};
Y_UNIT_TEST(SplitKey) {
- TSmallVec<NScheme::TTypeId> keyColumnTypes = {
- NScheme::NTypeIds::Uint64,
- NScheme::NTypeIds::Utf8,
- NScheme::NTypeIds::Uint32
+ TSmallVec<NScheme::TTypeInfo> keyColumnTypes = {
+ NScheme::TTypeInfo(NScheme::NTypeIds::Uint64),
+ NScheme::TTypeInfo(NScheme::NTypeIds::Utf8),
+ NScheme::TTypeInfo(NScheme::NTypeIds::Uint32)
};
- TSchemaHelpler schemaHelper(keyColumnTypes);
+ TSchemaHelper schemaHelper(keyColumnTypes);
{
TString splitKey = schemaHelper.FindSplitKey({
diff --git a/ydb/core/tx/schemeshard/ut_base/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_base/CMakeLists.darwin.txt
index f04138f6624..bfd7e936008 100644
--- a/ydb/core/tx/schemeshard/ut_base/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_base/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_base PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux.txt
index d50666ddb55..35beb7025ea 100644
--- a/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_base PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.darwin.txt
index ac31e91f777..0158c970a98 100644
--- a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_base_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux.txt
index 06d449f6785..a6041ec8d62 100644
--- a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_base_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.darwin.txt
index 9ccf408a862..894fa9e2d31 100644
--- a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_bsvolume PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux.txt
index f9d5d12d7f3..00b04b97bb9 100644
--- a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_bsvolume PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.darwin.txt
index ee5ca11e275..67e5667c4dd 100644
--- a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_bsvolume_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux.txt
index 35cb6d7e695..bf6a0f91439 100644
--- a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_bsvolume_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin.txt
index 1af32c35713..9d5d5728dda 100644
--- a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_cdc_stream PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-schemeshard
- ydb-core-testlib
+ core-testlib-default
tx-schemeshard-ut_helpers
library-cpp-json
)
diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux.txt
index 7a6f682acd6..219485e8761 100644
--- a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_cdc_stream PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-schemeshard
- ydb-core-testlib
+ core-testlib-default
tx-schemeshard-ut_helpers
library-cpp-json
)
diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.darwin.txt
index 94e0ccd1a57..6fb92e07991 100644
--- a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.darwin.txt
@@ -21,6 +21,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PUBLIC
cpp-testing-unittest_main
core-tx-schemeshard
tx-schemeshard-ut_helpers
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux.txt
index 7c4e1c70df0..395b3314b32 100644
--- a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux.txt
@@ -23,6 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PUBLIC
cpp-testing-unittest_main
core-tx-schemeshard
tx-schemeshard-ut_helpers
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE
-ldl
diff --git a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.darwin.txt
index c543359def6..f1e290382ad 100644
--- a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_compaction PUBLIC
library-cpp-getopt
cpp-regex-pcre
ydb-core-cms
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux.txt
index 48cccd9ad29..608ddf90b77 100644
--- a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_compaction PUBLIC
library-cpp-getopt
cpp-regex-pcre
ydb-core-cms
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_export/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_export/CMakeLists.darwin.txt
index 3a423d8fe6f..ae1c2216fac 100644
--- a/ydb/core/tx/schemeshard/ut_export/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_export/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_export PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux.txt
index c008c18d915..3611928a1b1 100644
--- a/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_export PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.darwin.txt
index 41206c76ee8..364a12f0697 100644
--- a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_export_reboots_s3 PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux.txt
index 070065da3ca..0ae207499f3 100644
--- a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_export_reboots_s3 PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.darwin.txt
index 4811a8c1d8b..887d3425ed2 100644
--- a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_extsubdomain PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux.txt
index 69f6d6915b1..8b7c447658f 100644
--- a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_extsubdomain PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.darwin.txt
index a9c3594c7c9..18b25bdbb28 100644
--- a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_extsubdomain_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux.txt
index d1709e44b38..1a30ea27997 100644
--- a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_extsubdomain_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.darwin.txt
index d63aa53ae92..a43e52b9eba 100644
--- a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_filestore_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux.txt
index 5a84a7adf55..60502168982 100644
--- a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_filestore_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_helpers/helpers.cpp b/ydb/core/tx/schemeshard/ut_helpers/helpers.cpp
index 66d2b93f437..f0558cacd95 100644
--- a/ydb/core/tx/schemeshard/ut_helpers/helpers.cpp
+++ b/ydb/core/tx/schemeshard/ut_helpers/helpers.cpp
@@ -2019,7 +2019,7 @@ namespace NSchemeShardUT_Private {
keyIdx = ki;
}
}
- table.Columns.insert(std::make_pair(c.GetName(), TColumn{c.GetId(), keyIdx, c.GetTypeId(), 0,
+ table.Columns.insert(std::make_pair(c.GetName(), TColumn{c.GetId(), keyIdx, NScheme::TTypeInfo(c.GetTypeId()), 0,
EColumnTypeConstraint::Nullable}));
}
dbSchemeResolver.AddTable(table);
@@ -2036,17 +2036,16 @@ namespace NSchemeShardUT_Private {
const auto& tdesc = pathDesc.GetTable();
// Cout << pathDesc << Endl;
- std::unordered_map<ui32, NScheme::TTypeId> columnId2Type;
+ std::unordered_map<ui32, NScheme::TTypeInfo> columnId2Type;
for (size_t i = 0; i < tdesc.ColumnsSize(); ++i) {
ui32 id = tdesc.GetColumns(i).GetId();
- ui16 typeId = tdesc.GetColumns(i).GetTypeId();
- columnId2Type[id] = typeId;
+ auto typeInfo = NScheme::TTypeInfo(tdesc.GetColumns(i).GetTypeId());
+ columnId2Type[id] = typeInfo;
}
for (size_t i = 0; i < tdesc.KeyColumnIdsSize(); ++i) {
ui32 id = tdesc.GetKeyColumnIds(i);
- NScheme::TTypeId typeId = columnId2Type[id];
- TablePartitioningInfo.KeyColumnTypes.push_back(typeId);
+ TablePartitioningInfo.KeyColumnTypes.push_back(columnId2Type[id]);
}
for (size_t i = 0; i < pathDesc.TablePartitionsSize(); ++i) {
diff --git a/ydb/core/tx/schemeshard/ut_helpers/helpers.h b/ydb/core/tx/schemeshard/ut_helpers/helpers.h
index 78701f59a77..75243ca77f1 100644
--- a/ydb/core/tx/schemeshard/ut_helpers/helpers.h
+++ b/ydb/core/tx/schemeshard/ut_helpers/helpers.h
@@ -450,7 +450,7 @@ namespace NSchemeShardUT_Private {
ui64 Datashard = 0;
};
- TVector<NScheme::TTypeId> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
TVector<TBorder> Partitioning;
std::shared_ptr<const TVector<TKeyDesc::TPartitionInfo>> ResolveKey(const TTableRange& range) const;
diff --git a/ydb/core/tx/schemeshard/ut_helpers/ls_checks.cpp b/ydb/core/tx/schemeshard/ut_helpers/ls_checks.cpp
index 8a5bb30c13f..9fe0d725e4a 100644
--- a/ydb/core/tx/schemeshard/ut_helpers/ls_checks.cpp
+++ b/ydb/core/tx/schemeshard/ut_helpers/ls_checks.cpp
@@ -3,6 +3,7 @@
#include <ydb/core/engine/mkql_proto.h>
#include <ydb/core/scheme/scheme_tablecell.h>
#include <ydb/core/scheme/scheme_tabledefs.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/public/lib/scheme_types/scheme_type_id.h>
#include <library/cpp/testing/unittest/registar.h>
@@ -397,11 +398,12 @@ TCheckFunc CheckColumns(const TString& name, const TSet<TString>& columns, const
void CheckBoundaries(const NKikimrScheme::TEvDescribeSchemeResult &record) {
const NKikimrSchemeOp::TPathDescription& descr = record.GetPathDescription();
- THashMap<ui32, NScheme::TTypeId> colTypes;
+ THashMap<ui32, NScheme::TTypeInfo> colTypes;
for (const auto& col : descr.GetTable().GetColumns()) {
- colTypes[col.GetId()] = col.GetTypeId();
+ colTypes[col.GetId()] = NScheme::TypeInfoFromProtoColumnType(col.GetTypeId(),
+ col.HasTypeInfo() ? &col.GetTypeInfo() : nullptr);
}
- TVector<NScheme::TTypeId> keyColTypes;
+ TVector<NScheme::TTypeInfo> keyColTypes;
for (const auto& ki : descr.GetTable().GetKeyColumnIds()) {
keyColTypes.push_back(colTypes[ki]);
}
diff --git a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.darwin.txt
index a4cf64db66b..acabcfd0b46 100644
--- a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_index_build PUBLIC
cpp-regex-pcre
library-cpp-svnversion
ydb-core-metering
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
)
diff --git a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux.txt
index 5ae1ec8563e..117b51a2352 100644
--- a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_index_build PUBLIC
cpp-regex-pcre
library-cpp-svnversion
ydb-core-metering
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
)
diff --git a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.darwin.txt
index 749a4d73102..da78d417617 100644
--- a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_index_build_reboots PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux.txt
index 0dcdb8d4ea2..411a9908289 100644
--- a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_index_build_reboots PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_login/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_login/CMakeLists.darwin.txt
index 8c525778628..64f3cd949fa 100644
--- a/ydb/core/tx/schemeshard/ut_login/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_login/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_login PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
ydb-library-login
diff --git a/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux.txt
index 319242330a1..df29edc735b 100644
--- a/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_login PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
ydb-library-login
diff --git a/ydb/core/tx/schemeshard/ut_move/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_move/CMakeLists.darwin.txt
index b6838fd7b43..abca206eb11 100644
--- a/ydb/core/tx/schemeshard/ut_move/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_move/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_move PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux.txt
index d1253db6305..4d6ac392706 100644
--- a/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_move PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.darwin.txt
index 20552d41911..8f88cb38613 100644
--- a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_move_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux.txt
index 1c83f488aa9..d49e9db3353 100644
--- a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_move_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_olap.cpp b/ydb/core/tx/schemeshard/ut_olap.cpp
index 0c4466dcac6..154f062b9ec 100644
--- a/ydb/core/tx/schemeshard/ut_olap.cpp
+++ b/ydb/core/tx/schemeshard/ut_olap.cpp
@@ -12,7 +12,7 @@ namespace NKikimr {
namespace {
namespace NTypeIds = NScheme::NTypeIds;
-using TTypeId = NScheme::TTypeId;
+using TTypeInfo = NScheme::TTypeInfo;
static const TString defaultStoreSchema = R"(
Name: "OlapStore"
@@ -28,9 +28,9 @@ static const TString defaultStoreSchema = R"(
}
)";
-static const TVector<std::pair<TString, TTypeId>> defaultYdbSchema = {
- {"timestamp", NTypeIds::Timestamp },
- {"data", NTypeIds::Utf8 }
+static const TVector<std::pair<TString, TTypeInfo>> defaultYdbSchema = {
+ {"timestamp", TTypeInfo(NTypeIds::Timestamp) },
+ {"data", TTypeInfo(NTypeIds::Utf8) }
};
TString MakeTestBlob(std::pair<ui64, ui64> range) {
@@ -39,7 +39,10 @@ TString MakeTestBlob(std::pair<ui64, ui64> range) {
batchBuilder.Start(defaultYdbSchema, 0, 0, err);
TString str;
- TVector<TTypeId> types = {NTypeIds::Timestamp, NTypeIds::Utf8};
+ TVector<TTypeInfo> types = {
+ TTypeInfo(NTypeIds::Timestamp),
+ TTypeInfo(NTypeIds::Utf8)
+ };
for (size_t i = range.first; i < range.second; ++i) {
str = ToString(i);
diff --git a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.darwin.txt
index ec747dd579d..300270735bc 100644
--- a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_olap PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-formats
ydb-core-tx
core-tx-columnshard
diff --git a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux.txt
index 470736e5f68..b0071a2c632 100644
--- a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_olap PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-formats
ydb-core-tx
core-tx-columnshard
diff --git a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.darwin.txt
index 978796785bf..0d5e0f1768f 100644
--- a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_olap_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
core-tx-columnshard
tx-schemeshard-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux.txt
index 7fd33fbdbc1..55d0fb0d54f 100644
--- a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_olap_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
core-tx-columnshard
tx-schemeshard-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_pq/CMakeLists.darwin.txt
index 5fe075ac1bb..017d6cdf356 100644
--- a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_pq/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_pq PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_pq/CMakeLists.linux.txt
index b0ffde8b157..2a84ea3ced5 100644
--- a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_pq/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_pq PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.darwin.txt
index db114cfb7ad..2d1d7f31e65 100644
--- a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_pq_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux.txt
index 03388e8d696..1d74c762c75 100644
--- a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_pq_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.darwin.txt
index baf3e802bf7..044408beda6 100644
--- a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux.txt
index c33e1f3e248..a8d69a6c872 100644
--- a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.darwin.txt
index b67dedfee33..e974358b977 100644
--- a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.darwin.txt
@@ -21,6 +21,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_replication PUBLIC
cpp-testing-unittest_main
core-tx-schemeshard
tx-schemeshard-ut_helpers
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-tx-schemeshard-ut_replication PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux.txt
index 327db0216ac..c60c53719f5 100644
--- a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux.txt
@@ -23,6 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_replication PUBLIC
cpp-testing-unittest_main
core-tx-schemeshard
tx-schemeshard-ut_helpers
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-tx-schemeshard-ut_replication PRIVATE
-ldl
diff --git a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.darwin.txt
index d2ad8ae5c7b..41e5928e1cc 100644
--- a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.darwin.txt
@@ -21,6 +21,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_replication_reboots PUBLIC
cpp-testing-unittest_main
core-tx-schemeshard
tx-schemeshard-ut_helpers
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-tx-schemeshard-ut_replication_reboots PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux.txt
index 0b8510aeed7..e41d7cb085c 100644
--- a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux.txt
@@ -23,6 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_replication_reboots PUBLIC
cpp-testing-unittest_main
core-tx-schemeshard
tx-schemeshard-ut_helpers
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-tx-schemeshard-ut_replication_reboots PRIVATE
-ldl
diff --git a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.darwin.txt
index d15fa7d2e66..32d1f0e0592 100644
--- a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.darwin.txt
@@ -26,6 +26,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_restore PUBLIC
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
ydb-core-ydb_convert
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-tx-schemeshard-ut_restore PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux.txt
index 1a1ee2dde23..66cac111b61 100644
--- a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux.txt
@@ -28,6 +28,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_restore PUBLIC
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
ydb-core-ydb_convert
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-tx-schemeshard-ut_restore PRIVATE
-ldl
diff --git a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.darwin.txt
index b53e9b9f385..c882009debc 100644
--- a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_rtmr PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux.txt
index 3d5cdcc8fe9..e10313e8fc0 100644
--- a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_rtmr PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.darwin.txt
index b38fcbad8a6..b73503e073c 100644
--- a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_rtmr_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux.txt
index 982cc4b34e9..59493549e25 100644
--- a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_rtmr_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.darwin.txt
index fa9c56900e8..c8ca96dbc67 100644
--- a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_sequence PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
core-tx-columnshard
tx-schemeshard-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux.txt
index 8837294a866..579c2fd2503 100644
--- a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_sequence PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
core-tx-columnshard
tx-schemeshard-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.darwin.txt
index c43d0b09cc8..407211f9016 100644
--- a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_sequence_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
core-tx-columnshard
tx-schemeshard-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux.txt
index 4eff1a7241b..ead5de8b158 100644
--- a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_sequence_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
core-tx-columnshard
tx-schemeshard-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.darwin.txt
index d86ecb7de22..6168fe217f7 100644
--- a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_serverless PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
ydb-core-yql_testlib
diff --git a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux.txt
index d664cdc3e8e..e9836aced1a 100644
--- a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_serverless PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
ydb-core-yql_testlib
diff --git a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.darwin.txt
index 9dbeebfe903..cd264ac4882 100644
--- a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_split_merge PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux.txt
index 328ae8308a4..162ab2c52e1 100644
--- a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_split_merge PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.darwin.txt
index adfb3fc7b94..c193f778d2f 100644
--- a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_split_merge_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux.txt
index 0d6581b727b..448e17cc1ef 100644
--- a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_split_merge_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.darwin.txt
index f58a194f894..cb9622f83f7 100644
--- a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_stats PUBLIC
library-cpp-getopt
cpp-regex-pcre
ydb-core-cms
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux.txt
index 49492da49fc..58155ce1c95 100644
--- a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_stats PUBLIC
library-cpp-getopt
cpp-regex-pcre
ydb-core-cms
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
core-wrappers-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.darwin.txt
index 91547ba8415..a096f56b155 100644
--- a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_subdomain PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux.txt
index 80630bfe74a..c2dee0f1c3c 100644
--- a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_subdomain PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.darwin.txt
index 563755e7206..c1bb342ae60 100644
--- a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_subdomain_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux.txt
index 244150d99ce..04b8a5459cf 100644
--- a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_subdomain_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.darwin.txt
index 217284f0418..90ad73fde6c 100644
--- a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.darwin.txt
@@ -22,6 +22,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_ttl PUBLIC
core-tx-schemeshard
kqp-ut-common
tx-schemeshard-ut_helpers
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-tx-schemeshard-ut_ttl PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux.txt
index 8fd121e25ef..71d930fc250 100644
--- a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux.txt
@@ -24,6 +24,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_ttl PUBLIC
core-tx-schemeshard
kqp-ut-common
tx-schemeshard-ut_helpers
+ yql-sql-pg_dummy
)
target_link_options(ydb-core-tx-schemeshard-ut_ttl PRIVATE
-ldl
diff --git a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.darwin.txt
index 1fa7238cd43..bd700aa60b2 100644
--- a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.darwin.txt
@@ -31,7 +31,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_user_attributes PUBLIC
ydb-core-scheme
ydb-core-tablet
ydb-core-tablet_flat
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
core-tx-datashard
tx-schemeshard-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux.txt
index 4618c2059c5..db3461d468d 100644
--- a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux.txt
@@ -33,7 +33,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_user_attributes PUBLIC
ydb-core-scheme
ydb-core-tablet
ydb-core-tablet_flat
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
core-tx-datashard
tx-schemeshard-ut_helpers
diff --git a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.darwin.txt
index 32f2b4de33a..f65860e3c67 100644
--- a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(core-tx-schemeshard-ut_user_attributes_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux.txt
index f7cfeca9f79..11a2a778e80 100644
--- a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(core-tx-schemeshard-ut_user_attributes_reboots PUBLIC
library-cpp-getopt
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
tx-schemeshard-ut_helpers
udf-service-exception_policy
diff --git a/ydb/core/tx/sequenceproxy/ut/CMakeLists.darwin.txt b/ydb/core/tx/sequenceproxy/ut/CMakeLists.darwin.txt
index 42dee28e6be..65f46fedb49 100644
--- a/ydb/core/tx/sequenceproxy/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tx/sequenceproxy/ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-tx-sequenceproxy-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-sequenceproxy
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tx-sequenceproxy-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/sequenceproxy/ut/CMakeLists.linux.txt b/ydb/core/tx/sequenceproxy/ut/CMakeLists.linux.txt
index d3fbb0f4e1a..c3d882d80b2 100644
--- a/ydb/core/tx/sequenceproxy/ut/CMakeLists.linux.txt
+++ b/ydb/core/tx/sequenceproxy/ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-tx-sequenceproxy-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-sequenceproxy
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tx-sequenceproxy-ut PRIVATE
-ldl
diff --git a/ydb/core/tx/sequenceshard/ut/CMakeLists.darwin.txt b/ydb/core/tx/sequenceshard/ut/CMakeLists.darwin.txt
index 85eeef122ca..be53bd62865 100644
--- a/ydb/core/tx/sequenceshard/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tx/sequenceshard/ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-tx-sequenceshard-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-sequenceshard
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tx-sequenceshard-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/sequenceshard/ut/CMakeLists.linux.txt b/ydb/core/tx/sequenceshard/ut/CMakeLists.linux.txt
index 0cc490d5cf2..ca5ddcaf19d 100644
--- a/ydb/core/tx/sequenceshard/ut/CMakeLists.linux.txt
+++ b/ydb/core/tx/sequenceshard/ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-tx-sequenceshard-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-sequenceshard
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-tx-sequenceshard-ut PRIVATE
-ldl
diff --git a/ydb/core/tx/time_cast/ut/CMakeLists.darwin.txt b/ydb/core/tx/time_cast/ut/CMakeLists.darwin.txt
index 0dee18c7008..cffbcedb4d3 100644
--- a/ydb/core/tx/time_cast/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tx/time_cast/ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-tx-time_cast-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-time_cast
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
)
target_link_options(ydb-core-tx-time_cast-ut PRIVATE
diff --git a/ydb/core/tx/time_cast/ut/CMakeLists.linux.txt b/ydb/core/tx/time_cast/ut/CMakeLists.linux.txt
index 7dcf54b6f11..1c370072079 100644
--- a/ydb/core/tx/time_cast/ut/CMakeLists.linux.txt
+++ b/ydb/core/tx/time_cast/ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-tx-time_cast-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
core-tx-time_cast
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
)
target_link_options(ydb-core-tx-time_cast-ut PRIVATE
diff --git a/ydb/core/tx/tx_allocator/ut/CMakeLists.darwin.txt b/ydb/core/tx/tx_allocator/ut/CMakeLists.darwin.txt
index 61b1088b737..ebfd6197df3 100644
--- a/ydb/core/tx/tx_allocator/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tx/tx_allocator/ut/CMakeLists.darwin.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-tx-tx_allocator-ut PUBLIC
core-tx-tx_allocator
cpp-testing-unittest
ydb-core-mind
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
)
target_link_options(ydb-core-tx-tx_allocator-ut PRIVATE
diff --git a/ydb/core/tx/tx_allocator/ut/CMakeLists.linux.txt b/ydb/core/tx/tx_allocator/ut/CMakeLists.linux.txt
index 6c798b1371c..2c3d733f818 100644
--- a/ydb/core/tx/tx_allocator/ut/CMakeLists.linux.txt
+++ b/ydb/core/tx/tx_allocator/ut/CMakeLists.linux.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-tx_allocator-ut PUBLIC
core-tx-tx_allocator
cpp-testing-unittest
ydb-core-mind
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
)
target_link_options(ydb-core-tx-tx_allocator-ut PRIVATE
diff --git a/ydb/core/tx/tx_allocator_client/ut/CMakeLists.darwin.txt b/ydb/core/tx/tx_allocator_client/ut/CMakeLists.darwin.txt
index 99336186d81..9e0023845f3 100644
--- a/ydb/core/tx/tx_allocator_client/ut/CMakeLists.darwin.txt
+++ b/ydb/core/tx/tx_allocator_client/ut/CMakeLists.darwin.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-tx-tx_allocator_client-ut PUBLIC
core-tx-tx_allocator_client
cpp-testing-unittest
ydb-core-mind
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
)
target_link_options(ydb-core-tx-tx_allocator_client-ut PRIVATE
diff --git a/ydb/core/tx/tx_allocator_client/ut/CMakeLists.linux.txt b/ydb/core/tx/tx_allocator_client/ut/CMakeLists.linux.txt
index c2f69a88c44..127aa0b3052 100644
--- a/ydb/core/tx/tx_allocator_client/ut/CMakeLists.linux.txt
+++ b/ydb/core/tx/tx_allocator_client/ut/CMakeLists.linux.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-tx_allocator_client-ut PUBLIC
core-tx-tx_allocator_client
cpp-testing-unittest
ydb-core-mind
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
)
target_link_options(ydb-core-tx-tx_allocator_client-ut PRIVATE
diff --git a/ydb/core/tx/tx_proxy/datareq.cpp b/ydb/core/tx/tx_proxy/datareq.cpp
index cd37e9c42a0..41fe51828ed 100644
--- a/ydb/core/tx/tx_proxy/datareq.cpp
+++ b/ydb/core/tx/tx_proxy/datareq.cpp
@@ -19,6 +19,7 @@
#include <ydb/core/engine/mkql_engine_flat.h>
#include <ydb/core/engine/mkql_proto.h>
#include <ydb/core/scheme/scheme_types_defs.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/base/row_version.h>
#include <ydb/library/yql/minikql/mkql_type_ops.h>
@@ -91,9 +92,9 @@ class TKeySpace {
public:
TKeySpace();
- void Initialize(bool ordered, TConstArrayRef<NScheme::TTypeId> keyTypes, const TTableRange &range);
+ void Initialize(bool ordered, TConstArrayRef<NScheme::TTypeInfo> keyTypes, const TTableRange &range);
- const TVector<NScheme::TTypeId> &GetKeyTypes() { return KeyTypes; }
+ const TVector<NScheme::TTypeInfo> &GetKeyTypes() { return KeyTypes; }
void AddRange(const NKikimrTx::TKeyRange &range, ui64 shard);
bool IsFull() const;
@@ -126,7 +127,7 @@ private:
void TryToMergeRange(TRanges::iterator it);
bool TryToMergeWithPrev(TRanges::iterator it);
- TVector<NScheme::TTypeId> KeyTypes;
+ TVector<NScheme::TTypeInfo> KeyTypes;
TSerializedTableRange SpaceRange;
TRanges Ranges;
bool OrderedQueue;
@@ -173,7 +174,7 @@ struct TReadTableRequest : public TThrRefBase {
, RequestVersion(tx.HasApiVersion() ? tx.GetApiVersion() : (ui32)NKikimrTxUserProxy::TReadTableTransaction::UNSPECIFIED)
{
for (auto &col : tx.GetColumns()) {
- Columns.emplace_back(col, 0, 0);
+ Columns.emplace_back(col, 0, NScheme::TTypeInfo(0));
}
if (tx.HasSnapshotStep() && tx.HasSnapshotTxId()) {
@@ -444,7 +445,7 @@ private:
void ProcessStreamClearance(bool cleared, const TActorContext &ctx);
bool ParseRangeKey(const NKikimrMiniKQL::TParams &proto,
- TConstArrayRef<NScheme::TTypeId> keyType,
+ TConstArrayRef<NScheme::TTypeInfo> keyType,
TSerializedCellVec &buf,
EParseRangeKeyExp exp);
@@ -584,7 +585,7 @@ TKeySpace::TKeySpace()
}
void TKeySpace::Initialize(bool ordered,
- TConstArrayRef<NScheme::TTypeId> keyTypes,
+ TConstArrayRef<NScheme::TTypeInfo> keyTypes,
const TTableRange &range)
{
SpaceRange.From.Parse(TSerializedCellVec::Serialize(range.From));
@@ -1161,7 +1162,11 @@ void TDataReq::ProcessReadTableResolve(NSchemeCache::TSchemeCacheRequest *cacheR
auto &c = *tx.AddColumns();
c.SetId(col.Id);
c.SetName(col.Name);
- c.SetTypeId(col.PType);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(col.PType);
+ c.SetTypeId(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *c.MutableTypeInfo() = *columnType.TypeInfo;
+ }
}
auto &range = *tx.MutableRange();
ReadTableRequest->KeySpace.GetSpace().Serialize(range);
@@ -1499,7 +1504,7 @@ void TDataReq::Handle(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr &ev,
return Die(ctx);
}
- TVector<NScheme::TTypeId> keyColumnTypes(res.Columns.size());
+ TVector<NScheme::TTypeInfo> keyColumnTypes(res.Columns.size());
TVector<TKeyDesc::TColumnOp> columns(res.Columns.size());
size_t keySize = 0;
size_t no = 0;
@@ -1540,7 +1545,7 @@ void TDataReq::Handle(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr &ev,
}
// Parse range.
- TConstArrayRef<NScheme::TTypeId> keyTypes(keyColumnTypes.data(), keySize);
+ TConstArrayRef<NScheme::TTypeInfo> keyTypes(keyColumnTypes.data(), keySize);
// Fix KeyRanges
bool fromInclusive = ReadTableRequest->Range.GetFromInclusive();
EParseRangeKeyExp fromExpand = EParseRangeKeyExp::TO_NULL;
@@ -3013,7 +3018,7 @@ void TDataReq::ProcessStreamClearance(bool cleared, const TActorContext &ctx)
}
bool TDataReq::ParseRangeKey(const NKikimrMiniKQL::TParams &proto,
- TConstArrayRef<NScheme::TTypeId> keyType,
+ TConstArrayRef<NScheme::TTypeInfo> keyType,
TSerializedCellVec &buf,
EParseRangeKeyExp exp)
{
diff --git a/ydb/core/tx/tx_proxy/describe.cpp b/ydb/core/tx/tx_proxy/describe.cpp
index deb38ca2b7d..e718ac25204 100644
--- a/ydb/core/tx/tx_proxy/describe.cpp
+++ b/ydb/core/tx/tx_proxy/describe.cpp
@@ -3,6 +3,7 @@
#include <ydb/core/tx/scheme_cache/scheme_cache.h>
#include <ydb/core/tx/schemeshard/schemeshard.h>
#include <ydb/core/scheme/scheme_types_defs.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/base/tablet_pipecache.h>
#include <ydb/core/base/appdata.h>
#include <ydb/core/sys_view/common/schema.h>
@@ -102,8 +103,13 @@ class TDescribeReq : public TActor<TDescribeReq> {
for (const auto& [id, column] : entry.Columns) {
auto* col = table->AddColumns();
col->SetName(column.Name);
- col->SetType(AppData(ctx)->TypeRegistry->GetTypeName(column.PType));
- col->SetTypeId(column.PType);
+ // TODO: support pg types (name)
+ col->SetType(AppData(ctx)->TypeRegistry->GetTypeName(column.PType.GetTypeId()));
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(column.PType);
+ col->SetTypeId(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *col->MutableTypeInfo() = *columnType.TypeInfo;
+ }
col->SetId(id);
if (column.KeyOrder >= 0) {
Y_VERIFY((size_t)column.KeyOrder < keyColumnIds.size());
diff --git a/ydb/core/tx/tx_proxy/read_table_impl.cpp b/ydb/core/tx/tx_proxy/read_table_impl.cpp
index f2d75397878..7cb9a0e0a6e 100644
--- a/ydb/core/tx/tx_proxy/read_table_impl.cpp
+++ b/ydb/core/tx/tx_proxy/read_table_impl.cpp
@@ -8,6 +8,7 @@
#include <ydb/core/base/path.h>
#include <ydb/core/base/tablet_pipecache.h>
#include <ydb/core/scheme/scheme_borders.h>
+#include <ydb/core/scheme/scheme_types_proto.h>
#include <ydb/core/engine/mkql_proto.h>
#include <ydb/library/yql/public/issue/yql_issue_message.h>
@@ -52,7 +53,7 @@ namespace {
* Note that range begin/end are treated as key prefixes if they are incomplete.
*/
bool RangeEndBeginHasIntersection(
- TConstArrayRef<NScheme::TTypeId> keyTypes,
+ TConstArrayRef<NScheme::TTypeInfo> keyTypes,
TConstArrayRef<TCell> rangeEnd, bool rangeEndInclusive,
TConstArrayRef<TCell> rangeBegin, bool rangeBeginInclusive)
{
@@ -69,7 +70,7 @@ namespace {
}
int CompareRangeEnds(
- TConstArrayRef<NScheme::TTypeId> keyTypes,
+ TConstArrayRef<NScheme::TTypeInfo> keyTypes,
TConstArrayRef<TCell> left, bool leftInclusive,
TConstArrayRef<TCell> right, bool rightInclusive)
{
@@ -88,7 +89,7 @@ namespace {
bool ParseRangeKey(
const NKikimrMiniKQL::TParams& proto,
- TConstArrayRef<NScheme::TTypeId> keyTypes,
+ TConstArrayRef<NScheme::TTypeInfo> keyTypes,
TSerializedCellVec& buf,
EParseRangeKeyExp exp,
TVector<TString>& unresolvedKeys)
@@ -527,7 +528,7 @@ private:
return ReplyAndDie(TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ResolveError, NKikimrIssues::TStatusIds::SCHEME_ERROR, ctx);
}
- TVector<NScheme::TTypeId> keyTypes(res.Columns.size());
+ TVector<NScheme::TTypeInfo> keyTypes(res.Columns.size());
TVector<TKeyDesc::TColumnOp> columns(res.Columns.size());
{
size_t no = 0;
@@ -1432,7 +1433,11 @@ private:
auto &c = *tx.AddColumns();
c.SetId(col.Id);
c.SetName(col.Name);
- c.SetTypeId(col.PType);
+ auto columnType = NScheme::ProtoColumnTypeFromTypeInfo(col.PType);
+ c.SetTypeId(columnType.TypeId);
+ if (columnType.TypeInfo) {
+ *c.MutableTypeInfo() = *columnType.TypeInfo;
+ }
}
auto& txRange = *tx.MutableRange();
diff --git a/ydb/core/tx/tx_proxy/resolvereq.cpp b/ydb/core/tx/tx_proxy/resolvereq.cpp
index d01f795e495..6ad8cb64448 100644
--- a/ydb/core/tx/tx_proxy/resolvereq.cpp
+++ b/ydb/core/tx/tx_proxy/resolvereq.cpp
@@ -19,7 +19,7 @@ namespace {
bool ParseRangeKey(
const NKikimrMiniKQL::TParams& proto,
- TConstArrayRef<NScheme::TTypeId> keyTypes,
+ TConstArrayRef<NScheme::TTypeInfo> keyTypes,
TSerializedCellVec& buf,
EParseRangeKeyExp exp,
TVector<TString>& unresolvedKeys)
@@ -182,7 +182,7 @@ namespace {
table.TableId = entry.TableId;
table.IsColumnTable = (entry.Kind == NSchemeCache::TSchemeCacheNavigate::KindColumnTable);
- TVector<NScheme::TTypeId> keyColumnTypes(entry.Columns.size());
+ TVector<NScheme::TTypeInfo> keyColumnTypes(entry.Columns.size());
TVector<TKeyDesc::TColumnOp> columns(entry.Columns.size());
size_t keySize = 0;
size_t no = 0;
@@ -202,7 +202,7 @@ namespace {
}
// Parse range.
- TConstArrayRef<NScheme::TTypeId> keyTypes(keyColumnTypes.data(), keySize);
+ TConstArrayRef<NScheme::TTypeInfo> keyTypes(keyColumnTypes.data(), keySize);
const bool fromInclusive = table.KeyRange.GetFromInclusive();
const bool toInclusive = table.KeyRange.GetToInclusive();
diff --git a/ydb/core/tx/tx_proxy/upload_rows_common_impl.h b/ydb/core/tx/tx_proxy/upload_rows_common_impl.h
index 9fa28104477..83c99145215 100644
--- a/ydb/core/tx/tx_proxy/upload_rows_common_impl.h
+++ b/ydb/core/tx/tx_proxy/upload_rows_common_impl.h
@@ -12,6 +12,7 @@
#include <ydb/core/base/kikimr_issue.h>
#include <ydb/core/base/path.h>
#include <ydb/core/scheme/scheme_tablecell.h>
+#include <ydb/core/scheme/scheme_type_info.h>
#include <ydb/core/tx/datashard/datashard.h>
#include <ydb/core/tx/scheme_cache/scheme_cache.h>
@@ -114,8 +115,8 @@ private:
std::shared_ptr<NSchemeCache::TSchemeCacheNavigate> ResolveNamesResult;
TSerializedCellVec MinKey;
TSerializedCellVec MaxKey;
- TVector<NScheme::TTypeId> KeyColumnTypes;
- TVector<NScheme::TTypeId> ValueColumnTypes;
+ TVector<NScheme::TTypeInfo> KeyColumnTypes;
+ TVector<NScheme::TTypeInfo> ValueColumnTypes;
NSchemeCache::TSchemeCacheNavigate::EKind TableKind = NSchemeCache::TSchemeCacheNavigate::KindUnknown;
THashSet<TTabletId> ShardRepliesLeft;
Ydb::StatusIds::StatusCode Status;
@@ -136,7 +137,7 @@ protected:
ui32 ColId;
TString ColName;
ui32 PositionInStruct;
- NScheme::TTypeId Type;
+ NScheme::TTypeInfo Type;
bool NotNull = false;
};
TVector<TString> KeyColumnNames;
@@ -145,10 +146,10 @@ protected:
TVector<TFieldDescription> ValueColumnPositions;
// Additional schema info (for OLAP dst or source format)
- TVector<std::pair<TString, NScheme::TTypeId>> SrcColumns; // source columns in CSV could have any order
- TVector<std::pair<TString, NScheme::TTypeId>> YdbSchema;
+ TVector<std::pair<TString, NScheme::TTypeInfo>> SrcColumns; // source columns in CSV could have any order
+ TVector<std::pair<TString, NScheme::TTypeInfo>> YdbSchema;
THashMap<ui32, size_t> Id2Position; // columnId -> its position in YdbSchema
- THashMap<TString, NScheme::TTypeId> ColumnsToConvert;
+ THashMap<TString, NScheme::TTypeInfo> ColumnsToConvert;
bool WriteToTableShadow = false;
bool AllowWriteToPrivateTable = false;
@@ -271,7 +272,7 @@ private:
}
}
- static bool SameDstType(NScheme::TTypeId type1, NScheme::TTypeId type2, bool allowConvert) {
+ static bool SameDstType(NScheme::TTypeInfo type1, NScheme::TTypeInfo type2, bool allowConvert) {
bool res = (type1 == type2);
if (!res && allowConvert) {
res = NArrow::GetArrowType(type1)->id() == NArrow::GetArrowType(type2)->id();
@@ -333,7 +334,9 @@ private:
} else if (reqColumns.empty()) {
for (auto& [name, type] : SrcColumns) {
Ydb::Type ydbType;
- ydbType.set_type_id((Ydb::Type::PrimitiveTypeId)type);
+ // TODO: support pg types
+ Y_VERIFY(type.GetTypeId() != NScheme::NTypeIds::Pg);
+ ydbType.set_type_id((Ydb::Type::PrimitiveTypeId)type.GetTypeId());
reqColumns.emplace_back(name, std::move(ydbType));
}
}
@@ -351,7 +354,7 @@ private:
const auto& typeInProto = reqColumns[pos].second;
if (typeInProto.type_id()) {
- NScheme::TTypeId typeInRequest = typeInProto.type_id();
+ auto typeInRequest = NScheme::TTypeInfo(typeInProto.type_id());
bool ok = SameDstType(typeInRequest, ci.PType, GetSourceType() != EUploadSource::ProtoValues);
if (!ok) {
errorMessage = Sprintf("Type mismatch for column %s: expected %s, got %s",
@@ -359,7 +362,7 @@ private:
NScheme::TypeName(typeInRequest));
return false;
}
- } else if (typeInProto.has_decimal_type() && ci.PType == NScheme::NTypeIds::Decimal) {
+ } else if (typeInProto.has_decimal_type() && ci.PType.GetTypeId() == NScheme::NTypeIds::Decimal) {
int precision = typeInProto.decimal_type().precision();
int scale = typeInProto.decimal_type().scale();
if (precision != NScheme::DECIMAL_PRECISION || scale != NScheme::DECIMAL_SCALE) {
@@ -370,8 +373,24 @@ private:
return false;
}
+ } else if (typeInProto.has_pg_type()) {
+ auto pgTypeId = typeInProto.pg_type().oid();
+ auto* typeDesc = NPg::TypeDescFromPgTypeId(pgTypeId);
+ if (!typeDesc) {
+ errorMessage = Sprintf("Unknown pg type for column %s: %u",
+ name.c_str(), pgTypeId);
+ return false;
+ }
+ auto typeInRequest = NScheme::TTypeInfo(NScheme::NTypeIds::Pg, typeDesc);
+ bool ok = SameDstType(typeInRequest, ci.PType, false);
+ if (!ok) {
+ errorMessage = Sprintf("Type mismatch for column %s: expected %s, got %s",
+ name.c_str(), NScheme::TypeName(ci.PType),
+ NScheme::TypeName(typeInRequest));
+ return false;
+ }
} else {
- errorMessage = Sprintf("Unexected type for column %s: expected %s",
+ errorMessage = Sprintf("Unexpected type for column %s: expected %s",
name.c_str(), NScheme::TypeName(ci.PType));
return false;
}
@@ -381,13 +400,12 @@ private:
notNullColumnsLeft.erase(ci.Name);
}
- NScheme::TTypeId typeId = (NScheme::TTypeId)ci.PType;
if (ci.KeyOrder != -1) {
- KeyColumnPositions[ci.KeyOrder] = TFieldDescription{ci.Id, ci.Name, (ui32)pos, typeId, notNull};
+ KeyColumnPositions[ci.KeyOrder] = TFieldDescription{ci.Id, ci.Name, (ui32)pos, ci.PType, notNull};
keyColumnsLeft.erase(ci.Name);
KeyColumnNames[ci.KeyOrder] = ci.Name;
} else {
- ValueColumnPositions.emplace_back(TFieldDescription{ci.Id, ci.Name, (ui32)pos, typeId, notNull});
+ ValueColumnPositions.emplace_back(TFieldDescription{ci.Id, ci.Name, (ui32)pos, ci.PType, notNull});
ValueColumnNames.emplace_back(ci.Name);
ValueColumnTypes.emplace_back(ci.PType);
}
diff --git a/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.darwin.txt b/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.darwin.txt
index 0812000707e..353f60ea638 100644
--- a/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.darwin.txt
+++ b/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-tx_proxy-ut_base_tenant PUBLIC
library-cpp-getopt
library-cpp-svnversion
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
)
diff --git a/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.linux.txt b/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.linux.txt
index 0e44e65e5de..5a882b33700 100644
--- a/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.linux.txt
+++ b/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-tx_proxy-ut_base_tenant PUBLIC
library-cpp-getopt
library-cpp-svnversion
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
)
diff --git a/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.darwin.txt b/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.darwin.txt
index 2daa4feed9d..1a76230cb80 100644
--- a/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.darwin.txt
+++ b/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-tx_proxy-ut_encrypted_storage PUBLIC
library-cpp-getopt
library-cpp-svnversion
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
)
diff --git a/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.linux.txt b/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.linux.txt
index e05854e5088..b565aea5fa4 100644
--- a/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.linux.txt
+++ b/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-tx_proxy-ut_encrypted_storage PUBLIC
library-cpp-getopt
library-cpp-svnversion
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
)
diff --git a/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.darwin.txt b/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.darwin.txt
index 8267e24b875..55adb49d8ff 100644
--- a/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.darwin.txt
+++ b/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-core-tx-tx_proxy-ut_ext_tenant PUBLIC
library-cpp-getopt
library-cpp-svnversion
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
)
diff --git a/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.linux.txt b/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.linux.txt
index c56589fbd09..551794983f8 100644
--- a/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.linux.txt
+++ b/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-tx_proxy-ut_ext_tenant PUBLIC
library-cpp-getopt
library-cpp-svnversion
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
)
diff --git a/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.darwin.txt b/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.darwin.txt
index 64ca795a624..413682b3073 100644
--- a/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.darwin.txt
+++ b/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-tx_proxy-ut_storage_tenant PUBLIC
library-cpp-svnversion
cpp-testing-unittest
ydb-core-blobstorage
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
)
diff --git a/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.linux.txt b/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.linux.txt
index f02b120c779..fef0f8a620b 100644
--- a/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.linux.txt
+++ b/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-tx-tx_proxy-ut_storage_tenant PUBLIC
library-cpp-svnversion
cpp-testing-unittest
ydb-core-blobstorage
- ydb-core-testlib
+ core-testlib-default
ydb-core-tx
udf-service-exception_policy
)
diff --git a/ydb/core/viewer/ut/CMakeLists.darwin.txt b/ydb/core/viewer/ut/CMakeLists.darwin.txt
index b7c4189ce10..d5265c57428 100644
--- a/ydb/core/viewer/ut/CMakeLists.darwin.txt
+++ b/ydb/core/viewer/ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-viewer-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-core-viewer
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-viewer-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/viewer/ut/CMakeLists.linux.txt b/ydb/core/viewer/ut/CMakeLists.linux.txt
index 6ef556bbe63..ce2706d4687 100644
--- a/ydb/core/viewer/ut/CMakeLists.linux.txt
+++ b/ydb/core/viewer/ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-viewer-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-core-viewer
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-viewer-ut PRIVATE
-ldl
diff --git a/ydb/core/wrappers/ut/CMakeLists.darwin.txt b/ydb/core/wrappers/ut/CMakeLists.darwin.txt
index 0a645d66c12..0272b23348a 100644
--- a/ydb/core/wrappers/ut/CMakeLists.darwin.txt
+++ b/ydb/core/wrappers/ut/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-wrappers-ut PUBLIC
cpp-digest-md5
cpp-testing-unittest
ydb-core-protos
- core-testlib-basics
+ testlib-basics-default
core-wrappers-ut_helpers
)
target_link_options(ydb-core-wrappers-ut PRIVATE
diff --git a/ydb/core/wrappers/ut/CMakeLists.linux.txt b/ydb/core/wrappers/ut/CMakeLists.linux.txt
index f6c7a13d97f..58a766a89d5 100644
--- a/ydb/core/wrappers/ut/CMakeLists.linux.txt
+++ b/ydb/core/wrappers/ut/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-core-wrappers-ut PUBLIC
cpp-digest-md5
cpp-testing-unittest
ydb-core-protos
- core-testlib-basics
+ testlib-basics-default
core-wrappers-ut_helpers
)
target_link_options(ydb-core-wrappers-ut PRIVATE
diff --git a/ydb/core/ydb_convert/table_description.cpp b/ydb/core/ydb_convert/table_description.cpp
index 16ce5355732..dd2e68ef6eb 100644
--- a/ydb/core/ydb_convert/table_description.cpp
+++ b/ydb/core/ydb_convert/table_description.cpp
@@ -123,8 +123,8 @@ void FillColumnDescription(Ydb::Table::CreateTableRequest& out,
FillColumnDescriptionImpl(out, splitKeyType, in);
}
-bool ExtractColumnTypeId(ui32& outTypeId, const Ydb::Type& inType, Ydb::StatusIds::StatusCode& status, TString& error) {
- ui32 typeId;
+bool ExtractColumnTypeInfo(NScheme::TTypeInfo& outTypeInfo, const Ydb::Type& inType, Ydb::StatusIds::StatusCode& status, TString& error) {
+ ui32 typeId = 0;
auto itemType = inType.has_optional_type() ? inType.optional_type().item() : inType;
switch (itemType.type_case()) {
case Ydb::Type::kTypeId:
@@ -150,6 +150,17 @@ bool ExtractColumnTypeId(ui32& outTypeId, const Ydb::Type& inType, Ydb::StatusId
typeId = NYql::NProto::TypeIds::Decimal;
break;
}
+ case Ydb::Type::kPgType: {
+ ui32 pgTypeId = itemType.pg_type().oid();
+ auto* desc = NPg::TypeDescFromPgTypeId(pgTypeId);
+ if (!desc) {
+ status = Ydb::StatusIds::BAD_REQUEST;
+ error = TStringBuilder() << "Invalid PG typeId: " << pgTypeId;
+ return false;
+ }
+ outTypeInfo = NScheme::TTypeInfo(NScheme::NTypeIds::Pg, desc);
+ return true;
+ }
default: {
status = Ydb::StatusIds::BAD_REQUEST;
@@ -164,7 +175,7 @@ bool ExtractColumnTypeId(ui32& outTypeId, const Ydb::Type& inType, Ydb::StatusId
return false;
}
- outTypeId = typeId;
+ outTypeInfo = NScheme::TTypeInfo(typeId);
return true;
}
@@ -184,11 +195,11 @@ bool FillColumnDescription(NKikimrSchemeOp::TTableDescription& out,
cd->SetNotNull(true);
}
- ui32 typeId;
- if (!ExtractColumnTypeId(typeId, column.type(), status, error)) {
+ NScheme::TTypeInfo typeInfo;
+ if (!ExtractColumnTypeInfo(typeInfo, column.type(), status, error)) {
return false;
}
- cd->SetType(NYql::NProto::TypeIds_Name(NYql::NProto::TypeIds(typeId)));
+ cd->SetType(NScheme::TypeName(typeInfo));
if (!column.family().empty()) {
cd->SetFamilyName(column.family());
diff --git a/ydb/core/ydb_convert/table_description.h b/ydb/core/ydb_convert/table_description.h
index 9dc023288aa..198171f57c5 100644
--- a/ydb/core/ydb_convert/table_description.h
+++ b/ydb/core/ydb_convert/table_description.h
@@ -4,6 +4,7 @@
#include <ydb/library/mkql_proto/protos/minikql.pb.h>
#include <ydb/core/protos/flat_tx_scheme.pb.h>
+#include <ydb/core/scheme/scheme_type_info.h>
#include <ydb/public/api/protos/ydb_table.pb.h>
namespace NKikimr {
@@ -16,7 +17,7 @@ void FillColumnDescription(Ydb::Table::CreateTableRequest& out,
// in
bool FillColumnDescription(NKikimrSchemeOp::TTableDescription& out,
const google::protobuf::RepeatedPtrField<Ydb::Table::ColumnMeta>& in, Ydb::StatusIds::StatusCode& status, TString& error);
-bool ExtractColumnTypeId(ui32& outTypeId, const Ydb::Type& inType, Ydb::StatusIds::StatusCode& status, TString& error);
+bool ExtractColumnTypeInfo(NScheme::TTypeInfo& outTypeInfo, const Ydb::Type& inType, Ydb::StatusIds::StatusCode& status, TString& error);
// out
void FillTableBoundary(Ydb::Table::DescribeTableResult& out,
diff --git a/ydb/core/ydb_convert/ut/CMakeLists.darwin.txt b/ydb/core/ydb_convert/ut/CMakeLists.darwin.txt
index 6302119a471..66fbb3e2ca7 100644
--- a/ydb/core/ydb_convert/ut/CMakeLists.darwin.txt
+++ b/ydb/core/ydb_convert/ut/CMakeLists.darwin.txt
@@ -18,7 +18,7 @@ target_link_libraries(ydb-core-ydb_convert-ut PUBLIC
cpp-testing-unittest_main
ydb-core-ydb_convert
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-ydb_convert-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/ydb_convert/ut/CMakeLists.linux.txt b/ydb/core/ydb_convert/ut/CMakeLists.linux.txt
index b617a98a7ae..c3930caf1fd 100644
--- a/ydb/core/ydb_convert/ut/CMakeLists.linux.txt
+++ b/ydb/core/ydb_convert/ut/CMakeLists.linux.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-ydb_convert-ut PUBLIC
cpp-testing-unittest_main
ydb-core-ydb_convert
cpp-testing-unittest
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-core-ydb_convert-ut PRIVATE
-ldl
diff --git a/ydb/core/ymq/actor/ut/CMakeLists.darwin.txt b/ydb/core/ymq/actor/ut/CMakeLists.darwin.txt
index 2875fa1e7e2..a761bd6907f 100644
--- a/ydb/core/ymq/actor/ut/CMakeLists.darwin.txt
+++ b/ydb/core/ymq/actor/ut/CMakeLists.darwin.txt
@@ -18,7 +18,7 @@ target_link_libraries(ydb-core-ymq-actor-ut PUBLIC
cpp-testing-unittest_main
contrib-libs-yaml-cpp
core-mind-address_classification
- ydb-core-testlib
+ core-testlib-default
core-ymq-actor
core-ymq-base
core-ymq-http
diff --git a/ydb/core/ymq/actor/ut/CMakeLists.linux.txt b/ydb/core/ymq/actor/ut/CMakeLists.linux.txt
index ecbcfdfd97a..f95d6ba95ea 100644
--- a/ydb/core/ymq/actor/ut/CMakeLists.linux.txt
+++ b/ydb/core/ymq/actor/ut/CMakeLists.linux.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-core-ymq-actor-ut PUBLIC
cpp-testing-unittest_main
contrib-libs-yaml-cpp
core-mind-address_classification
- ydb-core-testlib
+ core-testlib-default
core-ymq-actor
core-ymq-base
core-ymq-http
diff --git a/ydb/core/ymq/actor/yc_search_ut/CMakeLists.darwin.txt b/ydb/core/ymq/actor/yc_search_ut/CMakeLists.darwin.txt
index 8097c63bd5b..22b87a34c89 100644
--- a/ydb/core/ymq/actor/yc_search_ut/CMakeLists.darwin.txt
+++ b/ydb/core/ymq/actor/yc_search_ut/CMakeLists.darwin.txt
@@ -16,7 +16,7 @@ target_link_libraries(ydb-core-ymq-actor-yc_search_ut PUBLIC
yutil
library-cpp-cpuid_check
cpp-testing-unittest_main
- ydb-core-testlib
+ core-testlib-default
core-ymq-actor
)
target_link_options(ydb-core-ymq-actor-yc_search_ut PRIVATE
diff --git a/ydb/core/ymq/actor/yc_search_ut/CMakeLists.linux.txt b/ydb/core/ymq/actor/yc_search_ut/CMakeLists.linux.txt
index d707140eaa8..4f2c1b631a7 100644
--- a/ydb/core/ymq/actor/yc_search_ut/CMakeLists.linux.txt
+++ b/ydb/core/ymq/actor/yc_search_ut/CMakeLists.linux.txt
@@ -18,7 +18,7 @@ target_link_libraries(ydb-core-ymq-actor-yc_search_ut PUBLIC
libs-tcmalloc-no_percpu_cache
library-cpp-cpuid_check
cpp-testing-unittest_main
- ydb-core-testlib
+ core-testlib-default
core-ymq-actor
)
target_link_options(ydb-core-ymq-actor-yc_search_ut PRIVATE
diff --git a/ydb/core/yq/libs/checkpointing/ut/CMakeLists.darwin.txt b/ydb/core/yq/libs/checkpointing/ut/CMakeLists.darwin.txt
index f809e1b0f76..2531d978771 100644
--- a/ydb/core/yq/libs/checkpointing/ut/CMakeLists.darwin.txt
+++ b/ydb/core/yq/libs/checkpointing/ut/CMakeLists.darwin.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-yq-libs-checkpointing-ut PUBLIC
yq-libs-checkpointing
cpp-testing-unittest
core-testlib-actors
- core-testlib-basics
+ testlib-basics-default
)
target_link_options(ydb-core-yq-libs-checkpointing-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/yq/libs/checkpointing/ut/CMakeLists.linux.txt b/ydb/core/yq/libs/checkpointing/ut/CMakeLists.linux.txt
index f41a4b1ebfd..48aaf61320b 100644
--- a/ydb/core/yq/libs/checkpointing/ut/CMakeLists.linux.txt
+++ b/ydb/core/yq/libs/checkpointing/ut/CMakeLists.linux.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-yq-libs-checkpointing-ut PUBLIC
yq-libs-checkpointing
cpp-testing-unittest
core-testlib-actors
- core-testlib-basics
+ testlib-basics-default
)
target_link_options(ydb-core-yq-libs-checkpointing-ut PRIVATE
-ldl
diff --git a/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.darwin.txt b/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.darwin.txt
index 410d65c8611..8ab7757626a 100644
--- a/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.darwin.txt
+++ b/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.darwin.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-core-yq-libs-control_plane_proxy-ut PUBLIC
yq-libs-control_plane_proxy
cpp-testing-unittest
ydb-core-base
- ydb-core-testlib
+ core-testlib-default
libs-actors-logging
yq-libs-control_plane_storage
yq-libs-test_connection
diff --git a/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.linux.txt b/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.linux.txt
index 3a0132a9260..c0d7a10def3 100644
--- a/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.linux.txt
+++ b/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.linux.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-core-yq-libs-control_plane_proxy-ut PUBLIC
yq-libs-control_plane_proxy
cpp-testing-unittest
ydb-core-base
- ydb-core-testlib
+ core-testlib-default
libs-actors-logging
yq-libs-control_plane_storage
yq-libs-test_connection
diff --git a/ydb/core/yql_testlib/CMakeLists.txt b/ydb/core/yql_testlib/CMakeLists.txt
index 86d11c2156b..4a617c586e0 100644
--- a/ydb/core/yql_testlib/CMakeLists.txt
+++ b/ydb/core/yql_testlib/CMakeLists.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-core-yql_testlib PUBLIC
ydb-core-keyvalue
ydb-core-mind
ydb-core-protos
- ydb-core-testlib
+ core-testlib-default
core-testlib-actors
core-testlib-basics
yql-core-facade
diff --git a/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp b/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp
index 3ca55e206cf..9376ec2ac70 100644
--- a/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp
+++ b/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp
@@ -2903,3 +2903,264 @@ void get_type_io_data(Oid typid,
}
} // extern "C"
+
+namespace NKikimr::NPg {
+
+class TPgTypeDescriptor
+ : public NYql::NPg::TTypeDesc
+{
+public:
+ TPgTypeDescriptor()
+ {}
+
+ explicit TPgTypeDescriptor(const NYql::NPg::TTypeDesc& desc)
+ : NYql::NPg::TTypeDesc(desc)
+ {
+ // TODO: btarraycmp and hash_array for array types
+ if (CompareProcId) {
+ InitFunc(CompareProcId, &CompareProcInfo, 2, 2);
+ }
+ if (HashProcId) {
+ InitFunc(HashProcId, &HashProcInfo, 1, 1);
+ }
+ if (ReceiveFuncId) {
+ InitFunc(ReceiveFuncId, &ReceiveFuncInfo, 1, 3);
+ }
+ if (SendFuncId) {
+ InitFunc(SendFuncId, &SendFuncInfo, 1, 1);
+ }
+ }
+
+ int Compare(const char* dataL, size_t sizeL, const char* dataR, size_t sizeR) const {
+ NMiniKQL::TScopedAlloc alloc;
+ NMiniKQL::TPAllocScope scope;
+ PG_TRY();
+ {
+ Datum datumL, datumR;
+ if (PassByValue) {
+ datumL = ScalarDatumFromData(dataL, sizeL);
+ datumR = ScalarDatumFromData(dataR, sizeR);
+ } else {
+ datumL = Unpack(dataL, sizeL);
+ datumR = Unpack(dataR, sizeR);
+ }
+
+ LOCAL_FCINFO(callInfo, 2);
+ Zero(*callInfo);
+ callInfo->flinfo = (FmgrInfo*)&CompareProcInfo;
+ callInfo->nargs = 2;
+ callInfo->fncollation = DEFAULT_COLLATION_OID;
+ callInfo->isnull = false;
+ callInfo->args[0] = { datumL, false };
+ callInfo->args[1] = { datumR, false };
+
+ auto result = CompareProcInfo.fn_addr(callInfo);
+ Y_ENSURE(!callInfo->isnull);
+ if (!PassByValue) {
+ pfree((void*)datumL);
+ pfree((void*)datumR);
+ }
+ return DatumGetInt32(result);
+ }
+ PG_CATCH();
+ {
+ // TODO
+ }
+ PG_END_TRY();
+ return 0;
+ }
+
+ ui64 Hash(const char* data, size_t size) const {
+ NMiniKQL::TScopedAlloc alloc;
+ NMiniKQL::TPAllocScope scope;
+ PG_TRY();
+ {
+ Datum datum;
+ if (PassByValue) {
+ datum = ScalarDatumFromData(data, size);
+ } else {
+ datum = Unpack(data, size);
+ }
+
+ LOCAL_FCINFO(callInfo, 1);
+ Zero(*callInfo);
+ callInfo->flinfo = (FmgrInfo*)&HashProcInfo;
+ callInfo->nargs = 1;
+ callInfo->fncollation = DEFAULT_COLLATION_OID;
+ callInfo->isnull = false;
+ callInfo->args[0] = { datum, false };
+
+ auto result = HashProcInfo.fn_addr(callInfo);
+ Y_ENSURE(!callInfo->isnull);
+ if (!PassByValue) {
+ pfree((void*)datum);
+ }
+ return DatumGetUInt32(result);
+ }
+ PG_CATCH();
+ {
+ // TODO
+ }
+ PG_END_TRY();
+ return 0;
+ }
+
+private:
+ inline Datum ScalarDatumFromData(const char* data, size_t size) const {
+ switch (TypeId) {
+ case BOOLOID:
+ Y_ENSURE(size == sizeof(bool));
+ return BoolGetDatum(ReadUnaligned<bool>(data));
+ case CHAROID:
+ Y_ENSURE(size == sizeof(char));
+ return CharGetDatum(ReadUnaligned<char>(data));
+ case INT2OID:
+ Y_ENSURE(size == sizeof(i16));
+ return Int16GetDatum(ReadUnaligned<i16>(data));
+ case INT4OID:
+ Y_ENSURE(size == sizeof(i32));
+ return Int32GetDatum(ReadUnaligned<i32>(data));
+ case INT8OID:
+ Y_ENSURE(size == sizeof(i64));
+ return Int64GetDatum(ReadUnaligned<i64>(data));
+ case FLOAT4OID:
+ Y_ENSURE(size == sizeof(float));
+ return Float4GetDatum(ReadUnaligned<float>(data));
+ case FLOAT8OID:
+ Y_ENSURE(size == sizeof(double));
+ return Float8GetDatum(ReadUnaligned<double>(data));
+ default: {
+ Y_ENSURE(size <= sizeof(ui64));
+ ui64 val = 0;
+ std::memcpy(&val, data, size);
+ return (Datum)val;
+ }
+ }
+ }
+
+ Datum Unpack(const char* data, size_t size) const {
+ StringInfoData stringInfo;
+ stringInfo.data = (char*)data;
+ stringInfo.len = size;
+ stringInfo.maxlen = size;
+ stringInfo.cursor = 0;
+
+ LOCAL_FCINFO(callInfo, 3);
+ Zero(*callInfo);
+ callInfo->flinfo = (FmgrInfo*)&ReceiveFuncInfo;
+ callInfo->nargs = 3;
+ callInfo->fncollation = DEFAULT_COLLATION_OID;
+ callInfo->isnull = false;
+ callInfo->args[0] = { (Datum)&stringInfo, false };
+ callInfo->args[1] = { ObjectIdGetDatum(NKikimr::NMiniKQL::MakeTypeIOParam(*this)), false };
+ callInfo->args[2] = { Int32GetDatum(-1), false };
+
+ auto result = ReceiveFuncInfo.fn_addr(callInfo);
+ Y_ENSURE(!callInfo->isnull);
+ return result;
+ }
+
+ static void InitFunc(ui32 funcId, FmgrInfo* info, ui32 argCountMin, ui32 argCountMax) {
+ Zero(*info);
+ Y_ENSURE(funcId);
+ fmgr_info(funcId, info);
+ Y_ENSURE(info->fn_addr);
+ Y_ENSURE(info->fn_nargs >= argCountMin && info->fn_nargs <= argCountMax);
+ }
+
+private:
+ FmgrInfo CompareProcInfo;
+ FmgrInfo HashProcInfo;
+ FmgrInfo ReceiveFuncInfo;
+ FmgrInfo SendFuncInfo;
+};
+
+class TPgTypeDescriptors {
+public:
+ static const TPgTypeDescriptors& Instance() {
+ return *Singleton<TPgTypeDescriptors>();
+ }
+
+ TPgTypeDescriptors() {
+ auto initType = [this] (ui32 pgTypeId, const NYql::NPg::TTypeDesc& type) {
+ this->InitType(pgTypeId, type);
+ };
+ NYql::NPg::EnumTypes(initType);
+ }
+
+ const TPgTypeDescriptor* Find(ui32 pgTypeId) const {
+ return PgTypeDescriptors.FindPtr(pgTypeId);
+ }
+
+ const TPgTypeDescriptor* Find(const TStringBuf name) const {
+ auto* id = ByName.FindPtr(name);
+ if (id) {
+ return Find(*id);
+ }
+ return {};
+ }
+
+private:
+ void InitType(ui32 pgTypeId, const NYql::NPg::TTypeDesc& type) {
+ if (type.TypeId == type.ArrayTypeId) { // TODO: support arrays
+ return;
+ }
+ PgTypeDescriptors[pgTypeId] = TPgTypeDescriptor(type);
+ ByName[type.Name] = pgTypeId;
+ }
+
+private:
+ THashMap<ui32, TPgTypeDescriptor> PgTypeDescriptors;
+ THashMap<TString, ui32> ByName;
+};
+
+ui32 PgTypeIdFromTypeDesc(void* typeDesc) {
+ if (!typeDesc) {
+ return 0;
+ }
+ return static_cast<TPgTypeDescriptor*>(typeDesc)->TypeId;
+}
+
+void* TypeDescFromPgTypeId(ui32 pgTypeId) {
+ if (!pgTypeId) {
+ return {};
+ }
+ return (void*)TPgTypeDescriptors::Instance().Find(pgTypeId);
+}
+
+const char* PgTypeNameFromTypeDesc(void* typeDesc) {
+ if (!typeDesc) {
+ return "";
+ }
+ return static_cast<TPgTypeDescriptor*>(typeDesc)->Name.data();
+}
+
+void* TypeDescFromPgTypeName(const TStringBuf name) {
+ return (void*)TPgTypeDescriptors::Instance().Find(name);
+}
+
+bool TypeDescIsComparable(void* typeDesc) {
+ if (!typeDesc) {
+ return false;
+ }
+ return static_cast<TPgTypeDescriptor*>(typeDesc)->CompareProcId != 0;
+}
+
+ui32 TypeDescGetTypeLen(void* typeDesc) {
+ if (!typeDesc) {
+ return 0;
+ }
+ i32 res = static_cast<TPgTypeDescriptor*>(typeDesc)->TypeLen;
+ return res < 0 ? 0 : (ui32)res;
+}
+
+int PgNativeBinaryCompare(const char* dataL, size_t sizeL, const char* dataR, size_t sizeR, void* typeDesc) {
+ return static_cast<TPgTypeDescriptor*>(typeDesc)->Compare(dataL, sizeL, dataR, sizeR);
+}
+
+ui64 PgNativeBinaryHash(const char* data, size_t size, void* typeDesc) {
+ return static_cast<TPgTypeDescriptor*>(typeDesc)->Hash(data, size);
+}
+
+} // namespace NKikimr::NPg
+
diff --git a/ydb/library/yql/providers/ydb/actors/yql_ydb_read_actor.cpp b/ydb/library/yql/providers/ydb/actors/yql_ydb_read_actor.cpp
index 172483b1189..b10d6b4c1fd 100644
--- a/ydb/library/yql/providers/ydb/actors/yql_ydb_read_actor.cpp
+++ b/ydb/library/yql/providers/ydb/actors/yql_ydb_read_actor.cpp
@@ -54,7 +54,7 @@ bool IsRetriable(::NYdb::EStatus status) {
}
}
-bool RangeFinished(const TString& lastReadKey, const TString& endKey, const TVector<NKikimr::NScheme::TTypeId>& keyColumnTypes) {
+bool RangeFinished(const TString& lastReadKey, const TString& endKey, const TVector<NKikimr::NScheme::TTypeInfo>& keyColumnTypes) {
if (lastReadKey.empty())
return true;
@@ -78,7 +78,7 @@ public:
const TString& path,
::NYdb::TDriver driver,
const NActors::TActorId& computeActorId,
- const TVector<TString>& columns, const TVector<NKikimr::NScheme::TTypeId>& keyColumnTypes,
+ const TVector<TString>& columns, const TVector<NKikimr::NScheme::TTypeInfo>& keyColumnTypes,
ui64 maxRowsInRequest, ui64 maxBytesInRequest, const TString& keyFrom, const TString& keyTo
)
: InputIndex(inputIndex)
@@ -208,7 +208,7 @@ private:
const TString Path;
const TVector<TString> Columns;
- const TVector<NKikimr::NScheme::TTypeId> KeyColumnTypes;
+ const TVector<NKikimr::NScheme::TTypeInfo> KeyColumnTypes;
const ui64 MaxRows;
const ui64 MaxBytes;
const TString EndKey;
@@ -253,10 +253,11 @@ std::pair<NYql::NDq::IDqComputeActorAsyncInput*, IActor*> CreateYdbReadActor(
for (auto i = 0; i < params.GetColumns().size(); ++i)
columns.emplace_back(params.GetColumns().Get(i));
- TVector<NKikimr::NScheme::TTypeId> keyColumnTypes;
+ TVector<NKikimr::NScheme::TTypeInfo> keyColumnTypes;
keyColumnTypes.reserve(params.GetKeyColumnTypes().size());
for (auto i = 0; i < params.GetKeyColumnTypes().size(); ++i)
- keyColumnTypes.emplace_back(params.GetKeyColumnTypes().Get(i));
+ // TODO support pg types
+ keyColumnTypes.emplace_back(NKikimr::NScheme::TTypeInfo(params.GetKeyColumnTypes().Get(i), nullptr));
ui64 maxRowsInRequest = 0ULL;
ui64 maxBytesInRequest = 0ULL;
diff --git a/ydb/library/yql/providers/ydb/comp_nodes/yql_kik_scan.cpp b/ydb/library/yql/providers/ydb/comp_nodes/yql_kik_scan.cpp
index f8fd6184b31..1e69f3346fd 100644
--- a/ydb/library/yql/providers/ydb/comp_nodes/yql_kik_scan.cpp
+++ b/ydb/library/yql/providers/ydb/comp_nodes/yql_kik_scan.cpp
@@ -32,7 +32,7 @@ bool IsRetriable(NYdb::EStatus status) {
}
}
-bool RangeFinished(const TString& lastReadKey, const TString& endKey, const TVector<NKikimr::NScheme::TTypeId>& keyColumnTypes) {
+bool RangeFinished(const TString& lastReadKey, const TString& endKey, const TVector<NKikimr::NScheme::TTypeInfo>& keyColumnTypes) {
if (lastReadKey.empty())
return true;
@@ -72,7 +72,7 @@ using TBaseComputation = TMutableComputationNode<TKikScan<Async>>;
using TPtr = std::shared_ptr<TAsyncState>;
using TWeakPtr = std::weak_ptr<TAsyncState>;
- static TPtr Make(const NYdb::TDriver& driver, const TString& database, const TString& endpoint, const TString& token, const TString& path, bool secure, const TVector<TString>& columns, const TVector<NKikimr::NScheme::TTypeId>& keyColumnTypes,
+ static TPtr Make(const NYdb::TDriver& driver, const TString& database, const TString& endpoint, const TString& token, const TString& path, bool secure, const TVector<TString>& columns, const TVector<NKikimr::NScheme::TTypeInfo>& keyColumnTypes,
ui64 maxRowsInRequest, ui64 maxBytesInRequest, const TString& keyFrom, const TString& keyTo, const NYdb::NClickhouseInternal::TScanSettings& settings) {
const auto ptr = std::make_shared<TAsyncState>(driver, database, endpoint, token, path, secure, columns, keyColumnTypes, maxRowsInRequest, maxBytesInRequest, keyFrom, keyTo, settings);
ptr->SendRequest();
@@ -100,7 +100,7 @@ using TBaseComputation = TMutableComputationNode<TKikScan<Async>>;
return NUdf::EFetchStatus::Yield;
}
- TAsyncState(const NYdb::TDriver& driver, const TString& database, const TString& endpoint, const TString& token, const TString& path, bool secure, const TVector<TString>& columns, const TVector<NKikimr::NScheme::TTypeId>& keyColumnTypes,
+ TAsyncState(const NYdb::TDriver& driver, const TString& database, const TString& endpoint, const TString& token, const TString& path, bool secure, const TVector<TString>& columns, const TVector<NKikimr::NScheme::TTypeInfo>& keyColumnTypes,
ui64 maxRowsInRequest, ui64 maxBytesInRequest, const TString& keyFrom, const TString& keyTo, const NYdb::NClickhouseInternal::TScanSettings& settings)
: ActorSystem(NActors::TActivationContext::ActorSystem())
, CurrentActorId(NActors::TActivationContext::AsActorContext().SelfID)
@@ -186,7 +186,7 @@ using TBaseComputation = TMutableComputationNode<TKikScan<Async>>;
const TString Path;
const TVector<TString> Columns;
- const TVector<NKikimr::NScheme::TTypeId> KeyColumnTypes;
+ const TVector<NKikimr::NScheme::TTypeInfo> KeyColumnTypes;
const ui64 MaxRows;
const ui64 MaxBytes;
const TString EndKey;
@@ -208,7 +208,7 @@ using TBaseComputation = TMutableComputationNode<TKikScan<Async>>;
TIssues Issues;
};
public:
- TAsyncStream(TMemoryUsageInfo* memInfo, const NYdb::TDriver& driver, const TString& database, const TString& endpoint, const TString& token, const TString& path, bool secure, const TVector<TString>& columns, const TVector<NKikimr::NScheme::TTypeId>& keyColumnTypes,
+ TAsyncStream(TMemoryUsageInfo* memInfo, const NYdb::TDriver& driver, const TString& database, const TString& endpoint, const TString& token, const TString& path, bool secure, const TVector<TString>& columns, const TVector<NKikimr::NScheme::TTypeInfo>& keyColumnTypes,
ui64 maxRowsInRequest, ui64 maxBytesInRequest, const TString& keyFrom, const TString& keyTo, const NYdb::NClickhouseInternal::TScanSettings& settings)
: TComputationValue<TAsyncStream>(memInfo), State(TAsyncState::Make(driver, database, endpoint, token, path, secure, columns, keyColumnTypes, maxRowsInRequest, maxBytesInRequest, keyFrom, keyTo, settings))
{}
@@ -230,7 +230,7 @@ public:
const std::string_view& snapshot,
bool secure,
TVector<TString>&& columns,
- TVector<NKikimr::NScheme::TTypeId>&& keyColumnTypes,
+ TVector<NKikimr::NScheme::TTypeInfo>&& keyColumnTypes,
const std::string_view& keyFrom,
const std::string_view& keyTo,
IComputationNode* rows
@@ -287,7 +287,7 @@ private:
const TString Snapshot;
const bool Secure;
const TVector<TString> Columns;
- const TVector<NKikimr::NScheme::TTypeId> KeyColumnTypes;
+ const TVector<NKikimr::NScheme::TTypeInfo> KeyColumnTypes;
const TString KeyFrom;
const TString KeyTo;
IComputationNode* const Rows;
@@ -312,7 +312,7 @@ IComputationNode* WrapKikScan(TCallable& callable, const TComputationNodeFactory
}
const auto keysNode = AS_VALUE(TTupleLiteral, callable.GetInput(6));
- TVector<NKikimr::NScheme::TTypeId> keyColumnTypes;
+ TVector<NKikimr::NScheme::TTypeInfo> keyColumnTypes;
keyColumnTypes.reserve(keysNode->GetValuesCount());
for (ui32 i = 0; i < keysNode->GetValuesCount(); ++i) {
keyColumnTypes.emplace_back(AS_VALUE(TDataLiteral, keysNode->GetValue(i))->AsValue().Get<ui16>());
diff --git a/ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp b/ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp
index 9758f72830f..999902d3269 100644
--- a/ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp
+++ b/ydb/library/yql/sql/pg_dummy/pg_sql_dummy.cpp
@@ -258,3 +258,53 @@ NKikimr::NMiniKQL::TComputationNodeFactory GetPgFactory() {
}
} // NYql
+
+namespace NKikimr::NPg {
+
+ui32 PgTypeIdFromTypeDesc(void* typeDesc) {
+ Y_UNUSED(typeDesc);
+ return 0;
+}
+
+void* TypeDescFromPgTypeId(ui32 pgTypeId) {
+ Y_UNUSED(pgTypeId);
+ return {};
+}
+
+const char* PgTypeNameFromTypeDesc(void* typeDesc) {
+ Y_UNUSED(typeDesc);
+ return "";
+}
+
+void* TypeDescFromPgTypeName(const TStringBuf name) {
+ Y_UNUSED(name);
+ return {};
+}
+
+bool TypeDescIsComparable(void* typeDesc) {
+ Y_UNUSED(typeDesc);
+ throw yexception() << "PG types are not supported";
+}
+
+ui32 TypeDescGetTypeLen(void* typeDesc) {
+ Y_UNUSED(typeDesc);
+ throw yexception() << "PG types are not supported";
+}
+
+int PgNativeBinaryCompare(const char* dataL, size_t sizeL, const char* dataR, size_t sizeR, void* typeDesc) {
+ Y_UNUSED(dataL);
+ Y_UNUSED(sizeL);
+ Y_UNUSED(dataR);
+ Y_UNUSED(sizeR);
+ Y_UNUSED(typeDesc);
+ throw yexception() << "PG types are not supported";
+}
+
+ui64 PgNativeBinaryHash(const char* data, size_t size, void* typeDesc) {
+ Y_UNUSED(data);
+ Y_UNUSED(size);
+ Y_UNUSED(typeDesc);
+ throw yexception() << "PG types are not supported";
+}
+
+} // namespace NKikimr::NPg
diff --git a/ydb/library/yql/utils/actors/ut/CMakeLists.darwin.txt b/ydb/library/yql/utils/actors/ut/CMakeLists.darwin.txt
index 64444e0a9fb..0f8ad586038 100644
--- a/ydb/library/yql/utils/actors/ut/CMakeLists.darwin.txt
+++ b/ydb/library/yql/utils/actors/ut/CMakeLists.darwin.txt
@@ -17,7 +17,7 @@ target_link_libraries(ydb-library-yql-utils-actors-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
yql-utils-actors
- core-testlib-basics
+ testlib-basics-default
)
target_link_options(ydb-library-yql-utils-actors-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/library/yql/utils/actors/ut/CMakeLists.linux.txt b/ydb/library/yql/utils/actors/ut/CMakeLists.linux.txt
index efbdcff7e70..699d32cac69 100644
--- a/ydb/library/yql/utils/actors/ut/CMakeLists.linux.txt
+++ b/ydb/library/yql/utils/actors/ut/CMakeLists.linux.txt
@@ -19,7 +19,7 @@ target_link_libraries(ydb-library-yql-utils-actors-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
yql-utils-actors
- core-testlib-basics
+ testlib-basics-default
)
target_link_options(ydb-library-yql-utils-actors-ut PRIVATE
-ldl
diff --git a/ydb/library/yql/utils/pg_types.h b/ydb/library/yql/utils/pg_types.h
new file mode 100644
index 00000000000..a043aca4ec9
--- /dev/null
+++ b/ydb/library/yql/utils/pg_types.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include <util/generic/strbuf.h>
+
+namespace NKikimr::NPg {
+
+ui32 PgTypeIdFromTypeDesc(void* typeDesc);
+void* TypeDescFromPgTypeId(ui32 pgTypeId);
+
+const char* PgTypeNameFromTypeDesc(void* typeDesc);
+void* TypeDescFromPgTypeName(const TStringBuf name);
+
+bool TypeDescIsComparable(void* typeDesc);
+ui32 TypeDescGetTypeLen(void* typeDesc);
+
+int PgNativeBinaryCompare(const char* dataL, size_t sizeL,
+ const char* dataR, size_t sizeR, void* typeDesc);
+
+ui64 PgNativeBinaryHash(const char* data, size_t size, void* typeDesc);
+
+} // namespace NKikimr::NPg
diff --git a/ydb/public/lib/deprecated/kicli/ut/CMakeLists.darwin.txt b/ydb/public/lib/deprecated/kicli/ut/CMakeLists.darwin.txt
index e3e23b74f80..303a38ac602 100644
--- a/ydb/public/lib/deprecated/kicli/ut/CMakeLists.darwin.txt
+++ b/ydb/public/lib/deprecated/kicli/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-public-lib-deprecated-kicli-ut PUBLIC
cpp-testing-unittest_main
lib-deprecated-kicli
ydb-core-client
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-public-lib-deprecated-kicli-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/public/lib/deprecated/kicli/ut/CMakeLists.linux.txt b/ydb/public/lib/deprecated/kicli/ut/CMakeLists.linux.txt
index 359e81eee84..f86ab54c216 100644
--- a/ydb/public/lib/deprecated/kicli/ut/CMakeLists.linux.txt
+++ b/ydb/public/lib/deprecated/kicli/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-public-lib-deprecated-kicli-ut PUBLIC
cpp-testing-unittest_main
lib-deprecated-kicli
ydb-core-client
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-public-lib-deprecated-kicli-ut PRIVATE
-ldl
diff --git a/ydb/public/lib/experimental/ydb_clickhouse_internal.cpp b/ydb/public/lib/experimental/ydb_clickhouse_internal.cpp
index bc47af36236..2566c84ec2a 100644
--- a/ydb/public/lib/experimental/ydb_clickhouse_internal.cpp
+++ b/ydb/public/lib/experimental/ydb_clickhouse_internal.cpp
@@ -126,7 +126,7 @@ TAsyncScanResult TScanClient::Scan(const TString& path, const TVector<TString>&
return Impl_->Scan(path, columns, maxRows, maxBytes, fromKey, fromKeyInclusive, settings);
}
-bool RangeFinished(const TString& lastReadKey, const TString& endKey, const TVector<NKikimr::NScheme::TTypeId>& keyColumnTypes) {
+bool RangeFinished(const TString& lastReadKey, const TString& endKey, const TVector<NKikimr::NScheme::TTypeInfo>& keyColumnTypes) {
if (lastReadKey.empty()) // +inf
return true;
@@ -149,7 +149,7 @@ bool RangeFinished(const TString& lastReadKey, const TString& endKey, const TVec
TScanIterator::TScanIterator(const TDriver& driver, const TString &database, const TString &endpoint, const TString &token, bool ssl, const TString& path,
const TVector<TString>& columns,
- const TVector<NKikimr::NScheme::TTypeId>& keyColumnTypes,
+ const TVector<NKikimr::NScheme::TTypeInfo>& keyColumnTypes,
ui64 maxRowsInRequest, ui64 maxBytesInRequest,
const TString& keyFrom, const TString& keyTo,
const TScanSettings& settings)
@@ -172,7 +172,7 @@ TScanIterator::TScanIterator(const TDriver& driver, const TString &database, con
TScanIterator::TScanIterator(const TDriver& driver, const TString &database, const TString &token, const TString& path,
const TVector<TString>& columns,
- const TVector<NKikimr::NScheme::TTypeId>& keyColumnTypes,
+ const TVector<NKikimr::NScheme::TTypeInfo>& keyColumnTypes,
ui64 maxRowsInRequest, ui64 maxBytesInRequest,
const TString& keyFrom, const TString& keyTo,
const TScanSettings& settings)
diff --git a/ydb/public/lib/experimental/ydb_clickhouse_internal.h b/ydb/public/lib/experimental/ydb_clickhouse_internal.h
index d2a846ca8f8..26ab152ddd3 100644
--- a/ydb/public/lib/experimental/ydb_clickhouse_internal.h
+++ b/ydb/public/lib/experimental/ydb_clickhouse_internal.h
@@ -4,7 +4,7 @@
#include <ydb/public/api/grpc/draft/ydb_clickhouse_internal_v1.pb.h>
// TODO: Bad dependency???
-#include <ydb/core/scheme/scheme_type_id.h>
+#include <ydb/core/scheme/scheme_type_order.h>
#include <util/generic/deque.h>
@@ -61,12 +61,12 @@ private:
class TScanIterator {
public:
TScanIterator(const TDriver& driver, const TString &database, const TString &endpoint, const TString& token, bool ssl, const TString& path, const TVector<TString>& columns,
- const TVector<NKikimr::NScheme::TTypeId>& keyColumnTypes,
+ const TVector<NKikimr::NScheme::TTypeInfo>& keyColumnTypes,
ui64 maxRowsInRequest, ui64 maxBytesInRequest,
const TString& keyFrom = TString(), const TString& keyTo = TString(),
const TScanSettings& settings = TScanSettings());
TScanIterator(const TDriver& driver, const TString &database, const TString& token, const TString& path, const TVector<TString>& columns,
- const TVector<NKikimr::NScheme::TTypeId>& keyColumnTypes,
+ const TVector<NKikimr::NScheme::TTypeInfo>& keyColumnTypes,
ui64 maxRowsInRequest, ui64 maxBytesInRequest,
const TString& keyFrom = TString(), const TString& keyTo = TString(),
const TScanSettings& settings = TScanSettings());
@@ -79,7 +79,7 @@ private:
private:
const TString Path;
const TVector<TString> Columns;
- const TVector<NKikimr::NScheme::TTypeId> KeyColumnTypes;
+ const TVector<NKikimr::NScheme::TTypeInfo> KeyColumnTypes;
const ui64 MaxRows;
const ui64 MaxBytes;
const TScanSettings Settings;
diff --git a/ydb/public/lib/scheme_types/scheme_type_id.h b/ydb/public/lib/scheme_types/scheme_type_id.h
index 7f0bee58568..d18e4475f01 100644
--- a/ydb/public/lib/scheme_types/scheme_type_id.h
+++ b/ydb/public/lib/scheme_types/scheme_type_id.h
@@ -53,6 +53,8 @@ static constexpr TTypeId DyNumber = NYql::NProto::DyNumber;
static constexpr TTypeId Decimal = NYql::NProto::Decimal;
+static constexpr TTypeId Pg = 0x3000;
+
static constexpr TTypeId YqlIds[] = {
Int32,
Uint32,
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.darwin.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.darwin.txt
index 3b0fb0fa706..94ca427b333 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.darwin.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-public-sdk-cpp-client-ydb_persqueue_core-ut PUBLIC
cpp-testing-unittest_main
cpp-client-ydb_persqueue_core
cpp-testing-gmock_in_unittest
- ydb-core-testlib
+ core-testlib-default
public-lib-json_value
public-lib-yson_value
cpp-client-ydb_driver
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.linux.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.linux.txt
index 3921d064eba..9a5b4ef6205 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.linux.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-public-sdk-cpp-client-ydb_persqueue_core-ut PUBLIC
cpp-testing-unittest_main
cpp-client-ydb_persqueue_core
cpp-testing-gmock_in_unittest
- ydb-core-testlib
+ core-testlib-default
public-lib-json_value
public-lib-yson_value
cpp-client-ydb_driver
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/CMakeLists.txt
index 95b05a2af53..802507fc68d 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/CMakeLists.txt
@@ -17,7 +17,7 @@ target_link_libraries(ydb_persqueue_core-ut-ut_utils PUBLIC
cpp-grpc-server
cpp-testing-unittest
cpp-threading-chunk_queue
- ydb-core-testlib
+ core-testlib-default
library-persqueue-topic_parser_public
cpp-client-ydb_driver
cpp-client-ydb_persqueue_core
diff --git a/ydb/public/sdk/cpp/client/ydb_table/table.cpp b/ydb/public/sdk/cpp/client/ydb_table/table.cpp
index a79995ba177..c3de07b9501 100644
--- a/ydb/public/sdk/cpp/client/ydb_table/table.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_table/table.cpp
@@ -1036,6 +1036,16 @@ TTableBuilder& TTableBuilder::AddNullableColumn(const TString& name, const TDeci
return *this;
}
+TTableBuilder& TTableBuilder::AddNullableColumn(const TString& name, const TPgType& type, const TString& family) {
+ auto columnType = TTypeBuilder()
+ .BeginOptional()
+ .Pg(type)
+ .EndOptional()
+ .Build();
+ TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family);
+ return *this;
+}
+
TTableBuilder& TTableBuilder::AddNonNullableColumn(const TString& name, const EPrimitiveType& type, const TString& family) {
auto columnType = TTypeBuilder()
.Primitive(type)
@@ -1054,6 +1064,15 @@ TTableBuilder& TTableBuilder::AddNonNullableColumn(const TString& name, const TD
return *this;
}
+TTableBuilder& TTableBuilder::AddNonNullableColumn(const TString& name, const TPgType& type, const TString& family) {
+ auto columnType = TTypeBuilder()
+ .Pg(type)
+ .Build();
+
+ TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family);
+ return *this;
+}
+
TTableBuilder& TTableBuilder::SetPrimaryKeyColumns(const TVector<TString>& primaryKeyColumns) {
TableDescription_.SetPrimaryKeyColumns(primaryKeyColumns);
return *this;
diff --git a/ydb/public/sdk/cpp/client/ydb_table/table.h b/ydb/public/sdk/cpp/client/ydb_table/table.h
index 54ece32d4cf..848cf5ca11d 100644
--- a/ydb/public/sdk/cpp/client/ydb_table/table.h
+++ b/ydb/public/sdk/cpp/client/ydb_table/table.h
@@ -684,8 +684,10 @@ public:
TTableBuilder& AddNullableColumn(const TString& name, const EPrimitiveType& type, const TString& family = TString());
TTableBuilder& AddNullableColumn(const TString& name, const TDecimalType& type, const TString& family = TString());
+ TTableBuilder& AddNullableColumn(const TString& name, const TPgType& type, const TString& family = TString());
TTableBuilder& AddNonNullableColumn(const TString& name, const EPrimitiveType& type, const TString& family = TString());
TTableBuilder& AddNonNullableColumn(const TString& name, const TDecimalType& type, const TString& family = TString());
+ TTableBuilder& AddNonNullableColumn(const TString& name, const TPgType& type, const TString& family = TString());
TTableBuilder& SetPrimaryKeyColumns(const TVector<TString>& primaryKeyColumns);
TTableBuilder& SetPrimaryKeyColumn(const TString& primaryKeyColumn);
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.darwin.txt b/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.darwin.txt
index a950fc621c8..8699300a9b8 100644
--- a/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.darwin.txt
+++ b/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-public-sdk-cpp-client-ydb_topic-ut PUBLIC
cpp-testing-unittest_main
cpp-client-ydb_topic
cpp-testing-gmock_in_unittest
- ydb-core-testlib
+ core-testlib-default
public-lib-json_value
public-lib-yson_value
cpp-client-ydb_driver
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.linux.txt b/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.linux.txt
index 9a818366aae..a360ff19a59 100644
--- a/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.linux.txt
+++ b/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-public-sdk-cpp-client-ydb_topic-ut PUBLIC
cpp-testing-unittest_main
cpp-client-ydb_topic
cpp-testing-gmock_in_unittest
- ydb-core-testlib
+ core-testlib-default
public-lib-json_value
public-lib-yson_value
cpp-client-ydb_driver
diff --git a/ydb/services/cms/ut/CMakeLists.darwin.txt b/ydb/services/cms/ut/CMakeLists.darwin.txt
index 399c993510e..68b26c408cb 100644
--- a/ydb/services/cms/ut/CMakeLists.darwin.txt
+++ b/ydb/services/cms/ut/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-services-cms-ut PUBLIC
cpp-grpc-client
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-services-cms-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/services/cms/ut/CMakeLists.linux.txt b/ydb/services/cms/ut/CMakeLists.linux.txt
index cece96b6eaa..def6fd53d67 100644
--- a/ydb/services/cms/ut/CMakeLists.linux.txt
+++ b/ydb/services/cms/ut/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-services-cms-ut PUBLIC
cpp-grpc-client
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
)
target_link_options(ydb-services-cms-ut PRIVATE
-ldl
diff --git a/ydb/services/datastreams/ut/CMakeLists.darwin.txt b/ydb/services/datastreams/ut/CMakeLists.darwin.txt
index cf5139a2994..f19d57819fa 100644
--- a/ydb/services/datastreams/ut/CMakeLists.darwin.txt
+++ b/ydb/services/datastreams/ut/CMakeLists.darwin.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-services-datastreams-ut PUBLIC
library-cpp-getopt
cpp-grpc-client
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
cpp-client-ydb_topic
)
target_link_options(ydb-services-datastreams-ut PRIVATE
diff --git a/ydb/services/datastreams/ut/CMakeLists.linux.txt b/ydb/services/datastreams/ut/CMakeLists.linux.txt
index a946cf9c7b8..6ff6cc1187a 100644
--- a/ydb/services/datastreams/ut/CMakeLists.linux.txt
+++ b/ydb/services/datastreams/ut/CMakeLists.linux.txt
@@ -25,7 +25,7 @@ target_link_libraries(ydb-services-datastreams-ut PUBLIC
library-cpp-getopt
cpp-grpc-client
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
cpp-client-ydb_topic
)
target_link_options(ydb-services-datastreams-ut PRIVATE
diff --git a/ydb/services/fq/ut_integration/CMakeLists.darwin.txt b/ydb/services/fq/ut_integration/CMakeLists.darwin.txt
index b081c8cd61a..42b2074788d 100644
--- a/ydb/services/fq/ut_integration/CMakeLists.darwin.txt
+++ b/ydb/services/fq/ut_integration/CMakeLists.darwin.txt
@@ -24,12 +24,11 @@ target_link_libraries(ydb-services-fq-ut_integration PUBLIC
cpp-grpc-client
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
yq-libs-control_plane_storage
yq-libs-db_schema
yq-libs-private_client
providers-common-db_id_async_resolver
- yql-sql-pg_dummy
clickhouse_client_udf
library-yql-utils
public-lib-fq
diff --git a/ydb/services/fq/ut_integration/CMakeLists.linux.txt b/ydb/services/fq/ut_integration/CMakeLists.linux.txt
index a08124095b2..8d014843d46 100644
--- a/ydb/services/fq/ut_integration/CMakeLists.linux.txt
+++ b/ydb/services/fq/ut_integration/CMakeLists.linux.txt
@@ -26,12 +26,11 @@ target_link_libraries(ydb-services-fq-ut_integration PUBLIC
cpp-grpc-client
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
yq-libs-control_plane_storage
yq-libs-db_schema
yq-libs-private_client
providers-common-db_id_async_resolver
- yql-sql-pg_dummy
clickhouse_client_udf
library-yql-utils
public-lib-fq
diff --git a/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.darwin.txt b/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.darwin.txt
index 970df4a62d3..a35056c8344 100644
--- a/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.darwin.txt
+++ b/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.darwin.txt
@@ -21,7 +21,7 @@ target_link_libraries(ydb-services-persqueue_cluster_discovery-ut PUBLIC
cpp-testing-unittest_main
ydb-services-persqueue_cluster_discovery
cpp-actors-http
- ydb-core-testlib
+ core-testlib-default
api-grpc
)
target_link_options(ydb-services-persqueue_cluster_discovery-ut PRIVATE
diff --git a/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.linux.txt b/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.linux.txt
index 0625cbb15e5..23eaf963394 100644
--- a/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.linux.txt
+++ b/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.linux.txt
@@ -23,7 +23,7 @@ target_link_libraries(ydb-services-persqueue_cluster_discovery-ut PUBLIC
cpp-testing-unittest_main
ydb-services-persqueue_cluster_discovery
cpp-actors-http
- ydb-core-testlib
+ core-testlib-default
api-grpc
)
target_link_options(ydb-services-persqueue_cluster_discovery-ut PRIVATE
diff --git a/ydb/services/persqueue_v1/ut/CMakeLists.darwin.txt b/ydb/services/persqueue_v1/ut/CMakeLists.darwin.txt
index a3f22ab07a3..b1b003b5c0a 100644
--- a/ydb/services/persqueue_v1/ut/CMakeLists.darwin.txt
+++ b/ydb/services/persqueue_v1/ut/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-services-persqueue_v1-ut PUBLIC
library-cpp-getopt
library-cpp-svnversion
cpp-digest-md5
- ydb-core-testlib
+ core-testlib-default
ydb-library-aclib
library-persqueue-topic_parser
api-grpc
diff --git a/ydb/services/persqueue_v1/ut/CMakeLists.linux.txt b/ydb/services/persqueue_v1/ut/CMakeLists.linux.txt
index cf4cd9f3a78..b7f1bcbfb8d 100644
--- a/ydb/services/persqueue_v1/ut/CMakeLists.linux.txt
+++ b/ydb/services/persqueue_v1/ut/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-services-persqueue_v1-ut PUBLIC
library-cpp-getopt
library-cpp-svnversion
cpp-digest-md5
- ydb-core-testlib
+ core-testlib-default
ydb-library-aclib
library-persqueue-topic_parser
api-grpc
diff --git a/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.darwin.txt b/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.darwin.txt
index 9b03806b7c8..63e933b8541 100644
--- a/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.darwin.txt
+++ b/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.darwin.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-services-persqueue_v1-ut-new_schemecache_ut PUBLIC
ydb-services-persqueue_v1
library-cpp-getopt
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
api-grpc
cpp-client-resources
ydb_persqueue_core-ut-ut_utils
diff --git a/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.linux.txt b/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.linux.txt
index 719d5b4e45c..fca6c752f28 100644
--- a/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.linux.txt
+++ b/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.linux.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-services-persqueue_v1-ut-new_schemecache_ut PUBLIC
ydb-services-persqueue_v1
library-cpp-getopt
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
api-grpc
cpp-client-resources
ydb_persqueue_core-ut-ut_utils
diff --git a/ydb/services/rate_limiter/ut/CMakeLists.darwin.txt b/ydb/services/rate_limiter/ut/CMakeLists.darwin.txt
index 92bba5f85a5..d5fcf8b5cfc 100644
--- a/ydb/services/rate_limiter/ut/CMakeLists.darwin.txt
+++ b/ydb/services/rate_limiter/ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-services-rate_limiter-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-services-rate_limiter
- ydb-core-testlib
+ core-testlib-default
cpp-client-ydb_coordination
cpp-client-ydb_rate_limiter
)
diff --git a/ydb/services/rate_limiter/ut/CMakeLists.linux.txt b/ydb/services/rate_limiter/ut/CMakeLists.linux.txt
index 29ed3804473..321cdf521bb 100644
--- a/ydb/services/rate_limiter/ut/CMakeLists.linux.txt
+++ b/ydb/services/rate_limiter/ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-services-rate_limiter-ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-services-rate_limiter
- ydb-core-testlib
+ core-testlib-default
cpp-client-ydb_coordination
cpp-client-ydb_rate_limiter
)
diff --git a/ydb/services/ydb/index_ut/CMakeLists.darwin.txt b/ydb/services/ydb/index_ut/CMakeLists.darwin.txt
index e8b77a793f6..ccb63930a85 100644
--- a/ydb/services/ydb/index_ut/CMakeLists.darwin.txt
+++ b/ydb/services/ydb/index_ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-services-ydb-index_ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-services-ydb
- ydb-core-testlib
+ core-testlib-default
public-lib-idx_test
public-lib-yson_value
cpp-client-ydb_scheme
diff --git a/ydb/services/ydb/index_ut/CMakeLists.linux.txt b/ydb/services/ydb/index_ut/CMakeLists.linux.txt
index ba32415c3f9..ab63c756d93 100644
--- a/ydb/services/ydb/index_ut/CMakeLists.linux.txt
+++ b/ydb/services/ydb/index_ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-services-ydb-index_ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-services-ydb
- ydb-core-testlib
+ core-testlib-default
public-lib-idx_test
public-lib-yson_value
cpp-client-ydb_scheme
diff --git a/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.darwin.txt b/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.darwin.txt
index 47beb0dd7b0..0c7751320e4 100644
--- a/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.darwin.txt
+++ b/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.darwin.txt
@@ -20,7 +20,7 @@ target_link_libraries(ydb-services-ydb-sdk_credprovider_ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-services-ydb
- ydb-core-testlib
+ core-testlib-default
public-lib-yson_value
cpp-client-ydb_scheme
cpp-client-ydb_table
diff --git a/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.linux.txt b/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.linux.txt
index 6574233dbd9..5a866d9c29c 100644
--- a/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.linux.txt
+++ b/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.linux.txt
@@ -22,7 +22,7 @@ target_link_libraries(ydb-services-ydb-sdk_credprovider_ut PUBLIC
library-cpp-cpuid_check
cpp-testing-unittest_main
ydb-services-ydb
- ydb-core-testlib
+ core-testlib-default
public-lib-yson_value
cpp-client-ydb_scheme
cpp-client-ydb_table
diff --git a/ydb/services/ydb/ut/CMakeLists.darwin.txt b/ydb/services/ydb/ut/CMakeLists.darwin.txt
index c79c299acec..1e8060eaff9 100644
--- a/ydb/services/ydb/ut/CMakeLists.darwin.txt
+++ b/ydb/services/ydb/ut/CMakeLists.darwin.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-services-ydb-ut PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
yql-minikql-dom
yql-minikql-jsonpath
public-lib-experimental
diff --git a/ydb/services/ydb/ut/CMakeLists.linux.txt b/ydb/services/ydb/ut/CMakeLists.linux.txt
index 19738502783..b4c55437f16 100644
--- a/ydb/services/ydb/ut/CMakeLists.linux.txt
+++ b/ydb/services/ydb/ut/CMakeLists.linux.txt
@@ -28,7 +28,7 @@ target_link_libraries(ydb-services-ydb-ut PUBLIC
cpp-regex-pcre
library-cpp-svnversion
kqp-ut-common
- ydb-core-testlib
+ core-testlib-default
yql-minikql-dom
yql-minikql-jsonpath
public-lib-experimental
diff --git a/ydb/services/ydb/ydb_ut.cpp b/ydb/services/ydb/ydb_ut.cpp
index 65d0827b658..acb0647aa61 100644
--- a/ydb/services/ydb/ydb_ut.cpp
+++ b/ydb/services/ydb/ydb_ut.cpp
@@ -3568,7 +3568,7 @@ void CheckTablePartitions(const TKikimrWithGrpcAndRootSchema &server,
ui32 typeId = type.optional_type().item().type_id();
TString cellStr;
- DbgPrintValue(cellStr, cell, typeId);
+ DbgPrintValue(cellStr, cell, NScheme::TTypeInfo(typeId));
TString valStr;
switch (typeId) {
diff --git a/ydb/services/yq/ut_integration/CMakeLists.darwin.txt b/ydb/services/yq/ut_integration/CMakeLists.darwin.txt
index 2491d6e443f..abb861ed7cb 100644
--- a/ydb/services/yq/ut_integration/CMakeLists.darwin.txt
+++ b/ydb/services/yq/ut_integration/CMakeLists.darwin.txt
@@ -24,7 +24,7 @@ target_link_libraries(ydb-services-yq-ut_integration PUBLIC
cpp-grpc-client
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
yq-libs-control_plane_storage
yq-libs-db_schema
yq-libs-private_client
@@ -32,7 +32,6 @@ target_link_libraries(ydb-services-yq-ut_integration PUBLIC
providers-common-db_id_async_resolver
clickhouse_client_udf
library-yql-utils
- yql-sql-pg_dummy
)
target_link_options(ydb-services-yq-ut_integration PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/services/yq/ut_integration/CMakeLists.linux.txt b/ydb/services/yq/ut_integration/CMakeLists.linux.txt
index 7a27e028331..4c82e4b35ee 100644
--- a/ydb/services/yq/ut_integration/CMakeLists.linux.txt
+++ b/ydb/services/yq/ut_integration/CMakeLists.linux.txt
@@ -26,7 +26,7 @@ target_link_libraries(ydb-services-yq-ut_integration PUBLIC
cpp-grpc-client
cpp-regex-pcre
library-cpp-svnversion
- ydb-core-testlib
+ core-testlib-default
yq-libs-control_plane_storage
yq-libs-db_schema
yq-libs-private_client
@@ -34,7 +34,6 @@ target_link_libraries(ydb-services-yq-ut_integration PUBLIC
providers-common-db_id_async_resolver
clickhouse_client_udf
library-yql-utils
- yql-sql-pg_dummy
)
target_link_options(ydb-services-yq-ut_integration PRIVATE
-ldl
diff --git a/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_schemeshard_/flat_schemeshard.schema b/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_schemeshard_/flat_schemeshard.schema
index 3595c4ceed5..247e9e1f645 100644
--- a/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_schemeshard_/flat_schemeshard.schema
+++ b/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_schemeshard_/flat_schemeshard.schema
@@ -435,6 +435,11 @@
"ColumnId": 11,
"ColumnName": "NotNull",
"ColumnType": "Bool"
+ },
+ {
+ "ColumnId": 12,
+ "ColumnName": "ColTypeData",
+ "ColumnType": "String"
}
],
"ColumnsDropped": [],
@@ -451,7 +456,8 @@
8,
9,
10,
- 11
+ 11,
+ 12
],
"RoomID": 0,
"Codec": 0,
@@ -918,6 +924,11 @@
"ColumnId": 11,
"ColumnName": "NotNull",
"ColumnType": "Bool"
+ },
+ {
+ "ColumnId": 12,
+ "ColumnName": "ColTypeData",
+ "ColumnType": "String"
}
],
"ColumnsDropped": [],
@@ -934,7 +945,8 @@
8,
9,
10,
- 11
+ 11,
+ 12
],
"RoomID": 0,
"Codec": 0,
@@ -3539,6 +3551,11 @@
"ColumnId": 12,
"ColumnName": "NotNull",
"ColumnType": "Bool"
+ },
+ {
+ "ColumnId": 13,
+ "ColumnName": "ColTypeData",
+ "ColumnType": "String"
}
],
"ColumnsDropped": [],
@@ -3556,7 +3573,8 @@
9,
10,
11,
- 12
+ 12,
+ 13
],
"RoomID": 0,
"Codec": 0,
@@ -4026,6 +4044,11 @@
"ColumnId": 12,
"ColumnName": "NotNull",
"ColumnType": "Bool"
+ },
+ {
+ "ColumnId": 13,
+ "ColumnName": "ColTypeData",
+ "ColumnType": "String"
}
],
"ColumnsDropped": [],
@@ -4043,7 +4066,8 @@
9,
10,
11,
- 12
+ 12,
+ 13
],
"RoomID": 0,
"Codec": 0,