duckdb 0.7.2-dev2740.0 → 0.7.2-dev2820.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 +21 -13
- package/package.json +1 -1
- package/src/duckdb/extension/icu/icu-strptime.cpp +1 -1
- package/src/duckdb/extension/json/include/json_functions.hpp +35 -37
- package/src/duckdb/extension/json/include/json_scan.hpp +1 -1
- package/src/duckdb/extension/json/include/json_transform.hpp +1 -1
- package/src/duckdb/extension/json/json-extension.cpp +10 -20
- package/src/duckdb/extension/json/json_functions/copy_json.cpp +2 -2
- package/src/duckdb/extension/json/json_functions/json_array_length.cpp +2 -3
- package/src/duckdb/extension/json/json_functions/json_contains.cpp +2 -2
- package/src/duckdb/extension/json/json_functions/json_create.cpp +20 -20
- package/src/duckdb/extension/json/json_functions/json_extract.cpp +4 -6
- package/src/duckdb/extension/json/json_functions/json_keys.cpp +2 -3
- package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +2 -2
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +8 -8
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +2 -2
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +4 -4
- package/src/duckdb/extension/json/json_functions/json_type.cpp +2 -3
- package/src/duckdb/extension/json/json_functions/json_valid.cpp +2 -2
- package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -6
- package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +4 -4
- package/src/duckdb/extension/json/json_functions.cpp +6 -6
- package/src/duckdb/extension/parquet/parquet-extension.cpp +11 -24
- package/src/duckdb/src/catalog/catalog_entry/pragma_function_catalog_entry.cpp +1 -2
- package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +1 -1
- package/src/duckdb/src/catalog/catalog_entry/scalar_macro_catalog_entry.cpp +2 -2
- package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +1 -2
- package/src/duckdb/src/catalog/catalog_transaction.cpp +4 -0
- package/src/duckdb/src/catalog/duck_catalog.cpp +8 -1
- package/src/duckdb/src/common/enums/date_part_specifier.cpp +82 -0
- package/src/duckdb/src/common/types/vector.cpp +136 -3
- package/src/duckdb/src/{function → core_functions}/aggregate/algebraic/avg.cpp +9 -12
- package/src/duckdb/src/core_functions/aggregate/algebraic/corr.cpp +13 -0
- package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +21 -0
- package/src/duckdb/src/core_functions/aggregate/algebraic/stddev.cpp +34 -0
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/approx_count.cpp +3 -3
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/arg_min_max.cpp +7 -23
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/bitagg.cpp +10 -10
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/bitstring_agg.cpp +4 -4
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/bool.cpp +1 -17
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/entropy.cpp +5 -4
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/kurtosis.cpp +5 -6
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/minmax.cpp +5 -5
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/product.cpp +2 -11
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/skew.cpp +5 -6
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/string_agg.cpp +4 -6
- package/src/duckdb/src/{function → core_functions}/aggregate/distributive/sum.cpp +38 -46
- package/src/duckdb/src/{function → core_functions}/aggregate/holistic/approximate_quantile.cpp +4 -5
- package/src/duckdb/src/{function → core_functions}/aggregate/holistic/mode.cpp +4 -5
- package/src/duckdb/src/{function → core_functions}/aggregate/holistic/quantile.cpp +31 -23
- package/src/duckdb/src/{function → core_functions}/aggregate/holistic/reservoir_quantile.cpp +4 -5
- package/src/duckdb/src/{function → core_functions}/aggregate/nested/histogram.cpp +4 -4
- package/src/duckdb/src/{function → core_functions}/aggregate/nested/list.cpp +6 -10
- package/src/duckdb/src/{function → core_functions}/aggregate/regression/regr_avg.cpp +7 -11
- package/src/duckdb/src/{function → core_functions}/aggregate/regression/regr_count.cpp +4 -4
- package/src/duckdb/src/{function → core_functions}/aggregate/regression/regr_intercept.cpp +5 -8
- package/src/duckdb/src/{function → core_functions}/aggregate/regression/regr_r2.cpp +5 -7
- package/src/duckdb/src/{function → core_functions}/aggregate/regression/regr_slope.cpp +5 -7
- package/src/duckdb/src/{function → core_functions}/aggregate/regression/regr_sxx_syy.cpp +8 -12
- package/src/duckdb/src/{function → core_functions}/aggregate/regression/regr_sxy.cpp +6 -8
- package/src/duckdb/src/core_functions/core_functions.cpp +50 -0
- package/src/duckdb/src/core_functions/function_list.cpp +352 -0
- package/src/duckdb/src/{function → core_functions}/scalar/bit/bitstring.cpp +12 -15
- package/src/duckdb/src/{function → core_functions}/scalar/blob/base64.cpp +6 -6
- package/src/duckdb/src/{function → core_functions}/scalar/blob/encode.cpp +7 -6
- package/src/duckdb/src/{function → core_functions}/scalar/date/age.cpp +3 -3
- package/src/duckdb/src/{function → core_functions}/scalar/date/current.cpp +8 -8
- package/src/duckdb/src/{function → core_functions}/scalar/date/date_diff.cpp +3 -6
- package/src/duckdb/src/{function → core_functions}/scalar/date/date_part.cpp +144 -148
- package/src/duckdb/src/{function → core_functions}/scalar/date/date_sub.cpp +3 -6
- package/src/duckdb/src/{function → core_functions}/scalar/date/date_trunc.cpp +3 -6
- package/src/duckdb/src/{function → core_functions}/scalar/date/epoch.cpp +7 -8
- package/src/duckdb/src/{function → core_functions}/scalar/date/make_date.cpp +14 -14
- package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +251 -0
- package/src/duckdb/src/{function → core_functions}/scalar/date/time_bucket.cpp +4 -5
- package/src/duckdb/src/{function → core_functions}/scalar/date/to_interval.cpp +39 -19
- package/src/duckdb/src/{function/scalar/enum/enum_functions_implementation.cpp → core_functions/scalar/enum/enum_functions.cpp} +18 -22
- package/src/duckdb/src/{function → core_functions}/scalar/generic/alias.cpp +4 -4
- package/src/duckdb/src/{function → core_functions}/scalar/generic/current_setting.cpp +4 -5
- package/src/duckdb/src/{function → core_functions}/scalar/generic/error.cpp +4 -4
- package/src/duckdb/src/{function → core_functions}/scalar/generic/hash.cpp +4 -4
- package/src/duckdb/src/{function → core_functions}/scalar/generic/least.cpp +8 -9
- package/src/duckdb/src/{function → core_functions}/scalar/generic/stats.cpp +4 -4
- package/src/duckdb/src/{function/scalar/system → core_functions/scalar/generic}/system_functions.cpp +24 -13
- package/src/duckdb/src/{function → core_functions}/scalar/generic/typeof.cpp +4 -4
- package/src/duckdb/src/{function → core_functions}/scalar/list/array_slice.cpp +3 -13
- package/src/duckdb/src/{function → core_functions}/scalar/list/flatten.cpp +5 -5
- package/src/duckdb/src/{function → core_functions}/scalar/list/list_aggregates.cpp +2 -13
- package/src/duckdb/src/{function → core_functions}/scalar/list/list_lambdas.cpp +9 -24
- package/src/duckdb/src/{function → core_functions}/scalar/list/list_sort.cpp +8 -22
- package/src/duckdb/src/{function → core_functions}/scalar/list/list_value.cpp +4 -5
- package/src/duckdb/src/{function → core_functions}/scalar/list/range.cpp +8 -6
- package/src/duckdb/src/{function → core_functions}/scalar/map/cardinality.cpp +5 -4
- package/src/duckdb/src/{function → core_functions}/scalar/map/map.cpp +6 -63
- package/src/duckdb/src/{function → core_functions}/scalar/map/map_entries.cpp +5 -4
- package/src/duckdb/src/{function → core_functions}/scalar/map/map_extract.cpp +22 -7
- package/src/duckdb/src/{function → core_functions}/scalar/map/map_from_entries.cpp +6 -5
- package/src/duckdb/src/{function → core_functions}/scalar/map/map_keys_values.cpp +8 -7
- package/src/duckdb/src/{function → core_functions}/scalar/math/numeric.cpp +110 -138
- package/src/duckdb/src/{function → core_functions}/scalar/operators/bitwise.cpp +19 -20
- package/src/duckdb/src/{function/scalar/math → core_functions/scalar/random}/random.cpp +5 -6
- package/src/duckdb/src/{function/scalar/math → core_functions/scalar/random}/setseed.cpp +3 -3
- package/src/duckdb/src/{function → core_functions}/scalar/string/ascii.cpp +4 -5
- package/src/duckdb/src/{function → core_functions}/scalar/string/bar.cpp +4 -4
- package/src/duckdb/src/{function → core_functions}/scalar/string/chr.cpp +5 -6
- package/src/duckdb/src/{function → core_functions}/scalar/string/damerau_levenshtein.cpp +4 -6
- package/src/duckdb/src/{function/scalar/string/mismatches.cpp → core_functions/scalar/string/hamming.cpp} +3 -12
- package/src/duckdb/src/{function → core_functions}/scalar/string/hex.cpp +15 -25
- package/src/duckdb/src/{function → core_functions}/scalar/string/instr.cpp +6 -13
- package/src/duckdb/src/{function → core_functions}/scalar/string/jaccard.cpp +3 -6
- package/src/duckdb/src/{function → core_functions}/scalar/string/jaro_winkler.cpp +7 -6
- package/src/duckdb/src/{function → core_functions}/scalar/string/left_right.cpp +18 -11
- package/src/duckdb/src/{function → core_functions}/scalar/string/levenshtein.cpp +3 -12
- package/src/duckdb/src/{function → core_functions}/scalar/string/md5.cpp +15 -21
- package/src/duckdb/src/{function → core_functions}/scalar/string/pad.cpp +7 -13
- package/src/duckdb/src/{function → core_functions}/scalar/string/printf.cpp +10 -10
- package/src/duckdb/src/{function → core_functions}/scalar/string/repeat.cpp +3 -6
- package/src/duckdb/src/{function → core_functions}/scalar/string/replace.cpp +4 -7
- package/src/duckdb/src/{function → core_functions}/scalar/string/reverse.cpp +3 -3
- package/src/duckdb/src/{function → core_functions}/scalar/string/starts_with.cpp +4 -8
- package/src/duckdb/src/{function → core_functions}/scalar/string/string_split.cpp +11 -11
- package/src/duckdb/src/{function → core_functions}/scalar/string/translate.cpp +4 -7
- package/src/duckdb/src/{function → core_functions}/scalar/string/trim.cpp +19 -14
- package/src/duckdb/src/core_functions/scalar/string/unicode.cpp +28 -0
- package/src/duckdb/src/{function → core_functions}/scalar/struct/struct_insert.cpp +4 -4
- package/src/duckdb/src/{function → core_functions}/scalar/struct/struct_pack.cpp +3 -4
- package/src/duckdb/src/{function → core_functions}/scalar/union/union_extract.cpp +4 -8
- package/src/duckdb/src/{function → core_functions}/scalar/union/union_tag.cpp +4 -8
- package/src/duckdb/src/{function → core_functions}/scalar/union/union_value.cpp +4 -59
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +1 -1
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +1 -1
- package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +1 -1
- package/src/duckdb/src/function/aggregate/distributive_functions.cpp +0 -17
- package/src/duckdb/src/function/cast/string_cast.cpp +1 -1
- package/src/duckdb/src/function/function.cpp +0 -8
- package/src/duckdb/src/function/function_set.cpp +25 -0
- package/src/duckdb/src/function/scalar/generic_functions.cpp +1 -9
- package/src/duckdb/src/function/scalar/nested_functions.cpp +0 -22
- package/src/duckdb/src/function/scalar/operators.cpp +0 -6
- package/src/duckdb/src/function/scalar/{date/strftime.cpp → strftime_format.cpp} +1 -249
- package/src/duckdb/src/function/scalar/string/length.cpp +0 -19
- package/src/duckdb/src/function/scalar/string_functions.cpp +0 -40
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +5 -0
- package/src/duckdb/src/function/table/arrow_conversion.cpp +1 -1
- package/src/duckdb/src/function/table/system/duckdb_functions.cpp +27 -40
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/aggregate_function_catalog_entry.hpp +3 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/function_entry.hpp +33 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/macro_catalog_entry.hpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/pragma_function_catalog_entry.hpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/scalar_function_catalog_entry.hpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog_transaction.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/algorithm.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +11 -1
- package/src/duckdb/src/include/duckdb/{function → core_functions}/aggregate/algebraic/corr.hpp +3 -4
- package/src/duckdb/src/include/duckdb/{function → core_functions}/aggregate/algebraic/covar.hpp +1 -1
- package/src/duckdb/src/include/duckdb/{function → core_functions}/aggregate/algebraic/stddev.hpp +1 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic_functions.hpp +124 -0
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +229 -0
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/holistic_functions.hpp +85 -0
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/nested_functions.hpp +41 -0
- package/src/duckdb/src/include/duckdb/{function → core_functions}/aggregate/regression/regr_count.hpp +3 -4
- package/src/duckdb/src/include/duckdb/{function → core_functions}/aggregate/regression/regr_slope.hpp +2 -2
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression_functions.hpp +97 -0
- package/src/duckdb/src/include/duckdb/{function → core_functions}/aggregate/sum_helpers.hpp +1 -1
- package/src/duckdb/src/include/duckdb/{function/scalar/uuid_functions.hpp → core_functions/core_functions.hpp} +7 -5
- package/src/duckdb/src/include/duckdb/core_functions/function_list.hpp +33 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/bit_functions.hpp +52 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +58 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +544 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/enum_functions.hpp +61 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +142 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +220 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +85 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/math_functions.hpp +394 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/operators_functions.hpp +70 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/random_functions.hpp +49 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +439 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/struct_functions.hpp +40 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/union_functions.hpp +43 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +0 -85
- package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +0 -8
- package/src/duckdb/src/include/duckdb/function/function_set.hpp +7 -2
- package/src/duckdb/src/include/duckdb/function/scalar/generic_functions.hpp +1 -36
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +0 -120
- package/src/duckdb/src/include/duckdb/function/scalar/operators.hpp +0 -24
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +1 -97
- package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/extension_util.hpp +48 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_function_info.hpp +6 -0
- package/src/duckdb/src/main/extension/extension_helper.cpp +1 -0
- package/src/duckdb/src/main/extension/extension_load.cpp +48 -4
- package/src/duckdb/src/main/extension/extension_util.cpp +90 -0
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +6 -7
- package/src/duckdb/ub_src_common_enums.cpp +2 -0
- package/src/duckdb/ub_src_core_functions.cpp +4 -0
- package/src/duckdb/ub_src_core_functions_aggregate_algebraic.cpp +8 -0
- package/src/duckdb/ub_src_core_functions_aggregate_distributive.cpp +24 -0
- package/src/duckdb/ub_src_core_functions_aggregate_holistic.cpp +8 -0
- package/src/duckdb/ub_src_core_functions_aggregate_nested.cpp +4 -0
- package/src/duckdb/ub_src_core_functions_aggregate_regression.cpp +14 -0
- package/src/duckdb/ub_src_core_functions_scalar_bit.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_blob.cpp +4 -0
- package/src/duckdb/ub_src_core_functions_scalar_date.cpp +22 -0
- package/src/duckdb/ub_src_core_functions_scalar_enum.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_generic.cpp +16 -0
- package/src/duckdb/ub_src_core_functions_scalar_list.cpp +14 -0
- package/src/duckdb/ub_src_core_functions_scalar_map.cpp +12 -0
- package/src/duckdb/ub_src_core_functions_scalar_math.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_operators.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_random.cpp +4 -0
- package/src/duckdb/ub_src_core_functions_scalar_string.cpp +44 -0
- package/src/duckdb/ub_src_core_functions_scalar_struct.cpp +4 -0
- package/src/duckdb/ub_src_core_functions_scalar_union.cpp +6 -0
- package/src/duckdb/ub_src_function_aggregate.cpp +0 -8
- package/src/duckdb/ub_src_function_aggregate_distributive.cpp +0 -24
- package/src/duckdb/ub_src_function_scalar.cpp +2 -8
- package/src/duckdb/ub_src_function_scalar_generic.cpp +0 -14
- package/src/duckdb/ub_src_function_scalar_list.cpp +0 -14
- package/src/duckdb/ub_src_function_scalar_operators.cpp +0 -2
- package/src/duckdb/ub_src_function_scalar_string.cpp +0 -42
- package/src/duckdb/ub_src_function_scalar_struct.cpp +0 -4
- package/src/duckdb/ub_src_function_scalar_system.cpp +0 -2
- package/src/duckdb/ub_src_main_extension.cpp +2 -0
- package/src/duckdb/src/function/aggregate/algebraic/corr.cpp +0 -14
- package/src/duckdb/src/function/aggregate/algebraic/covar.cpp +0 -25
- package/src/duckdb/src/function/aggregate/algebraic/stddev.cpp +0 -54
- package/src/duckdb/src/function/aggregate/algebraic_functions.cpp +0 -21
- package/src/duckdb/src/function/aggregate/holistic_functions.cpp +0 -12
- package/src/duckdb/src/function/aggregate/nested_functions.cpp +0 -10
- package/src/duckdb/src/function/aggregate/regression_functions.cpp +0 -21
- package/src/duckdb/src/function/scalar/date_functions.cpp +0 -22
- package/src/duckdb/src/function/scalar/enum_functions.cpp +0 -13
- package/src/duckdb/src/function/scalar/math_functions.cpp +0 -50
- package/src/duckdb/src/function/scalar/trigonometrics_functions.cpp +0 -18
- package/src/duckdb/src/include/duckdb/function/aggregate/algebraic_functions.hpp +0 -56
- package/src/duckdb/src/include/duckdb/function/aggregate/holistic_functions.hpp +0 -33
- package/src/duckdb/src/include/duckdb/function/aggregate/nested_functions.hpp +0 -26
- package/src/duckdb/src/include/duckdb/function/aggregate/regression_functions.hpp +0 -53
- package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +0 -32
- package/src/duckdb/src/include/duckdb/function/scalar/blob_functions.hpp +0 -24
- package/src/duckdb/src/include/duckdb/function/scalar/date_functions.hpp +0 -73
- package/src/duckdb/src/include/duckdb/function/scalar/enum_functions.hpp +0 -37
- package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +0 -137
- package/src/duckdb/src/include/duckdb/function/scalar/trigonometric_functions.hpp +0 -49
- package/src/duckdb/ub_src_function_aggregate_algebraic.cpp +0 -8
- package/src/duckdb/ub_src_function_aggregate_holistic.cpp +0 -8
- package/src/duckdb/ub_src_function_aggregate_nested.cpp +0 -4
- package/src/duckdb/ub_src_function_aggregate_regression.cpp +0 -14
- package/src/duckdb/ub_src_function_scalar_bit.cpp +0 -2
- package/src/duckdb/ub_src_function_scalar_blob.cpp +0 -4
- package/src/duckdb/ub_src_function_scalar_date.cpp +0 -22
- package/src/duckdb/ub_src_function_scalar_enum.cpp +0 -2
- package/src/duckdb/ub_src_function_scalar_map.cpp +0 -12
- package/src/duckdb/ub_src_function_scalar_math.cpp +0 -6
- package/src/duckdb/ub_src_function_scalar_union.cpp +0 -6
- /package/src/duckdb/src/include/duckdb/function/scalar/{strftime.hpp → strftime_format.hpp} +0 -0
@@ -9,12 +9,6 @@ void BuiltinFunctions::RegisterOperators() {
|
|
9
9
|
Register<MultiplyFun>();
|
10
10
|
Register<DivideFun>();
|
11
11
|
Register<ModFun>();
|
12
|
-
Register<LeftShiftFun>();
|
13
|
-
Register<RightShiftFun>();
|
14
|
-
Register<BitwiseAndFun>();
|
15
|
-
Register<BitwiseOrFun>();
|
16
|
-
Register<BitwiseXorFun>();
|
17
|
-
Register<BitwiseNotFun>();
|
18
12
|
}
|
19
13
|
|
20
14
|
} // namespace duckdb
|
@@ -1,19 +1,10 @@
|
|
1
|
-
#include "duckdb/function/scalar/
|
2
|
-
|
1
|
+
#include "duckdb/function/scalar/strftime_format.hpp"
|
3
2
|
#include "duckdb/common/string_util.hpp"
|
4
3
|
#include "duckdb/common/to_string.hpp"
|
5
4
|
#include "duckdb/common/types/cast_helpers.hpp"
|
6
5
|
#include "duckdb/common/types/date.hpp"
|
7
6
|
#include "duckdb/common/types/time.hpp"
|
8
7
|
#include "duckdb/common/types/timestamp.hpp"
|
9
|
-
#include "duckdb/common/vector_operations/unary_executor.hpp"
|
10
|
-
#include "duckdb/execution/expression_executor.hpp"
|
11
|
-
#include "duckdb/function/scalar/date_functions.hpp"
|
12
|
-
#include "duckdb/planner/expression/bound_function_expression.hpp"
|
13
|
-
#include "duckdb/planner/expression/bound_parameter_expression.hpp"
|
14
|
-
|
15
|
-
#include <cctype>
|
16
|
-
#include <utility>
|
17
8
|
|
18
9
|
namespace duckdb {
|
19
10
|
|
@@ -594,49 +585,6 @@ string StrTimeFormat::ParseFormatSpecifier(const string &format_string, StrTimeF
|
|
594
585
|
return string();
|
595
586
|
}
|
596
587
|
|
597
|
-
struct StrfTimeBindData : public FunctionData {
|
598
|
-
explicit StrfTimeBindData(StrfTimeFormat format_p, string format_string_p, bool is_null)
|
599
|
-
: format(std::move(format_p)), format_string(std::move(format_string_p)), is_null(is_null) {
|
600
|
-
}
|
601
|
-
|
602
|
-
StrfTimeFormat format;
|
603
|
-
string format_string;
|
604
|
-
bool is_null;
|
605
|
-
|
606
|
-
unique_ptr<FunctionData> Copy() const override {
|
607
|
-
return make_uniq<StrfTimeBindData>(format, format_string, is_null);
|
608
|
-
}
|
609
|
-
|
610
|
-
bool Equals(const FunctionData &other_p) const override {
|
611
|
-
auto &other = (const StrfTimeBindData &)other_p;
|
612
|
-
return format_string == other.format_string;
|
613
|
-
}
|
614
|
-
};
|
615
|
-
|
616
|
-
template <bool REVERSED>
|
617
|
-
static unique_ptr<FunctionData> StrfTimeBindFunction(ClientContext &context, ScalarFunction &bound_function,
|
618
|
-
vector<unique_ptr<Expression>> &arguments) {
|
619
|
-
auto format_idx = REVERSED ? 0 : 1;
|
620
|
-
auto &format_arg = arguments[format_idx];
|
621
|
-
if (format_arg->HasParameter()) {
|
622
|
-
throw ParameterNotResolvedException();
|
623
|
-
}
|
624
|
-
if (!format_arg->IsFoldable()) {
|
625
|
-
throw InvalidInputException("strftime format must be a constant");
|
626
|
-
}
|
627
|
-
Value options_str = ExpressionExecutor::EvaluateScalar(context, *format_arg);
|
628
|
-
auto format_string = options_str.GetValue<string>();
|
629
|
-
StrfTimeFormat format;
|
630
|
-
bool is_null = options_str.IsNull();
|
631
|
-
if (!is_null) {
|
632
|
-
string error = StrTimeFormat::ParseFormatSpecifier(format_string, format);
|
633
|
-
if (!error.empty()) {
|
634
|
-
throw InvalidInputException("Failed to parse format specifier %s: %s", format_string, error);
|
635
|
-
}
|
636
|
-
}
|
637
|
-
return make_uniq<StrfTimeBindData>(format, format_string, is_null);
|
638
|
-
}
|
639
|
-
|
640
588
|
void StrfTimeFormat::ConvertDateVector(Vector &input, Vector &result, idx_t count) {
|
641
589
|
D_ASSERT(input.GetType().id() == LogicalTypeId::DATE);
|
642
590
|
D_ASSERT(result.GetType().id() == LogicalTypeId::VARCHAR);
|
@@ -656,19 +604,6 @@ void StrfTimeFormat::ConvertDateVector(Vector &input, Vector &result, idx_t coun
|
|
656
604
|
});
|
657
605
|
}
|
658
606
|
|
659
|
-
template <bool REVERSED>
|
660
|
-
static void StrfTimeFunctionDate(DataChunk &args, ExpressionState &state, Vector &result) {
|
661
|
-
auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
|
662
|
-
auto &info = func_expr.bind_info->Cast<StrfTimeBindData>();
|
663
|
-
|
664
|
-
if (info.is_null) {
|
665
|
-
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
666
|
-
ConstantVector::SetNull(result, true);
|
667
|
-
return;
|
668
|
-
}
|
669
|
-
info.format.ConvertDateVector(args.data[REVERSED ? 1 : 0], result, args.size());
|
670
|
-
}
|
671
|
-
|
672
607
|
void StrfTimeFormat::ConvertTimestampVector(Vector &input, Vector &result, idx_t count) {
|
673
608
|
D_ASSERT(input.GetType().id() == LogicalTypeId::TIMESTAMP || input.GetType().id() == LogicalTypeId::TIMESTAMP_TZ);
|
674
609
|
D_ASSERT(result.GetType().id() == LogicalTypeId::VARCHAR);
|
@@ -690,37 +625,6 @@ void StrfTimeFormat::ConvertTimestampVector(Vector &input, Vector &result, idx_t
|
|
690
625
|
});
|
691
626
|
}
|
692
627
|
|
693
|
-
template <bool REVERSED>
|
694
|
-
static void StrfTimeFunctionTimestamp(DataChunk &args, ExpressionState &state, Vector &result) {
|
695
|
-
auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
|
696
|
-
auto &info = func_expr.bind_info->Cast<StrfTimeBindData>();
|
697
|
-
|
698
|
-
if (info.is_null) {
|
699
|
-
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
700
|
-
ConstantVector::SetNull(result, true);
|
701
|
-
return;
|
702
|
-
}
|
703
|
-
info.format.ConvertTimestampVector(args.data[REVERSED ? 1 : 0], result, args.size());
|
704
|
-
}
|
705
|
-
|
706
|
-
void StrfTimeFun::RegisterFunction(BuiltinFunctions &set) {
|
707
|
-
ScalarFunctionSet strftime("strftime");
|
708
|
-
|
709
|
-
strftime.AddFunction(ScalarFunction({LogicalType::DATE, LogicalType::VARCHAR}, LogicalType::VARCHAR,
|
710
|
-
StrfTimeFunctionDate<false>, StrfTimeBindFunction<false>));
|
711
|
-
|
712
|
-
strftime.AddFunction(ScalarFunction({LogicalType::TIMESTAMP, LogicalType::VARCHAR}, LogicalType::VARCHAR,
|
713
|
-
StrfTimeFunctionTimestamp<false>, StrfTimeBindFunction<false>));
|
714
|
-
|
715
|
-
strftime.AddFunction(ScalarFunction({LogicalType::VARCHAR, LogicalType::DATE}, LogicalType::VARCHAR,
|
716
|
-
StrfTimeFunctionDate<true>, StrfTimeBindFunction<true>));
|
717
|
-
|
718
|
-
strftime.AddFunction(ScalarFunction({LogicalType::VARCHAR, LogicalType::TIMESTAMP}, LogicalType::VARCHAR,
|
719
|
-
StrfTimeFunctionTimestamp<true>, StrfTimeBindFunction<true>));
|
720
|
-
|
721
|
-
set.AddFunction(strftime);
|
722
|
-
}
|
723
|
-
|
724
628
|
void StrpTimeFormat::AddFormatSpecifier(string preceding_literal, StrTimeSpecifier specifier) {
|
725
629
|
numeric_width.push_back(NumericSpecifierWidth(specifier));
|
726
630
|
StrTimeFormat::AddFormatSpecifier(std::move(preceding_literal), specifier);
|
@@ -1187,79 +1091,6 @@ bool StrpTimeFormat::Parse(string_t str, ParseResult &result) {
|
|
1187
1091
|
return true;
|
1188
1092
|
}
|
1189
1093
|
|
1190
|
-
struct StrpTimeBindData : public FunctionData {
|
1191
|
-
StrpTimeBindData(const StrpTimeFormat &format, const string &format_string)
|
1192
|
-
: formats(1, format), format_strings(1, format_string) {
|
1193
|
-
}
|
1194
|
-
|
1195
|
-
StrpTimeBindData(vector<StrpTimeFormat> formats_p, vector<string> format_strings_p)
|
1196
|
-
: formats(std::move(formats_p)), format_strings(std::move(format_strings_p)) {
|
1197
|
-
}
|
1198
|
-
|
1199
|
-
vector<StrpTimeFormat> formats;
|
1200
|
-
vector<string> format_strings;
|
1201
|
-
|
1202
|
-
unique_ptr<FunctionData> Copy() const override {
|
1203
|
-
return make_uniq<StrpTimeBindData>(formats, format_strings);
|
1204
|
-
}
|
1205
|
-
|
1206
|
-
bool Equals(const FunctionData &other_p) const override {
|
1207
|
-
auto &other = (const StrpTimeBindData &)other_p;
|
1208
|
-
return format_strings == other.format_strings;
|
1209
|
-
}
|
1210
|
-
};
|
1211
|
-
|
1212
|
-
static unique_ptr<FunctionData> StrpTimeBindFunction(ClientContext &context, ScalarFunction &bound_function,
|
1213
|
-
vector<unique_ptr<Expression>> &arguments) {
|
1214
|
-
if (arguments[1]->HasParameter()) {
|
1215
|
-
throw ParameterNotResolvedException();
|
1216
|
-
}
|
1217
|
-
if (!arguments[1]->IsFoldable()) {
|
1218
|
-
throw InvalidInputException("strptime format must be a constant");
|
1219
|
-
}
|
1220
|
-
Value format_value = ExpressionExecutor::EvaluateScalar(context, *arguments[1]);
|
1221
|
-
string format_string;
|
1222
|
-
StrpTimeFormat format;
|
1223
|
-
if (format_value.IsNull()) {
|
1224
|
-
return make_uniq<StrpTimeBindData>(format, format_string);
|
1225
|
-
} else if (format_value.type().id() == LogicalTypeId::VARCHAR) {
|
1226
|
-
format_string = format_value.ToString();
|
1227
|
-
format.format_specifier = format_string;
|
1228
|
-
string error = StrTimeFormat::ParseFormatSpecifier(format_string, format);
|
1229
|
-
if (!error.empty()) {
|
1230
|
-
throw InvalidInputException("Failed to parse format specifier %s: %s", format_string, error);
|
1231
|
-
}
|
1232
|
-
if (format.HasFormatSpecifier(StrTimeSpecifier::UTC_OFFSET)) {
|
1233
|
-
bound_function.return_type = LogicalType::TIMESTAMP_TZ;
|
1234
|
-
}
|
1235
|
-
return make_uniq<StrpTimeBindData>(format, format_string);
|
1236
|
-
} else if (format_value.type() == LogicalType::LIST(LogicalType::VARCHAR)) {
|
1237
|
-
const auto &children = ListValue::GetChildren(format_value);
|
1238
|
-
if (children.empty()) {
|
1239
|
-
throw InvalidInputException("strptime format list must not be empty");
|
1240
|
-
}
|
1241
|
-
vector<string> format_strings;
|
1242
|
-
vector<StrpTimeFormat> formats;
|
1243
|
-
for (const auto &child : children) {
|
1244
|
-
format_string = child.ToString();
|
1245
|
-
format.format_specifier = format_string;
|
1246
|
-
string error = StrTimeFormat::ParseFormatSpecifier(format_string, format);
|
1247
|
-
if (!error.empty()) {
|
1248
|
-
throw InvalidInputException("Failed to parse format specifier %s: %s", format_string, error);
|
1249
|
-
}
|
1250
|
-
// If any format has UTC offsets, then we have to produce TSTZ
|
1251
|
-
if (format.HasFormatSpecifier(StrTimeSpecifier::UTC_OFFSET)) {
|
1252
|
-
bound_function.return_type = LogicalType::TIMESTAMP_TZ;
|
1253
|
-
}
|
1254
|
-
format_strings.emplace_back(format_string);
|
1255
|
-
formats.emplace_back(format);
|
1256
|
-
}
|
1257
|
-
return make_uniq<StrpTimeBindData>(formats, format_strings);
|
1258
|
-
} else {
|
1259
|
-
throw InvalidInputException("strptime format must be a string");
|
1260
|
-
}
|
1261
|
-
}
|
1262
|
-
|
1263
1094
|
StrpTimeFormat::ParseResult StrpTimeFormat::Parse(const string &format_string, const string &text) {
|
1264
1095
|
StrpTimeFormat format;
|
1265
1096
|
format.format_specifier = format_string;
|
@@ -1348,83 +1179,4 @@ timestamp_t StrpTimeFormat::ParseTimestamp(string_t input) {
|
|
1348
1179
|
return result.ToTimestamp();
|
1349
1180
|
}
|
1350
1181
|
|
1351
|
-
struct StrpTimeFunction {
|
1352
|
-
|
1353
|
-
static void Parse(DataChunk &args, ExpressionState &state, Vector &result) {
|
1354
|
-
auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
|
1355
|
-
auto &info = func_expr.bind_info->Cast<StrpTimeBindData>();
|
1356
|
-
|
1357
|
-
if (ConstantVector::IsNull(args.data[1])) {
|
1358
|
-
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
1359
|
-
ConstantVector::SetNull(result, true);
|
1360
|
-
return;
|
1361
|
-
}
|
1362
|
-
UnaryExecutor::Execute<string_t, timestamp_t>(args.data[0], result, args.size(), [&](string_t input) {
|
1363
|
-
StrpTimeFormat::ParseResult result;
|
1364
|
-
for (auto &format : info.formats) {
|
1365
|
-
if (format.Parse(input, result)) {
|
1366
|
-
return result.ToTimestamp();
|
1367
|
-
}
|
1368
|
-
}
|
1369
|
-
throw InvalidInputException(result.FormatError(input, info.formats[0].format_specifier));
|
1370
|
-
});
|
1371
|
-
}
|
1372
|
-
|
1373
|
-
static void TryParse(DataChunk &args, ExpressionState &state, Vector &result) {
|
1374
|
-
auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
|
1375
|
-
auto &info = func_expr.bind_info->Cast<StrpTimeBindData>();
|
1376
|
-
|
1377
|
-
if (ConstantVector::IsNull(args.data[1])) {
|
1378
|
-
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
1379
|
-
ConstantVector::SetNull(result, true);
|
1380
|
-
return;
|
1381
|
-
}
|
1382
|
-
|
1383
|
-
UnaryExecutor::ExecuteWithNulls<string_t, timestamp_t>(
|
1384
|
-
args.data[0], result, args.size(), [&](string_t input, ValidityMask &mask, idx_t idx) {
|
1385
|
-
timestamp_t result;
|
1386
|
-
string error;
|
1387
|
-
for (auto &format : info.formats) {
|
1388
|
-
if (format.TryParseTimestamp(input, result, error)) {
|
1389
|
-
return result;
|
1390
|
-
}
|
1391
|
-
}
|
1392
|
-
|
1393
|
-
mask.SetInvalid(idx);
|
1394
|
-
return timestamp_t();
|
1395
|
-
});
|
1396
|
-
}
|
1397
|
-
};
|
1398
|
-
|
1399
|
-
void StrpTimeFun::RegisterFunction(BuiltinFunctions &set) {
|
1400
|
-
ScalarFunctionSet strptime("strptime");
|
1401
|
-
|
1402
|
-
const auto list_type = LogicalType::LIST(LogicalType::VARCHAR);
|
1403
|
-
auto fun = ScalarFunction({LogicalType::VARCHAR, LogicalType::VARCHAR}, LogicalType::TIMESTAMP,
|
1404
|
-
StrpTimeFunction::Parse, StrpTimeBindFunction);
|
1405
|
-
fun.null_handling = FunctionNullHandling::SPECIAL_HANDLING;
|
1406
|
-
strptime.AddFunction(fun);
|
1407
|
-
|
1408
|
-
fun = ScalarFunction({LogicalType::VARCHAR, list_type}, LogicalType::TIMESTAMP, StrpTimeFunction::Parse,
|
1409
|
-
StrpTimeBindFunction);
|
1410
|
-
fun.null_handling = FunctionNullHandling::SPECIAL_HANDLING;
|
1411
|
-
strptime.AddFunction(fun);
|
1412
|
-
|
1413
|
-
set.AddFunction(strptime);
|
1414
|
-
|
1415
|
-
ScalarFunctionSet try_strptime("try_strptime");
|
1416
|
-
|
1417
|
-
fun = ScalarFunction({LogicalType::VARCHAR, LogicalType::VARCHAR}, LogicalType::TIMESTAMP,
|
1418
|
-
StrpTimeFunction::TryParse, StrpTimeBindFunction);
|
1419
|
-
fun.null_handling = FunctionNullHandling::SPECIAL_HANDLING;
|
1420
|
-
try_strptime.AddFunction(fun);
|
1421
|
-
|
1422
|
-
fun = ScalarFunction({LogicalType::VARCHAR, list_type}, LogicalType::TIMESTAMP, StrpTimeFunction::TryParse,
|
1423
|
-
StrpTimeBindFunction);
|
1424
|
-
fun.null_handling = FunctionNullHandling::SPECIAL_HANDLING;
|
1425
|
-
try_strptime.AddFunction(fun);
|
1426
|
-
|
1427
|
-
set.AddFunction(try_strptime);
|
1428
|
-
}
|
1429
|
-
|
1430
1182
|
} // namespace duckdb
|
@@ -138,23 +138,4 @@ void LengthFun::RegisterFunction(BuiltinFunctions &set) {
|
|
138
138
|
set.AddFunction(octet_length);
|
139
139
|
}
|
140
140
|
|
141
|
-
struct UnicodeOperator {
|
142
|
-
template <class TA, class TR>
|
143
|
-
static inline TR Operation(const TA &input) {
|
144
|
-
auto str = reinterpret_cast<const utf8proc_uint8_t *>(input.GetData());
|
145
|
-
auto len = input.GetSize();
|
146
|
-
utf8proc_int32_t codepoint;
|
147
|
-
(void)utf8proc_iterate(str, len, &codepoint);
|
148
|
-
return codepoint;
|
149
|
-
}
|
150
|
-
};
|
151
|
-
|
152
|
-
void UnicodeFun::RegisterFunction(BuiltinFunctions &set) {
|
153
|
-
ScalarFunction unicode("unicode", {LogicalType::VARCHAR}, LogicalType::INTEGER,
|
154
|
-
ScalarFunction::UnaryFunction<string_t, int32_t, UnicodeOperator>);
|
155
|
-
set.AddFunction(unicode);
|
156
|
-
unicode.name = "ord";
|
157
|
-
set.AddFunction(unicode);
|
158
|
-
}
|
159
|
-
|
160
141
|
} // namespace duckdb
|
@@ -1,61 +1,21 @@
|
|
1
1
|
#include "duckdb/function/scalar/string_functions.hpp"
|
2
|
-
#include "duckdb/function/scalar/blob_functions.hpp"
|
3
|
-
#include "duckdb/function/scalar/uuid_functions.hpp"
|
4
|
-
#include "duckdb/function/scalar/bit_functions.hpp"
|
5
2
|
|
6
3
|
namespace duckdb {
|
7
4
|
|
8
5
|
void BuiltinFunctions::RegisterStringFunctions() {
|
9
|
-
Register<ReverseFun>();
|
10
6
|
Register<LowerFun>();
|
11
7
|
Register<UpperFun>();
|
12
8
|
Register<StripAccentsFun>();
|
13
9
|
Register<ConcatFun>();
|
14
|
-
Register<StartsWithFun>();
|
15
10
|
Register<ContainsFun>();
|
16
11
|
Register<LengthFun>();
|
17
12
|
Register<LikeFun>();
|
18
13
|
Register<LikeEscapeFun>();
|
19
|
-
Register<LpadFun>();
|
20
|
-
Register<LeftFun>();
|
21
|
-
Register<MD5Fun>();
|
22
|
-
Register<RightFun>();
|
23
|
-
Register<PrintfFun>();
|
24
14
|
Register<RegexpFun>();
|
25
15
|
Register<SubstringFun>();
|
26
|
-
Register<InstrFun>();
|
27
16
|
Register<PrefixFun>();
|
28
|
-
Register<RepeatFun>();
|
29
|
-
Register<ReplaceFun>();
|
30
|
-
Register<RpadFun>();
|
31
|
-
Register<TranslateFun>();
|
32
17
|
Register<SuffixFun>();
|
33
|
-
Register<TrimFun>();
|
34
|
-
Register<UnicodeFun>();
|
35
18
|
Register<NFCNormalizeFun>();
|
36
|
-
Register<StringSplitFun>();
|
37
|
-
Register<BarFun>();
|
38
|
-
Register<ASCII>();
|
39
|
-
Register<CHR>();
|
40
|
-
Register<MismatchesFun>();
|
41
|
-
Register<LevenshteinFun>();
|
42
|
-
Register<DamerauLevenshteinFun>();
|
43
|
-
Register<JaccardFun>();
|
44
|
-
Register<JaroWinklerFun>();
|
45
|
-
|
46
|
-
// blob functions
|
47
|
-
Register<Base64Fun>();
|
48
|
-
Register<EncodeFun>();
|
49
|
-
Register<HexFun>();
|
50
|
-
|
51
|
-
// bit functions
|
52
|
-
Register<GetBitFun>();
|
53
|
-
Register<SetBitFun>();
|
54
|
-
Register<BitPositionFun>();
|
55
|
-
Register<BitStringFun>();
|
56
|
-
|
57
|
-
// uuid functions
|
58
|
-
Register<UUIDFun>();
|
59
19
|
}
|
60
20
|
|
61
21
|
} // namespace duckdb
|
@@ -347,4 +347,9 @@ ScalarFunction ExportAggregateFunction::GetCombine() {
|
|
347
347
|
return result;
|
348
348
|
}
|
349
349
|
|
350
|
+
void ExportAggregateFunction::RegisterFunction(BuiltinFunctions &set) {
|
351
|
+
set.AddFunction(ExportAggregateFunction::GetCombine());
|
352
|
+
set.AddFunction(ExportAggregateFunction::GetFinalize());
|
353
|
+
}
|
354
|
+
|
350
355
|
} // namespace duckdb
|
@@ -225,7 +225,7 @@ static void ArrowToDuckDBBlob(Vector &vector, ArrowArray &array, ArrowScanLocalS
|
|
225
225
|
}
|
226
226
|
|
227
227
|
static void ArrowToDuckDBMapVerify(Vector &vector, idx_t count) {
|
228
|
-
auto valid_check = CheckMapValidity(vector, count);
|
228
|
+
auto valid_check = MapVector::CheckMapValidity(vector, count);
|
229
229
|
switch (valid_check) {
|
230
230
|
case MapInvalidReason::VALID:
|
231
231
|
break;
|
@@ -67,6 +67,9 @@ static unique_ptr<FunctionData> DuckDBFunctionsBind(ClientContext &context, Tabl
|
|
67
67
|
names.emplace_back("function_oid");
|
68
68
|
return_types.emplace_back(LogicalType::BIGINT);
|
69
69
|
|
70
|
+
names.emplace_back("example");
|
71
|
+
return_types.emplace_back(LogicalType::VARCHAR);
|
72
|
+
|
70
73
|
return nullptr;
|
71
74
|
}
|
72
75
|
|
@@ -105,20 +108,16 @@ struct ScalarFunctionExtractor {
|
|
105
108
|
return Value("scalar");
|
106
109
|
}
|
107
110
|
|
108
|
-
static Value GetFunctionDescription(ScalarFunctionCatalogEntry &entry, idx_t offset) {
|
109
|
-
return Value();
|
110
|
-
}
|
111
|
-
|
112
111
|
static Value GetReturnType(ScalarFunctionCatalogEntry &entry, idx_t offset) {
|
113
112
|
return Value(entry.functions.GetFunctionByOffset(offset).return_type.ToString());
|
114
113
|
}
|
115
114
|
|
116
|
-
static Value GetParameters(ScalarFunctionCatalogEntry &entry, idx_t offset) {
|
115
|
+
static vector<Value> GetParameters(ScalarFunctionCatalogEntry &entry, idx_t offset) {
|
117
116
|
vector<Value> results;
|
118
117
|
for (idx_t i = 0; i < entry.functions.GetFunctionByOffset(offset).arguments.size(); i++) {
|
119
118
|
results.emplace_back("col" + to_string(i));
|
120
119
|
}
|
121
|
-
return
|
120
|
+
return results;
|
122
121
|
}
|
123
122
|
|
124
123
|
static Value GetParameterTypes(ScalarFunctionCatalogEntry &entry, idx_t offset) {
|
@@ -154,20 +153,16 @@ struct AggregateFunctionExtractor {
|
|
154
153
|
return Value("aggregate");
|
155
154
|
}
|
156
155
|
|
157
|
-
static Value GetFunctionDescription(AggregateFunctionCatalogEntry &entry, idx_t offset) {
|
158
|
-
return Value();
|
159
|
-
}
|
160
|
-
|
161
156
|
static Value GetReturnType(AggregateFunctionCatalogEntry &entry, idx_t offset) {
|
162
157
|
return Value(entry.functions.GetFunctionByOffset(offset).return_type.ToString());
|
163
158
|
}
|
164
159
|
|
165
|
-
static Value GetParameters(AggregateFunctionCatalogEntry &entry, idx_t offset) {
|
160
|
+
static vector<Value> GetParameters(AggregateFunctionCatalogEntry &entry, idx_t offset) {
|
166
161
|
vector<Value> results;
|
167
162
|
for (idx_t i = 0; i < entry.functions.GetFunctionByOffset(offset).arguments.size(); i++) {
|
168
163
|
results.emplace_back("col" + to_string(i));
|
169
164
|
}
|
170
|
-
return
|
165
|
+
return results;
|
171
166
|
}
|
172
167
|
|
173
168
|
static Value GetParameterTypes(AggregateFunctionCatalogEntry &entry, idx_t offset) {
|
@@ -203,15 +198,11 @@ struct MacroExtractor {
|
|
203
198
|
return Value("macro");
|
204
199
|
}
|
205
200
|
|
206
|
-
static Value GetFunctionDescription(ScalarMacroCatalogEntry &entry, idx_t offset) {
|
207
|
-
return Value();
|
208
|
-
}
|
209
|
-
|
210
201
|
static Value GetReturnType(ScalarMacroCatalogEntry &entry, idx_t offset) {
|
211
202
|
return Value();
|
212
203
|
}
|
213
204
|
|
214
|
-
static Value GetParameters(ScalarMacroCatalogEntry &entry, idx_t offset) {
|
205
|
+
static vector<Value> GetParameters(ScalarMacroCatalogEntry &entry, idx_t offset) {
|
215
206
|
vector<Value> results;
|
216
207
|
for (auto ¶m : entry.function->parameters) {
|
217
208
|
D_ASSERT(param->type == ExpressionType::COLUMN_REF);
|
@@ -221,7 +212,7 @@ struct MacroExtractor {
|
|
221
212
|
for (auto ¶m_entry : entry.function->default_parameters) {
|
222
213
|
results.emplace_back(param_entry.first);
|
223
214
|
}
|
224
|
-
return
|
215
|
+
return results;
|
225
216
|
}
|
226
217
|
|
227
218
|
static Value GetParameterTypes(ScalarMacroCatalogEntry &entry, idx_t offset) {
|
@@ -259,15 +250,11 @@ struct TableMacroExtractor {
|
|
259
250
|
return Value("table_macro");
|
260
251
|
}
|
261
252
|
|
262
|
-
static Value GetFunctionDescription(TableMacroCatalogEntry &entry, idx_t offset) {
|
263
|
-
return Value();
|
264
|
-
}
|
265
|
-
|
266
253
|
static Value GetReturnType(TableMacroCatalogEntry &entry, idx_t offset) {
|
267
254
|
return Value();
|
268
255
|
}
|
269
256
|
|
270
|
-
static Value GetParameters(TableMacroCatalogEntry &entry, idx_t offset) {
|
257
|
+
static vector<Value> GetParameters(TableMacroCatalogEntry &entry, idx_t offset) {
|
271
258
|
vector<Value> results;
|
272
259
|
for (auto ¶m : entry.function->parameters) {
|
273
260
|
D_ASSERT(param->type == ExpressionType::COLUMN_REF);
|
@@ -277,7 +264,7 @@ struct TableMacroExtractor {
|
|
277
264
|
for (auto ¶m_entry : entry.function->default_parameters) {
|
278
265
|
results.emplace_back(param_entry.first);
|
279
266
|
}
|
280
|
-
return
|
267
|
+
return results;
|
281
268
|
}
|
282
269
|
|
283
270
|
static Value GetParameterTypes(TableMacroCatalogEntry &entry, idx_t offset) {
|
@@ -317,15 +304,11 @@ struct TableFunctionExtractor {
|
|
317
304
|
return Value("table");
|
318
305
|
}
|
319
306
|
|
320
|
-
static Value GetFunctionDescription(TableFunctionCatalogEntry &entry, idx_t offset) {
|
321
|
-
return Value();
|
322
|
-
}
|
323
|
-
|
324
307
|
static Value GetReturnType(TableFunctionCatalogEntry &entry, idx_t offset) {
|
325
308
|
return Value();
|
326
309
|
}
|
327
310
|
|
328
|
-
static Value GetParameters(TableFunctionCatalogEntry &entry, idx_t offset) {
|
311
|
+
static vector<Value> GetParameters(TableFunctionCatalogEntry &entry, idx_t offset) {
|
329
312
|
vector<Value> results;
|
330
313
|
auto fun = entry.functions.GetFunctionByOffset(offset);
|
331
314
|
for (idx_t i = 0; i < fun.arguments.size(); i++) {
|
@@ -334,7 +317,7 @@ struct TableFunctionExtractor {
|
|
334
317
|
for (auto ¶m : fun.named_parameters) {
|
335
318
|
results.emplace_back(param.first);
|
336
319
|
}
|
337
|
-
return
|
320
|
+
return results;
|
338
321
|
}
|
339
322
|
|
340
323
|
static Value GetParameterTypes(TableFunctionCatalogEntry &entry, idx_t offset) {
|
@@ -373,15 +356,11 @@ struct PragmaFunctionExtractor {
|
|
373
356
|
return Value("pragma");
|
374
357
|
}
|
375
358
|
|
376
|
-
static Value GetFunctionDescription(PragmaFunctionCatalogEntry &entry, idx_t offset) {
|
377
|
-
return Value();
|
378
|
-
}
|
379
|
-
|
380
359
|
static Value GetReturnType(PragmaFunctionCatalogEntry &entry, idx_t offset) {
|
381
360
|
return Value();
|
382
361
|
}
|
383
362
|
|
384
|
-
static Value GetParameters(PragmaFunctionCatalogEntry &entry, idx_t offset) {
|
363
|
+
static vector<Value> GetParameters(PragmaFunctionCatalogEntry &entry, idx_t offset) {
|
385
364
|
vector<Value> results;
|
386
365
|
auto fun = entry.functions.GetFunctionByOffset(offset);
|
387
366
|
|
@@ -391,7 +370,7 @@ struct PragmaFunctionExtractor {
|
|
391
370
|
for (auto ¶m : fun.named_parameters) {
|
392
371
|
results.emplace_back(param.first);
|
393
372
|
}
|
394
|
-
return
|
373
|
+
return results;
|
395
374
|
}
|
396
375
|
|
397
376
|
static Value GetParameterTypes(PragmaFunctionCatalogEntry &entry, idx_t offset) {
|
@@ -422,7 +401,7 @@ struct PragmaFunctionExtractor {
|
|
422
401
|
};
|
423
402
|
|
424
403
|
template <class T, class OP>
|
425
|
-
bool ExtractFunctionData(
|
404
|
+
bool ExtractFunctionData(FunctionEntry &entry, idx_t function_idx, DataChunk &output, idx_t output_offset) {
|
426
405
|
auto &function = entry.Cast<T>();
|
427
406
|
idx_t col = 0;
|
428
407
|
|
@@ -439,13 +418,18 @@ bool ExtractFunctionData(CatalogEntry &entry, idx_t function_idx, DataChunk &out
|
|
439
418
|
output.SetValue(col++, output_offset, Value(OP::GetFunctionType()));
|
440
419
|
|
441
420
|
// function_description, LogicalType::VARCHAR
|
442
|
-
output.SetValue(col++, output_offset,
|
421
|
+
output.SetValue(col++, output_offset, entry.description.empty() ? Value() : entry.description);
|
443
422
|
|
444
423
|
// return_type, LogicalType::VARCHAR
|
445
424
|
output.SetValue(col++, output_offset, OP::GetReturnType(function, function_idx));
|
446
425
|
|
447
426
|
// parameters, LogicalType::LIST(LogicalType::VARCHAR)
|
448
|
-
|
427
|
+
auto parameters = OP::GetParameters(function, function_idx);
|
428
|
+
for (idx_t param_idx = 0; param_idx < function.parameter_names.size() && param_idx < parameters.size();
|
429
|
+
param_idx++) {
|
430
|
+
parameters[param_idx] = Value(function.parameter_names[param_idx]);
|
431
|
+
}
|
432
|
+
output.SetValue(col++, output_offset, Value::LIST(LogicalType::VARCHAR, std::move(parameters)));
|
449
433
|
|
450
434
|
// parameter_types, LogicalType::LIST(LogicalType::VARCHAR)
|
451
435
|
output.SetValue(col++, output_offset, OP::GetParameterTypes(function, function_idx));
|
@@ -465,6 +449,9 @@ bool ExtractFunctionData(CatalogEntry &entry, idx_t function_idx, DataChunk &out
|
|
465
449
|
// function_oid, LogicalType::BIGINT
|
466
450
|
output.SetValue(col++, output_offset, Value::BIGINT(function.oid));
|
467
451
|
|
452
|
+
// example, LogicalType::VARCHAR
|
453
|
+
output.SetValue(col++, output_offset, entry.example.empty() ? Value() : entry.example);
|
454
|
+
|
468
455
|
return function_idx + 1 == OP::FunctionCount(function);
|
469
456
|
}
|
470
457
|
|
@@ -478,7 +465,7 @@ void DuckDBFunctionsFunction(ClientContext &context, TableFunctionInput &data_p,
|
|
478
465
|
// either fill up the chunk or return all the remaining columns
|
479
466
|
idx_t count = 0;
|
480
467
|
while (data.offset < data.entries.size() && count < STANDARD_VECTOR_SIZE) {
|
481
|
-
auto &entry = data.entries[data.offset].get();
|
468
|
+
auto &entry = data.entries[data.offset].get().Cast<FunctionEntry>();
|
482
469
|
bool finished;
|
483
470
|
|
484
471
|
switch (entry.type) {
|
@@ -1,8 +1,8 @@
|
|
1
1
|
#ifndef DUCKDB_VERSION
|
2
|
-
#define DUCKDB_VERSION "0.7.2-
|
2
|
+
#define DUCKDB_VERSION "0.7.2-dev2820"
|
3
3
|
#endif
|
4
4
|
#ifndef DUCKDB_SOURCE_ID
|
5
|
-
#define DUCKDB_SOURCE_ID "
|
5
|
+
#define DUCKDB_SOURCE_ID "fc797c18cf"
|
6
6
|
#endif
|
7
7
|
#include "duckdb/function/table/system_functions.hpp"
|
8
8
|
#include "duckdb/main/database.hpp"
|
package/src/duckdb/src/include/duckdb/catalog/catalog_entry/aggregate_function_catalog_entry.hpp
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
-
#include "duckdb/catalog/
|
11
|
+
#include "duckdb/catalog/catalog_entry/function_entry.hpp"
|
12
12
|
#include "duckdb/catalog/catalog_set.hpp"
|
13
13
|
#include "duckdb/function/function.hpp"
|
14
14
|
#include "duckdb/parser/parsed_data/create_aggregate_function_info.hpp"
|
@@ -16,14 +16,14 @@
|
|
16
16
|
namespace duckdb {
|
17
17
|
|
18
18
|
//! An aggregate function in the catalog
|
19
|
-
class AggregateFunctionCatalogEntry : public
|
19
|
+
class AggregateFunctionCatalogEntry : public FunctionEntry {
|
20
20
|
public:
|
21
21
|
static constexpr const CatalogType Type = CatalogType::AGGREGATE_FUNCTION_ENTRY;
|
22
22
|
static constexpr const char *Name = "aggregate function";
|
23
23
|
|
24
24
|
public:
|
25
25
|
AggregateFunctionCatalogEntry(Catalog &catalog, SchemaCatalogEntry &schema, CreateAggregateFunctionInfo &info)
|
26
|
-
:
|
26
|
+
: FunctionEntry(CatalogType::AGGREGATE_FUNCTION_ENTRY, catalog, schema, info), functions(info.functions) {
|
27
27
|
}
|
28
28
|
|
29
29
|
//! The aggregate functions
|