duckdb 0.8.1-dev96.0 → 0.8.2-dev1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.gyp +8 -8
- package/package.json +3 -1
- package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
- package/src/duckdb/extension/icu/icu-extension.cpp +1 -1
- package/src/duckdb/extension/icu/icu-makedate.cpp +5 -4
- package/src/duckdb/extension/icu/icu-strptime.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/nfsubs.cpp +0 -2
- package/src/duckdb/extension/json/buffered_json_reader.cpp +23 -14
- package/src/duckdb/extension/json/include/buffered_json_reader.hpp +6 -6
- package/src/duckdb/extension/json/include/json_common.hpp +12 -2
- package/src/duckdb/extension/json/include/json_scan.hpp +5 -2
- package/src/duckdb/extension/json/json_functions/json_contains.cpp +5 -0
- package/src/duckdb/extension/json/json_functions/json_create.cpp +10 -10
- package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +2 -2
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +2 -2
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +5 -3
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +11 -11
- package/src/duckdb/extension/json/json_functions/read_json.cpp +2 -1
- package/src/duckdb/extension/json/json_functions.cpp +6 -3
- package/src/duckdb/extension/json/json_scan.cpp +43 -27
- package/src/duckdb/extension/parquet/column_reader.cpp +5 -1
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
- package/src/duckdb/extension/parquet/parquet-extension.cpp +26 -1
- package/src/duckdb/src/catalog/catalog.cpp +5 -17
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +7 -1
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +121 -0
- package/src/duckdb/src/catalog/catalog_search_path.cpp +49 -12
- package/src/duckdb/src/catalog/default/default_types.cpp +9 -84
- package/src/duckdb/src/common/adbc/adbc.cpp +118 -12
- package/src/duckdb/src/common/adbc/driver_manager.cpp +0 -20
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +11 -12
- package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +4 -3
- package/src/duckdb/src/common/exception.cpp +4 -1
- package/src/duckdb/src/common/exception_format_value.cpp +24 -15
- package/src/duckdb/src/common/multi_file_reader.cpp +3 -0
- package/src/duckdb/src/common/random_engine.cpp +1 -1
- package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +5 -4
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +44 -7
- package/src/duckdb/src/common/types/time.cpp +2 -8
- package/src/duckdb/src/common/types/timestamp.cpp +37 -1
- package/src/duckdb/src/common/types/value.cpp +1 -0
- package/src/duckdb/src/common/types.cpp +4 -0
- package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
- package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
- package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +30 -33
- package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +52 -65
- package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
- package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +39 -40
- package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
- package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
- package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
- package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +88 -100
- package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
- package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
- package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +37 -38
- package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
- package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +44 -80
- package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
- package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +104 -122
- package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +57 -93
- package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +22 -23
- package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +18 -19
- package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
- package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
- package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
- package/src/duckdb/src/core_functions/function_list.cpp +1 -0
- package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +3 -0
- package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +14 -0
- package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +23 -6
- package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +1 -2
- package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +3 -0
- package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
- package/src/duckdb/src/execution/index/art/art.cpp +80 -7
- package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +20 -1
- package/src/duckdb/src/execution/index/art/leaf.cpp +11 -11
- package/src/duckdb/src/execution/index/art/leaf_segment.cpp +10 -0
- package/src/duckdb/src/execution/index/art/node.cpp +48 -35
- package/src/duckdb/src/execution/index/art/node16.cpp +3 -0
- package/src/duckdb/src/execution/index/art/node256.cpp +1 -0
- package/src/duckdb/src/execution/index/art/node4.cpp +3 -0
- package/src/duckdb/src/execution/index/art/node48.cpp +2 -0
- package/src/duckdb/src/execution/index/art/prefix.cpp +2 -0
- package/src/duckdb/src/execution/join_hashtable.cpp +2 -0
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +26 -9
- package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +5 -2
- package/src/duckdb/src/execution/operator/helper/physical_set.cpp +5 -1
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +3 -6
- package/src/duckdb/src/execution/operator/projection/physical_tableinout_function.cpp +1 -0
- package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +8 -3
- package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +0 -1
- package/src/duckdb/src/execution/operator/schema/physical_create_index.cpp +29 -3
- package/src/duckdb/src/execution/reservoir_sample.cpp +18 -4
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +159 -21
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +67 -74
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +7 -7
- package/src/duckdb/src/function/cast/list_casts.cpp +2 -4
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +33 -23
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +1 -1
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +6 -2
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +2 -2
- package/src/duckdb/src/function/table/arrow.cpp +2 -2
- package/src/duckdb/src/function/table/checkpoint.cpp +3 -0
- package/src/duckdb/src/function/table/read_csv.cpp +15 -17
- package/src/duckdb/src/function/table/repeat.cpp +3 -0
- package/src/duckdb/src/function/table/repeat_row.cpp +8 -1
- package/src/duckdb/src/function/table/system/pragma_storage_info.cpp +4 -4
- package/src/duckdb/src/function/table/system/test_vector_types.cpp +81 -25
- package/src/duckdb/src/function/table/table_scan.cpp +2 -2
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +0 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +11 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +8 -2
- package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +97 -0
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_appender.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_converter.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_options.hpp +8 -1
- package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +0 -1
- package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +16 -22
- package/src/duckdb/src/include/duckdb/common/exception.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +4 -14
- package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +92 -57
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
- package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +9 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +2 -6
- package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +16 -36
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +10 -4
- package/src/duckdb/src/include/duckdb/execution/index/art/fixed_size_allocator.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/index/art/leaf_segment.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +13 -3
- package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +9 -30
- package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
- package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +4 -2
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +3 -2
- package/src/duckdb/src/include/duckdb/main/attached_database.hpp +4 -1
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/config.hpp +5 -0
- package/src/duckdb/src/include/duckdb/main/database_manager.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +142 -136
- package/src/duckdb/src/include/duckdb/main/query_result.hpp +6 -0
- package/src/duckdb/src/include/duckdb/main/settings.hpp +19 -0
- package/src/duckdb/src/include/duckdb/optimizer/unnest_rewriter.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parallel/meta_pipeline.hpp +12 -3
- package/src/duckdb/src/include/duckdb/parser/parser.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +0 -2
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +5 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +6 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_execute.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +5 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +5 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +6 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +4 -0
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/byte_reader.hpp +4 -0
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/in_memory_block_manager.hpp +13 -13
- package/src/duckdb/src/include/duckdb/storage/index.hpp +4 -2
- package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +0 -6
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/struct_column_data.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +0 -2
- package/src/duckdb/src/main/attached_database.cpp +8 -0
- package/src/duckdb/src/main/capi/arrow-c.cpp +4 -4
- package/src/duckdb/src/main/capi/config-c.cpp +2 -5
- package/src/duckdb/src/main/client_context.cpp +4 -3
- package/src/duckdb/src/main/config.cpp +2 -0
- package/src/duckdb/src/main/database.cpp +1 -0
- package/src/duckdb/src/main/database_manager.cpp +21 -0
- package/src/duckdb/src/main/query_result.cpp +6 -2
- package/src/duckdb/src/main/settings/settings.cpp +41 -6
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +27 -16
- package/src/duckdb/src/parallel/executor.cpp +38 -14
- package/src/duckdb/src/parallel/meta_pipeline.cpp +17 -3
- package/src/duckdb/src/parser/column_definition.cpp +5 -8
- package/src/duckdb/src/parser/parsed_data/create_info.cpp +0 -3
- package/src/duckdb/src/parser/parser.cpp +95 -35
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +1 -0
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +3 -0
- package/src/duckdb/src/parser/transform/helpers/nodetype_to_string.cpp +0 -2
- package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +0 -3
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +3 -0
- package/src/duckdb/src/parser/transformer.cpp +0 -2
- package/src/duckdb/src/planner/bind_context.cpp +3 -4
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +0 -2
- package/src/duckdb/src/planner/binder/expression/bind_positional_reference_expression.cpp +8 -3
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +31 -15
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +0 -27
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +18 -1
- package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +0 -25
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -114
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +6 -1
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +5 -0
- package/src/duckdb/src/planner/bound_result_modifier.cpp +14 -0
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +6 -5
- package/src/duckdb/src/planner/expression/bound_default_expression.cpp +7 -1
- package/src/duckdb/src/planner/expression.cpp +3 -0
- package/src/duckdb/src/planner/expression_binder.cpp +3 -2
- package/src/duckdb/src/planner/operator/logical_distinct.cpp +5 -4
- package/src/duckdb/src/planner/operator/logical_pivot.cpp +14 -2
- package/src/duckdb/src/planner/planner.cpp +5 -15
- package/src/duckdb/src/storage/data_table.cpp +10 -8
- package/src/duckdb/src/storage/index.cpp +13 -0
- package/src/duckdb/src/storage/storage_manager.cpp +6 -0
- package/src/duckdb/src/storage/table/column_data.cpp +7 -3
- package/src/duckdb/src/storage/table/list_column_data.cpp +5 -4
- package/src/duckdb/src/storage/table/row_group.cpp +4 -3
- package/src/duckdb/src/storage/table/row_group_collection.cpp +6 -3
- package/src/duckdb/src/storage/table/standard_column_data.cpp +4 -3
- package/src/duckdb/src/storage/table/struct_column_data.cpp +4 -3
- package/src/duckdb/src/storage/wal_replay.cpp +4 -5
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +0 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +0 -14
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12828 -12956
- package/src/duckdb/third_party/zstd/compress/zstd_compress.cpp +3 -0
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_cwksp.h +4 -0
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +5 -5
- package/src/duckdb/ub_src_parser_transform_statement.cpp +0 -2
- package/test/extension.test.ts +11 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_database_info.hpp +0 -46
- package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +0 -27
@@ -4,94 +4,18 @@
|
|
4
4
|
#include "duckdb/catalog/catalog_entry/type_catalog_entry.hpp"
|
5
5
|
#include "duckdb/common/string_util.hpp"
|
6
6
|
#include "duckdb/parser/parsed_data/create_type_info.hpp"
|
7
|
+
#include "duckdb/catalog/default/builtin_types/types.hpp"
|
7
8
|
|
8
9
|
namespace duckdb {
|
9
10
|
|
10
|
-
struct DefaultType {
|
11
|
-
const char *name;
|
12
|
-
LogicalTypeId type;
|
13
|
-
};
|
14
|
-
|
15
|
-
static DefaultType internal_types[] = {{"int", LogicalTypeId::INTEGER},
|
16
|
-
{"int4", LogicalTypeId::INTEGER},
|
17
|
-
{"signed", LogicalTypeId::INTEGER},
|
18
|
-
{"integer", LogicalTypeId::INTEGER},
|
19
|
-
{"integral", LogicalTypeId::INTEGER},
|
20
|
-
{"int32", LogicalTypeId::INTEGER},
|
21
|
-
{"varchar", LogicalTypeId::VARCHAR},
|
22
|
-
{"bpchar", LogicalTypeId::VARCHAR},
|
23
|
-
{"text", LogicalTypeId::VARCHAR},
|
24
|
-
{"string", LogicalTypeId::VARCHAR},
|
25
|
-
{"char", LogicalTypeId::VARCHAR},
|
26
|
-
{"nvarchar", LogicalTypeId::VARCHAR},
|
27
|
-
{"bytea", LogicalTypeId::BLOB},
|
28
|
-
{"blob", LogicalTypeId::BLOB},
|
29
|
-
{"varbinary", LogicalTypeId::BLOB},
|
30
|
-
{"binary", LogicalTypeId::BLOB},
|
31
|
-
{"bit", LogicalTypeId::BIT},
|
32
|
-
{"bitstring", LogicalTypeId::BIT},
|
33
|
-
{"int8", LogicalTypeId::BIGINT},
|
34
|
-
{"bigint", LogicalTypeId::BIGINT},
|
35
|
-
{"int64", LogicalTypeId::BIGINT},
|
36
|
-
{"long", LogicalTypeId::BIGINT},
|
37
|
-
{"oid", LogicalTypeId::BIGINT},
|
38
|
-
{"int2", LogicalTypeId::SMALLINT},
|
39
|
-
{"smallint", LogicalTypeId::SMALLINT},
|
40
|
-
{"short", LogicalTypeId::SMALLINT},
|
41
|
-
{"int16", LogicalTypeId::SMALLINT},
|
42
|
-
{"timestamp", LogicalTypeId::TIMESTAMP},
|
43
|
-
{"datetime", LogicalTypeId::TIMESTAMP},
|
44
|
-
{"timestamp_us", LogicalTypeId::TIMESTAMP},
|
45
|
-
{"timestamp_ms", LogicalTypeId::TIMESTAMP_MS},
|
46
|
-
{"timestamp_ns", LogicalTypeId::TIMESTAMP_NS},
|
47
|
-
{"timestamp_s", LogicalTypeId::TIMESTAMP_SEC},
|
48
|
-
{"bool", LogicalTypeId::BOOLEAN},
|
49
|
-
{"boolean", LogicalTypeId::BOOLEAN},
|
50
|
-
{"logical", LogicalTypeId::BOOLEAN},
|
51
|
-
{"decimal", LogicalTypeId::DECIMAL},
|
52
|
-
{"dec", LogicalTypeId::DECIMAL},
|
53
|
-
{"numeric", LogicalTypeId::DECIMAL},
|
54
|
-
{"real", LogicalTypeId::FLOAT},
|
55
|
-
{"float4", LogicalTypeId::FLOAT},
|
56
|
-
{"float", LogicalTypeId::FLOAT},
|
57
|
-
{"double", LogicalTypeId::DOUBLE},
|
58
|
-
{"float8", LogicalTypeId::DOUBLE},
|
59
|
-
{"tinyint", LogicalTypeId::TINYINT},
|
60
|
-
{"int1", LogicalTypeId::TINYINT},
|
61
|
-
{"date", LogicalTypeId::DATE},
|
62
|
-
{"time", LogicalTypeId::TIME},
|
63
|
-
{"interval", LogicalTypeId::INTERVAL},
|
64
|
-
{"hugeint", LogicalTypeId::HUGEINT},
|
65
|
-
{"int128", LogicalTypeId::HUGEINT},
|
66
|
-
{"uuid", LogicalTypeId::UUID},
|
67
|
-
{"guid", LogicalTypeId::UUID},
|
68
|
-
{"struct", LogicalTypeId::STRUCT},
|
69
|
-
{"row", LogicalTypeId::STRUCT},
|
70
|
-
{"list", LogicalTypeId::LIST},
|
71
|
-
{"map", LogicalTypeId::MAP},
|
72
|
-
{"utinyint", LogicalTypeId::UTINYINT},
|
73
|
-
{"uint8", LogicalTypeId::UTINYINT},
|
74
|
-
{"usmallint", LogicalTypeId::USMALLINT},
|
75
|
-
{"uint16", LogicalTypeId::USMALLINT},
|
76
|
-
{"uinteger", LogicalTypeId::UINTEGER},
|
77
|
-
{"uint32", LogicalTypeId::UINTEGER},
|
78
|
-
{"ubigint", LogicalTypeId::UBIGINT},
|
79
|
-
{"uint64", LogicalTypeId::UBIGINT},
|
80
|
-
{"union", LogicalTypeId::UNION},
|
81
|
-
{"timestamptz", LogicalTypeId::TIMESTAMP_TZ},
|
82
|
-
{"timetz", LogicalTypeId::TIME_TZ},
|
83
|
-
{"enum", LogicalTypeId::ENUM},
|
84
|
-
{"null", LogicalTypeId::SQLNULL},
|
85
|
-
{nullptr, LogicalTypeId::INVALID}};
|
86
|
-
|
87
11
|
LogicalTypeId DefaultTypeGenerator::GetDefaultType(const string &name) {
|
88
|
-
auto
|
89
|
-
for (
|
90
|
-
if (
|
91
|
-
return
|
12
|
+
auto &internal_types = BUILTIN_TYPES;
|
13
|
+
for (auto &type : internal_types) {
|
14
|
+
if (StringUtil::CIEquals(name, type.name)) {
|
15
|
+
return type.type;
|
92
16
|
}
|
93
17
|
}
|
94
|
-
return
|
18
|
+
return LogicalType::INVALID;
|
95
19
|
}
|
96
20
|
|
97
21
|
DefaultTypeGenerator::DefaultTypeGenerator(Catalog &catalog, SchemaCatalogEntry &schema)
|
@@ -119,8 +43,9 @@ vector<string> DefaultTypeGenerator::GetDefaultEntries() {
|
|
119
43
|
if (schema.name != DEFAULT_SCHEMA) {
|
120
44
|
return result;
|
121
45
|
}
|
122
|
-
|
123
|
-
|
46
|
+
auto &internal_types = BUILTIN_TYPES;
|
47
|
+
for (auto &type : internal_types) {
|
48
|
+
result.emplace_back(StringUtil::Lower(type.name));
|
124
49
|
}
|
125
50
|
return result;
|
126
51
|
}
|
@@ -5,10 +5,13 @@
|
|
5
5
|
#include "duckdb/common/string_util.hpp"
|
6
6
|
|
7
7
|
#include "duckdb.h"
|
8
|
-
#include "duckdb/main/connection.hpp"
|
9
8
|
#include "duckdb/common/arrow/arrow_wrapper.hpp"
|
10
9
|
#include "duckdb/common/arrow/arrow.hpp"
|
11
10
|
|
11
|
+
#ifndef DUCKDB_AMALGAMATION
|
12
|
+
#include "duckdb/main/connection.hpp"
|
13
|
+
#endif
|
14
|
+
|
12
15
|
#include <string.h>
|
13
16
|
#include <stdlib.h>
|
14
17
|
|
@@ -37,6 +40,10 @@ duckdb_adbc::AdbcStatusCode duckdb_adbc_init(size_t count, struct duckdb_adbc::A
|
|
37
40
|
driver->StatementSetOption = duckdb_adbc::StatementSetOption;
|
38
41
|
driver->StatementSetSqlQuery = duckdb_adbc::StatementSetSqlQuery;
|
39
42
|
driver->ConnectionGetObjects = duckdb_adbc::ConnectionGetObjects;
|
43
|
+
driver->ConnectionCommit = duckdb_adbc::ConnectionCommit;
|
44
|
+
driver->ConnectionRollback = duckdb_adbc::ConnectionRollback;
|
45
|
+
driver->ConnectionReadPartition = duckdb_adbc::ConnectionReadPartition;
|
46
|
+
driver->StatementExecutePartitions = duckdb_adbc::StatementExecutePartitions;
|
40
47
|
return ADBC_STATUS_OK;
|
41
48
|
}
|
42
49
|
|
@@ -162,10 +169,104 @@ AdbcStatusCode ConnectionNew(struct AdbcConnection *connection, struct AdbcError
|
|
162
169
|
return ADBC_STATUS_OK;
|
163
170
|
}
|
164
171
|
|
172
|
+
AdbcStatusCode ExecuteQuery(duckdb::Connection *conn, const char *query, struct AdbcError *error) {
|
173
|
+
auto res = conn->Query(query);
|
174
|
+
if (res->HasError()) {
|
175
|
+
auto error_message = "Failed to execute query \"" + std::string(query) + "\": " + res->GetError();
|
176
|
+
SetError(error, error_message);
|
177
|
+
return ADBC_STATUS_INTERNAL;
|
178
|
+
}
|
179
|
+
return ADBC_STATUS_OK;
|
180
|
+
}
|
181
|
+
|
165
182
|
AdbcStatusCode ConnectionSetOption(struct AdbcConnection *connection, const char *key, const char *value,
|
166
183
|
struct AdbcError *error) {
|
167
|
-
|
168
|
-
|
184
|
+
if (!connection) {
|
185
|
+
SetError(error, "Connection is not set");
|
186
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
187
|
+
}
|
188
|
+
auto conn = (duckdb::Connection *)connection->private_data;
|
189
|
+
if (strcmp(key, ADBC_CONNECTION_OPTION_AUTOCOMMIT) == 0) {
|
190
|
+
if (strcmp(value, ADBC_OPTION_VALUE_ENABLED) == 0) {
|
191
|
+
if (conn->HasActiveTransaction()) {
|
192
|
+
AdbcStatusCode status = ExecuteQuery(conn, "COMMIT", error);
|
193
|
+
if (status != ADBC_STATUS_OK) {
|
194
|
+
return status;
|
195
|
+
}
|
196
|
+
} else {
|
197
|
+
// no-op
|
198
|
+
}
|
199
|
+
} else if (strcmp(value, ADBC_OPTION_VALUE_DISABLED) == 0) {
|
200
|
+
if (conn->HasActiveTransaction()) {
|
201
|
+
// no-op
|
202
|
+
} else {
|
203
|
+
// begin
|
204
|
+
AdbcStatusCode status = ExecuteQuery(conn, "START TRANSACTION", error);
|
205
|
+
if (status != ADBC_STATUS_OK) {
|
206
|
+
return status;
|
207
|
+
}
|
208
|
+
}
|
209
|
+
} else {
|
210
|
+
auto error_message = "Invalid connection option value " + std::string(key) + "=" + std::string(value);
|
211
|
+
SetError(error, error_message);
|
212
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
213
|
+
}
|
214
|
+
return ADBC_STATUS_OK;
|
215
|
+
}
|
216
|
+
auto error_message =
|
217
|
+
"Unknown connection option " + std::string(key) + "=" + (value ? std::string(value) : "(NULL)");
|
218
|
+
SetError(error, error_message);
|
219
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
220
|
+
}
|
221
|
+
|
222
|
+
AdbcStatusCode ConnectionReadPartition(struct AdbcConnection *connection, const uint8_t *serialized_partition,
|
223
|
+
size_t serialized_length, struct ArrowArrayStream *out,
|
224
|
+
struct AdbcError *error) {
|
225
|
+
SetError(error, "Read Partitions are not supported in DuckDB");
|
226
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
227
|
+
}
|
228
|
+
|
229
|
+
AdbcStatusCode StatementExecutePartitions(struct AdbcStatement *statement, struct ArrowSchema *schema,
|
230
|
+
struct AdbcPartitions *partitions, int64_t *rows_affected,
|
231
|
+
struct AdbcError *error) {
|
232
|
+
SetError(error, "Execute Partitions are not supported in DuckDB");
|
233
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
234
|
+
}
|
235
|
+
|
236
|
+
AdbcStatusCode ConnectionCommit(struct AdbcConnection *connection, struct AdbcError *error) {
|
237
|
+
if (!connection) {
|
238
|
+
SetError(error, "Connection is not set");
|
239
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
240
|
+
}
|
241
|
+
auto conn = (duckdb::Connection *)connection->private_data;
|
242
|
+
if (!conn->HasActiveTransaction()) {
|
243
|
+
SetError(error, "No active transaction, cannot commit");
|
244
|
+
return ADBC_STATUS_INVALID_STATE;
|
245
|
+
}
|
246
|
+
|
247
|
+
AdbcStatusCode status = ExecuteQuery(conn, "COMMIT", error);
|
248
|
+
if (status != ADBC_STATUS_OK) {
|
249
|
+
return status;
|
250
|
+
}
|
251
|
+
return ExecuteQuery(conn, "START TRANSACTION", error);
|
252
|
+
}
|
253
|
+
|
254
|
+
AdbcStatusCode ConnectionRollback(struct AdbcConnection *connection, struct AdbcError *error) {
|
255
|
+
if (!connection) {
|
256
|
+
SetError(error, "Connection is not set");
|
257
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
258
|
+
}
|
259
|
+
auto conn = (duckdb::Connection *)connection->private_data;
|
260
|
+
if (!conn->HasActiveTransaction()) {
|
261
|
+
SetError(error, "No active transaction, cannot rollback");
|
262
|
+
return ADBC_STATUS_INVALID_STATE;
|
263
|
+
}
|
264
|
+
|
265
|
+
AdbcStatusCode status = ExecuteQuery(conn, "ROLLBACK", error);
|
266
|
+
if (status != ADBC_STATUS_OK) {
|
267
|
+
return status;
|
268
|
+
}
|
269
|
+
return ExecuteQuery(conn, "START TRANSACTION", error);
|
169
270
|
}
|
170
271
|
|
171
272
|
AdbcStatusCode ConnectionInit(struct AdbcConnection *connection, struct AdbcDatabase *database,
|
@@ -219,11 +320,11 @@ void release(struct ArrowArrayStream *stream) {
|
|
219
320
|
if (!stream || !stream->release) {
|
220
321
|
return;
|
221
322
|
}
|
222
|
-
stream->release = nullptr;
|
223
323
|
if (stream->private_data) {
|
224
324
|
duckdb_destroy_arrow((duckdb_arrow *)&stream->private_data);
|
225
325
|
stream->private_data = nullptr;
|
226
326
|
}
|
327
|
+
stream->release = nullptr;
|
227
328
|
}
|
228
329
|
|
229
330
|
const char *get_last_error(struct ArrowArrayStream *stream) {
|
@@ -270,16 +371,21 @@ AdbcStatusCode Ingest(duckdb_connection connection, const char *table_name, stru
|
|
270
371
|
if (status != ADBC_STATUS_OK) {
|
271
372
|
return status;
|
272
373
|
}
|
374
|
+
auto cconn = (duckdb::Connection *)connection;
|
273
375
|
|
376
|
+
auto has_table = cconn->TableInfo(table_name);
|
377
|
+
auto arrow_scan = cconn->TableFunction("arrow_scan", {duckdb::Value::POINTER((uintptr_t)input),
|
378
|
+
duckdb::Value::POINTER((uintptr_t)stream_produce),
|
379
|
+
duckdb::Value::POINTER((uintptr_t)get_schema)});
|
274
380
|
try {
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
381
|
+
if (!has_table) {
|
382
|
+
// We create the table based on an Arrow Scanner
|
383
|
+
arrow_scan->Create(table_name);
|
384
|
+
} else {
|
385
|
+
arrow_scan->CreateView("temp_adbc_view", true, true);
|
386
|
+
auto query = "insert into " + std::string(table_name) + " select * from temp_adbc_view";
|
387
|
+
auto result = cconn->Query(query);
|
388
|
+
}
|
283
389
|
// After creating a table, the arrow array stream is released. Hence we must set it as released to avoid
|
284
390
|
// double-releasing it
|
285
391
|
input->release = nullptr;
|
@@ -133,10 +133,6 @@ static AdbcStatusCode ReleaseDriver(struct AdbcDriver *driver, struct AdbcError
|
|
133
133
|
|
134
134
|
// Default stubs
|
135
135
|
|
136
|
-
AdbcStatusCode ConnectionCommit(struct AdbcConnection *, struct AdbcError *error) {
|
137
|
-
return ADBC_STATUS_NOT_IMPLEMENTED;
|
138
|
-
}
|
139
|
-
|
140
136
|
AdbcStatusCode ConnectionGetInfo(struct AdbcConnection *connection, uint32_t *info_codes, size_t info_codes_length,
|
141
137
|
struct ArrowArrayStream *out, struct AdbcError *error) {
|
142
138
|
return ADBC_STATUS_NOT_IMPLEMENTED;
|
@@ -147,27 +143,11 @@ AdbcStatusCode ConnectionGetTableSchema(struct AdbcConnection *, const char *, c
|
|
147
143
|
return ADBC_STATUS_NOT_IMPLEMENTED;
|
148
144
|
}
|
149
145
|
|
150
|
-
AdbcStatusCode ConnectionReadPartition(struct AdbcConnection *connection, const uint8_t *serialized_partition,
|
151
|
-
size_t serialized_length, struct ArrowArrayStream *out,
|
152
|
-
struct AdbcError *error) {
|
153
|
-
return ADBC_STATUS_NOT_IMPLEMENTED;
|
154
|
-
}
|
155
|
-
|
156
|
-
AdbcStatusCode ConnectionRollback(struct AdbcConnection *, struct AdbcError *error) {
|
157
|
-
return ADBC_STATUS_NOT_IMPLEMENTED;
|
158
|
-
}
|
159
|
-
|
160
146
|
AdbcStatusCode StatementBind(struct AdbcStatement *, struct ArrowArray *, struct ArrowSchema *,
|
161
147
|
struct AdbcError *error) {
|
162
148
|
return ADBC_STATUS_NOT_IMPLEMENTED;
|
163
149
|
}
|
164
150
|
|
165
|
-
AdbcStatusCode StatementExecutePartitions(struct AdbcStatement *statement, struct ArrowSchema *schema,
|
166
|
-
struct AdbcPartitions *partitions, int64_t *rows_affected,
|
167
|
-
struct AdbcError *error) {
|
168
|
-
return ADBC_STATUS_NOT_IMPLEMENTED;
|
169
|
-
}
|
170
|
-
|
171
151
|
AdbcStatusCode StatementGetParameterSchema(struct AdbcStatement *statement, struct ArrowSchema *schema,
|
172
152
|
struct AdbcError *error) {
|
173
153
|
return ADBC_STATUS_NOT_IMPLEMENTED;
|
@@ -16,7 +16,7 @@
|
|
16
16
|
namespace duckdb {
|
17
17
|
|
18
18
|
void ArrowConverter::ToArrowArray(DataChunk &input, ArrowArray *out_array, ArrowOptions options) {
|
19
|
-
ArrowAppender appender(input.GetTypes(), input.size(), options);
|
19
|
+
ArrowAppender appender(input.GetTypes(), input.size(), std::move(options));
|
20
20
|
appender.Append(input, 0, input.size(), input.size());
|
21
21
|
*out_array = appender.Finalize();
|
22
22
|
}
|
@@ -59,10 +59,10 @@ void InitializeChild(ArrowSchema &child, const string &name = "") {
|
|
59
59
|
child.dictionary = nullptr;
|
60
60
|
}
|
61
61
|
void SetArrowFormat(DuckDBArrowSchemaHolder &root_holder, ArrowSchema &child, const LogicalType &type,
|
62
|
-
const
|
62
|
+
const ArrowOptions &options);
|
63
63
|
|
64
64
|
void SetArrowMapFormat(DuckDBArrowSchemaHolder &root_holder, ArrowSchema &child, const LogicalType &type,
|
65
|
-
const
|
65
|
+
const ArrowOptions &options) {
|
66
66
|
child.format = "+m";
|
67
67
|
//! Map has one child which is a struct
|
68
68
|
child.n_children = 1;
|
@@ -73,11 +73,11 @@ void SetArrowMapFormat(DuckDBArrowSchemaHolder &root_holder, ArrowSchema &child,
|
|
73
73
|
InitializeChild(root_holder.nested_children.back()[0]);
|
74
74
|
child.children = &root_holder.nested_children_ptr.back()[0];
|
75
75
|
child.children[0]->name = "entries";
|
76
|
-
SetArrowFormat(root_holder, **child.children, ListType::GetChildType(type),
|
76
|
+
SetArrowFormat(root_holder, **child.children, ListType::GetChildType(type), options);
|
77
77
|
}
|
78
78
|
|
79
79
|
void SetArrowFormat(DuckDBArrowSchemaHolder &root_holder, ArrowSchema &child, const LogicalType &type,
|
80
|
-
const
|
80
|
+
const ArrowOptions &options) {
|
81
81
|
switch (type.id()) {
|
82
82
|
case LogicalTypeId::BOOLEAN:
|
83
83
|
child.format = "b";
|
@@ -134,7 +134,7 @@ void SetArrowFormat(DuckDBArrowSchemaHolder &root_holder, ArrowSchema &child, co
|
|
134
134
|
child.format = "tsu:";
|
135
135
|
break;
|
136
136
|
case LogicalTypeId::TIMESTAMP_TZ: {
|
137
|
-
string format = "tsu:" +
|
137
|
+
string format = "tsu:" + options.time_zone;
|
138
138
|
auto format_ptr = make_unsafe_uniq_array<char>(format.size() + 1);
|
139
139
|
for (size_t i = 0; i < format.size(); i++) {
|
140
140
|
format_ptr[i] = format[i];
|
@@ -192,7 +192,7 @@ void SetArrowFormat(DuckDBArrowSchemaHolder &root_holder, ArrowSchema &child, co
|
|
192
192
|
InitializeChild(root_holder.nested_children.back()[0]);
|
193
193
|
child.children = &root_holder.nested_children_ptr.back()[0];
|
194
194
|
child.children[0]->name = "l";
|
195
|
-
SetArrowFormat(root_holder, **child.children, ListType::GetChildType(type),
|
195
|
+
SetArrowFormat(root_holder, **child.children, ListType::GetChildType(type), options);
|
196
196
|
break;
|
197
197
|
}
|
198
198
|
case LogicalTypeId::STRUCT: {
|
@@ -220,13 +220,12 @@ void SetArrowFormat(DuckDBArrowSchemaHolder &root_holder, ArrowSchema &child, co
|
|
220
220
|
root_holder.owned_type_names.push_back(std::move(name_ptr));
|
221
221
|
|
222
222
|
child.children[type_idx]->name = root_holder.owned_type_names.back().get();
|
223
|
-
SetArrowFormat(root_holder, *child.children[type_idx], child_types[type_idx].second,
|
224
|
-
options);
|
223
|
+
SetArrowFormat(root_holder, *child.children[type_idx], child_types[type_idx].second, options);
|
225
224
|
}
|
226
225
|
break;
|
227
226
|
}
|
228
227
|
case LogicalTypeId::MAP: {
|
229
|
-
SetArrowMapFormat(root_holder, child, type,
|
228
|
+
SetArrowMapFormat(root_holder, child, type, options);
|
230
229
|
break;
|
231
230
|
}
|
232
231
|
case LogicalTypeId::ENUM: {
|
@@ -259,7 +258,7 @@ void SetArrowFormat(DuckDBArrowSchemaHolder &root_holder, ArrowSchema &child, co
|
|
259
258
|
}
|
260
259
|
|
261
260
|
void ArrowConverter::ToArrowSchema(ArrowSchema *out_schema, const vector<LogicalType> &types,
|
262
|
-
const vector<string> &names, const
|
261
|
+
const vector<string> &names, const ArrowOptions &options) {
|
263
262
|
D_ASSERT(out_schema);
|
264
263
|
D_ASSERT(types.size() == names.size());
|
265
264
|
idx_t column_count = types.size();
|
@@ -287,7 +286,7 @@ void ArrowConverter::ToArrowSchema(ArrowSchema *out_schema, const vector<Logical
|
|
287
286
|
|
288
287
|
auto &child = root_holder->children[col_idx];
|
289
288
|
InitializeChild(child, names[col_idx]);
|
290
|
-
SetArrowFormat(*root_holder, child, types[col_idx],
|
289
|
+
SetArrowFormat(*root_holder, child, types[col_idx], options);
|
291
290
|
}
|
292
291
|
|
293
292
|
// Release ownership to caller
|
@@ -80,7 +80,7 @@ int ResultArrowArrayStreamWrapper::MyStreamGetSchema(struct ArrowArrayStream *st
|
|
80
80
|
auto my_stream = reinterpret_cast<ResultArrowArrayStreamWrapper *>(stream->private_data);
|
81
81
|
if (!my_stream->column_types.empty()) {
|
82
82
|
ArrowConverter::ToArrowSchema(out, my_stream->column_types, my_stream->column_names,
|
83
|
-
my_stream->
|
83
|
+
QueryResult::GetArrowOptions(*my_stream->result));
|
84
84
|
return 0;
|
85
85
|
}
|
86
86
|
|
@@ -100,7 +100,8 @@ int ResultArrowArrayStreamWrapper::MyStreamGetSchema(struct ArrowArrayStream *st
|
|
100
100
|
my_stream->column_types = result.types;
|
101
101
|
my_stream->column_names = result.names;
|
102
102
|
}
|
103
|
-
ArrowConverter::ToArrowSchema(out, my_stream->column_types, my_stream->column_names,
|
103
|
+
ArrowConverter::ToArrowSchema(out, my_stream->column_types, my_stream->column_names,
|
104
|
+
QueryResult::GetArrowOptions(*my_stream->result));
|
104
105
|
return 0;
|
105
106
|
}
|
106
107
|
|
@@ -186,7 +187,7 @@ bool ArrowUtil::TryFetchNext(QueryResult &result, unique_ptr<DataChunk> &chunk,
|
|
186
187
|
bool ArrowUtil::TryFetchChunk(QueryResult *result, idx_t chunk_size, ArrowArray *out, idx_t &count,
|
187
188
|
PreservedError &error) {
|
188
189
|
count = 0;
|
189
|
-
ArrowAppender appender(result->types, chunk_size);
|
190
|
+
ArrowAppender appender(result->types, chunk_size, QueryResult::GetArrowOptions(*result));
|
190
191
|
auto ¤t_chunk = result->current_chunk;
|
191
192
|
if (current_chunk.Valid()) {
|
192
193
|
// We start by scanning the non-finished current chunk
|
@@ -73,8 +73,11 @@ string Exception::ConstructMessageRecursive(const string &msg, std::vector<Excep
|
|
73
73
|
parameter_count++;
|
74
74
|
}
|
75
75
|
if (parameter_count != values.size()) {
|
76
|
-
throw InternalException("
|
76
|
+
throw InternalException("Primary exception: %s\nSecondary exception in ConstructMessageRecursive: Expected %d "
|
77
|
+
"parameters, received %d",
|
78
|
+
msg.c_str(), parameter_count, values.size());
|
77
79
|
}
|
80
|
+
|
78
81
|
#endif
|
79
82
|
return ExceptionFormatValue::Format(msg, values);
|
80
83
|
}
|
@@ -68,22 +68,31 @@ ExceptionFormatValue ExceptionFormatValue::CreateFormatValue(hugeint_t value) {
|
|
68
68
|
}
|
69
69
|
|
70
70
|
string ExceptionFormatValue::Format(const string &msg, std::vector<ExceptionFormatValue> &values) {
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
71
|
+
try {
|
72
|
+
std::vector<duckdb_fmt::basic_format_arg<duckdb_fmt::printf_context>> format_args;
|
73
|
+
for (auto &val : values) {
|
74
|
+
switch (val.type) {
|
75
|
+
case ExceptionFormatValueType::FORMAT_VALUE_TYPE_DOUBLE:
|
76
|
+
format_args.push_back(duckdb_fmt::internal::make_arg<duckdb_fmt::printf_context>(val.dbl_val));
|
77
|
+
break;
|
78
|
+
case ExceptionFormatValueType::FORMAT_VALUE_TYPE_INTEGER:
|
79
|
+
format_args.push_back(duckdb_fmt::internal::make_arg<duckdb_fmt::printf_context>(val.int_val));
|
80
|
+
break;
|
81
|
+
case ExceptionFormatValueType::FORMAT_VALUE_TYPE_STRING:
|
82
|
+
format_args.push_back(duckdb_fmt::internal::make_arg<duckdb_fmt::printf_context>(val.str_val));
|
83
|
+
break;
|
84
|
+
}
|
83
85
|
}
|
84
|
-
|
85
|
-
|
86
|
-
|
86
|
+
return duckdb_fmt::vsprintf(msg, duckdb_fmt::basic_format_args<duckdb_fmt::printf_context>(
|
87
|
+
format_args.data(), static_cast<int>(format_args.size())));
|
88
|
+
} catch (std::exception &ex) { // LCOV_EXCL_START
|
89
|
+
// work-around for oss-fuzz limiting memory which causes issues here
|
90
|
+
if (StringUtil::Contains(ex.what(), "fuzz mode")) {
|
91
|
+
throw Exception(msg);
|
92
|
+
}
|
93
|
+
throw InternalException(std::string("Primary exception: ") + msg +
|
94
|
+
"\nSecondary exception in ExceptionFormatValue: " + ex.what());
|
95
|
+
} // LCOV_EXCL_STOP
|
87
96
|
}
|
88
97
|
|
89
98
|
} // namespace duckdb
|
@@ -34,6 +34,9 @@ vector<string> MultiFileReader::GetFileList(ClientContext &context, const Value
|
|
34
34
|
if (val.IsNull()) {
|
35
35
|
throw ParserException("%s reader cannot take NULL input as parameter", name);
|
36
36
|
}
|
37
|
+
if (val.type().id() != LogicalTypeId::VARCHAR) {
|
38
|
+
throw ParserException("%s reader can only take a list of strings as a parameter", name);
|
39
|
+
}
|
37
40
|
auto glob_files = fs.GlobFiles(StringValue::Get(val), context, options);
|
38
41
|
files.insert(files.end(), glob_files.begin(), glob_files.end());
|
39
42
|
}
|
@@ -28,7 +28,7 @@ double RandomEngine::NextRandom(double min, double max) {
|
|
28
28
|
}
|
29
29
|
|
30
30
|
double RandomEngine::NextRandom() {
|
31
|
-
return random_state->pcg()
|
31
|
+
return std::ldexp(random_state->pcg(), -32);
|
32
32
|
}
|
33
33
|
uint32_t RandomEngine::NextRandomInteger() {
|
34
34
|
return random_state->pcg();
|
@@ -101,16 +101,17 @@ void RowDataCollectionScanner::AlignHeapBlocks(RowDataCollection &swizzled_block
|
|
101
101
|
make_uniq<RowDataBlock>(buffer_manager, MaxValue<idx_t>(total_size, (idx_t)Storage::BLOCK_SIZE), 1));
|
102
102
|
auto new_heap_handle = buffer_manager.Pin(swizzled_string_heap.blocks.back()->block);
|
103
103
|
auto new_heap_ptr = new_heap_handle.Ptr();
|
104
|
+
for (auto &ptr_and_size : ptrs_and_sizes) {
|
105
|
+
memcpy(new_heap_ptr, ptr_and_size.first, ptr_and_size.second);
|
106
|
+
new_heap_ptr += ptr_and_size.second;
|
107
|
+
}
|
108
|
+
new_heap_ptr = new_heap_handle.Ptr();
|
104
109
|
if (swizzled_string_heap.keep_pinned) {
|
105
110
|
// Since the heap blocks are pinned, we can unswizzle the data again.
|
106
111
|
swizzled_string_heap.pinned_blocks.emplace_back(std::move(new_heap_handle));
|
107
112
|
RowOperations::UnswizzlePointers(layout, base_row_ptr, new_heap_ptr, data_block->count);
|
108
113
|
RowOperations::UnswizzleHeapPointer(layout, base_row_ptr, new_heap_ptr, data_block->count);
|
109
114
|
}
|
110
|
-
for (auto &ptr_and_size : ptrs_and_sizes) {
|
111
|
-
memcpy(new_heap_ptr, ptr_and_size.first, ptr_and_size.second);
|
112
|
-
new_heap_ptr += ptr_and_size.second;
|
113
|
-
}
|
114
115
|
}
|
115
116
|
}
|
116
117
|
|
@@ -62,8 +62,21 @@ inline string_t TupleDataWithinListValueLoad(const data_ptr_t &location, data_pt
|
|
62
62
|
return result;
|
63
63
|
}
|
64
64
|
|
65
|
+
#ifdef DEBUG
|
66
|
+
static void ResetCombinedListData(vector<TupleDataVectorFormat> &vector_data) {
|
67
|
+
for (auto &vd : vector_data) {
|
68
|
+
vd.combined_list_data = nullptr;
|
69
|
+
ResetCombinedListData(vd.child_formats);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
#endif
|
73
|
+
|
65
74
|
void TupleDataCollection::ComputeHeapSizes(TupleDataChunkState &chunk_state, const DataChunk &new_chunk,
|
66
75
|
const SelectionVector &append_sel, const idx_t append_count) {
|
76
|
+
#ifdef DEBUG
|
77
|
+
ResetCombinedListData(chunk_state.vector_data);
|
78
|
+
#endif
|
79
|
+
|
67
80
|
auto heap_sizes = FlatVector::GetData<idx_t>(chunk_state.heap_sizes);
|
68
81
|
std::fill_n(heap_sizes, new_chunk.size(), 0);
|
69
82
|
|
@@ -293,7 +306,12 @@ static void ApplySliceRecursive(const Vector &source_v, TupleDataVectorFormat &s
|
|
293
306
|
for (idx_t struct_col_idx = 0; struct_col_idx < struct_sources.size(); struct_col_idx++) {
|
294
307
|
auto &struct_source = *struct_sources[struct_col_idx];
|
295
308
|
auto &struct_format = source_format.child_formats[struct_col_idx];
|
296
|
-
|
309
|
+
#ifdef DEBUG
|
310
|
+
D_ASSERT(!struct_format.combined_list_data);
|
311
|
+
#endif
|
312
|
+
if (!struct_format.combined_list_data) {
|
313
|
+
struct_format.combined_list_data = make_uniq<CombinedListData>();
|
314
|
+
}
|
297
315
|
ApplySliceRecursive(struct_source, struct_format, *source_format.data.sel, count);
|
298
316
|
}
|
299
317
|
}
|
@@ -308,14 +326,15 @@ void TupleDataCollection::ListWithinListComputeHeapSizes(Vector &heap_sizes_v, c
|
|
308
326
|
const auto list_entries = UnifiedVectorFormat::GetData<list_entry_t>(list_data);
|
309
327
|
const auto &list_validity = list_data.validity;
|
310
328
|
|
311
|
-
// Child list
|
329
|
+
// Child list ("source_v")
|
312
330
|
const auto &child_list_data = source_format.data;
|
313
331
|
const auto child_list_sel = *child_list_data.sel;
|
314
332
|
const auto child_list_entries = UnifiedVectorFormat::GetData<list_entry_t>(child_list_data);
|
315
333
|
const auto &child_list_validity = child_list_data.validity;
|
316
334
|
|
317
|
-
// Figure out actual child list size (
|
318
|
-
|
335
|
+
// Figure out actual child list size (can differ from ListVector::GetListSize if dict/const vector),
|
336
|
+
// and we cannot use ConstantVector::ZeroSelectionVector because it may need to be longer than STANDARD_VECTOR_SIZE
|
337
|
+
idx_t sum_of_sizes = 0;
|
319
338
|
for (idx_t i = 0; i < append_count; i++) {
|
320
339
|
const auto list_idx = list_sel.get_index(append_sel.get_index(i));
|
321
340
|
if (!list_validity.RowIsValid(list_idx)) {
|
@@ -324,15 +343,33 @@ void TupleDataCollection::ListWithinListComputeHeapSizes(Vector &heap_sizes_v, c
|
|
324
343
|
const auto &list_entry = list_entries[list_idx];
|
325
344
|
const auto &list_offset = list_entry.offset;
|
326
345
|
const auto &list_length = list_entry.length;
|
327
|
-
|
346
|
+
|
347
|
+
for (idx_t child_i = 0; child_i < list_length; child_i++) {
|
348
|
+
const auto child_list_idx = child_list_sel.get_index(list_offset + child_i);
|
349
|
+
if (!child_list_validity.RowIsValid(child_list_idx)) {
|
350
|
+
continue;
|
351
|
+
}
|
352
|
+
|
353
|
+
const auto &child_list_entry = child_list_entries[child_list_idx];
|
354
|
+
const auto &child_list_length = child_list_entry.length;
|
355
|
+
|
356
|
+
sum_of_sizes += child_list_length;
|
357
|
+
}
|
328
358
|
}
|
359
|
+
const auto child_list_child_count = MaxValue<idx_t>(sum_of_sizes, ListVector::GetListSize(source_v));
|
329
360
|
|
330
361
|
// Target
|
331
362
|
auto heap_sizes = FlatVector::GetData<idx_t>(heap_sizes_v);
|
332
363
|
|
333
364
|
// Construct combined list entries and a selection vector for the child list child
|
334
365
|
auto &child_format = source_format.child_formats[0];
|
335
|
-
|
366
|
+
#ifdef DEBUG
|
367
|
+
// In debug mode this should be deleted by ResetCombinedListData
|
368
|
+
D_ASSERT(!child_format.combined_list_data);
|
369
|
+
#endif
|
370
|
+
if (!child_format.combined_list_data) {
|
371
|
+
child_format.combined_list_data = make_uniq<CombinedListData>();
|
372
|
+
}
|
336
373
|
auto &combined_list_data = *child_format.combined_list_data;
|
337
374
|
auto &combined_list_entries = combined_list_data.combined_list_entries;
|
338
375
|
SelectionVector combined_sel(child_list_child_count);
|
@@ -365,7 +402,7 @@ void TupleDataCollection::ListWithinListComputeHeapSizes(Vector &heap_sizes_v, c
|
|
365
402
|
const auto &child_list_offset = child_list_entry.offset;
|
366
403
|
const auto &child_list_length = child_list_entry.length;
|
367
404
|
|
368
|
-
// Add this child's list
|
405
|
+
// Add this child's list entries to the combined selection vector
|
369
406
|
for (idx_t child_value_i = 0; child_value_i < child_list_length; child_value_i++) {
|
370
407
|
auto idx = combined_list_offset + child_list_size + child_value_i;
|
371
408
|
auto loc = child_list_offset + child_value_i;
|