duckdb 0.8.1-dev96.0 → 0.8.1
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
@@ -23,46 +23,50 @@ struct StddevState {
|
|
23
23
|
// method, DOI: 10.2307/1266577
|
24
24
|
struct STDDevBaseOperation {
|
25
25
|
template <class STATE>
|
26
|
-
static void Initialize(STATE
|
27
|
-
state
|
28
|
-
state
|
29
|
-
state
|
26
|
+
static void Initialize(STATE &state) {
|
27
|
+
state.count = 0;
|
28
|
+
state.mean = 0;
|
29
|
+
state.dsquared = 0;
|
30
30
|
}
|
31
31
|
|
32
|
-
template <class INPUT_TYPE, class STATE
|
33
|
-
static void
|
32
|
+
template <class INPUT_TYPE, class STATE>
|
33
|
+
static void Execute(STATE &state, const INPUT_TYPE &input) {
|
34
34
|
// update running mean and d^2
|
35
|
-
state
|
36
|
-
const double
|
37
|
-
const double
|
38
|
-
const double
|
39
|
-
const double
|
40
|
-
|
41
|
-
|
42
|
-
state
|
43
|
-
|
35
|
+
state.count++;
|
36
|
+
const double mean_differential = (input - state.mean) / state.count;
|
37
|
+
const double new_mean = state.mean + mean_differential;
|
38
|
+
const double dsquared_increment = (input - new_mean) * (input - state.mean);
|
39
|
+
const double new_dsquared = state.dsquared + dsquared_increment;
|
40
|
+
|
41
|
+
state.mean = new_mean;
|
42
|
+
state.dsquared = new_dsquared;
|
43
|
+
|
44
|
+
}
|
45
|
+
|
46
|
+
template <class INPUT_TYPE, class STATE, class OP>
|
47
|
+
static void Operation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &) {
|
48
|
+
Execute(state, input);
|
44
49
|
}
|
45
50
|
|
46
51
|
template <class INPUT_TYPE, class STATE, class OP>
|
47
|
-
static void ConstantOperation(STATE
|
48
|
-
ValidityMask &mask, idx_t count) {
|
52
|
+
static void ConstantOperation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input, idx_t count) {
|
49
53
|
for (idx_t i = 0; i < count; i++) {
|
50
|
-
Operation<INPUT_TYPE, STATE, OP>(state,
|
54
|
+
Operation<INPUT_TYPE, STATE, OP>(state, input, unary_input);
|
51
55
|
}
|
52
56
|
}
|
53
57
|
|
54
58
|
template <class STATE, class OP>
|
55
|
-
static void Combine(const STATE &source, STATE
|
56
|
-
if (target
|
57
|
-
|
59
|
+
static void Combine(const STATE &source, STATE &target, AggregateInputData &) {
|
60
|
+
if (target.count == 0) {
|
61
|
+
target = source;
|
58
62
|
} else if (source.count > 0) {
|
59
|
-
const auto count = target
|
60
|
-
const auto mean = (source.count * source.mean + target
|
61
|
-
const auto delta = source.mean - target
|
62
|
-
target
|
63
|
-
source.dsquared + target
|
64
|
-
target
|
65
|
-
target
|
63
|
+
const auto count = target.count + source.count;
|
64
|
+
const auto mean = (source.count * source.mean + target.count * target.mean) / count;
|
65
|
+
const auto delta = source.mean - target.mean;
|
66
|
+
target.dsquared =
|
67
|
+
source.dsquared + target.dsquared + delta * delta * source.count * target.count / count;
|
68
|
+
target.mean = mean;
|
69
|
+
target.count = count;
|
66
70
|
}
|
67
71
|
}
|
68
72
|
|
@@ -73,12 +77,12 @@ struct STDDevBaseOperation {
|
|
73
77
|
|
74
78
|
struct VarSampOperation : public STDDevBaseOperation {
|
75
79
|
template <class T, class STATE>
|
76
|
-
static void Finalize(
|
77
|
-
if (state
|
78
|
-
|
80
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
81
|
+
if (state.count <= 1) {
|
82
|
+
finalize_data.ReturnNull();
|
79
83
|
} else {
|
80
|
-
target
|
81
|
-
if (!Value::DoubleIsFinite(target
|
84
|
+
target = state.dsquared / (state.count - 1);
|
85
|
+
if (!Value::DoubleIsFinite(target)) {
|
82
86
|
throw OutOfRangeException("VARSAMP is out of range!");
|
83
87
|
}
|
84
88
|
}
|
@@ -87,12 +91,12 @@ struct VarSampOperation : public STDDevBaseOperation {
|
|
87
91
|
|
88
92
|
struct VarPopOperation : public STDDevBaseOperation {
|
89
93
|
template <class T, class STATE>
|
90
|
-
static void Finalize(
|
91
|
-
if (state
|
92
|
-
|
94
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
95
|
+
if (state.count == 0) {
|
96
|
+
finalize_data.ReturnNull();
|
93
97
|
} else {
|
94
|
-
target
|
95
|
-
if (!Value::DoubleIsFinite(target
|
98
|
+
target = state.count > 1 ? (state.dsquared / state.count) : 0;
|
99
|
+
if (!Value::DoubleIsFinite(target)) {
|
96
100
|
throw OutOfRangeException("VARPOP is out of range!");
|
97
101
|
}
|
98
102
|
}
|
@@ -101,12 +105,12 @@ struct VarPopOperation : public STDDevBaseOperation {
|
|
101
105
|
|
102
106
|
struct STDDevSampOperation : public STDDevBaseOperation {
|
103
107
|
template <class T, class STATE>
|
104
|
-
static void Finalize(
|
105
|
-
if (state
|
106
|
-
|
108
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
109
|
+
if (state.count <= 1) {
|
110
|
+
finalize_data.ReturnNull();
|
107
111
|
} else {
|
108
|
-
target
|
109
|
-
if (!Value::DoubleIsFinite(target
|
112
|
+
target = sqrt(state.dsquared / (state.count - 1));
|
113
|
+
if (!Value::DoubleIsFinite(target)) {
|
110
114
|
throw OutOfRangeException("STDDEV_SAMP is out of range!");
|
111
115
|
}
|
112
116
|
}
|
@@ -115,12 +119,12 @@ struct STDDevSampOperation : public STDDevBaseOperation {
|
|
115
119
|
|
116
120
|
struct STDDevPopOperation : public STDDevBaseOperation {
|
117
121
|
template <class T, class STATE>
|
118
|
-
static void Finalize(
|
119
|
-
if (state
|
120
|
-
|
122
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
123
|
+
if (state.count == 0) {
|
124
|
+
finalize_data.ReturnNull();
|
121
125
|
} else {
|
122
|
-
target
|
123
|
-
if (!Value::DoubleIsFinite(target
|
126
|
+
target = state.count > 1 ? sqrt(state.dsquared / state.count) : 0;
|
127
|
+
if (!Value::DoubleIsFinite(target)) {
|
124
128
|
throw OutOfRangeException("STDDEV_POP is out of range!");
|
125
129
|
}
|
126
130
|
}
|
@@ -129,12 +133,12 @@ struct STDDevPopOperation : public STDDevBaseOperation {
|
|
129
133
|
|
130
134
|
struct StandardErrorOfTheMeanOperation : public STDDevBaseOperation {
|
131
135
|
template <class T, class STATE>
|
132
|
-
static void Finalize(
|
133
|
-
if (state
|
134
|
-
|
136
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
137
|
+
if (state.count == 0) {
|
138
|
+
finalize_data.ReturnNull();
|
135
139
|
} else {
|
136
|
-
target
|
137
|
-
if (!Value::DoubleIsFinite(target
|
140
|
+
target = sqrt(state.dsquared / state.count) / sqrt((state.count));
|
141
|
+
if (!Value::DoubleIsFinite(target)) {
|
138
142
|
throw OutOfRangeException("SEM is out of range!");
|
139
143
|
}
|
140
144
|
}
|
@@ -16,26 +16,25 @@ namespace duckdb {
|
|
16
16
|
|
17
17
|
struct RegrCountFunction {
|
18
18
|
template <class STATE>
|
19
|
-
static void Initialize(STATE
|
20
|
-
|
19
|
+
static void Initialize(STATE &state) {
|
20
|
+
state = 0;
|
21
21
|
}
|
22
22
|
|
23
23
|
template <class STATE, class OP>
|
24
|
-
static void Combine(const STATE &source, STATE
|
25
|
-
|
24
|
+
static void Combine(const STATE &source, STATE &target, AggregateInputData &) {
|
25
|
+
target += source;
|
26
26
|
}
|
27
27
|
|
28
28
|
template <class T, class STATE>
|
29
|
-
static void Finalize(
|
30
|
-
target
|
29
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
30
|
+
target = state;
|
31
31
|
}
|
32
32
|
static bool IgnoreNull() {
|
33
33
|
return true;
|
34
34
|
}
|
35
35
|
template <class A_TYPE, class B_TYPE, class STATE, class OP>
|
36
|
-
static void Operation(STATE
|
37
|
-
|
38
|
-
*state += 1;
|
36
|
+
static void Operation(STATE &state, const A_TYPE &, const B_TYPE &, AggregateBinaryInput &) {
|
37
|
+
state += 1;
|
39
38
|
}
|
40
39
|
};
|
41
40
|
|
@@ -19,40 +19,38 @@ struct RegrSlopeState {
|
|
19
19
|
|
20
20
|
struct RegrSlopeOperation {
|
21
21
|
template <class STATE>
|
22
|
-
static void Initialize(STATE
|
23
|
-
CovarOperation::Initialize<CovarState>(
|
24
|
-
STDDevBaseOperation::Initialize<StddevState>(
|
22
|
+
static void Initialize(STATE &state) {
|
23
|
+
CovarOperation::Initialize<CovarState>(state.cov_pop);
|
24
|
+
STDDevBaseOperation::Initialize<StddevState>(state.var_pop);
|
25
25
|
}
|
26
26
|
|
27
27
|
template <class A_TYPE, class B_TYPE, class STATE, class OP>
|
28
|
-
static void Operation(STATE
|
29
|
-
|
30
|
-
|
31
|
-
bmask, amask, yidx, xidx);
|
32
|
-
STDDevBaseOperation::Operation<A_TYPE, StddevState, OP>(&state->var_pop, aggr_input_data, y_data, bmask, yidx);
|
28
|
+
static void Operation(STATE &state, const A_TYPE &x, const B_TYPE &y, AggregateBinaryInput &idata) {
|
29
|
+
CovarOperation::Operation<A_TYPE, B_TYPE, CovarState, OP>(state.cov_pop, x, y, idata);
|
30
|
+
STDDevBaseOperation::Execute<A_TYPE, StddevState>(state.var_pop, y);
|
33
31
|
}
|
34
32
|
|
35
33
|
template <class STATE, class OP>
|
36
|
-
static void Combine(const STATE &source, STATE
|
37
|
-
CovarOperation::Combine<CovarState, OP>(source.cov_pop,
|
38
|
-
STDDevBaseOperation::Combine<StddevState, OP>(source.var_pop,
|
34
|
+
static void Combine(const STATE &source, STATE &target, AggregateInputData &aggr_input_data) {
|
35
|
+
CovarOperation::Combine<CovarState, OP>(source.cov_pop, target.cov_pop, aggr_input_data);
|
36
|
+
STDDevBaseOperation::Combine<StddevState, OP>(source.var_pop, target.var_pop, aggr_input_data);
|
39
37
|
}
|
40
38
|
|
41
39
|
template <class T, class STATE>
|
42
|
-
static void Finalize(
|
43
|
-
if (state
|
44
|
-
|
40
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
41
|
+
if (state.cov_pop.count == 0 || state.var_pop.count == 0) {
|
42
|
+
finalize_data.ReturnNull();
|
45
43
|
} else {
|
46
|
-
auto cov = state
|
47
|
-
auto var_pop = state
|
44
|
+
auto cov = state.cov_pop.co_moment / state.cov_pop.count;
|
45
|
+
auto var_pop = state.var_pop.count > 1 ? (state.var_pop.dsquared / state.var_pop.count) : 0;
|
48
46
|
if (!Value::DoubleIsFinite(var_pop)) {
|
49
47
|
throw OutOfRangeException("VARPOP is out of range!");
|
50
48
|
}
|
51
49
|
if (var_pop == 0) {
|
52
|
-
|
50
|
+
finalize_data.ReturnNull();
|
53
51
|
return;
|
54
52
|
}
|
55
|
-
target
|
53
|
+
target = cov / var_pop;
|
56
54
|
}
|
57
55
|
}
|
58
56
|
|
@@ -133,27 +133,26 @@ struct HugeintAdd {
|
|
133
133
|
template <class STATEOP, class ADDOP>
|
134
134
|
struct BaseSumOperation {
|
135
135
|
template <class STATE>
|
136
|
-
static void Initialize(STATE
|
137
|
-
state
|
136
|
+
static void Initialize(STATE &state) {
|
137
|
+
state.value = 0;
|
138
138
|
STATEOP::template Initialize<STATE>(state);
|
139
139
|
}
|
140
140
|
|
141
141
|
template <class STATE, class OP>
|
142
|
-
static void Combine(const STATE &source, STATE
|
142
|
+
static void Combine(const STATE &source, STATE &target, AggregateInputData &aggr_input_data) {
|
143
143
|
STATEOP::template Combine<STATE>(source, target, aggr_input_data);
|
144
144
|
}
|
145
145
|
|
146
146
|
template <class INPUT_TYPE, class STATE, class OP>
|
147
|
-
static void Operation(STATE
|
147
|
+
static void Operation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &) {
|
148
148
|
STATEOP::template AddValues<STATE>(state, 1);
|
149
|
-
ADDOP::template AddNumber<STATE, INPUT_TYPE>(
|
149
|
+
ADDOP::template AddNumber<STATE, INPUT_TYPE>(state, input);
|
150
150
|
}
|
151
151
|
|
152
152
|
template <class INPUT_TYPE, class STATE, class OP>
|
153
|
-
static void ConstantOperation(STATE
|
154
|
-
idx_t count) {
|
153
|
+
static void ConstantOperation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &, idx_t count) {
|
155
154
|
STATEOP::template AddValues<STATE>(state, count);
|
156
|
-
ADDOP::template AddConstant<STATE, INPUT_TYPE>(
|
155
|
+
ADDOP::template AddConstant<STATE, INPUT_TYPE>(state, input, count);
|
157
156
|
}
|
158
157
|
|
159
158
|
static bool IgnoreNull() {
|
@@ -121,6 +121,15 @@ struct CurrentDatabaseFun {
|
|
121
121
|
static ScalarFunction GetFunction();
|
122
122
|
};
|
123
123
|
|
124
|
+
struct InSearchPathFun {
|
125
|
+
static constexpr const char *Name = "in_search_path";
|
126
|
+
static constexpr const char *Parameters = "database_name,schema_name";
|
127
|
+
static constexpr const char *Description = "Returns whether or not the database/schema are in the search path.";
|
128
|
+
static constexpr const char *Example = "in_search_path('memory', 'main')";
|
129
|
+
|
130
|
+
static ScalarFunction GetFunction();
|
131
|
+
};
|
132
|
+
|
124
133
|
struct CurrentTransactionIdFun {
|
125
134
|
static constexpr const char *Name = "txid_current";
|
126
135
|
static constexpr const char *Parameters = "";
|
@@ -43,10 +43,7 @@ struct MapEntriesFun {
|
|
43
43
|
struct MapExtractFun {
|
44
44
|
static constexpr const char *Name = "map_extract";
|
45
45
|
static constexpr const char *Parameters = "map,key";
|
46
|
-
static constexpr const char *Description =
|
47
|
-
"Return a list containing the value for a given key or an empty list if the key is not contained in the map. "
|
48
|
-
"The type of the key provided in the second parameter must match the type of the map’s keys else an error is "
|
49
|
-
"returned.";
|
46
|
+
static constexpr const char *Description = "Return a list containing the value for a given key or an empty list if the key is not contained in the map. The type of the key provided in the second parameter must match the type of the map’s keys else an error is returned.";
|
50
47
|
static constexpr const char *Example = "map_extract(map(['key'], ['val']), 'key')";
|
51
48
|
|
52
49
|
static ScalarFunction GetFunction();
|
@@ -70,8 +67,7 @@ struct MapFromEntriesFun {
|
|
70
67
|
struct MapConcatFun {
|
71
68
|
static constexpr const char *Name = "map_concat";
|
72
69
|
static constexpr const char *Parameters = "any,...";
|
73
|
-
static constexpr const char *Description = "Returns a map created from merging the input maps, on key collision "
|
74
|
-
"the value is taken from the last map with that key";
|
70
|
+
static constexpr const char *Description = "Returns a map created from merging the input maps, on key collision the value is taken from the last map with that key";
|
75
71
|
static constexpr const char *Example = "map_concat(map([1,2], ['a', 'b']), map([2,3], ['c', 'd']));";
|
76
72
|
|
77
73
|
static ScalarFunction GetFunction();
|
@@ -31,8 +31,7 @@ struct StartsWithFun {
|
|
31
31
|
struct ASCIIFun {
|
32
32
|
static constexpr const char *Name = "ascii";
|
33
33
|
static constexpr const char *Parameters = "string";
|
34
|
-
static constexpr const char *Description =
|
35
|
-
"Returns an integer that represents the Unicode code point of the first character of the string.";
|
34
|
+
static constexpr const char *Description = "Returns an integer that represents the Unicode code point of the first character of the string.";
|
36
35
|
static constexpr const char *Example = "ascii('Ω')";
|
37
36
|
|
38
37
|
static ScalarFunction GetFunction();
|
@@ -41,8 +40,7 @@ struct ASCIIFun {
|
|
41
40
|
struct BarFun {
|
42
41
|
static constexpr const char *Name = "bar";
|
43
42
|
static constexpr const char *Parameters = "x,min,max,width";
|
44
|
-
static constexpr const char *Description = "Draw a band whose width is proportional to (x - min) and equal to "
|
45
|
-
"width characters when x = max. width defaults to 80.";
|
43
|
+
static constexpr const char *Description = "Draw a band whose width is proportional to (x - min) and equal to width characters when x = max. width defaults to 80.";
|
46
44
|
static constexpr const char *Example = "bar(5, 0, 20, 10)";
|
47
45
|
|
48
46
|
static ScalarFunctionSet GetFunctions();
|
@@ -66,8 +64,7 @@ struct ToBinaryFun {
|
|
66
64
|
struct ChrFun {
|
67
65
|
static constexpr const char *Name = "chr";
|
68
66
|
static constexpr const char *Parameters = "code_point";
|
69
|
-
static constexpr const char *Description =
|
70
|
-
"returns a character which is corresponding the ASCII code value or Unicode code point";
|
67
|
+
static constexpr const char *Description = "returns a character which is corresponding the ASCII code value or Unicode code point";
|
71
68
|
static constexpr const char *Example = "chr(65)";
|
72
69
|
|
73
70
|
static ScalarFunction GetFunction();
|
@@ -76,10 +73,7 @@ struct ChrFun {
|
|
76
73
|
struct DamerauLevenshteinFun {
|
77
74
|
static constexpr const char *Name = "damerau_levenshtein";
|
78
75
|
static constexpr const char *Parameters = "str1,str2";
|
79
|
-
static constexpr const char *Description =
|
80
|
-
"Extension of Levenshtein distance to also include transposition of adjacent characters as an allowed edit "
|
81
|
-
"operation. In other words, the minimum number of edit operations (insertions, deletions, substitutions or "
|
82
|
-
"transpositions) required to change one string to another. Different case is considered different.";
|
76
|
+
static constexpr const char *Description = "Extension of Levenshtein distance to also include transposition of adjacent characters as an allowed edit operation. In other words, the minimum number of edit operations (insertions, deletions, substitutions or transpositions) required to change one string to another. Different case is considered different.";
|
83
77
|
static constexpr const char *Example = "damerau_levenshtein('hello', 'world')";
|
84
78
|
|
85
79
|
static ScalarFunction GetFunction();
|
@@ -112,8 +106,7 @@ struct FormatreadabledecimalsizeFun {
|
|
112
106
|
struct HammingFun {
|
113
107
|
static constexpr const char *Name = "hamming";
|
114
108
|
static constexpr const char *Parameters = "str1,str2";
|
115
|
-
static constexpr const char *Description = "The number of positions with different characters for 2 strings of "
|
116
|
-
"equal length. Different case is considered different.";
|
109
|
+
static constexpr const char *Description = "The number of positions with different characters for 2 strings of equal length. Different case is considered different.";
|
117
110
|
static constexpr const char *Example = "hamming('duck','luck')";
|
118
111
|
|
119
112
|
static ScalarFunction GetFunction();
|
@@ -143,8 +136,7 @@ struct ToHexFun {
|
|
143
136
|
struct InstrFun {
|
144
137
|
static constexpr const char *Name = "instr";
|
145
138
|
static constexpr const char *Parameters = "haystack,needle";
|
146
|
-
static constexpr const char *Description =
|
147
|
-
"Return location of first occurrence of needle in haystack, counting from 1. Returns 0 if no match found.";
|
139
|
+
static constexpr const char *Description = "Return location of first occurrence of needle in haystack, counting from 1. Returns 0 if no match found.";
|
148
140
|
static constexpr const char *Example = "instr('test test','es')";
|
149
141
|
|
150
142
|
static ScalarFunction GetFunction();
|
@@ -165,8 +157,7 @@ struct PositionFun {
|
|
165
157
|
struct JaccardFun {
|
166
158
|
static constexpr const char *Name = "jaccard";
|
167
159
|
static constexpr const char *Parameters = "str1,str2";
|
168
|
-
static constexpr const char *Description = "The Jaccard similarity between two strings. Different case is "
|
169
|
-
"considered different. Returns a number between 0 and 1.";
|
160
|
+
static constexpr const char *Description = "The Jaccard similarity between two strings. Different case is considered different. Returns a number between 0 and 1.";
|
170
161
|
static constexpr const char *Example = "jaccard('duck','luck')";
|
171
162
|
|
172
163
|
static ScalarFunction GetFunction();
|
@@ -175,8 +166,7 @@ struct JaccardFun {
|
|
175
166
|
struct JaroSimilarityFun {
|
176
167
|
static constexpr const char *Name = "jaro_similarity";
|
177
168
|
static constexpr const char *Parameters = "str1,str2";
|
178
|
-
static constexpr const char *Description = "The Jaro similarity between two strings. Different case is considered "
|
179
|
-
"different. Returns a number between 0 and 1.";
|
169
|
+
static constexpr const char *Description = "The Jaro similarity between two strings. Different case is considered different. Returns a number between 0 and 1.";
|
180
170
|
static constexpr const char *Example = "jaro_similarity('duck','duckdb')";
|
181
171
|
|
182
172
|
static ScalarFunction GetFunction();
|
@@ -185,8 +175,7 @@ struct JaroSimilarityFun {
|
|
185
175
|
struct JaroWinklerSimilarityFun {
|
186
176
|
static constexpr const char *Name = "jaro_winkler_similarity";
|
187
177
|
static constexpr const char *Parameters = "str1,str2";
|
188
|
-
static constexpr const char *Description = "The Jaro-Winkler similarity between two strings. Different case is "
|
189
|
-
"considered different. Returns a number between 0 and 1.";
|
178
|
+
static constexpr const char *Description = "The Jaro-Winkler similarity between two strings. Different case is considered different. Returns a number between 0 and 1.";
|
190
179
|
static constexpr const char *Example = "jaro_winkler_similarity('duck','duckdb')";
|
191
180
|
|
192
181
|
static ScalarFunction GetFunction();
|
@@ -213,9 +202,7 @@ struct LeftGraphemeFun {
|
|
213
202
|
struct LevenshteinFun {
|
214
203
|
static constexpr const char *Name = "levenshtein";
|
215
204
|
static constexpr const char *Parameters = "str1,str2";
|
216
|
-
static constexpr const char *Description =
|
217
|
-
"The minimum number of single-character edits (insertions, deletions or substitutions) required to change one "
|
218
|
-
"string to the other. Different case is considered different.";
|
205
|
+
static constexpr const char *Description = "The minimum number of single-character edits (insertions, deletions or substitutions) required to change one string to the other. Different case is considered different.";
|
219
206
|
static constexpr const char *Example = "levenshtein('duck','db')";
|
220
207
|
|
221
208
|
static ScalarFunction GetFunction();
|
@@ -230,8 +217,7 @@ struct Editdist3Fun {
|
|
230
217
|
struct LpadFun {
|
231
218
|
static constexpr const char *Name = "lpad";
|
232
219
|
static constexpr const char *Parameters = "string,count,character";
|
233
|
-
static constexpr const char *Description =
|
234
|
-
"Pads the string with the character from the left until it has count characters";
|
220
|
+
static constexpr const char *Description = "Pads the string with the character from the left until it has count characters";
|
235
221
|
static constexpr const char *Example = "lpad('hello', 10, '>')";
|
236
222
|
|
237
223
|
static ScalarFunction GetFunction();
|
@@ -240,8 +226,7 @@ struct LpadFun {
|
|
240
226
|
struct LtrimFun {
|
241
227
|
static constexpr const char *Name = "ltrim";
|
242
228
|
static constexpr const char *Parameters = "string,characters";
|
243
|
-
static constexpr const char *Description =
|
244
|
-
"Removes any occurrences of any of the characters from the left side of the string";
|
229
|
+
static constexpr const char *Description = "Removes any occurrences of any of the characters from the left side of the string";
|
245
230
|
static constexpr const char *Example = "ltrim('>>>>test<<', '><')";
|
246
231
|
|
247
232
|
static ScalarFunctionSet GetFunctions();
|
@@ -340,8 +325,7 @@ struct RightGraphemeFun {
|
|
340
325
|
struct RpadFun {
|
341
326
|
static constexpr const char *Name = "rpad";
|
342
327
|
static constexpr const char *Parameters = "string,count,character";
|
343
|
-
static constexpr const char *Description =
|
344
|
-
"Pads the string with the character from the right until it has count characters";
|
328
|
+
static constexpr const char *Description = "Pads the string with the character from the right until it has count characters";
|
345
329
|
static constexpr const char *Example = "rpad('hello', 10, '<')";
|
346
330
|
|
347
331
|
static ScalarFunction GetFunction();
|
@@ -350,8 +334,7 @@ struct RpadFun {
|
|
350
334
|
struct RtrimFun {
|
351
335
|
static constexpr const char *Name = "rtrim";
|
352
336
|
static constexpr const char *Parameters = "string,characters";
|
353
|
-
static constexpr const char *Description =
|
354
|
-
"Removes any occurrences of any of the characters from the right side of the string";
|
337
|
+
static constexpr const char *Description = "Removes any occurrences of any of the characters from the right side of the string";
|
355
338
|
static constexpr const char *Example = "rtrim('>>>>test<<', '><')";
|
356
339
|
|
357
340
|
static ScalarFunctionSet GetFunctions();
|
@@ -408,9 +391,7 @@ struct RegexpSplitToArrayFun {
|
|
408
391
|
struct TranslateFun {
|
409
392
|
static constexpr const char *Name = "translate";
|
410
393
|
static constexpr const char *Parameters = "string,from,to";
|
411
|
-
static constexpr const char *Description =
|
412
|
-
"Replaces each character in string that matches a character in the from set with the corresponding character "
|
413
|
-
"in the to set. If from is longer than to, occurrences of the extra characters in from are deleted.";
|
394
|
+
static constexpr const char *Description = "Replaces each character in string that matches a character in the from set with the corresponding character in the to set. If from is longer than to, occurrences of the extra characters in from are deleted.";
|
414
395
|
static constexpr const char *Example = "translate('12345', '143', 'ax')";
|
415
396
|
|
416
397
|
static ScalarFunction GetFunction();
|
@@ -419,8 +400,7 @@ struct TranslateFun {
|
|
419
400
|
struct TrimFun {
|
420
401
|
static constexpr const char *Name = "trim";
|
421
402
|
static constexpr const char *Parameters = "string,characters";
|
422
|
-
static constexpr const char *Description =
|
423
|
-
"Removes any occurrences of any of the characters from either side of the string";
|
403
|
+
static constexpr const char *Description = "Removes any occurrences of any of the characters from either side of the string";
|
424
404
|
static constexpr const char *Example = "trim('>>>>test<<', '><')";
|
425
405
|
|
426
406
|
static ScalarFunctionSet GetFunctions();
|
@@ -97,8 +97,11 @@ public:
|
|
97
97
|
//! Performs constraint checking for a chunk of input data
|
98
98
|
void CheckConstraintsForChunk(DataChunk &input, ConflictManager &conflict_manager) override;
|
99
99
|
|
100
|
-
//! Returns the string representation of the ART
|
101
|
-
string
|
100
|
+
//! Returns the string representation of the ART, or only traverses and verifies the index
|
101
|
+
string VerifyAndToString(IndexLock &state, const bool only_verify) override;
|
102
|
+
|
103
|
+
//! Find the node with a matching key, or return nullptr if not found
|
104
|
+
Node Lookup(Node node, const ARTKey &key, idx_t depth);
|
102
105
|
|
103
106
|
private:
|
104
107
|
//! Insert a row ID into a leaf
|
@@ -107,8 +110,7 @@ private:
|
|
107
110
|
bool Insert(Node &node, const ARTKey &key, idx_t depth, const row_t &row_id);
|
108
111
|
//! Erase a key from the tree (if a leaf has more than one value) or erase the leaf itself
|
109
112
|
void Erase(Node &node, const ARTKey &key, idx_t depth, const row_t &row_id);
|
110
|
-
|
111
|
-
Node Lookup(Node node, const ARTKey &key, idx_t depth);
|
113
|
+
|
112
114
|
//! Returns all row IDs belonging to a key greater (or equal) than the search key
|
113
115
|
bool SearchGreater(ARTIndexScanState &state, ARTKey &key, bool inclusive, idx_t max_count,
|
114
116
|
vector<row_t> &result_ids);
|
@@ -129,6 +131,10 @@ private:
|
|
129
131
|
//! Finalizes a vacuum operation by calling the finalize operation of all qualifying
|
130
132
|
//! fixed size allocators
|
131
133
|
void FinalizeVacuum(const ARTFlags &flags);
|
134
|
+
|
135
|
+
//! Internal function to return the string representation of the ART,
|
136
|
+
//! or only traverses and verifies the index
|
137
|
+
string VerifyAndToStringInternal(const bool only_verify);
|
132
138
|
};
|
133
139
|
|
134
140
|
} // namespace duckdb
|
@@ -100,6 +100,9 @@ public:
|
|
100
100
|
//! Vacuums a pointer
|
101
101
|
SwizzleablePointer VacuumPointer(const SwizzleablePointer ptr);
|
102
102
|
|
103
|
+
//! Verify that the allocation counts match the existing positions on the buffers
|
104
|
+
void Verify() const;
|
105
|
+
|
103
106
|
private:
|
104
107
|
//! Returns the data_ptr_t of a pointer
|
105
108
|
inline data_ptr_t Get(const SwizzleablePointer ptr) const {
|
@@ -73,7 +73,7 @@ public:
|
|
73
73
|
uint32_t FindRowId(const ART &art, Node &ptr, const row_t row_id) const;
|
74
74
|
|
75
75
|
//! Returns the string representation of a leaf
|
76
|
-
string
|
76
|
+
string VerifyAndToString(const ART &art, const bool only_verify) const;
|
77
77
|
|
78
78
|
//! Serialize this leaf
|
79
79
|
BlockPointer Serialize(const ART &art, MetaBlockWriter &writer) const;
|
@@ -26,6 +26,8 @@ public:
|
|
26
26
|
static inline LeafSegment &Get(const ART &art, const Node ptr) {
|
27
27
|
return *Node::GetAllocator(art, NType::LEAF_SEGMENT).Get<LeafSegment>(ptr);
|
28
28
|
}
|
29
|
+
//! Free the leaf segment and any subsequent ones
|
30
|
+
static void Free(ART &art, Node &node);
|
29
31
|
|
30
32
|
//! Append a row ID to the current segment, or create a new segment containing that row ID
|
31
33
|
LeafSegment &Append(ART &art, uint32_t &count, const row_t row_id);
|
@@ -65,13 +65,23 @@ public:
|
|
65
65
|
//! Free the node (and its subtree)
|
66
66
|
static void Free(ART &art, Node &node);
|
67
67
|
|
68
|
+
inline bool operator==(const Node &node) const {
|
69
|
+
return swizzle_flag == node.swizzle_flag && type == node.type && offset == node.offset &&
|
70
|
+
buffer_id == node.buffer_id;
|
71
|
+
}
|
72
|
+
|
68
73
|
//! Retrieve the node type from the leftmost byte
|
69
74
|
inline NType DecodeARTNodeType() const {
|
75
|
+
D_ASSERT(!IsSwizzled());
|
76
|
+
D_ASSERT(type >= (uint8_t)NType::PREFIX_SEGMENT);
|
77
|
+
D_ASSERT(type <= (uint8_t)NType::NODE_256);
|
70
78
|
return NType(type);
|
71
79
|
}
|
72
80
|
|
73
81
|
//! Set the pointer
|
74
82
|
inline void SetPtr(const SwizzleablePointer ptr) {
|
83
|
+
swizzle_flag = ptr.swizzle_flag;
|
84
|
+
type = ptr.type;
|
75
85
|
offset = ptr.offset;
|
76
86
|
buffer_id = ptr.buffer_id;
|
77
87
|
}
|
@@ -86,15 +96,15 @@ public:
|
|
86
96
|
//! Get the child for the respective byte in the node
|
87
97
|
optional_ptr<Node> GetChild(ART &art, const uint8_t byte) const;
|
88
98
|
//! Get the first child that is greater or equal to the specific byte
|
89
|
-
optional_ptr<Node> GetNextChild(ART &art, uint8_t &byte) const;
|
99
|
+
optional_ptr<Node> GetNextChild(ART &art, uint8_t &byte, const bool deserialize = true) const;
|
90
100
|
|
91
101
|
//! Serialize the node
|
92
102
|
BlockPointer Serialize(ART &art, MetaBlockWriter &writer);
|
93
103
|
//! Deserialize the node
|
94
104
|
void Deserialize(ART &art);
|
95
105
|
|
96
|
-
//! Returns the string representation of the node
|
97
|
-
string
|
106
|
+
//! Returns the string representation of the node, or only traverses and verifies the node and its subtree
|
107
|
+
string VerifyAndToString(ART &art, const bool only_verify);
|
98
108
|
//! Returns the capacity of the node
|
99
109
|
idx_t GetCapacity() const;
|
100
110
|
//! Returns a pointer to the prefix of the node
|
@@ -59,6 +59,7 @@ public:
|
|
59
59
|
//! Get the child for the respective byte in the node
|
60
60
|
inline optional_ptr<Node> GetChild(const uint8_t byte) {
|
61
61
|
if (child_index[byte] != Node::EMPTY_MARKER) {
|
62
|
+
D_ASSERT(children[child_index[byte]].IsSet());
|
62
63
|
return &children[child_index[byte]];
|
63
64
|
}
|
64
65
|
return nullptr;
|