duckdb 1.1.2-dev6.0 → 1.1.4-dev11.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/.github/workflows/NodeJS.yml +5 -54
- package/binding.gyp +73 -52
- package/package.json +2 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/algebraic/avg.cpp +2 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/algebraic/corr.cpp +4 -4
- package/src/duckdb/{src → extension}/core_functions/aggregate/algebraic/covar.cpp +2 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/algebraic/stddev.cpp +2 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/approx_count.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/arg_min_max.cpp +66 -18
- package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/bitagg.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/bitstring_agg.cpp +5 -7
- package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/bool.cpp +3 -1
- package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/kurtosis.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/product.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/skew.cpp +2 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/string_agg.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/sum.cpp +13 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/approx_top_k.cpp +3 -3
- package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/approximate_quantile.cpp +51 -15
- package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/mad.cpp +25 -10
- package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/mode.cpp +215 -71
- package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/quantile.cpp +58 -31
- package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/reservoir_quantile.cpp +2 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/nested/binned_histogram.cpp +9 -4
- package/src/duckdb/{src → extension}/core_functions/aggregate/nested/histogram.cpp +4 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/nested/list.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_avg.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_count.cpp +2 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_intercept.cpp +6 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_r2.cpp +2 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_slope.cpp +2 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_sxx_syy.cpp +2 -2
- package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_sxy.cpp +3 -3
- package/src/duckdb/extension/core_functions/core_functions_extension.cpp +85 -0
- package/src/duckdb/{src → extension}/core_functions/function_list.cpp +30 -51
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/algebraic/corr.hpp +3 -7
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/algebraic_functions.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/distributive_functions.hpp +16 -21
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/histogram_helpers.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/holistic_functions.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/nested_functions.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/quantile_helpers.hpp +2 -2
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/quantile_sort_tree.hpp +140 -58
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/quantile_state.hpp +50 -43
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/regression/regr_count.hpp +2 -2
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/regression/regr_slope.hpp +3 -7
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/regression_functions.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/array_functions.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/bit_functions.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/blob_functions.hpp +1 -10
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/date_functions.hpp +22 -55
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/debug_functions.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/enum_functions.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/generic_functions.hpp +1 -10
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/list_functions.hpp +4 -4
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/map_functions.hpp +1 -10
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/math_functions.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/operators_functions.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/random_functions.hpp +1 -1
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/string_functions.hpp +10 -103
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/struct_functions.hpp +1 -19
- package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/union_functions.hpp +1 -1
- package/src/duckdb/extension/core_functions/include/core_functions_extension.hpp +22 -0
- package/src/duckdb/{src → extension}/core_functions/lambda_functions.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/array/array_functions.cpp +11 -4
- package/src/duckdb/{src → extension}/core_functions/scalar/array/array_value.cpp +2 -2
- package/src/duckdb/{src → extension}/core_functions/scalar/bit/bitstring.cpp +12 -5
- package/src/duckdb/{src → extension}/core_functions/scalar/blob/base64.cpp +4 -2
- package/src/duckdb/{src → extension}/core_functions/scalar/blob/encode.cpp +4 -2
- package/src/duckdb/{src → extension}/core_functions/scalar/date/age.cpp +9 -3
- package/src/duckdb/extension/core_functions/scalar/date/current.cpp +29 -0
- package/src/duckdb/{src → extension}/core_functions/scalar/date/date_diff.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/date/date_part.cpp +42 -9
- package/src/duckdb/{src → extension}/core_functions/scalar/date/date_sub.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/date/date_trunc.cpp +4 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/date/epoch.cpp +19 -3
- package/src/duckdb/{src → extension}/core_functions/scalar/date/make_date.cpp +40 -5
- package/src/duckdb/{src → extension}/core_functions/scalar/date/time_bucket.cpp +4 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/date/to_interval.cpp +54 -28
- package/src/duckdb/{src → extension}/core_functions/scalar/debug/vector_type.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/enum/enum_functions.cpp +2 -7
- package/src/duckdb/{src → extension}/core_functions/scalar/generic/alias.cpp +2 -2
- package/src/duckdb/{src/function → extension/core_functions}/scalar/generic/binning.cpp +4 -3
- package/src/duckdb/{src → extension}/core_functions/scalar/generic/can_implicitly_cast.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/generic/current_setting.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/generic/hash.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/generic/least.cpp +30 -10
- package/src/duckdb/{src → extension}/core_functions/scalar/generic/stats.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/generic/system_functions.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/generic/typeof.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/list/array_slice.cpp +93 -88
- package/src/duckdb/{src → extension}/core_functions/scalar/list/flatten.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/list/list_aggregates.cpp +7 -3
- package/src/duckdb/{src → extension}/core_functions/scalar/list/list_distance.cpp +8 -2
- package/src/duckdb/{src → extension}/core_functions/scalar/list/list_filter.cpp +3 -3
- package/src/duckdb/{src → extension}/core_functions/scalar/list/list_has_any_or_all.cpp +3 -3
- package/src/duckdb/{src → extension}/core_functions/scalar/list/list_reduce.cpp +5 -5
- package/src/duckdb/{src → extension}/core_functions/scalar/list/list_sort.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/list/list_transform.cpp +3 -3
- package/src/duckdb/{src → extension}/core_functions/scalar/list/list_value.cpp +3 -3
- package/src/duckdb/{src → extension}/core_functions/scalar/list/range.cpp +7 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/map/cardinality.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/map/map.cpp +5 -4
- package/src/duckdb/{src → extension}/core_functions/scalar/map/map_concat.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/map/map_entries.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/map/map_extract.cpp +13 -25
- package/src/duckdb/{src → extension}/core_functions/scalar/map/map_from_entries.cpp +2 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/map/map_keys_values.cpp +11 -9
- package/src/duckdb/{src → extension}/core_functions/scalar/math/numeric.cpp +83 -37
- package/src/duckdb/{src → extension}/core_functions/scalar/operators/bitwise.cpp +19 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/random/random.cpp +4 -3
- package/src/duckdb/{src → extension}/core_functions/scalar/random/setseed.cpp +2 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/ascii.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/bar.cpp +6 -4
- package/src/duckdb/{src → extension}/core_functions/scalar/string/chr.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/damerau_levenshtein.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/format_bytes.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/hamming.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/hex.cpp +7 -3
- package/src/duckdb/{src → extension}/core_functions/scalar/string/instr.cpp +4 -4
- package/src/duckdb/{src → extension}/core_functions/scalar/string/jaccard.cpp +1 -1
- package/src/duckdb/extension/core_functions/scalar/string/jaro_winkler.cpp +112 -0
- package/src/duckdb/{src → extension}/core_functions/scalar/string/left_right.cpp +6 -6
- package/src/duckdb/{src → extension}/core_functions/scalar/string/levenshtein.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/pad.cpp +9 -5
- package/src/duckdb/{src → extension}/core_functions/scalar/string/parse_path.cpp +4 -4
- package/src/duckdb/{src → extension}/core_functions/scalar/string/printf.cpp +3 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/repeat.cpp +4 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/replace.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/reverse.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/starts_with.cpp +5 -3
- package/src/duckdb/{src → extension}/core_functions/scalar/string/to_base.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/translate.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/trim.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/unicode.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/string/url_encode.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/struct/struct_insert.cpp +25 -31
- package/src/duckdb/{src → extension}/core_functions/scalar/union/union_extract.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/union/union_tag.cpp +1 -1
- package/src/duckdb/{src → extension}/core_functions/scalar/union/union_value.cpp +3 -3
- package/src/duckdb/extension/icu/icu-dateadd.cpp +16 -11
- package/src/duckdb/extension/icu/icu-datefunc.cpp +2 -2
- package/src/duckdb/extension/icu/icu-datepart.cpp +8 -5
- package/src/duckdb/extension/icu/icu-datesub.cpp +2 -2
- package/src/duckdb/extension/icu/icu-datetrunc.cpp +8 -1
- package/src/duckdb/extension/icu/icu-list-range.cpp +2 -2
- package/src/duckdb/extension/icu/icu-makedate.cpp +18 -7
- package/src/duckdb/extension/icu/icu-strptime.cpp +9 -3
- package/src/duckdb/extension/icu/icu-table-range.cpp +2 -2
- package/src/duckdb/extension/icu/icu-timebucket.cpp +4 -1
- package/src/duckdb/extension/icu/icu-timezone.cpp +67 -1
- package/src/duckdb/extension/icu/icu_extension.cpp +60 -5
- package/src/duckdb/extension/icu/include/icu-datefunc.hpp +2 -1
- package/src/duckdb/extension/icu/third_party/icu/common/bytestriebuilder.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/dtintrv.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/filteredbrk.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/locid.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/lsr.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/lsr.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/common/messagepattern.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/common/normlzr.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/rbbinode.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/schriter.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/stringtriebuilder.cpp +8 -8
- package/src/duckdb/extension/icu/third_party/icu/common/ucharstriebuilder.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/uchriter.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/brkiter.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/bytestriebuilder.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/chariter.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/dtintrv.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/locid.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/messagepattern.h +4 -4
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/normlzr.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/parsepos.h +4 -4
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/rbbi.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/schriter.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/strenum.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/stringpiece.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/stringtriebuilder.h +9 -9
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/ucharstriebuilder.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/uchriter.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/uniset.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/unistr.h +12 -12
- package/src/duckdb/extension/icu/third_party/icu/common/unicode/uobject.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/common/unifiedcache.h +4 -4
- package/src/duckdb/extension/icu/third_party/icu/common/uniset.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/ustr_titlecase_brkiter.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/ustrenum.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/common/uvector.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/uvector.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/common/uvectr32.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/uvectr32.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/common/uvectr64.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/common/uvectr64.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/i18n/alphaindex.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/calendar.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/choicfmt.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/coleitr.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/coll.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/collationiterator.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/collationiterator.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/collationsettings.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/collationsettings.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/currpinf.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/datefmt.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/dcfmtsym.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/decimfmt.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/dtfmtsym.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/dtitvfmt.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/dtitvinf.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/dtptngen.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/dtptngen_impl.h +4 -4
- package/src/duckdb/extension/icu/third_party/icu/i18n/dtrule.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/fmtable.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/format.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/fpositer.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/measfmt.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/measunit.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/measure.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/msgfmt.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/nfrs.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/nfrs.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/nfrule.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/nfrule.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/nfsubs.cpp +9 -9
- package/src/duckdb/extension/icu/third_party/icu/i18n/nfsubs.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/number_asformat.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/number_asformat.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/numfmt.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/olsontz.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/olsontz.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/plurfmt.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/plurrule.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/rbnf.cpp +4 -4
- package/src/duckdb/extension/icu/third_party/icu/i18n/rbtz.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/region.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/reldtfmt.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/reldtfmt.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/rulebasedcollator.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/selfmt.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/simpletz.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/smpdtfmt.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/sortkey.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/timezone.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/tmutamt.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/tzfmt.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/tzgnames.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/tzgnames.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/tznames.cpp +3 -3
- package/src/duckdb/extension/icu/third_party/icu/i18n/tznames_impl.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/tznames_impl.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/tzrule.cpp +8 -8
- package/src/duckdb/extension/icu/third_party/icu/i18n/tztrans.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/alphaindex.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/calendar.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/choicfmt.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/coleitr.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/coll.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/currpinf.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/datefmt.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dcfmtsym.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/decimfmt.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dtfmtsym.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dtitvfmt.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dtitvinf.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dtptngen.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dtrule.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/fieldpos.h +4 -4
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/fmtable.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/format.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/fpositer.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/measfmt.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/measunit.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/measure.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/msgfmt.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/numfmt.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/plurfmt.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/plurrule.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/rbnf.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/rbtz.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/region.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/search.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/selfmt.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/simpletz.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/smpdtfmt.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/sortkey.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/stsearch.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tblcoll.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/timezone.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tmutamt.h +3 -3
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tmutfmt.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tzfmt.h +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tznames.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tzrule.h +8 -8
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tztrans.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/vtzone.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/utf16collationiterator.cpp +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/utf16collationiterator.h +2 -2
- package/src/duckdb/extension/icu/third_party/icu/i18n/vtzone.cpp +2 -2
- package/src/duckdb/extension/json/buffered_json_reader.cpp +6 -1
- package/src/duckdb/extension/json/include/buffered_json_reader.hpp +2 -0
- package/src/duckdb/extension/json/include/json_common.hpp +14 -10
- package/src/duckdb/extension/json/include/json_scan.hpp +48 -7
- package/src/duckdb/extension/json/include/json_structure.hpp +2 -1
- package/src/duckdb/extension/json/include/json_transform.hpp +5 -2
- package/src/duckdb/extension/json/json_functions/copy_json.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_create.cpp +57 -20
- package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +7 -6
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +6 -5
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +20 -17
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +48 -17
- package/src/duckdb/extension/json/json_functions/read_json.cpp +83 -34
- package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +3 -3
- package/src/duckdb/extension/json/json_functions.cpp +14 -16
- package/src/duckdb/extension/json/json_scan.cpp +36 -16
- package/src/duckdb/extension/json/json_serializer.cpp +1 -1
- package/src/duckdb/extension/json/serialize_json.cpp +2 -2
- package/src/duckdb/extension/parquet/column_reader.cpp +136 -116
- package/src/duckdb/extension/parquet/column_writer.cpp +870 -604
- package/src/duckdb/extension/parquet/geo_parquet.cpp +4 -5
- package/src/duckdb/extension/parquet/include/boolean_column_reader.hpp +0 -4
- package/src/duckdb/extension/parquet/include/column_reader.hpp +24 -19
- package/src/duckdb/extension/parquet/include/column_writer.hpp +7 -5
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +138 -18
- package/src/duckdb/extension/parquet/include/geo_parquet.hpp +4 -3
- package/src/duckdb/extension/parquet/include/null_column_reader.hpp +1 -14
- package/src/duckdb/extension/parquet/include/parquet_bss_encoder.hpp +45 -0
- package/src/duckdb/extension/parquet/include/parquet_crypto.hpp +1 -1
- package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +101 -90
- package/src/duckdb/extension/parquet/include/parquet_dbp_encoder.hpp +179 -0
- package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +2 -3
- package/src/duckdb/extension/parquet/include/parquet_dlba_encoder.hpp +48 -0
- package/src/duckdb/extension/parquet/include/parquet_extension.hpp +8 -0
- package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_metadata.hpp +5 -0
- package/src/duckdb/extension/parquet/include/parquet_reader.hpp +22 -18
- package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +1 -5
- package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +87 -3
- package/src/duckdb/extension/parquet/include/parquet_writer.hpp +30 -16
- package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +1 -0
- package/src/duckdb/extension/parquet/include/string_column_reader.hpp +0 -8
- package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/include/templated_column_reader.hpp +1 -42
- package/src/duckdb/extension/parquet/include/thrift_tools.hpp +13 -1
- package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +4 -0
- package/src/duckdb/extension/parquet/parquet_extension.cpp +240 -197
- package/src/duckdb/extension/parquet/parquet_metadata.cpp +138 -6
- package/src/duckdb/extension/parquet/parquet_reader.cpp +155 -79
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +258 -38
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +17 -3
- package/src/duckdb/extension/parquet/parquet_writer.cpp +65 -34
- package/src/duckdb/extension/parquet/serialize_parquet.cpp +4 -0
- package/src/duckdb/extension/parquet/zstd_file_system.cpp +13 -0
- package/src/duckdb/src/catalog/catalog.cpp +272 -97
- package/src/duckdb/src/catalog/catalog_entry/duck_index_entry.cpp +9 -4
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +8 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +145 -95
- package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +9 -3
- package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +15 -0
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +40 -24
- package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +1 -1
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +2 -2
- package/src/duckdb/src/catalog/catalog_entry.cpp +3 -0
- package/src/duckdb/src/catalog/catalog_entry_retriever.cpp +60 -5
- package/src/duckdb/src/catalog/catalog_search_path.cpp +27 -14
- package/src/duckdb/src/catalog/catalog_set.cpp +75 -31
- package/src/duckdb/src/catalog/default/default_functions.cpp +13 -8
- package/src/duckdb/src/catalog/default/default_views.cpp +1 -0
- package/src/duckdb/src/catalog/dependency_manager.cpp +133 -5
- package/src/duckdb/src/catalog/duck_catalog.cpp +17 -9
- package/src/duckdb/src/common/adbc/adbc.cpp +18 -0
- package/src/duckdb/src/common/allocator.cpp +3 -1
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +30 -9
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +63 -82
- package/src/duckdb/src/common/arrow/arrow_merge_event.cpp +4 -3
- package/src/duckdb/src/common/arrow/arrow_type_extension.cpp +361 -0
- package/src/duckdb/src/common/arrow/arrow_util.cpp +10 -6
- package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +6 -2
- package/src/duckdb/src/common/arrow/physical_arrow_collector.cpp +2 -1
- package/src/duckdb/src/common/arrow/schema_metadata.cpp +27 -14
- package/src/duckdb/src/common/assert.cpp +1 -2
- package/src/duckdb/src/common/bind_helpers.cpp +1 -1
- package/src/duckdb/src/common/box_renderer.cpp +316 -26
- package/src/duckdb/src/common/cgroups.cpp +7 -1
- package/src/duckdb/src/common/compressed_file_system.cpp +1 -1
- package/src/duckdb/src/common/enum_util.cpp +2865 -6882
- package/src/duckdb/src/common/enums/compression_type.cpp +12 -0
- package/src/duckdb/src/common/enums/metric_type.cpp +24 -0
- package/src/duckdb/src/common/enums/optimizer_type.cpp +4 -0
- package/src/duckdb/src/common/enums/physical_operator_type.cpp +2 -0
- package/src/duckdb/src/common/error_data.cpp +23 -6
- package/src/duckdb/src/common/exception/binder_exception.cpp +1 -1
- package/src/duckdb/src/common/exception.cpp +20 -28
- package/src/duckdb/src/common/extra_type_info.cpp +85 -20
- package/src/duckdb/src/common/file_buffer.cpp +5 -2
- package/src/duckdb/src/common/file_system.cpp +8 -3
- package/src/duckdb/src/common/fsst.cpp +3 -3
- package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
- package/src/duckdb/src/common/local_file_system.cpp +169 -60
- package/src/duckdb/src/common/multi_file_list.cpp +4 -1
- package/src/duckdb/src/common/multi_file_reader.cpp +240 -63
- package/src/duckdb/src/common/opener_file_system.cpp +37 -0
- package/src/duckdb/src/common/operator/cast_operators.cpp +77 -11
- package/src/duckdb/src/common/operator/string_cast.cpp +6 -2
- package/src/duckdb/src/common/pipe_file_system.cpp +4 -4
- package/src/duckdb/src/common/progress_bar/progress_bar.cpp +25 -14
- package/src/duckdb/src/common/radix_partitioning.cpp +17 -16
- package/src/duckdb/src/common/random_engine.cpp +39 -3
- package/src/duckdb/src/common/render_tree.cpp +3 -19
- package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
- package/src/duckdb/src/common/row_operations/row_gather.cpp +2 -58
- package/src/duckdb/src/common/row_operations/row_matcher.cpp +2 -2
- package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -0
- package/src/duckdb/src/common/row_operations/row_scatter.cpp +20 -19
- package/src/duckdb/src/common/serializer/buffered_file_writer.cpp +1 -1
- package/src/duckdb/src/common/serializer/memory_stream.cpp +36 -0
- package/src/duckdb/src/common/sort/comparators.cpp +7 -7
- package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
- package/src/duckdb/src/common/stacktrace.cpp +127 -0
- package/src/duckdb/src/common/string_util.cpp +157 -32
- package/src/duckdb/src/common/tree_renderer/text_tree_renderer.cpp +15 -3
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -0
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +71 -8
- package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +27 -6
- package/src/duckdb/src/common/types/conflict_manager.cpp +21 -7
- package/src/duckdb/src/common/types/date.cpp +39 -25
- package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +4 -11
- package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +21 -7
- package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +10 -1
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +17 -17
- package/src/duckdb/src/common/types/timestamp.cpp +70 -33
- package/src/duckdb/src/common/types/uuid.cpp +11 -0
- package/src/duckdb/src/common/types/validity_mask.cpp +16 -5
- package/src/duckdb/src/common/types/value.cpp +357 -199
- package/src/duckdb/src/common/types/varint.cpp +64 -18
- package/src/duckdb/src/common/types/vector.cpp +78 -38
- package/src/duckdb/src/common/types.cpp +199 -92
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +2 -1
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +32 -5
- package/src/duckdb/src/common/vector_operations/vector_hash.cpp +3 -1
- package/src/duckdb/src/execution/adaptive_filter.cpp +6 -2
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +410 -111
- package/src/duckdb/src/execution/column_binding_resolver.cpp +2 -2
- package/src/duckdb/src/execution/expression_executor/execute_between.cpp +6 -0
- package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +4 -3
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
- package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +2 -2
- package/src/duckdb/src/execution/expression_executor/execute_function.cpp +1 -0
- package/src/duckdb/src/execution/expression_executor/execute_operator.cpp +5 -4
- package/src/duckdb/src/execution/expression_executor.cpp +5 -3
- package/src/duckdb/src/execution/index/art/art.cpp +208 -72
- package/src/duckdb/src/execution/index/art/base_leaf.cpp +1 -1
- package/src/duckdb/src/execution/index/art/leaf.cpp +12 -7
- package/src/duckdb/src/execution/index/art/node.cpp +2 -1
- package/src/duckdb/src/execution/index/art/node256_leaf.cpp +6 -6
- package/src/duckdb/src/execution/index/art/plan_art.cpp +50 -55
- package/src/duckdb/src/execution/index/art/prefix.cpp +7 -13
- package/src/duckdb/src/execution/index/bound_index.cpp +30 -5
- package/src/duckdb/src/execution/index/fixed_size_allocator.cpp +3 -5
- package/src/duckdb/src/execution/index/fixed_size_buffer.cpp +14 -9
- package/src/duckdb/src/execution/join_hashtable.cpp +254 -158
- package/src/duckdb/src/execution/operator/aggregate/grouped_aggregate_data.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +7 -7
- package/src/duckdb/src/execution/operator/aggregate/physical_partitioned_aggregate.cpp +226 -0
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +3 -3
- package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +3 -3
- package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +77 -70
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +114 -50
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +2 -2
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +19 -10
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +22 -15
- package/src/duckdb/src/execution/operator/csv_scanner/encode/csv_encoder.cpp +95 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +6 -1
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/csv_schema.cpp +75 -2
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +40 -12
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +395 -163
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +20 -23
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +115 -49
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +66 -12
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +20 -23
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +220 -46
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +43 -32
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +54 -119
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +184 -20
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +83 -21
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_validator.cpp +63 -0
- package/src/duckdb/src/execution/operator/helper/physical_reservoir_sample.cpp +7 -4
- package/src/duckdb/src/execution/operator/helper/physical_set.cpp +1 -1
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +3 -2
- package/src/duckdb/src/execution/operator/helper/physical_verify_vector.cpp +9 -1
- package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +132 -15
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -55
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +284 -154
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +40 -55
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +0 -1
- package/src/duckdb/src/execution/operator/order/physical_order.cpp +7 -3
- package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +298 -227
- package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +5 -2
- package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +3 -4
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +32 -19
- package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +1 -0
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +6 -0
- package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +58 -19
- package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +11 -27
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +308 -119
- package/src/duckdb/src/execution/operator/persistent/physical_update.cpp +105 -55
- package/src/duckdb/src/execution/operator/projection/physical_tableinout_function.cpp +6 -2
- package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +1 -1
- package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +15 -6
- package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +92 -50
- package/src/duckdb/src/execution/operator/schema/physical_alter.cpp +0 -1
- package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +8 -4
- package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +54 -22
- package/src/duckdb/src/execution/operator/set/physical_union.cpp +5 -1
- package/src/duckdb/src/execution/physical_operator.cpp +15 -9
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +101 -12
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +11 -140
- package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +11 -13
- package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_delete.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_delim_join.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +6 -5
- package/src/duckdb/src/execution/physical_plan/plan_export.cpp +0 -4
- package/src/duckdb/src/execution/physical_plan/plan_filter.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_get.cpp +16 -13
- package/src/duckdb/src/execution/physical_plan/plan_insert.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_order.cpp +7 -7
- package/src/duckdb/src/execution/physical_plan/plan_prepare.cpp +2 -2
- package/src/duckdb/src/execution/physical_plan/plan_projection.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_sample.cpp +8 -3
- package/src/duckdb/src/execution/physical_plan/plan_set_operation.cpp +1 -2
- package/src/duckdb/src/execution/physical_plan/plan_simple.cpp +1 -2
- package/src/duckdb/src/execution/physical_plan/plan_top_n.cpp +3 -2
- package/src/duckdb/src/execution/physical_plan_generator.cpp +0 -22
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +136 -116
- package/src/duckdb/src/execution/sample/base_reservoir_sample.cpp +136 -0
- package/src/duckdb/src/execution/sample/reservoir_sample.cpp +930 -0
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +6 -12
- package/src/duckdb/src/function/aggregate/distributive/{first.cpp → first_last_any.cpp} +37 -18
- package/src/duckdb/src/{core_functions → function}/aggregate/distributive/minmax.cpp +19 -12
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +72 -13
- package/src/duckdb/src/function/built_in_functions.cpp +85 -2
- package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
- package/src/duckdb/src/function/cast/string_cast.cpp +1 -1
- package/src/duckdb/src/function/cast/struct_cast.cpp +81 -49
- package/src/duckdb/src/function/cast/union/from_struct.cpp +7 -5
- package/src/duckdb/src/function/compression_config.cpp +6 -0
- package/src/duckdb/src/function/encoding_function.cpp +134 -0
- package/src/duckdb/src/function/function.cpp +8 -13
- package/src/duckdb/src/function/function_binder.cpp +100 -21
- package/src/duckdb/src/function/function_list.cpp +178 -0
- package/src/duckdb/src/function/macro_function.cpp +4 -4
- package/src/duckdb/src/function/pragma/pragma_functions.cpp +0 -2
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +0 -4
- package/src/duckdb/src/{core_functions/core_functions.cpp → function/register_function_list.cpp} +12 -8
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +62 -23
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +33 -16
- package/src/duckdb/src/function/scalar/compressed_materialization_utils.cpp +21 -0
- package/src/duckdb/src/{core_functions/scalar/blob → function/scalar}/create_sort_key.cpp +86 -23
- package/src/duckdb/src/{core_functions → function}/scalar/date/strftime.cpp +6 -4
- package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +5 -7
- package/src/duckdb/src/{core_functions → function}/scalar/generic/error.cpp +3 -1
- package/src/duckdb/src/function/scalar/generic/getvariable.cpp +2 -2
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +1 -7
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +27 -21
- package/src/duckdb/src/function/scalar/list/list_resize.cpp +8 -12
- package/src/duckdb/src/function/scalar/list/list_select.cpp +1 -4
- package/src/duckdb/src/function/scalar/list/list_zip.cpp +6 -6
- package/src/duckdb/src/{core_functions → function}/scalar/map/map_contains.cpp +2 -2
- package/src/duckdb/src/function/scalar/nested_functions.cpp +0 -11
- package/src/duckdb/src/function/scalar/{operators → operator}/add.cpp +2 -1
- package/src/duckdb/src/function/scalar/{operators → operator}/arithmetic.cpp +195 -127
- package/src/duckdb/src/function/scalar/sequence/nextval.cpp +30 -21
- package/src/duckdb/src/function/scalar/strftime_format.cpp +10 -0
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +11 -41
- package/src/duckdb/src/function/scalar/string/concat.cpp +22 -20
- package/src/duckdb/src/function/scalar/string/concat_ws.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/contains.cpp +16 -19
- package/src/duckdb/src/function/scalar/string/length.cpp +38 -24
- package/src/duckdb/src/function/scalar/string/like.cpp +80 -47
- package/src/duckdb/src/{core_functions → function}/scalar/string/md5.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/nfc_normalize.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/prefix.cpp +0 -4
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +2 -1
- package/src/duckdb/src/function/scalar/string/regexp.cpp +17 -7
- package/src/duckdb/src/{core_functions → function}/scalar/string/regexp_escape.cpp +2 -2
- package/src/duckdb/src/{core_functions → function}/scalar/string/sha1.cpp +1 -1
- package/src/duckdb/src/{core_functions → function}/scalar/string/sha256.cpp +1 -1
- package/src/duckdb/src/{core_functions → function}/scalar/string/string_split.cpp +4 -5
- package/src/duckdb/src/function/scalar/string/strip_accents.cpp +3 -6
- package/src/duckdb/src/function/scalar/string/substring.cpp +14 -13
- package/src/duckdb/src/function/scalar/string/suffix.cpp +0 -4
- package/src/duckdb/src/function/scalar/struct/struct_concat.cpp +115 -0
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +35 -31
- package/src/duckdb/src/{core_functions → function}/scalar/struct/struct_pack.cpp +7 -7
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +5 -8
- package/src/duckdb/src/function/scalar/system/write_log.cpp +170 -0
- package/src/duckdb/src/function/scalar_function.cpp +5 -5
- package/src/duckdb/src/function/table/arrow/arrow_array_scan_state.cpp +3 -2
- package/src/duckdb/src/function/table/arrow/arrow_duck_schema.cpp +287 -1
- package/src/duckdb/src/function/table/arrow/arrow_type_info.cpp +6 -6
- package/src/duckdb/src/function/table/arrow.cpp +32 -352
- package/src/duckdb/src/function/table/arrow_conversion.cpp +43 -7
- package/src/duckdb/src/function/table/copy_csv.cpp +38 -23
- package/src/duckdb/src/function/table/glob.cpp +1 -1
- package/src/duckdb/src/function/table/query_function.cpp +12 -7
- package/src/duckdb/src/function/table/read_csv.cpp +114 -46
- package/src/duckdb/src/function/table/read_file.cpp +26 -6
- package/src/duckdb/src/function/table/sniff_csv.cpp +25 -5
- package/src/duckdb/src/function/table/system/duckdb_columns.cpp +1 -1
- package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +1 -1
- package/src/duckdb/src/function/table/system/duckdb_dependencies.cpp +6 -7
- package/src/duckdb/src/function/table/system/duckdb_extensions.cpp +1 -1
- package/src/duckdb/src/function/table/system/duckdb_functions.cpp +141 -16
- package/src/duckdb/src/function/table/system/duckdb_log.cpp +64 -0
- package/src/duckdb/src/function/table/system/duckdb_log_contexts.cpp +65 -0
- package/src/duckdb/src/function/table/system/duckdb_memory.cpp +0 -1
- package/src/duckdb/src/function/table/system/duckdb_settings.cpp +1 -1
- package/src/duckdb/src/function/table/system/duckdb_tables.cpp +1 -13
- package/src/duckdb/src/function/table/system/duckdb_types.cpp +1 -1
- package/src/duckdb/src/function/table/system/pragma_storage_info.cpp +17 -0
- package/src/duckdb/src/function/table/system/pragma_table_info.cpp +6 -0
- package/src/duckdb/src/function/table/system/pragma_table_sample.cpp +95 -0
- package/src/duckdb/src/function/table/system/test_all_types.cpp +56 -46
- package/src/duckdb/src/function/table/system_functions.cpp +3 -0
- package/src/duckdb/src/function/table/table_scan.cpp +487 -289
- package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
- package/src/duckdb/src/function/table_function.cpp +10 -6
- package/src/duckdb/src/function/window/window_aggregate_function.cpp +248 -0
- package/src/duckdb/src/function/window/window_aggregate_states.cpp +48 -0
- package/src/duckdb/src/function/window/window_aggregator.cpp +88 -0
- package/src/duckdb/src/function/window/window_boundaries_state.cpp +854 -0
- package/src/duckdb/src/function/window/window_collection.cpp +146 -0
- package/src/duckdb/src/function/window/window_constant_aggregator.cpp +357 -0
- package/src/duckdb/src/function/window/window_custom_aggregator.cpp +146 -0
- package/src/duckdb/src/function/window/window_distinct_aggregator.cpp +758 -0
- package/src/duckdb/src/function/window/window_executor.cpp +99 -0
- package/src/duckdb/src/function/window/window_index_tree.cpp +63 -0
- package/src/duckdb/src/function/window/window_merge_sort_tree.cpp +275 -0
- package/src/duckdb/src/function/window/window_naive_aggregator.cpp +361 -0
- package/src/duckdb/src/function/window/window_rank_function.cpp +288 -0
- package/src/duckdb/src/function/window/window_rownumber_function.cpp +191 -0
- package/src/duckdb/src/function/window/window_segment_tree.cpp +594 -0
- package/src/duckdb/src/function/window/window_shared_expressions.cpp +50 -0
- package/src/duckdb/src/function/window/window_token_tree.cpp +142 -0
- package/src/duckdb/src/function/window/window_value_function.cpp +566 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +74 -17
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +9 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/function_entry.hpp +4 -10
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/pragma_function_catalog_entry.hpp +1 -1
- 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/schema_catalog_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +18 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +2 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +5 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry_retriever.hpp +21 -18
- package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +3 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +10 -2
- package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +11 -0
- package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +9 -4
- package/src/duckdb/src/include/duckdb/common/allocator.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/array_ptr.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/append_data.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/arrow/appender/list_data.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/arrow/appender/list_view_data.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/arrow/appender/varchar_data.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_appender.hpp +7 -3
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_converter.hpp +26 -3
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_query_result.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_type_extension.hpp +144 -0
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_util.hpp +5 -2
- package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/arrow/schema_metadata.hpp +11 -4
- package/src/duckdb/src/include/duckdb/common/assert.hpp +12 -1
- package/src/duckdb/src/include/duckdb/common/atomic_ptr.hpp +102 -0
- package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +65 -6
- package/src/duckdb/src/include/duckdb/common/chrono.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/column_index.hpp +72 -0
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +120 -0
- package/src/duckdb/src/include/duckdb/{core_functions/core_functions.hpp → common/enums/collation_type.hpp} +2 -7
- package/src/duckdb/src/include/duckdb/common/enums/compression_type.hpp +5 -2
- package/src/duckdb/src/include/duckdb/common/enums/function_errors.hpp +18 -0
- package/src/duckdb/src/include/duckdb/common/enums/memory_tag.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/enums/metric_type.hpp +7 -2
- package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +4 -0
- package/src/duckdb/src/include/duckdb/common/enums/order_preservation_type.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enums/profiler_format.hpp +1 -1
- package/src/duckdb/src/include/duckdb/{core_functions/aggregate → common/enums}/quantile_enum.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/enums/scan_vector_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/error_data.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +4 -0
- package/src/duckdb/src/include/duckdb/common/exception.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/extension_type_info.hpp +37 -0
- package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +7 -2
- package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +9 -3
- package/src/duckdb/src/include/duckdb/common/fast_mem.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/file_buffer.hpp +19 -10
- package/src/duckdb/src/include/duckdb/common/file_opener.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/file_system.hpp +6 -1
- package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/helper.hpp +6 -0
- package/src/duckdb/src/include/duckdb/common/hugeint.hpp +10 -0
- package/src/duckdb/src/include/duckdb/common/insertion_order_preserving_map.hpp +12 -2
- package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/multi_file_list.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +147 -27
- package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +4 -0
- package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +2 -7
- package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +16 -5
- package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +16 -0
- package/src/duckdb/src/include/duckdb/common/optional_idx.hpp +4 -0
- package/src/duckdb/src/include/duckdb/common/platform.hpp +34 -3
- package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +10 -13
- package/src/duckdb/src/include/duckdb/common/random_engine.hpp +8 -3
- package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +0 -2
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_writer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/serializer/memory_stream.hpp +7 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/stacktrace.hpp +25 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +30 -2
- package/src/duckdb/src/include/duckdb/common/tree_renderer/graphviz_tree_renderer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/tree_renderer/html_tree_renderer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/tree_renderer/json_tree_renderer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/tree_renderer/text_tree_renderer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/tree_renderer.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/type_util.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +13 -2
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/types/conflict_manager.hpp +21 -4
- package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/types/date.hpp +9 -4
- package/src/duckdb/src/include/duckdb/common/types/date_lookup_cache.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +58 -10
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +0 -4
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_allocator.hpp +4 -0
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +4 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -0
- package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +43 -16
- package/src/duckdb/src/include/duckdb/common/types/uuid.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +63 -21
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +62 -16
- package/src/duckdb/src/include/duckdb/common/types/varint.hpp +13 -0
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +34 -7
- package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +15 -0
- package/src/duckdb/src/include/duckdb/common/types.hpp +12 -7
- package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +10 -0
- package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +12 -13
- package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +111 -4
- package/src/duckdb/src/include/duckdb/common/vector_operations/vector_operations.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/adaptive_filter.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +48 -10
- package/src/duckdb/src/include/duckdb/execution/executor.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/expression_executor.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/ht_entry.hpp +25 -27
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +28 -18
- package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/index/bound_index.hpp +23 -16
- package/src/duckdb/src/include/duckdb/execution/index/fixed_size_allocator.hpp +4 -0
- package/src/duckdb/src/include/duckdb/execution/index/fixed_size_buffer.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/join_hashtable.hpp +25 -16
- package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +15 -10
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/{persistent/physical_fixed_batch_copy.hpp → aggregate/physical_partitioned_aggregate.hpp} +25 -27
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_ungrouped_aggregate.hpp +1 -2
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +5 -4
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/ungrouped_aggregate_state.hpp +21 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +38 -9
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp +8 -9
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp +7 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp +29 -23
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp +15 -13
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp +13 -5
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp +24 -10
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_schema.hpp +36 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state.hpp +21 -13
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp +52 -22
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp +6 -6
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_validator.hpp +58 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/encode/csv_encoder.hpp +62 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp +6 -3
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner_boundary.hpp +16 -6
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp +9 -4
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine_options.hpp +8 -4
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +55 -10
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_buffered_batch_collector.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_limit.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_reservoir_sample.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/join_filter_pushdown.hpp +28 -7
- package/src/duckdb/src/include/duckdb/execution/operator/join/perfect_hash_join_executor.hpp +6 -9
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +17 -16
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/order/physical_order.hpp +7 -3
- package/src/duckdb/src/include/duckdb/execution/operator/order/physical_top_n.hpp +5 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_insert.hpp +55 -4
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_update.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_tableinout_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_positional_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +10 -9
- package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_create_art_index.hpp +16 -13
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +0 -4
- package/src/duckdb/src/include/duckdb/execution/partition_info.hpp +79 -0
- package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +20 -9
- package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +1 -11
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +0 -2
- package/src/duckdb/src/include/duckdb/execution/progress_data.hpp +58 -0
- package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/reservoir_sample.hpp +160 -31
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_function_utils.hpp +31 -0
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +61 -10
- package/src/duckdb/src/include/duckdb/{core_functions → function}/aggregate/minmax_n_helpers.hpp +1 -1
- package/src/duckdb/src/include/duckdb/{core_functions → function}/aggregate/sort_key_helpers.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +47 -27
- package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -0
- package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +3 -10
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +13 -6
- package/src/duckdb/src/include/duckdb/function/compression/compression.hpp +15 -0
- package/src/duckdb/src/include/duckdb/function/compression_function.hpp +29 -6
- package/src/duckdb/src/include/duckdb/{core_functions → function}/create_sort_key.hpp +4 -1
- package/src/duckdb/src/include/duckdb/function/encoding_function.hpp +78 -0
- package/src/duckdb/src/include/duckdb/function/function.hpp +22 -1
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -0
- package/src/duckdb/src/include/duckdb/function/function_list.hpp +39 -0
- package/src/duckdb/src/include/duckdb/function/function_set.hpp +13 -7
- package/src/duckdb/src/include/duckdb/{core_functions → function}/lambda_functions.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/partition_stats.hpp +36 -0
- package/src/duckdb/src/include/duckdb/function/register_function_list_helper.hpp +69 -0
- package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +154 -23
- package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_utils.hpp +45 -0
- package/src/duckdb/src/include/duckdb/function/scalar/date_functions.hpp +45 -0
- package/src/duckdb/src/include/duckdb/function/scalar/generic_common.hpp +36 -0
- package/src/duckdb/src/include/duckdb/function/scalar/generic_functions.hpp +32 -23
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/scalar/list_functions.hpp +156 -0
- package/src/duckdb/src/include/duckdb/function/scalar/map_functions.hpp +27 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +4 -45
- package/src/duckdb/src/include/duckdb/function/scalar/operator_functions.hpp +102 -0
- package/src/duckdb/src/include/duckdb/function/scalar/operators.hpp +2 -16
- package/src/duckdb/src/include/duckdb/function/scalar/sequence_functions.hpp +16 -25
- package/src/duckdb/src/include/duckdb/function/scalar/sequence_utils.hpp +38 -0
- package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/scalar/string_common.hpp +49 -0
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +401 -76
- package/src/duckdb/src/include/duckdb/function/scalar/struct_functions.hpp +63 -0
- package/src/duckdb/src/include/duckdb/function/scalar/struct_utils.hpp +33 -0
- package/src/duckdb/src/include/duckdb/function/scalar/system_functions.hpp +45 -0
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +17 -8
- package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +59 -6
- package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_type_info.hpp +12 -9
- package/src/duckdb/src/include/duckdb/function/table/arrow/enum/arrow_type_info_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +18 -13
- package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +7 -4
- package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +14 -0
- package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +15 -10
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +94 -18
- package/src/duckdb/src/include/duckdb/{core_functions → function}/to_interval.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/window/window_aggregate_function.hpp +44 -0
- package/src/duckdb/src/include/duckdb/function/window/window_aggregate_states.hpp +56 -0
- package/src/duckdb/src/include/duckdb/function/window/window_aggregator.hpp +194 -0
- package/src/duckdb/src/include/duckdb/function/window/window_boundaries_state.hpp +153 -0
- package/src/duckdb/src/include/duckdb/function/window/window_collection.hpp +146 -0
- package/src/duckdb/src/include/duckdb/function/window/window_constant_aggregator.hpp +38 -0
- package/src/duckdb/src/include/duckdb/function/window/window_custom_aggregator.hpp +32 -0
- package/src/duckdb/src/include/duckdb/function/window/window_distinct_aggregator.hpp +39 -0
- package/src/duckdb/src/include/duckdb/function/window/window_executor.hpp +122 -0
- package/src/duckdb/src/include/duckdb/function/window/window_index_tree.hpp +42 -0
- package/src/duckdb/src/include/duckdb/function/window/window_merge_sort_tree.hpp +108 -0
- package/src/duckdb/src/include/duckdb/function/window/window_naive_aggregator.hpp +33 -0
- package/src/duckdb/src/include/duckdb/function/window/window_rank_function.hpp +63 -0
- package/src/duckdb/src/include/duckdb/function/window/window_rownumber_function.hpp +43 -0
- package/src/duckdb/src/include/duckdb/function/window/window_segment_tree.hpp +31 -0
- package/src/duckdb/src/include/duckdb/function/window/window_shared_expressions.hpp +76 -0
- package/src/duckdb/src/include/duckdb/function/window/window_token_tree.hpp +46 -0
- package/src/duckdb/src/include/duckdb/function/window/window_value_function.hpp +79 -0
- package/src/duckdb/src/include/duckdb/logging/http_logger.hpp +2 -0
- package/src/duckdb/src/include/duckdb/logging/log_manager.hpp +81 -0
- package/src/duckdb/src/include/duckdb/logging/log_storage.hpp +127 -0
- package/src/duckdb/src/include/duckdb/logging/logger.hpp +287 -0
- package/src/duckdb/src/include/duckdb/logging/logging.hpp +83 -0
- package/src/duckdb/src/include/duckdb/main/appender.hpp +41 -18
- package/src/duckdb/src/include/duckdb/main/attached_database.hpp +6 -3
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +7 -2
- package/src/duckdb/src/include/duckdb/main/capi/extension_api.hpp +317 -231
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +17 -1
- package/src/duckdb/src/include/duckdb/main/client_context.hpp +28 -6
- package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/client_context_wrapper.hpp +5 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -2
- package/src/duckdb/src/include/duckdb/main/client_properties.hpp +8 -3
- package/src/duckdb/src/include/duckdb/main/config.hpp +52 -8
- package/src/duckdb/src/include/duckdb/main/connection.hpp +18 -3
- package/src/duckdb/src/include/duckdb/main/database.hpp +8 -7
- package/src/duckdb/src/include/duckdb/main/database_file_opener.hpp +5 -1
- package/src/duckdb/src/include/duckdb/main/database_manager.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/db_instance_cache.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/extension.hpp +8 -2
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +548 -9
- package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +18 -0
- package/src/duckdb/src/include/duckdb/main/extension_util.hpp +12 -7
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/profiling_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +8 -4
- package/src/duckdb/src/include/duckdb/main/relation/create_table_relation.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/relation/delete_relation.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/relation/subquery_relation.hpp +1 -4
- package/src/duckdb/src/include/duckdb/main/relation/table_function_relation.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/relation/table_relation.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/relation/update_relation.hpp +3 -2
- package/src/duckdb/src/include/duckdb/main/relation/value_relation.hpp +7 -0
- package/src/duckdb/src/include/duckdb/main/relation/view_relation.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/relation/write_parquet_relation.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/relation.hpp +45 -9
- package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +20 -22
- package/src/duckdb/src/include/duckdb/main/settings.hpp +613 -378
- package/src/duckdb/src/include/duckdb/main/table_description.hpp +14 -4
- package/src/duckdb/src/include/duckdb/optimizer/build_probe_side_optimizer.hpp +1 -3
- package/src/duckdb/src/include/duckdb/optimizer/column_lifetime_analyzer.hpp +14 -7
- package/src/duckdb/src/include/duckdb/optimizer/common_aggregate_optimizer.hpp +2 -2
- package/src/duckdb/src/include/duckdb/optimizer/empty_result_pullup.hpp +27 -0
- package/src/duckdb/src/include/duckdb/optimizer/expression_heuristics.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_combiner.hpp +6 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/in_clause_rewriter.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_filter_pushdown_optimizer.hpp +5 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/plan_enumerator.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_statistics_helper.hpp +2 -2
- package/src/duckdb/src/include/duckdb/optimizer/late_materialization.hpp +45 -0
- package/src/duckdb/src/include/duckdb/optimizer/matcher/expression_matcher.hpp +23 -0
- package/src/duckdb/src/include/duckdb/optimizer/matcher/type_matcher.hpp +18 -0
- package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +9 -0
- package/src/duckdb/src/include/duckdb/optimizer/remove_unused_columns.hpp +33 -11
- package/src/duckdb/src/include/duckdb/optimizer/rule/distinct_aggregate_optimizer.hpp +34 -0
- package/src/duckdb/src/include/duckdb/optimizer/sampling_pushdown.hpp +25 -0
- package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +3 -1
- package/src/duckdb/src/include/duckdb/optimizer/sum_rewriter.hpp +37 -0
- package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parallel/event.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parallel/pipeline_executor.hpp +26 -8
- package/src/duckdb/src/include/duckdb/parallel/thread_context.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +51 -3
- package/src/duckdb/src/include/duckdb/parser/constraints/unique_constraint.hpp +28 -44
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +6 -6
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +11 -1
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +12 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_scalar_function_info.hpp +3 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +22 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +3 -4
- package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_column_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_function_info.hpp +16 -12
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +3 -3
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +5 -5
- package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +12 -3
- package/src/duckdb/src/include/duckdb/parser/parser.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/qualified_name.hpp +17 -57
- package/src/duckdb/src/include/duckdb/parser/qualified_name_set.hpp +19 -3
- package/src/duckdb/src/include/duckdb/parser/simplified_token.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +12 -9
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +45 -28
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +23 -11
- package/src/duckdb/src/include/duckdb/planner/binding_alias.hpp +44 -0
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/collation_binding.hpp +4 -3
- package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +11 -10
- package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +4 -4
- package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +9 -4
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +8 -2
- package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +1 -2
- package/src/duckdb/src/include/duckdb/planner/filter/dynamic_filter.hpp +48 -0
- package/src/duckdb/src/include/duckdb/planner/filter/in_filter.hpp +37 -0
- package/src/duckdb/src/include/duckdb/planner/filter/optional_filter.hpp +35 -0
- package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/logical_operator_visitor.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_create_index.hpp +9 -9
- package/src/duckdb/src/include/duckdb/planner/operator/logical_filter.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +16 -7
- package/src/duckdb/src/include/duckdb/planner/operator/logical_insert.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_join.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_order.hpp +5 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_top_n.hpp +5 -3
- package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +14 -6
- package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +12 -8
- package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -0
- package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +82 -26
- package/src/duckdb/src/include/duckdb/storage/buffer/buffer_handle.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/buffer/buffer_pool.hpp +10 -3
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +4 -13
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +14 -15
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_constants.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +13 -15
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/dictionary/analyze.hpp +46 -0
- package/src/duckdb/src/include/duckdb/storage/compression/dictionary/common.hpp +60 -0
- package/src/duckdb/src/include/duckdb/storage/compression/dictionary/compression.hpp +61 -0
- package/src/duckdb/src/include/duckdb/storage/compression/dictionary/decompression.hpp +50 -0
- package/src/duckdb/src/include/duckdb/storage/compression/empty_validity.hpp +100 -0
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/roaring/appender.hpp +150 -0
- package/src/duckdb/src/include/duckdb/storage/compression/roaring/roaring.hpp +618 -0
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +53 -31
- package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -3
- package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/segment/uncompressed.hpp +4 -1
- package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +5 -4
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +16 -1
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/storage_index.hpp +70 -0
- package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +5 -7
- package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/storage_options.hpp +23 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +34 -6
- package/src/duckdb/src/include/duckdb/storage/table/append_state.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/table/array_column_data.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +39 -10
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +56 -14
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +35 -29
- package/src/duckdb/src/include/duckdb/storage/table/delete_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +7 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +19 -6
- package/src/duckdb/src/include/duckdb/storage/table/row_version_manager.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +29 -6
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +10 -10
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +26 -19
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +8 -1
- package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +16 -14
- package/src/duckdb/src/include/duckdb/storage/table/validity_column_data.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/table_io_manager.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +1 -0
- package/src/duckdb/src/include/duckdb/storage/temporary_file_manager.hpp +228 -61
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +14 -10
- package/src/duckdb/src/include/duckdb/transaction/commit_state.hpp +3 -1
- package/src/duckdb/src/include/duckdb/transaction/duck_transaction.hpp +3 -2
- package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +1 -0
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +19 -17
- package/src/duckdb/src/include/duckdb/transaction/rollback_state.hpp +5 -2
- package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +1 -2
- package/src/duckdb/src/include/duckdb/transaction/undo_buffer.hpp +13 -8
- package/src/duckdb/src/include/duckdb/transaction/undo_buffer_allocator.hpp +79 -0
- package/src/duckdb/src/include/duckdb/transaction/update_info.hpp +43 -13
- package/src/duckdb/src/include/duckdb/transaction/wal_write_state.hpp +4 -1
- package/src/duckdb/src/include/duckdb/verification/copied_statement_verifier.hpp +4 -2
- package/src/duckdb/src/include/duckdb/verification/deserialized_statement_verifier.hpp +4 -2
- package/src/duckdb/src/include/duckdb/verification/external_statement_verifier.hpp +4 -2
- package/src/duckdb/src/include/duckdb/verification/fetch_row_verifier.hpp +4 -2
- package/src/duckdb/src/include/duckdb/verification/no_operator_caching_verifier.hpp +4 -2
- package/src/duckdb/src/include/duckdb/verification/parsed_statement_verifier.hpp +4 -2
- package/src/duckdb/src/include/duckdb/verification/prepared_statement_verifier.hpp +7 -3
- package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +11 -5
- package/src/duckdb/src/include/duckdb/verification/unoptimized_statement_verifier.hpp +4 -2
- package/src/duckdb/src/include/duckdb.h +424 -41
- package/src/duckdb/src/include/duckdb_extension.h +301 -195
- package/src/duckdb/src/logging/log_manager.cpp +157 -0
- package/src/duckdb/src/logging/log_storage.cpp +209 -0
- package/src/duckdb/src/logging/logger.cpp +211 -0
- package/src/duckdb/src/logging/logging.cpp +42 -0
- package/src/duckdb/src/main/appender.cpp +187 -45
- package/src/duckdb/src/main/attached_database.cpp +16 -8
- package/src/duckdb/src/main/capi/appender-c.cpp +47 -4
- package/src/duckdb/src/main/capi/arrow-c.cpp +9 -4
- package/src/duckdb/src/main/capi/config-c.cpp +17 -4
- package/src/duckdb/src/main/capi/datetime-c.cpp +15 -0
- package/src/duckdb/src/main/capi/duckdb-c.cpp +54 -13
- package/src/duckdb/src/main/capi/duckdb_value-c.cpp +212 -4
- package/src/duckdb/src/main/capi/helper-c.cpp +3 -0
- package/src/duckdb/src/main/capi/prepared-c.cpp +26 -7
- package/src/duckdb/src/main/capi/replacement_scan-c.cpp +1 -1
- package/src/duckdb/src/main/capi/result-c.cpp +3 -0
- package/src/duckdb/src/main/capi/table_description-c.cpp +43 -10
- package/src/duckdb/src/main/capi/threading-c.cpp +4 -4
- package/src/duckdb/src/main/client_context.cpp +125 -51
- package/src/duckdb/src/main/client_context_file_opener.cpp +4 -0
- package/src/duckdb/src/main/client_context_wrapper.cpp +4 -0
- package/src/duckdb/src/main/client_data.cpp +1 -1
- package/src/duckdb/src/main/client_verify.cpp +39 -20
- package/src/duckdb/src/main/config.cpp +266 -74
- package/src/duckdb/src/main/connection.cpp +53 -13
- package/src/duckdb/src/main/database.cpp +39 -18
- package/src/duckdb/src/main/database_manager.cpp +12 -11
- package/src/duckdb/src/main/db_instance_cache.cpp +14 -7
- package/src/duckdb/src/main/extension/extension_helper.cpp +24 -23
- package/src/duckdb/src/main/extension/extension_install.cpp +19 -7
- package/src/duckdb/src/main/extension/extension_load.cpp +91 -41
- package/src/duckdb/src/main/extension/extension_util.cpp +40 -19
- package/src/duckdb/src/main/extension.cpp +20 -11
- package/src/duckdb/src/main/profiling_info.cpp +19 -5
- package/src/duckdb/src/main/query_profiler.cpp +135 -36
- package/src/duckdb/src/main/query_result.cpp +2 -1
- package/src/duckdb/src/main/relation/aggregate_relation.cpp +3 -3
- package/src/duckdb/src/main/relation/create_table_relation.cpp +5 -4
- package/src/duckdb/src/main/relation/create_view_relation.cpp +2 -2
- package/src/duckdb/src/main/relation/cross_product_relation.cpp +2 -2
- package/src/duckdb/src/main/relation/delete_relation.cpp +2 -2
- package/src/duckdb/src/main/relation/delim_get_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/distinct_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/filter_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/join_relation.cpp +5 -5
- package/src/duckdb/src/main/relation/order_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/projection_relation.cpp +3 -3
- package/src/duckdb/src/main/relation/query_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/read_csv_relation.cpp +58 -20
- package/src/duckdb/src/main/relation/setop_relation.cpp +2 -2
- package/src/duckdb/src/main/relation/subquery_relation.cpp +3 -8
- package/src/duckdb/src/main/relation/table_function_relation.cpp +10 -1
- package/src/duckdb/src/main/relation/table_relation.cpp +19 -3
- package/src/duckdb/src/main/relation/update_relation.cpp +2 -2
- package/src/duckdb/src/main/relation/value_relation.cpp +42 -2
- package/src/duckdb/src/main/relation/view_relation.cpp +8 -2
- package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
- package/src/duckdb/src/main/relation.cpp +49 -28
- package/src/duckdb/src/main/secret/secret_manager.cpp +1 -1
- package/src/duckdb/src/main/secret/secret_storage.cpp +6 -4
- package/src/duckdb/src/main/settings/autogenerated_settings.cpp +1102 -0
- package/src/duckdb/src/main/settings/custom_settings.cpp +1343 -0
- package/src/duckdb/src/optimizer/build_probe_side_optimizer.cpp +60 -37
- package/src/duckdb/src/optimizer/column_binding_replacer.cpp +1 -1
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +126 -72
- package/src/duckdb/src/optimizer/common_aggregate_optimizer.cpp +22 -6
- package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +3 -3
- package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +2 -2
- package/src/duckdb/src/optimizer/compressed_materialization.cpp +3 -3
- package/src/duckdb/src/optimizer/cse_optimizer.cpp +7 -7
- package/src/duckdb/src/optimizer/deliminator.cpp +6 -5
- package/src/duckdb/src/optimizer/empty_result_pullup.cpp +96 -0
- package/src/duckdb/src/optimizer/expression_heuristics.cpp +11 -3
- package/src/duckdb/src/optimizer/expression_rewriter.cpp +9 -2
- package/src/duckdb/src/optimizer/filter_combiner.cpp +190 -88
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +6 -5
- package/src/duckdb/src/optimizer/in_clause_rewriter.cpp +25 -9
- package/src/duckdb/src/optimizer/join_filter_pushdown_optimizer.cpp +170 -72
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +5 -4
- package/src/duckdb/src/optimizer/join_order/plan_enumerator.cpp +3 -1
- package/src/duckdb/src/optimizer/join_order/query_graph_manager.cpp +7 -7
- package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +15 -6
- package/src/duckdb/src/optimizer/join_order/relation_statistics_helper.cpp +37 -22
- package/src/duckdb/src/optimizer/late_materialization.cpp +414 -0
- package/src/duckdb/src/optimizer/limit_pushdown.cpp +1 -0
- package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +30 -2
- package/src/duckdb/src/optimizer/optimizer.cpp +67 -7
- package/src/duckdb/src/optimizer/pullup/pullup_filter.cpp +3 -3
- package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
- package/src/duckdb/src/optimizer/pullup/pullup_set_operation.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_filter.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +3 -3
- package/src/duckdb/src/optimizer/pushdown/pushdown_projection.cpp +5 -3
- package/src/duckdb/src/optimizer/pushdown/pushdown_set_operation.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_unnest.cpp +52 -0
- package/src/duckdb/src/optimizer/pushdown/pushdown_window.cpp +2 -2
- package/src/duckdb/src/optimizer/regex_range_filter.cpp +1 -1
- package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +1 -1
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +168 -38
- package/src/duckdb/src/optimizer/rule/arithmetic_simplification.cpp +2 -1
- package/src/duckdb/src/optimizer/rule/comparison_simplification.cpp +8 -5
- package/src/duckdb/src/optimizer/rule/conjunction_simplification.cpp +2 -2
- package/src/duckdb/src/optimizer/rule/constant_folding.cpp +2 -2
- package/src/duckdb/src/optimizer/rule/distinct_aggregate_optimizer.cpp +65 -0
- package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
- package/src/duckdb/src/optimizer/rule/enum_comparison.cpp +2 -1
- package/src/duckdb/src/optimizer/rule/equal_or_null_simplification.cpp +4 -3
- package/src/duckdb/src/optimizer/rule/in_clause_simplification_rule.cpp +3 -3
- package/src/duckdb/src/optimizer/rule/like_optimizations.cpp +3 -1
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +9 -9
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +4 -3
- package/src/duckdb/src/optimizer/rule/timestamp_comparison.cpp +1 -1
- package/src/duckdb/src/optimizer/sampling_pushdown.cpp +24 -0
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +74 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +10 -7
- package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +3 -3
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +3 -3
- package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +3 -0
- package/src/duckdb/src/optimizer/sum_rewriter.cpp +174 -0
- package/src/duckdb/src/optimizer/topn_optimizer.cpp +71 -0
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +5 -5
- package/src/duckdb/src/parallel/event.cpp +4 -0
- package/src/duckdb/src/parallel/executor.cpp +11 -29
- package/src/duckdb/src/parallel/executor_task.cpp +8 -3
- package/src/duckdb/src/parallel/pipeline.cpp +15 -8
- package/src/duckdb/src/parallel/pipeline_executor.cpp +67 -43
- package/src/duckdb/src/parallel/thread_context.cpp +12 -1
- package/src/duckdb/src/parser/column_definition.cpp +3 -3
- package/src/duckdb/src/parser/constraints/unique_constraint.cpp +72 -9
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -3
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +1 -1
- package/src/duckdb/src/parser/expression/function_expression.cpp +1 -1
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +3 -3
- package/src/duckdb/src/parser/expression/lambdaref_expression.cpp +1 -1
- package/src/duckdb/src/parser/expression/star_expression.cpp +46 -2
- package/src/duckdb/src/parser/expression/window_expression.cpp +24 -1
- package/src/duckdb/src/parser/parsed_data/alter_info.cpp +26 -2
- package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +5 -3
- package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +29 -1
- package/src/duckdb/src/parser/parsed_data/attach_info.cpp +6 -6
- package/src/duckdb/src/parser/parsed_data/create_aggregate_function_info.cpp +1 -1
- package/src/duckdb/src/parser/parsed_data/create_function_info.cpp +17 -0
- package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +16 -15
- package/src/duckdb/src/parser/parsed_data/create_macro_info.cpp +1 -1
- package/src/duckdb/src/parser/parsed_data/create_pragma_function_info.cpp +1 -1
- package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
- package/src/duckdb/src/parser/parsed_data/create_schema_info.cpp +1 -1
- package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +1 -1
- package/src/duckdb/src/parser/parsed_data/create_table_info.cpp +1 -0
- package/src/duckdb/src/parser/parsed_data/create_type_info.cpp +4 -4
- package/src/duckdb/src/parser/parsed_data/load_info.cpp +1 -0
- package/src/duckdb/src/parser/parsed_data/sample_options.cpp +31 -1
- package/src/duckdb/src/parser/parsed_expression.cpp +1 -1
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -1
- package/src/duckdb/src/parser/parser.cpp +129 -0
- package/src/duckdb/src/parser/qualified_name.cpp +99 -0
- package/src/duckdb/src/parser/query_error_context.cpp +35 -6
- package/src/duckdb/src/parser/query_node/select_node.cpp +4 -4
- package/src/duckdb/src/parser/statement/delete_statement.cpp +6 -1
- package/src/duckdb/src/parser/statement/insert_statement.cpp +4 -3
- package/src/duckdb/src/parser/statement/update_statement.cpp +6 -1
- package/src/duckdb/src/parser/tableref/pivotref.cpp +2 -2
- package/src/duckdb/src/parser/tableref.cpp +2 -2
- package/src/duckdb/src/parser/transform/constraint/transform_constraint.cpp +16 -24
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +5 -5
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +61 -13
- package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +10 -4
- package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -2
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +30 -3
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +25 -6
- package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +1 -1
- package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +10 -3
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +4 -3
- package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +18 -3
- package/src/duckdb/src/parser/transform/statement/transform_comment_on.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +0 -1
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +5 -5
- package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -12
- package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +11 -3
- package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +2 -0
- package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +3 -3
- package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +4 -4
- package/src/duckdb/src/parser/transform/statement/transform_set.cpp +2 -2
- package/src/duckdb/src/parser/transform/statement/transform_show.cpp +21 -3
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +8 -6
- package/src/duckdb/src/parser/transformer.cpp +2 -2
- package/src/duckdb/src/planner/bind_context.cpp +308 -136
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +30 -31
- package/src/duckdb/src/planner/binder/expression/bind_between_expression.cpp +4 -2
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +102 -94
- package/src/duckdb/src/planner/binder/expression/bind_comparison_expression.cpp +7 -5
- package/src/duckdb/src/planner/binder/expression/bind_conjunction_expression.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +7 -7
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +10 -10
- package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +24 -6
- package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +23 -15
- package/src/duckdb/src/planner/binder/expression/bind_parameter_expression.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +97 -19
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +74 -16
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +6 -6
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +49 -15
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +32 -23
- package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +20 -3
- package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +3 -0
- package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +6 -5
- package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +38 -19
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +2 -12
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +117 -412
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +423 -144
- package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +5 -0
- package/src/duckdb/src/planner/binder/statement/bind_execute.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_export.cpp +0 -4
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +31 -13
- package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_simple.cpp +96 -27
- package/src/duckdb/src/planner/binder/statement/bind_summarize.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +5 -3
- package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +7 -6
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +36 -9
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +34 -34
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +72 -35
- package/src/duckdb/src/planner/binder/tableref/bind_showref.cpp +99 -18
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +23 -11
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +22 -19
- package/src/duckdb/src/planner/binder.cpp +23 -45
- package/src/duckdb/src/planner/binding_alias.cpp +69 -0
- package/src/duckdb/src/planner/bound_parameter_map.cpp +1 -1
- package/src/duckdb/src/planner/bound_result_modifier.cpp +6 -2
- package/src/duckdb/src/planner/collation_binding.cpp +38 -4
- package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +17 -5
- package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression/bound_function_expression.cpp +8 -1
- package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +24 -4
- package/src/duckdb/src/planner/expression.cpp +7 -1
- package/src/duckdb/src/planner/expression_binder/aggregate_binder.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_binder/group_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +16 -0
- package/src/duckdb/src/planner/expression_binder/index_binder.cpp +53 -1
- package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +3 -3
- package/src/duckdb/src/planner/expression_binder/order_binder.cpp +8 -8
- package/src/duckdb/src/planner/expression_binder/relation_binder.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/select_bind_state.cpp +2 -2
- package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/update_binder.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder.cpp +7 -7
- package/src/duckdb/src/planner/expression_iterator.cpp +6 -3
- package/src/duckdb/src/planner/filter/constant_filter.cpp +17 -2
- package/src/duckdb/src/planner/filter/dynamic_filter.cpp +68 -0
- package/src/duckdb/src/planner/filter/in_filter.cpp +84 -0
- package/src/duckdb/src/planner/filter/null_filter.cpp +1 -2
- package/src/duckdb/src/planner/filter/optional_filter.cpp +29 -0
- package/src/duckdb/src/planner/filter/struct_filter.cpp +11 -6
- package/src/duckdb/src/planner/joinside.cpp +6 -5
- package/src/duckdb/src/planner/logical_operator.cpp +4 -1
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +68 -2
- package/src/duckdb/src/planner/operator/logical_comparison_join.cpp +23 -0
- package/src/duckdb/src/planner/operator/logical_create_index.cpp +16 -12
- package/src/duckdb/src/planner/operator/logical_filter.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_get.cpp +48 -25
- package/src/duckdb/src/planner/operator/logical_insert.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_join.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_order.cpp +4 -11
- package/src/duckdb/src/planner/operator/logical_top_n.cpp +7 -0
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +33 -5
- package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +2 -2
- package/src/duckdb/src/planner/table_binding.cpp +74 -36
- package/src/duckdb/src/planner/table_filter.cpp +5 -8
- package/src/duckdb/src/storage/arena_allocator.cpp +5 -4
- package/src/duckdb/src/storage/buffer/block_handle.cpp +88 -17
- package/src/duckdb/src/storage/buffer/block_manager.cpp +34 -26
- package/src/duckdb/src/storage/buffer/buffer_handle.cpp +2 -2
- package/src/duckdb/src/storage/buffer/buffer_pool.cpp +70 -49
- package/src/duckdb/src/storage/buffer_manager.cpp +4 -0
- package/src/duckdb/src/storage/checkpoint_manager.cpp +24 -5
- package/src/duckdb/src/storage/compression/bitpacking.cpp +14 -16
- package/src/duckdb/src/storage/compression/dictionary/analyze.cpp +54 -0
- package/src/duckdb/src/storage/compression/dictionary/common.cpp +90 -0
- package/src/duckdb/src/storage/compression/dictionary/compression.cpp +174 -0
- package/src/duckdb/src/storage/compression/dictionary/decompression.cpp +115 -0
- package/src/duckdb/src/storage/compression/dictionary_compression.cpp +53 -545
- package/src/duckdb/src/storage/compression/empty_validity.cpp +15 -0
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +25 -16
- package/src/duckdb/src/storage/compression/fsst.cpp +101 -47
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +92 -2
- package/src/duckdb/src/storage/compression/rle.cpp +216 -46
- package/src/duckdb/src/storage/compression/roaring/analyze.cpp +179 -0
- package/src/duckdb/src/storage/compression/roaring/common.cpp +282 -0
- package/src/duckdb/src/storage/compression/roaring/compress.cpp +481 -0
- package/src/duckdb/src/storage/compression/roaring/metadata.cpp +262 -0
- package/src/duckdb/src/storage/compression/roaring/scan.cpp +364 -0
- package/src/duckdb/src/storage/compression/string_uncompressed.cpp +47 -65
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +102 -39
- package/src/duckdb/src/storage/compression/zstd.cpp +1049 -0
- package/src/duckdb/src/storage/data_table.cpp +312 -172
- package/src/duckdb/src/storage/local_storage.cpp +104 -46
- package/src/duckdb/src/storage/metadata/metadata_manager.cpp +1 -1
- package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +7 -3
- package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +138 -58
- package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +14 -0
- package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +19 -8
- package/src/duckdb/src/storage/serialization/serialize_statement.cpp +2 -0
- package/src/duckdb/src/storage/serialization/serialize_table_filter.cpp +43 -0
- package/src/duckdb/src/storage/serialization/serialize_types.cpp +32 -5
- package/src/duckdb/src/storage/single_file_block_manager.cpp +6 -8
- package/src/duckdb/src/storage/standard_buffer_manager.cpp +82 -71
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +3 -3
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +18 -17
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +34 -22
- package/src/duckdb/src/storage/statistics/string_stats.cpp +14 -3
- package/src/duckdb/src/storage/storage_info.cpp +72 -10
- package/src/duckdb/src/storage/storage_manager.cpp +41 -47
- package/src/duckdb/src/storage/table/array_column_data.cpp +7 -1
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +10 -9
- package/src/duckdb/src/storage/table/column_data.cpp +105 -43
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +307 -132
- package/src/duckdb/src/storage/table/column_segment.cpp +36 -13
- package/src/duckdb/src/storage/table/list_column_data.cpp +4 -4
- package/src/duckdb/src/storage/table/row_group.cpp +159 -66
- package/src/duckdb/src/storage/table/row_group_collection.cpp +157 -68
- package/src/duckdb/src/storage/table/row_version_manager.cpp +33 -10
- package/src/duckdb/src/storage/table/scan_state.cpp +21 -7
- package/src/duckdb/src/storage/table/standard_column_data.cpp +68 -5
- package/src/duckdb/src/storage/table/struct_column_data.cpp +42 -4
- package/src/duckdb/src/storage/table/table_statistics.cpp +91 -5
- package/src/duckdb/src/storage/table/update_segment.cpp +287 -210
- package/src/duckdb/src/storage/table_index_list.cpp +55 -58
- package/src/duckdb/src/storage/temporary_file_manager.cpp +412 -149
- package/src/duckdb/src/storage/wal_replay.cpp +132 -48
- package/src/duckdb/src/storage/write_ahead_log.cpp +75 -48
- package/src/duckdb/src/transaction/cleanup_state.cpp +0 -1
- package/src/duckdb/src/transaction/commit_state.cpp +23 -14
- package/src/duckdb/src/transaction/duck_transaction.cpp +29 -25
- package/src/duckdb/src/transaction/duck_transaction_manager.cpp +18 -6
- package/src/duckdb/src/transaction/meta_transaction.cpp +3 -2
- package/src/duckdb/src/transaction/rollback_state.cpp +5 -2
- package/src/duckdb/src/transaction/transaction_context.cpp +9 -1
- package/src/duckdb/src/transaction/undo_buffer.cpp +35 -27
- package/src/duckdb/src/transaction/undo_buffer_allocator.cpp +72 -0
- package/src/duckdb/src/transaction/wal_write_state.cpp +12 -10
- package/src/duckdb/src/verification/copied_statement_verifier.cpp +7 -4
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +7 -5
- package/src/duckdb/src/verification/external_statement_verifier.cpp +7 -4
- package/src/duckdb/src/verification/fetch_row_verifier.cpp +7 -4
- package/src/duckdb/src/verification/no_operator_caching_verifier.cpp +8 -4
- package/src/duckdb/src/verification/parsed_statement_verifier.cpp +7 -4
- package/src/duckdb/src/verification/prepared_statement_verifier.cpp +16 -12
- package/src/duckdb/src/verification/statement_verifier.cpp +20 -15
- package/src/duckdb/src/verification/unoptimized_statement_verifier.cpp +7 -4
- package/src/duckdb/third_party/fsst/libfsst.hpp +1 -0
- package/src/duckdb/third_party/httplib/httplib.hpp +15 -22
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +4 -2
- package/src/duckdb/third_party/libpg_query/pg_functions.cpp +2 -4
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +14278 -13832
- package/src/duckdb/third_party/parquet/parquet_types.cpp +3410 -1686
- package/src/duckdb/third_party/parquet/parquet_types.h +1585 -1204
- package/src/duckdb/third_party/skiplist/SkipList.h +0 -1
- package/src/duckdb/third_party/snappy/snappy-stubs-internal.h +13 -15
- package/src/duckdb/third_party/zstd/common/debug.cpp +36 -0
- package/src/duckdb/third_party/zstd/common/entropy_common.cpp +173 -49
- package/src/duckdb/third_party/zstd/common/error_private.cpp +11 -3
- package/src/duckdb/third_party/zstd/common/fse_decompress.cpp +126 -97
- package/src/duckdb/third_party/zstd/common/pool.cpp +376 -0
- package/src/duckdb/third_party/zstd/common/threading.cpp +193 -0
- package/src/duckdb/third_party/zstd/common/xxhash.cpp +18 -14
- package/src/duckdb/third_party/zstd/common/zstd_common.cpp +3 -38
- package/src/duckdb/third_party/zstd/compress/fse_compress.cpp +93 -165
- package/src/duckdb/third_party/zstd/compress/hist.cpp +28 -31
- package/src/duckdb/third_party/zstd/compress/huf_compress.cpp +957 -291
- package/src/duckdb/third_party/zstd/compress/zstd_compress.cpp +3988 -1124
- package/src/duckdb/third_party/zstd/compress/zstd_compress_literals.cpp +120 -43
- package/src/duckdb/third_party/zstd/compress/zstd_compress_sequences.cpp +47 -23
- package/src/duckdb/third_party/zstd/compress/zstd_compress_superblock.cpp +274 -424
- package/src/duckdb/third_party/zstd/compress/zstd_double_fast.cpp +403 -153
- package/src/duckdb/third_party/zstd/compress/zstd_fast.cpp +741 -268
- package/src/duckdb/third_party/zstd/compress/zstd_lazy.cpp +1339 -278
- package/src/duckdb/third_party/zstd/compress/zstd_ldm.cpp +334 -222
- package/src/duckdb/third_party/zstd/compress/zstd_opt.cpp +674 -298
- package/src/duckdb/third_party/zstd/compress/zstdmt_compress.cpp +1885 -0
- package/src/duckdb/third_party/zstd/decompress/huf_decompress.cpp +1247 -586
- package/src/duckdb/third_party/zstd/decompress/zstd_ddict.cpp +18 -17
- package/src/duckdb/third_party/zstd/decompress/zstd_decompress.cpp +724 -270
- package/src/duckdb/third_party/zstd/decompress/zstd_decompress_block.cpp +1193 -393
- package/src/duckdb/third_party/zstd/deprecated/zbuff_common.cpp +30 -0
- package/src/duckdb/third_party/zstd/deprecated/zbuff_compress.cpp +171 -0
- package/src/duckdb/third_party/zstd/deprecated/zbuff_decompress.cpp +80 -0
- package/src/duckdb/third_party/zstd/dict/cover.cpp +1271 -0
- package/src/duckdb/third_party/zstd/dict/divsufsort.cpp +1916 -0
- package/src/duckdb/third_party/zstd/dict/fastcover.cpp +775 -0
- package/src/duckdb/third_party/zstd/dict/zdict.cpp +1139 -0
- package/src/duckdb/third_party/zstd/include/zdict.h +473 -0
- package/src/duckdb/third_party/zstd/include/zstd/common/allocations.h +58 -0
- package/src/duckdb/third_party/zstd/include/zstd/common/bits.h +204 -0
- package/src/duckdb/third_party/zstd/include/zstd/common/bitstream.h +88 -85
- package/src/duckdb/third_party/zstd/include/zstd/common/compiler.h +243 -47
- package/src/duckdb/third_party/zstd/include/zstd/common/cpu.h +253 -0
- package/src/duckdb/third_party/zstd/include/zstd/common/debug.h +31 -31
- package/src/duckdb/third_party/zstd/include/zstd/common/error_private.h +94 -6
- package/src/duckdb/third_party/zstd/include/zstd/common/fse.h +424 -64
- package/src/duckdb/third_party/zstd/include/zstd/common/huf.h +255 -70
- package/src/duckdb/third_party/zstd/include/zstd/common/mem.h +125 -85
- package/src/duckdb/third_party/zstd/include/zstd/common/pool.h +84 -0
- package/src/duckdb/third_party/zstd/include/zstd/common/portability_macros.h +158 -0
- package/src/duckdb/third_party/zstd/include/zstd/common/threading.h +152 -0
- package/src/duckdb/third_party/zstd/include/zstd/common/{xxhash.h → xxhash.hpp} +0 -1
- package/src/duckdb/third_party/zstd/include/zstd/common/{xxhash_static.h → xxhash_static.hpp} +1 -1
- package/src/duckdb/third_party/zstd/include/zstd/common/zstd_deps.h +122 -0
- package/src/duckdb/third_party/zstd/include/zstd/common/zstd_internal.h +143 -174
- package/src/duckdb/third_party/zstd/include/zstd/common/zstd_trace.h +159 -0
- package/src/duckdb/third_party/zstd/include/zstd/compress/clevels.h +136 -0
- package/src/duckdb/third_party/zstd/include/zstd/compress/hist.h +4 -4
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_compress_internal.h +631 -220
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_compress_literals.h +17 -7
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_compress_sequences.h +2 -2
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_compress_superblock.h +3 -2
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_cwksp.h +256 -153
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_double_fast.h +16 -3
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_fast.h +4 -3
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_lazy.h +145 -11
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_ldm.h +14 -6
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_ldm_geartab.h +110 -0
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_opt.h +33 -9
- package/src/duckdb/third_party/zstd/include/zstd/compress/zstdmt_compress.h +107 -0
- package/src/duckdb/third_party/zstd/include/zstd/decompress/zstd_ddict.h +4 -3
- package/src/duckdb/third_party/zstd/include/zstd/decompress/zstd_decompress_block.h +20 -6
- package/src/duckdb/third_party/zstd/include/zstd/decompress/zstd_decompress_internal.h +88 -16
- package/src/duckdb/third_party/zstd/include/zstd/deprecated/zbuff.h +214 -0
- package/src/duckdb/third_party/zstd/include/zstd/dict/cover.h +156 -0
- package/src/duckdb/third_party/zstd/include/zstd/dict/divsufsort.h +62 -0
- package/src/duckdb/third_party/zstd/include/zstd.h +2171 -93
- package/src/duckdb/third_party/zstd/include/{zstd/common/zstd_errors.h → zstd_errors.h} +32 -10
- package/src/duckdb/ub_extension_core_functions_aggregate_algebraic.cpp +8 -0
- package/src/duckdb/ub_extension_core_functions_aggregate_distributive.cpp +20 -0
- package/src/duckdb/ub_extension_core_functions_aggregate_holistic.cpp +12 -0
- package/src/duckdb/ub_extension_core_functions_aggregate_nested.cpp +6 -0
- package/src/duckdb/ub_extension_core_functions_aggregate_regression.cpp +14 -0
- package/src/duckdb/ub_extension_core_functions_scalar_array.cpp +4 -0
- package/src/duckdb/ub_extension_core_functions_scalar_bit.cpp +2 -0
- package/src/duckdb/ub_extension_core_functions_scalar_blob.cpp +4 -0
- package/src/duckdb/ub_extension_core_functions_scalar_date.cpp +20 -0
- package/src/duckdb/ub_extension_core_functions_scalar_debug.cpp +2 -0
- package/src/duckdb/ub_extension_core_functions_scalar_enum.cpp +2 -0
- package/src/duckdb/ub_extension_core_functions_scalar_generic.cpp +18 -0
- package/src/duckdb/ub_extension_core_functions_scalar_list.cpp +22 -0
- package/src/duckdb/ub_extension_core_functions_scalar_map.cpp +14 -0
- package/src/duckdb/ub_extension_core_functions_scalar_math.cpp +2 -0
- package/src/duckdb/ub_extension_core_functions_scalar_operators.cpp +2 -0
- package/src/duckdb/ub_extension_core_functions_scalar_random.cpp +4 -0
- package/src/duckdb/ub_extension_core_functions_scalar_string.cpp +48 -0
- package/src/duckdb/ub_extension_core_functions_scalar_struct.cpp +2 -0
- package/src/duckdb/ub_extension_core_functions_scalar_union.cpp +6 -0
- package/src/duckdb/ub_src_common.cpp +4 -0
- package/src/duckdb/ub_src_common_arrow.cpp +3 -1
- package/src/duckdb/ub_src_execution.cpp +0 -6
- package/src/duckdb/ub_src_execution_operator_aggregate.cpp +2 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_encode.cpp +2 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_util.cpp +2 -0
- package/src/duckdb/ub_src_execution_sample.cpp +4 -0
- package/src/duckdb/ub_src_function.cpp +6 -0
- package/src/duckdb/ub_src_function_aggregate.cpp +0 -2
- package/src/duckdb/ub_src_function_aggregate_distributive.cpp +3 -1
- package/src/duckdb/ub_src_function_scalar.cpp +2 -8
- package/src/duckdb/ub_src_function_scalar_date.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_generic.cpp +2 -2
- package/src/duckdb/ub_src_function_scalar_map.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_operator.cpp +8 -0
- package/src/duckdb/ub_src_function_scalar_string.cpp +10 -0
- package/src/duckdb/ub_src_function_scalar_struct.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_system.cpp +2 -0
- package/src/duckdb/ub_src_function_table_system.cpp +6 -0
- package/src/duckdb/ub_src_function_window.cpp +36 -0
- package/src/duckdb/ub_src_logging.cpp +8 -0
- package/src/duckdb/ub_src_main_settings.cpp +3 -1
- package/src/duckdb/ub_src_optimizer.cpp +8 -0
- package/src/duckdb/ub_src_optimizer_pushdown.cpp +2 -0
- package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
- package/src/duckdb/ub_src_parser.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +2 -0
- package/src/duckdb/ub_src_planner.cpp +2 -0
- package/src/duckdb/ub_src_planner_filter.cpp +6 -0
- package/src/duckdb/ub_src_storage_compression.cpp +4 -0
- package/src/duckdb/ub_src_storage_compression_dictionary.cpp +8 -0
- package/src/duckdb/ub_src_storage_compression_roaring.cpp +10 -0
- package/src/duckdb/ub_src_transaction.cpp +2 -0
- package/vendor.py +1 -1
- package/src/duckdb/extension/json/yyjson/include/yyjson.hpp +0 -6003
- package/src/duckdb/extension/json/yyjson/yyjson.cpp +0 -8218
- package/src/duckdb/src/common/arrow/appender/list_data.cpp +0 -78
- package/src/duckdb/src/common/arrow/appender/map_data.cpp +0 -91
- package/src/duckdb/src/common/cycle_counter.cpp +0 -76
- package/src/duckdb/src/common/field_writer.cpp +0 -97
- package/src/duckdb/src/common/http_state.cpp +0 -95
- package/src/duckdb/src/common/preserved_error.cpp +0 -87
- package/src/duckdb/src/common/row_operations/row_match.cpp +0 -359
- package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +0 -27
- package/src/duckdb/src/common/serializer/buffered_serializer.cpp +0 -36
- package/src/duckdb/src/common/serializer/format_serializer.cpp +0 -15
- package/src/duckdb/src/common/serializer.cpp +0 -24
- package/src/duckdb/src/common/types/chunk_collection.cpp +0 -190
- package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +0 -183
- package/src/duckdb/src/core_functions/scalar/date/current.cpp +0 -54
- package/src/duckdb/src/core_functions/scalar/list/list_cosine_similarity.cpp +0 -78
- package/src/duckdb/src/core_functions/scalar/list/list_inner_product.cpp +0 -70
- package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +0 -412
- package/src/duckdb/src/core_functions/scalar/secret/which_secret.cpp +0 -28
- package/src/duckdb/src/core_functions/scalar/string/jaro_winkler.cpp +0 -71
- package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +0 -238
- package/src/duckdb/src/execution/index/art/node16.cpp +0 -196
- package/src/duckdb/src/execution/index/art/node4.cpp +0 -189
- package/src/duckdb/src/execution/index/unknown_index.cpp +0 -65
- package/src/duckdb/src/execution/operator/csv_scanner/base_csv_reader.cpp +0 -595
- package/src/duckdb/src/execution/operator/csv_scanner/buffered_csv_reader.cpp +0 -434
- package/src/duckdb/src/execution/operator/csv_scanner/csv_buffer.cpp +0 -89
- package/src/duckdb/src/execution/operator/csv_scanner/csv_buffer_manager.cpp +0 -90
- package/src/duckdb/src/execution/operator/csv_scanner/csv_file_handle.cpp +0 -95
- package/src/duckdb/src/execution/operator/csv_scanner/csv_reader_options.cpp +0 -494
- package/src/duckdb/src/execution/operator/csv_scanner/csv_state_machine.cpp +0 -35
- package/src/duckdb/src/execution/operator/csv_scanner/csv_state_machine_cache.cpp +0 -99
- package/src/duckdb/src/execution/operator/csv_scanner/parallel_csv_reader.cpp +0 -689
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +0 -242
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +0 -695
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +0 -1487
- package/src/duckdb/src/execution/operator/persistent/csv_buffer.cpp +0 -72
- package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +0 -158
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +0 -280
- package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +0 -666
- package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +0 -499
- package/src/duckdb/src/execution/operator/schema/physical_create_index.cpp +0 -207
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +0 -207
- package/src/duckdb/src/execution/physical_plan/plan_limit_percent.cpp +0 -18
- package/src/duckdb/src/execution/physical_plan/plan_show_select.cpp +0 -47
- package/src/duckdb/src/execution/reservoir_sample.cpp +0 -324
- package/src/duckdb/src/execution/window_executor.cpp +0 -1830
- package/src/duckdb/src/execution/window_segment_tree.cpp +0 -2073
- package/src/duckdb/src/extension_forward_decl/icu.cpp +0 -59
- package/src/duckdb/src/function/aggregate/distributive_functions.cpp +0 -15
- package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +0 -29
- package/src/duckdb/src/function/scalar/generic_functions.cpp +0 -11
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +0 -143
- package/src/duckdb/src/function/scalar/operators.cpp +0 -14
- package/src/duckdb/src/function/scalar/sequence_functions.cpp +0 -10
- package/src/duckdb/src/function/scalar/string_functions.cpp +0 -22
- package/src/duckdb/src/function/table/pragma_detailed_profiling_output.cpp +0 -173
- package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +0 -101
- package/src/duckdb/src/include/duckdb/catalog/mapping_value.hpp +0 -92
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_types_extension.hpp +0 -42
- package/src/duckdb/src/include/duckdb/common/cycle_counter.hpp +0 -68
- package/src/duckdb/src/include/duckdb/common/enums/index_type.hpp +0 -34
- package/src/duckdb/src/include/duckdb/common/http_state.hpp +0 -113
- package/src/duckdb/src/include/duckdb/common/platform.h +0 -58
- package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +0 -59
- package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +0 -192
- package/src/duckdb/src/include/duckdb/common/types/chunk_collection.hpp +0 -137
- package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +0 -65
- package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +0 -63
- package/src/duckdb/src/include/duckdb/execution/index/unknown_index.hpp +0 -65
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp +0 -103
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp +0 -74
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp +0 -60
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_sniffer.hpp +0 -253
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_option.hpp +0 -155
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp +0 -163
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp +0 -35
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp +0 -228
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp +0 -70
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp +0 -93
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp +0 -60
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp +0 -197
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp +0 -21
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp +0 -30
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp +0 -99
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp +0 -87
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp +0 -70
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp +0 -80
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_casting.hpp +0 -137
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_error.hpp +0 -104
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_index_join.hpp +0 -79
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/base_csv_reader.hpp +0 -119
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/buffered_csv_reader.hpp +0 -72
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_buffer.hpp +0 -110
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_buffer_manager.hpp +0 -103
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_file_handle.hpp +0 -59
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_line_info.hpp +0 -46
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_reader_options.hpp +0 -210
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_sniffer.hpp +0 -131
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state.hpp +0 -28
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state_machine.hpp +0 -70
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state_machine_cache.hpp +0 -65
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/parallel_csv_reader.hpp +0 -167
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/quote_rules.hpp +0 -21
- package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +0 -343
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +0 -165
- package/src/duckdb/src/include/duckdb/optimizer/column_lifetime_optimizer.hpp +0 -45
- package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +0 -57
- package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_info.hpp +0 -45
- package/src/duckdb/src/include/duckdb/parser/statement/show_statement.hpp +0 -32
- package/src/duckdb/src/include/duckdb/planner/operator/logical_limit_percent.hpp +0 -49
- package/src/duckdb/src/include/duckdb/planner/operator/logical_show.hpp +0 -42
- package/src/duckdb/src/main/settings/settings.cpp +0 -2056
- package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +0 -36
- package/src/duckdb/src/parser/parsed_data/comment_on_info.cpp +0 -19
- package/src/duckdb/src/parser/statement/show_statement.cpp +0 -15
- package/src/duckdb/src/planner/binder/statement/bind_show.cpp +0 -30
- package/src/duckdb/src/planner/operator/logical_limit_percent.cpp +0 -14
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +0 -70
- package/src/duckdb/third_party/fsst/fsst_avx512.cpp +0 -140
- package/src/duckdb/third_party/fsst/fsst_avx512.inc +0 -57
- package/src/duckdb/third_party/fsst/fsst_avx512_unroll1.inc +0 -57
- package/src/duckdb/third_party/fsst/fsst_avx512_unroll2.inc +0 -114
- package/src/duckdb/third_party/fsst/fsst_avx512_unroll3.inc +0 -171
- package/src/duckdb/third_party/fsst/fsst_avx512_unroll4.inc +0 -228
- package/src/duckdb/third_party/parquet/parquet_constants.cpp +0 -17
- package/src/duckdb/third_party/parquet/parquet_constants.h +0 -24
- package/src/duckdb/third_party/re2/util/pod_array.h +0 -55
- package/src/duckdb/third_party/re2/util/sparse_array.h +0 -392
- package/src/duckdb/third_party/re2/util/sparse_set.h +0 -264
- package/src/duckdb/third_party/zstd/include/zstd/common/fse_static.h +0 -421
- package/src/duckdb/third_party/zstd/include/zstd/common/huf_static.h +0 -238
- package/src/duckdb/third_party/zstd/include/zstd_static.h +0 -1070
- package/src/duckdb/ub_src_core_functions.cpp +0 -6
- package/src/duckdb/ub_src_core_functions_aggregate_algebraic.cpp +0 -8
- package/src/duckdb/ub_src_core_functions_aggregate_distributive.cpp +0 -24
- package/src/duckdb/ub_src_core_functions_aggregate_holistic.cpp +0 -12
- package/src/duckdb/ub_src_core_functions_aggregate_nested.cpp +0 -6
- package/src/duckdb/ub_src_core_functions_aggregate_regression.cpp +0 -14
- package/src/duckdb/ub_src_core_functions_scalar_array.cpp +0 -4
- package/src/duckdb/ub_src_core_functions_scalar_bit.cpp +0 -2
- package/src/duckdb/ub_src_core_functions_scalar_blob.cpp +0 -6
- package/src/duckdb/ub_src_core_functions_scalar_date.cpp +0 -22
- package/src/duckdb/ub_src_core_functions_scalar_debug.cpp +0 -2
- package/src/duckdb/ub_src_core_functions_scalar_enum.cpp +0 -2
- package/src/duckdb/ub_src_core_functions_scalar_generic.cpp +0 -18
- package/src/duckdb/ub_src_core_functions_scalar_list.cpp +0 -22
- package/src/duckdb/ub_src_core_functions_scalar_map.cpp +0 -16
- package/src/duckdb/ub_src_core_functions_scalar_math.cpp +0 -2
- package/src/duckdb/ub_src_core_functions_scalar_operators.cpp +0 -2
- package/src/duckdb/ub_src_core_functions_scalar_random.cpp +0 -4
- package/src/duckdb/ub_src_core_functions_scalar_secret.cpp +0 -2
- package/src/duckdb/ub_src_core_functions_scalar_string.cpp +0 -58
- package/src/duckdb/ub_src_core_functions_scalar_struct.cpp +0 -4
- package/src/duckdb/ub_src_core_functions_scalar_union.cpp +0 -6
- package/src/duckdb/ub_src_execution_operator_csv_scanner.cpp +0 -18
- package/src/duckdb/ub_src_function_scalar_operators.cpp +0 -8
- /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/algebraic/covar.hpp +0 -0
- /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/algebraic/stddev.hpp +0 -0
- /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/sum_helpers.hpp +0 -0
- /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/array_kernels.hpp +0 -0
- /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/function_list.hpp +0 -0
- /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/secret_functions.hpp +0 -0
- /package/src/duckdb/src/function/scalar/{operators → operator}/multiply.cpp +0 -0
- /package/src/duckdb/src/function/scalar/{operators → operator}/subtract.cpp +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
/* ******************************************************************
|
2
2
|
* huff0 huffman decoder,
|
3
3
|
* part of Finite State Entropy library
|
4
|
-
* Copyright (c)
|
4
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
5
5
|
*
|
6
6
|
* You can contact the author at :
|
7
7
|
* - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy
|
@@ -15,19 +15,31 @@
|
|
15
15
|
/* **************************************************************
|
16
16
|
* Dependencies
|
17
17
|
****************************************************************/
|
18
|
-
#include
|
18
|
+
#include "zstd/common/zstd_deps.h" /* ZSTD_memcpy, ZSTD_memset */
|
19
19
|
#include "zstd/common/compiler.h"
|
20
20
|
#include "zstd/common/bitstream.h" /* BIT_* */
|
21
21
|
#include "zstd/common/fse.h" /* to compress headers */
|
22
22
|
#include "zstd/common/huf.h"
|
23
|
-
#include "zstd/common/huf_static.h"
|
24
23
|
#include "zstd/common/error_private.h"
|
24
|
+
#include "zstd/common/zstd_internal.h"
|
25
|
+
#include "zstd/common/bits.h" /* ZSTD_highbit32, ZSTD_countTrailingZeros64 */
|
26
|
+
|
27
|
+
/* **************************************************************
|
28
|
+
* Constants
|
29
|
+
****************************************************************/
|
30
|
+
|
31
|
+
#define HUF_DECODER_FAST_TABLELOG 11
|
25
32
|
|
26
|
-
namespace duckdb_zstd {
|
27
33
|
/* **************************************************************
|
28
34
|
* Macros
|
29
35
|
****************************************************************/
|
30
36
|
|
37
|
+
#ifdef HUF_DISABLE_FAST_DECODE
|
38
|
+
# define HUF_ENABLE_FAST_DECODE 0
|
39
|
+
#else
|
40
|
+
# define HUF_ENABLE_FAST_DECODE 1
|
41
|
+
#endif
|
42
|
+
|
31
43
|
/* These two optional macros force the use one way or another of the two
|
32
44
|
* Huffman decompression implementations. You can't force in both directions
|
33
45
|
* at the same time.
|
@@ -37,11 +49,33 @@ namespace duckdb_zstd {
|
|
37
49
|
#error "Cannot force the use of the X1 and X2 decoders at the same time!"
|
38
50
|
#endif
|
39
51
|
|
52
|
+
/* When DYNAMIC_BMI2 is enabled, fast decoders are only called when bmi2 is
|
53
|
+
* supported at runtime, so we can add the BMI2 target attribute.
|
54
|
+
* When it is disabled, we will still get BMI2 if it is enabled statically.
|
55
|
+
*/
|
56
|
+
#if DYNAMIC_BMI2
|
57
|
+
# define HUF_FAST_BMI2_ATTRS BMI2_TARGET_ATTRIBUTE
|
58
|
+
#else
|
59
|
+
# define HUF_FAST_BMI2_ATTRS
|
60
|
+
#endif
|
61
|
+
|
62
|
+
#ifdef __cplusplus
|
63
|
+
# define HUF_EXTERN_C extern "C"
|
64
|
+
#else
|
65
|
+
# define HUF_EXTERN_C
|
66
|
+
#endif
|
67
|
+
#define HUF_ASM_DECL HUF_EXTERN_C
|
68
|
+
|
69
|
+
#if DYNAMIC_BMI2
|
70
|
+
# define HUF_NEED_BMI2_FUNCTION 1
|
71
|
+
#else
|
72
|
+
# define HUF_NEED_BMI2_FUNCTION 0
|
73
|
+
#endif
|
40
74
|
|
41
75
|
/* **************************************************************
|
42
76
|
* Error Management
|
43
77
|
****************************************************************/
|
44
|
-
|
78
|
+
#define HUF_isError ERR_isError
|
45
79
|
|
46
80
|
|
47
81
|
/* **************************************************************
|
@@ -50,10 +84,16 @@ namespace duckdb_zstd {
|
|
50
84
|
#define HUF_ALIGN(x, a) HUF_ALIGN_MASK((x), (a) - 1)
|
51
85
|
#define HUF_ALIGN_MASK(x, mask) (((x) + (mask)) & ~(mask))
|
52
86
|
|
87
|
+
namespace duckdb_zstd {
|
53
88
|
|
54
89
|
/* **************************************************************
|
55
90
|
* BMI2 Variant Wrappers
|
56
91
|
****************************************************************/
|
92
|
+
typedef size_t (*HUF_DecompressUsingDTableFn)(void *dst, size_t dstSize,
|
93
|
+
const void *cSrc,
|
94
|
+
size_t cSrcSize,
|
95
|
+
const HUF_DTable *DTable);
|
96
|
+
|
57
97
|
#if DYNAMIC_BMI2
|
58
98
|
|
59
99
|
#define HUF_DGEN(fn) \
|
@@ -66,7 +106,7 @@ namespace duckdb_zstd {
|
|
66
106
|
return fn##_body(dst, dstSize, cSrc, cSrcSize, DTable); \
|
67
107
|
} \
|
68
108
|
\
|
69
|
-
static
|
109
|
+
static BMI2_TARGET_ATTRIBUTE size_t fn##_bmi2( \
|
70
110
|
void* dst, size_t dstSize, \
|
71
111
|
const void* cSrc, size_t cSrcSize, \
|
72
112
|
const HUF_DTable* DTable) \
|
@@ -75,9 +115,9 @@ namespace duckdb_zstd {
|
|
75
115
|
} \
|
76
116
|
\
|
77
117
|
static size_t fn(void* dst, size_t dstSize, void const* cSrc, \
|
78
|
-
size_t cSrcSize, HUF_DTable const* DTable, int
|
118
|
+
size_t cSrcSize, HUF_DTable const* DTable, int flags) \
|
79
119
|
{ \
|
80
|
-
if (
|
120
|
+
if (flags & HUF_flags_bmi2) { \
|
81
121
|
return fn##_bmi2(dst, dstSize, cSrc, cSrcSize, DTable); \
|
82
122
|
} \
|
83
123
|
return fn##_default(dst, dstSize, cSrc, cSrcSize, DTable); \
|
@@ -87,9 +127,9 @@ namespace duckdb_zstd {
|
|
87
127
|
|
88
128
|
#define HUF_DGEN(fn) \
|
89
129
|
static size_t fn(void* dst, size_t dstSize, void const* cSrc, \
|
90
|
-
size_t cSrcSize, HUF_DTable const* DTable, int
|
130
|
+
size_t cSrcSize, HUF_DTable const* DTable, int flags) \
|
91
131
|
{ \
|
92
|
-
(void)
|
132
|
+
(void)flags; \
|
93
133
|
return fn##_body(dst, dstSize, cSrc, cSrcSize, DTable); \
|
94
134
|
}
|
95
135
|
|
@@ -104,92 +144,379 @@ typedef struct { BYTE maxTableLog; BYTE tableType; BYTE tableLog; BYTE reserved;
|
|
104
144
|
static DTableDesc HUF_getDTableDesc(const HUF_DTable* table)
|
105
145
|
{
|
106
146
|
DTableDesc dtd;
|
107
|
-
|
147
|
+
ZSTD_memcpy(&dtd, table, sizeof(dtd));
|
108
148
|
return dtd;
|
109
149
|
}
|
110
150
|
|
151
|
+
static size_t HUF_initFastDStream(BYTE const* ip) {
|
152
|
+
BYTE const lastByte = ip[7];
|
153
|
+
size_t const bitsConsumed = lastByte ? 8 - ZSTD_highbit32(lastByte) : 0;
|
154
|
+
size_t const value = MEM_readLEST(ip) | 1;
|
155
|
+
assert(bitsConsumed <= 8);
|
156
|
+
assert(sizeof(size_t) == 8);
|
157
|
+
return value << bitsConsumed;
|
158
|
+
}
|
159
|
+
|
160
|
+
|
161
|
+
/**
|
162
|
+
* The input/output arguments to the Huffman fast decoding loop:
|
163
|
+
*
|
164
|
+
* ip [in/out] - The input pointers, must be updated to reflect what is consumed.
|
165
|
+
* op [in/out] - The output pointers, must be updated to reflect what is written.
|
166
|
+
* bits [in/out] - The bitstream containers, must be updated to reflect the current state.
|
167
|
+
* dt [in] - The decoding table.
|
168
|
+
* ilowest [in] - The beginning of the valid range of the input. Decoders may read
|
169
|
+
* down to this pointer. It may be below iend[0].
|
170
|
+
* oend [in] - The end of the output stream. op[3] must not cross oend.
|
171
|
+
* iend [in] - The end of each input stream. ip[i] may cross iend[i],
|
172
|
+
* as long as it is above ilowest, but that indicates corruption.
|
173
|
+
*/
|
174
|
+
typedef struct {
|
175
|
+
BYTE const* ip[4];
|
176
|
+
BYTE* op[4];
|
177
|
+
U64 bits[4];
|
178
|
+
void const* dt;
|
179
|
+
BYTE const* ilowest;
|
180
|
+
BYTE* oend;
|
181
|
+
BYTE const* iend[4];
|
182
|
+
} HUF_DecompressFastArgs;
|
183
|
+
|
184
|
+
typedef void (*HUF_DecompressFastLoopFn)(HUF_DecompressFastArgs*);
|
185
|
+
|
186
|
+
/**
|
187
|
+
* Initializes args for the fast decoding loop.
|
188
|
+
* @returns 1 on success
|
189
|
+
* 0 if the fallback implementation should be used.
|
190
|
+
* Or an error code on failure.
|
191
|
+
*/
|
192
|
+
static size_t HUF_DecompressFastArgs_init(HUF_DecompressFastArgs* args, void* dst, size_t dstSize, void const* src, size_t srcSize, const HUF_DTable* DTable)
|
193
|
+
{
|
194
|
+
void const* dt = DTable + 1;
|
195
|
+
U32 const dtLog = HUF_getDTableDesc(DTable).tableLog;
|
196
|
+
|
197
|
+
const BYTE* const istart = (const BYTE*)src;
|
198
|
+
|
199
|
+
BYTE* const oend = ZSTD_maybeNullPtrAdd((BYTE*)dst, dstSize);
|
200
|
+
|
201
|
+
/* The fast decoding loop assumes 64-bit little-endian.
|
202
|
+
* This condition is false on x32.
|
203
|
+
*/
|
204
|
+
if (!MEM_isLittleEndian() || MEM_32bits())
|
205
|
+
return 0;
|
206
|
+
|
207
|
+
/* Avoid nullptr addition */
|
208
|
+
if (dstSize == 0)
|
209
|
+
return 0;
|
210
|
+
assert(dst != NULL);
|
211
|
+
|
212
|
+
/* strict minimum : jump table + 1 byte per stream */
|
213
|
+
if (srcSize < 10)
|
214
|
+
return ERROR(corruption_detected);
|
215
|
+
|
216
|
+
/* Must have at least 8 bytes per stream because we don't handle initializing smaller bit containers.
|
217
|
+
* If table log is not correct at this point, fallback to the old decoder.
|
218
|
+
* On small inputs we don't have enough data to trigger the fast loop, so use the old decoder.
|
219
|
+
*/
|
220
|
+
if (dtLog != HUF_DECODER_FAST_TABLELOG)
|
221
|
+
return 0;
|
222
|
+
|
223
|
+
/* Read the jump table. */
|
224
|
+
{
|
225
|
+
size_t const length1 = MEM_readLE16(istart);
|
226
|
+
size_t const length2 = MEM_readLE16(istart+2);
|
227
|
+
size_t const length3 = MEM_readLE16(istart+4);
|
228
|
+
size_t const length4 = srcSize - (length1 + length2 + length3 + 6);
|
229
|
+
args->iend[0] = istart + 6; /* jumpTable */
|
230
|
+
args->iend[1] = args->iend[0] + length1;
|
231
|
+
args->iend[2] = args->iend[1] + length2;
|
232
|
+
args->iend[3] = args->iend[2] + length3;
|
233
|
+
|
234
|
+
/* HUF_initFastDStream() requires this, and this small of an input
|
235
|
+
* won't benefit from the ASM loop anyways.
|
236
|
+
*/
|
237
|
+
if (length1 < 8 || length2 < 8 || length3 < 8 || length4 < 8)
|
238
|
+
return 0;
|
239
|
+
if (length4 > srcSize) return ERROR(corruption_detected); /* overflow */
|
240
|
+
}
|
241
|
+
/* ip[] contains the position that is currently loaded into bits[]. */
|
242
|
+
args->ip[0] = args->iend[1] - sizeof(U64);
|
243
|
+
args->ip[1] = args->iend[2] - sizeof(U64);
|
244
|
+
args->ip[2] = args->iend[3] - sizeof(U64);
|
245
|
+
args->ip[3] = (BYTE const*)src + srcSize - sizeof(U64);
|
246
|
+
|
247
|
+
/* op[] contains the output pointers. */
|
248
|
+
args->op[0] = (BYTE*)dst;
|
249
|
+
args->op[1] = args->op[0] + (dstSize+3)/4;
|
250
|
+
args->op[2] = args->op[1] + (dstSize+3)/4;
|
251
|
+
args->op[3] = args->op[2] + (dstSize+3)/4;
|
252
|
+
|
253
|
+
/* No point to call the ASM loop for tiny outputs. */
|
254
|
+
if (args->op[3] >= oend)
|
255
|
+
return 0;
|
256
|
+
|
257
|
+
/* bits[] is the bit container.
|
258
|
+
* It is read from the MSB down to the LSB.
|
259
|
+
* It is shifted left as it is read, and zeros are
|
260
|
+
* shifted in. After the lowest valid bit a 1 is
|
261
|
+
* set, so that CountTrailingZeros(bits[]) can be used
|
262
|
+
* to count how many bits we've consumed.
|
263
|
+
*/
|
264
|
+
args->bits[0] = HUF_initFastDStream(args->ip[0]);
|
265
|
+
args->bits[1] = HUF_initFastDStream(args->ip[1]);
|
266
|
+
args->bits[2] = HUF_initFastDStream(args->ip[2]);
|
267
|
+
args->bits[3] = HUF_initFastDStream(args->ip[3]);
|
268
|
+
|
269
|
+
/* The decoders must be sure to never read beyond ilowest.
|
270
|
+
* This is lower than iend[0], but allowing decoders to read
|
271
|
+
* down to ilowest can allow an extra iteration or two in the
|
272
|
+
* fast loop.
|
273
|
+
*/
|
274
|
+
args->ilowest = istart;
|
275
|
+
|
276
|
+
args->oend = oend;
|
277
|
+
args->dt = dt;
|
278
|
+
|
279
|
+
return 1;
|
280
|
+
}
|
281
|
+
|
282
|
+
static size_t HUF_initRemainingDStream(BIT_DStream_t* bit, HUF_DecompressFastArgs const* args, int stream, BYTE* segmentEnd)
|
283
|
+
{
|
284
|
+
/* Validate that we haven't overwritten. */
|
285
|
+
if (args->op[stream] > segmentEnd)
|
286
|
+
return ERROR(corruption_detected);
|
287
|
+
/* Validate that we haven't read beyond iend[].
|
288
|
+
* Note that ip[] may be < iend[] because the MSB is
|
289
|
+
* the next bit to read, and we may have consumed 100%
|
290
|
+
* of the stream, so down to iend[i] - 8 is valid.
|
291
|
+
*/
|
292
|
+
if (args->ip[stream] < args->iend[stream] - 8)
|
293
|
+
return ERROR(corruption_detected);
|
294
|
+
|
295
|
+
/* Construct the BIT_DStream_t. */
|
296
|
+
assert(sizeof(size_t) == 8);
|
297
|
+
bit->bitContainer = MEM_readLEST(args->ip[stream]);
|
298
|
+
bit->bitsConsumed = ZSTD_countTrailingZeros64(args->bits[stream]);
|
299
|
+
bit->start = (const char*)args->ilowest;
|
300
|
+
bit->limitPtr = bit->start + sizeof(size_t);
|
301
|
+
bit->ptr = (const char*)args->ip[stream];
|
302
|
+
|
303
|
+
return 0;
|
304
|
+
}
|
305
|
+
|
306
|
+
/* Calls X(N) for each stream 0, 1, 2, 3. */
|
307
|
+
#define HUF_4X_FOR_EACH_STREAM(X) \
|
308
|
+
do { \
|
309
|
+
X(0); \
|
310
|
+
X(1); \
|
311
|
+
X(2); \
|
312
|
+
X(3); \
|
313
|
+
} while (0)
|
314
|
+
|
315
|
+
/* Calls X(N, var) for each stream 0, 1, 2, 3. */
|
316
|
+
#define HUF_4X_FOR_EACH_STREAM_WITH_VAR(X, var) \
|
317
|
+
do { \
|
318
|
+
X(0, (var)); \
|
319
|
+
X(1, (var)); \
|
320
|
+
X(2, (var)); \
|
321
|
+
X(3, (var)); \
|
322
|
+
} while (0)
|
323
|
+
|
111
324
|
|
112
325
|
#ifndef HUF_FORCE_DECOMPRESS_X2
|
113
326
|
|
114
327
|
/*-***************************/
|
115
328
|
/* single-symbol decoding */
|
116
329
|
/*-***************************/
|
117
|
-
typedef struct { BYTE
|
330
|
+
typedef struct { BYTE nbBits; BYTE byte; } HUF_DEltX1; /* single-symbol decoding */
|
331
|
+
|
332
|
+
/**
|
333
|
+
* Packs 4 HUF_DEltX1 structs into a U64. This is used to lay down 4 entries at
|
334
|
+
* a time.
|
335
|
+
*/
|
336
|
+
static U64 HUF_DEltX1_set4(BYTE symbol, BYTE nbBits) {
|
337
|
+
U64 D4;
|
338
|
+
if (MEM_isLittleEndian()) {
|
339
|
+
D4 = (U64)((symbol << 8) + nbBits);
|
340
|
+
} else {
|
341
|
+
D4 = (U64)(symbol + (nbBits << 8));
|
342
|
+
}
|
343
|
+
assert(D4 < (1U << 16));
|
344
|
+
D4 *= 0x0001000100010001ULL;
|
345
|
+
return D4;
|
346
|
+
}
|
118
347
|
|
119
|
-
|
348
|
+
/**
|
349
|
+
* Increase the tableLog to targetTableLog and rescales the stats.
|
350
|
+
* If tableLog > targetTableLog this is a no-op.
|
351
|
+
* @returns New tableLog
|
352
|
+
*/
|
353
|
+
static U32 HUF_rescaleStats(BYTE* huffWeight, U32* rankVal, U32 nbSymbols, U32 tableLog, U32 targetTableLog)
|
354
|
+
{
|
355
|
+
if (tableLog > targetTableLog)
|
356
|
+
return tableLog;
|
357
|
+
if (tableLog < targetTableLog) {
|
358
|
+
U32 const scale = targetTableLog - tableLog;
|
359
|
+
U32 s;
|
360
|
+
/* Increase the weight for all non-zero probability symbols by scale. */
|
361
|
+
for (s = 0; s < nbSymbols; ++s) {
|
362
|
+
huffWeight[s] += (BYTE)((huffWeight[s] == 0) ? 0 : scale);
|
363
|
+
}
|
364
|
+
/* Update rankVal to reflect the new weights.
|
365
|
+
* All weights except 0 get moved to weight + scale.
|
366
|
+
* Weights [1, scale] are empty.
|
367
|
+
*/
|
368
|
+
for (s = targetTableLog; s > scale; --s) {
|
369
|
+
rankVal[s] = rankVal[s - scale];
|
370
|
+
}
|
371
|
+
for (s = scale; s > 0; --s) {
|
372
|
+
rankVal[s] = 0;
|
373
|
+
}
|
374
|
+
}
|
375
|
+
return targetTableLog;
|
376
|
+
}
|
377
|
+
|
378
|
+
typedef struct {
|
379
|
+
U32 rankVal[HUF_TABLELOG_ABSOLUTEMAX + 1];
|
380
|
+
U32 rankStart[HUF_TABLELOG_ABSOLUTEMAX + 1];
|
381
|
+
U32 statsWksp[HUF_READ_STATS_WORKSPACE_SIZE_U32];
|
382
|
+
BYTE symbols[HUF_SYMBOLVALUE_MAX + 1];
|
383
|
+
BYTE huffWeight[HUF_SYMBOLVALUE_MAX + 1];
|
384
|
+
} HUF_ReadDTableX1_Workspace;
|
385
|
+
|
386
|
+
size_t HUF_readDTableX1_wksp(HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize, int flags)
|
120
387
|
{
|
121
388
|
U32 tableLog = 0;
|
122
389
|
U32 nbSymbols = 0;
|
123
390
|
size_t iSize;
|
124
391
|
void* const dtPtr = DTable + 1;
|
125
392
|
HUF_DEltX1* const dt = (HUF_DEltX1*)dtPtr;
|
393
|
+
HUF_ReadDTableX1_Workspace* wksp = (HUF_ReadDTableX1_Workspace*)workSpace;
|
126
394
|
|
127
|
-
|
128
|
-
|
129
|
-
size_t spaceUsed32 = 0;
|
130
|
-
|
131
|
-
rankVal = (U32 *)workSpace + spaceUsed32;
|
132
|
-
spaceUsed32 += HUF_TABLELOG_ABSOLUTEMAX + 1;
|
133
|
-
huffWeight = (BYTE *)((U32 *)workSpace + spaceUsed32);
|
134
|
-
spaceUsed32 += HUF_ALIGN(HUF_SYMBOLVALUE_MAX + 1, sizeof(U32)) >> 2;
|
135
|
-
|
136
|
-
if ((spaceUsed32 << 2) > wkspSize) return ERROR(tableLog_tooLarge);
|
395
|
+
DEBUG_STATIC_ASSERT(HUF_DECOMPRESS_WORKSPACE_SIZE >= sizeof(*wksp));
|
396
|
+
if (sizeof(*wksp) > wkspSize) return ERROR(tableLog_tooLarge);
|
137
397
|
|
138
398
|
DEBUG_STATIC_ASSERT(sizeof(DTableDesc) == sizeof(HUF_DTable));
|
139
|
-
/*
|
399
|
+
/* ZSTD_memset(huffWeight, 0, sizeof(huffWeight)); */ /* is not necessary, even though some analyzer complain ... */
|
140
400
|
|
141
|
-
iSize =
|
401
|
+
iSize = HUF_readStats_wksp(wksp->huffWeight, HUF_SYMBOLVALUE_MAX + 1, wksp->rankVal, &nbSymbols, &tableLog, src, srcSize, wksp->statsWksp, sizeof(wksp->statsWksp), flags);
|
142
402
|
if (HUF_isError(iSize)) return iSize;
|
143
403
|
|
404
|
+
|
144
405
|
/* Table header */
|
145
406
|
{ DTableDesc dtd = HUF_getDTableDesc(DTable);
|
407
|
+
U32 const maxTableLog = dtd.maxTableLog + 1;
|
408
|
+
U32 const targetTableLog = MIN(maxTableLog, HUF_DECODER_FAST_TABLELOG);
|
409
|
+
tableLog = HUF_rescaleStats(wksp->huffWeight, wksp->rankVal, nbSymbols, tableLog, targetTableLog);
|
146
410
|
if (tableLog > (U32)(dtd.maxTableLog+1)) return ERROR(tableLog_tooLarge); /* DTable too small, Huffman tree cannot fit in */
|
147
411
|
dtd.tableType = 0;
|
148
412
|
dtd.tableLog = (BYTE)tableLog;
|
149
|
-
|
413
|
+
ZSTD_memcpy(DTable, &dtd, sizeof(dtd));
|
150
414
|
}
|
151
415
|
|
152
|
-
/*
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
}
|
185
|
-
return iSize;
|
186
|
-
}
|
416
|
+
/* Compute symbols and rankStart given rankVal:
|
417
|
+
*
|
418
|
+
* rankVal already contains the number of values of each weight.
|
419
|
+
*
|
420
|
+
* symbols contains the symbols ordered by weight. First are the rankVal[0]
|
421
|
+
* weight 0 symbols, followed by the rankVal[1] weight 1 symbols, and so on.
|
422
|
+
* symbols[0] is filled (but unused) to avoid a branch.
|
423
|
+
*
|
424
|
+
* rankStart contains the offset where each rank belongs in the DTable.
|
425
|
+
* rankStart[0] is not filled because there are no entries in the table for
|
426
|
+
* weight 0.
|
427
|
+
*/
|
428
|
+
{ int n;
|
429
|
+
U32 nextRankStart = 0;
|
430
|
+
int const unroll = 4;
|
431
|
+
int const nLimit = (int)nbSymbols - unroll + 1;
|
432
|
+
for (n=0; n<(int)tableLog+1; n++) {
|
433
|
+
U32 const curr = nextRankStart;
|
434
|
+
nextRankStart += wksp->rankVal[n];
|
435
|
+
wksp->rankStart[n] = curr;
|
436
|
+
}
|
437
|
+
for (n=0; n < nLimit; n += unroll) {
|
438
|
+
int u;
|
439
|
+
for (u=0; u < unroll; ++u) {
|
440
|
+
size_t const w = wksp->huffWeight[n+u];
|
441
|
+
wksp->symbols[wksp->rankStart[w]++] = (BYTE)(n+u);
|
442
|
+
}
|
443
|
+
}
|
444
|
+
for (; n < (int)nbSymbols; ++n) {
|
445
|
+
size_t const w = wksp->huffWeight[n];
|
446
|
+
wksp->symbols[wksp->rankStart[w]++] = (BYTE)n;
|
447
|
+
}
|
448
|
+
}
|
187
449
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
450
|
+
/* fill DTable
|
451
|
+
* We fill all entries of each weight in order.
|
452
|
+
* That way length is a constant for each iteration of the outer loop.
|
453
|
+
* We can switch based on the length to a different inner loop which is
|
454
|
+
* optimized for that particular case.
|
455
|
+
*/
|
456
|
+
{ U32 w;
|
457
|
+
int symbol = wksp->rankVal[0];
|
458
|
+
int rankStart = 0;
|
459
|
+
for (w=1; w<tableLog+1; ++w) {
|
460
|
+
int const symbolCount = wksp->rankVal[w];
|
461
|
+
int const length = (1 << w) >> 1;
|
462
|
+
int uStart = rankStart;
|
463
|
+
BYTE const nbBits = (BYTE)(tableLog + 1 - w);
|
464
|
+
int s;
|
465
|
+
int u;
|
466
|
+
switch (length) {
|
467
|
+
case 1:
|
468
|
+
for (s=0; s<symbolCount; ++s) {
|
469
|
+
HUF_DEltX1 D;
|
470
|
+
D.byte = wksp->symbols[symbol + s];
|
471
|
+
D.nbBits = nbBits;
|
472
|
+
dt[uStart] = D;
|
473
|
+
uStart += 1;
|
474
|
+
}
|
475
|
+
break;
|
476
|
+
case 2:
|
477
|
+
for (s=0; s<symbolCount; ++s) {
|
478
|
+
HUF_DEltX1 D;
|
479
|
+
D.byte = wksp->symbols[symbol + s];
|
480
|
+
D.nbBits = nbBits;
|
481
|
+
dt[uStart+0] = D;
|
482
|
+
dt[uStart+1] = D;
|
483
|
+
uStart += 2;
|
484
|
+
}
|
485
|
+
break;
|
486
|
+
case 4:
|
487
|
+
for (s=0; s<symbolCount; ++s) {
|
488
|
+
U64 const D4 = HUF_DEltX1_set4(wksp->symbols[symbol + s], nbBits);
|
489
|
+
MEM_write64(dt + uStart, D4);
|
490
|
+
uStart += 4;
|
491
|
+
}
|
492
|
+
break;
|
493
|
+
case 8:
|
494
|
+
for (s=0; s<symbolCount; ++s) {
|
495
|
+
U64 const D4 = HUF_DEltX1_set4(wksp->symbols[symbol + s], nbBits);
|
496
|
+
MEM_write64(dt + uStart, D4);
|
497
|
+
MEM_write64(dt + uStart + 4, D4);
|
498
|
+
uStart += 8;
|
499
|
+
}
|
500
|
+
break;
|
501
|
+
default:
|
502
|
+
for (s=0; s<symbolCount; ++s) {
|
503
|
+
U64 const D4 = HUF_DEltX1_set4(wksp->symbols[symbol + s], nbBits);
|
504
|
+
for (u=0; u < length; u += 16) {
|
505
|
+
MEM_write64(dt + uStart + u + 0, D4);
|
506
|
+
MEM_write64(dt + uStart + u + 4, D4);
|
507
|
+
MEM_write64(dt + uStart + u + 8, D4);
|
508
|
+
MEM_write64(dt + uStart + u + 12, D4);
|
509
|
+
}
|
510
|
+
assert(u == length);
|
511
|
+
uStart += length;
|
512
|
+
}
|
513
|
+
break;
|
514
|
+
}
|
515
|
+
symbol += symbolCount;
|
516
|
+
rankStart += symbolCount * length;
|
517
|
+
}
|
518
|
+
}
|
519
|
+
return iSize;
|
193
520
|
}
|
194
521
|
|
195
522
|
FORCE_INLINE_TEMPLATE BYTE
|
@@ -202,15 +529,19 @@ HUF_decodeSymbolX1(BIT_DStream_t* Dstream, const HUF_DEltX1* dt, const U32 dtLog
|
|
202
529
|
}
|
203
530
|
|
204
531
|
#define HUF_DECODE_SYMBOLX1_0(ptr, DStreamPtr) \
|
205
|
-
*ptr++ = HUF_decodeSymbolX1(DStreamPtr, dt, dtLog)
|
532
|
+
do { *ptr++ = HUF_decodeSymbolX1(DStreamPtr, dt, dtLog); } while (0)
|
206
533
|
|
207
|
-
#define HUF_DECODE_SYMBOLX1_1(ptr, DStreamPtr)
|
208
|
-
|
209
|
-
|
534
|
+
#define HUF_DECODE_SYMBOLX1_1(ptr, DStreamPtr) \
|
535
|
+
do { \
|
536
|
+
if (MEM_64bits() || (HUF_TABLELOG_MAX<=12)) \
|
537
|
+
HUF_DECODE_SYMBOLX1_0(ptr, DStreamPtr); \
|
538
|
+
} while (0)
|
210
539
|
|
211
|
-
#define HUF_DECODE_SYMBOLX1_2(ptr, DStreamPtr)
|
212
|
-
|
213
|
-
|
540
|
+
#define HUF_DECODE_SYMBOLX1_2(ptr, DStreamPtr) \
|
541
|
+
do { \
|
542
|
+
if (MEM_64bits()) \
|
543
|
+
HUF_DECODE_SYMBOLX1_0(ptr, DStreamPtr); \
|
544
|
+
} while (0)
|
214
545
|
|
215
546
|
HINT_INLINE size_t
|
216
547
|
HUF_decodeStreamX1(BYTE* p, BIT_DStream_t* const bitDPtr, BYTE* const pEnd, const HUF_DEltX1* const dt, const U32 dtLog)
|
@@ -218,11 +549,15 @@ HUF_decodeStreamX1(BYTE* p, BIT_DStream_t* const bitDPtr, BYTE* const pEnd, cons
|
|
218
549
|
BYTE* const pStart = p;
|
219
550
|
|
220
551
|
/* up to 4 symbols at a time */
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
552
|
+
if ((pEnd - p) > 3) {
|
553
|
+
while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-3)) {
|
554
|
+
HUF_DECODE_SYMBOLX1_2(p, bitDPtr);
|
555
|
+
HUF_DECODE_SYMBOLX1_1(p, bitDPtr);
|
556
|
+
HUF_DECODE_SYMBOLX1_2(p, bitDPtr);
|
557
|
+
HUF_DECODE_SYMBOLX1_0(p, bitDPtr);
|
558
|
+
}
|
559
|
+
} else {
|
560
|
+
BIT_reloadDStream(bitDPtr);
|
226
561
|
}
|
227
562
|
|
228
563
|
/* [0-3] symbols remaining */
|
@@ -234,7 +569,7 @@ HUF_decodeStreamX1(BYTE* p, BIT_DStream_t* const bitDPtr, BYTE* const pEnd, cons
|
|
234
569
|
while (p < pEnd)
|
235
570
|
HUF_DECODE_SYMBOLX1_0(p, bitDPtr);
|
236
571
|
|
237
|
-
return pEnd-pStart;
|
572
|
+
return (size_t)(pEnd-pStart);
|
238
573
|
}
|
239
574
|
|
240
575
|
FORCE_INLINE_TEMPLATE size_t
|
@@ -244,7 +579,7 @@ HUF_decompress1X1_usingDTable_internal_body(
|
|
244
579
|
const HUF_DTable* DTable)
|
245
580
|
{
|
246
581
|
BYTE* op = (BYTE*)dst;
|
247
|
-
BYTE* const oend = op
|
582
|
+
BYTE* const oend = ZSTD_maybeNullPtrAdd(op, dstSize);
|
248
583
|
const void* dtPtr = DTable + 1;
|
249
584
|
const HUF_DEltX1* const dt = (const HUF_DEltX1*)dtPtr;
|
250
585
|
BIT_DStream_t bitD;
|
@@ -260,6 +595,10 @@ HUF_decompress1X1_usingDTable_internal_body(
|
|
260
595
|
return dstSize;
|
261
596
|
}
|
262
597
|
|
598
|
+
/* HUF_decompress4X1_usingDTable_internal_body():
|
599
|
+
* Conditions :
|
600
|
+
* @dstSize >= 6
|
601
|
+
*/
|
263
602
|
FORCE_INLINE_TEMPLATE size_t
|
264
603
|
HUF_decompress4X1_usingDTable_internal_body(
|
265
604
|
void* dst, size_t dstSize,
|
@@ -268,6 +607,7 @@ HUF_decompress4X1_usingDTable_internal_body(
|
|
268
607
|
{
|
269
608
|
/* Check */
|
270
609
|
if (cSrcSize < 10) return ERROR(corruption_detected); /* strict minimum : jump table + 1 byte per stream */
|
610
|
+
if (dstSize < 6) return ERROR(corruption_detected); /* stream 4-split doesn't work */
|
271
611
|
|
272
612
|
{ const BYTE* const istart = (const BYTE*) cSrc;
|
273
613
|
BYTE* const ostart = (BYTE*) dst;
|
@@ -302,33 +642,37 @@ HUF_decompress4X1_usingDTable_internal_body(
|
|
302
642
|
U32 endSignal = 1;
|
303
643
|
|
304
644
|
if (length4 > cSrcSize) return ERROR(corruption_detected); /* overflow */
|
645
|
+
if (opStart4 > oend) return ERROR(corruption_detected); /* overflow */
|
646
|
+
assert(dstSize >= 6); /* validated above */
|
305
647
|
CHECK_F( BIT_initDStream(&bitD1, istart1, length1) );
|
306
648
|
CHECK_F( BIT_initDStream(&bitD2, istart2, length2) );
|
307
649
|
CHECK_F( BIT_initDStream(&bitD3, istart3, length3) );
|
308
650
|
CHECK_F( BIT_initDStream(&bitD4, istart4, length4) );
|
309
651
|
|
310
652
|
/* up to 16 symbols per loop (4 symbols per stream) in 64-bit mode */
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
653
|
+
if ((size_t)(oend - op4) >= sizeof(size_t)) {
|
654
|
+
for ( ; (endSignal) & (op4 < olimit) ; ) {
|
655
|
+
HUF_DECODE_SYMBOLX1_2(op1, &bitD1);
|
656
|
+
HUF_DECODE_SYMBOLX1_2(op2, &bitD2);
|
657
|
+
HUF_DECODE_SYMBOLX1_2(op3, &bitD3);
|
658
|
+
HUF_DECODE_SYMBOLX1_2(op4, &bitD4);
|
659
|
+
HUF_DECODE_SYMBOLX1_1(op1, &bitD1);
|
660
|
+
HUF_DECODE_SYMBOLX1_1(op2, &bitD2);
|
661
|
+
HUF_DECODE_SYMBOLX1_1(op3, &bitD3);
|
662
|
+
HUF_DECODE_SYMBOLX1_1(op4, &bitD4);
|
663
|
+
HUF_DECODE_SYMBOLX1_2(op1, &bitD1);
|
664
|
+
HUF_DECODE_SYMBOLX1_2(op2, &bitD2);
|
665
|
+
HUF_DECODE_SYMBOLX1_2(op3, &bitD3);
|
666
|
+
HUF_DECODE_SYMBOLX1_2(op4, &bitD4);
|
667
|
+
HUF_DECODE_SYMBOLX1_0(op1, &bitD1);
|
668
|
+
HUF_DECODE_SYMBOLX1_0(op2, &bitD2);
|
669
|
+
HUF_DECODE_SYMBOLX1_0(op3, &bitD3);
|
670
|
+
HUF_DECODE_SYMBOLX1_0(op4, &bitD4);
|
671
|
+
endSignal &= BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished;
|
672
|
+
endSignal &= BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished;
|
673
|
+
endSignal &= BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished;
|
674
|
+
endSignal &= BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished;
|
675
|
+
}
|
332
676
|
}
|
333
677
|
|
334
678
|
/* check corruption */
|
@@ -354,99 +698,230 @@ HUF_decompress4X1_usingDTable_internal_body(
|
|
354
698
|
}
|
355
699
|
}
|
356
700
|
|
701
|
+
#if HUF_NEED_BMI2_FUNCTION
|
702
|
+
static BMI2_TARGET_ATTRIBUTE
|
703
|
+
size_t HUF_decompress4X1_usingDTable_internal_bmi2(void* dst, size_t dstSize, void const* cSrc,
|
704
|
+
size_t cSrcSize, HUF_DTable const* DTable) {
|
705
|
+
return HUF_decompress4X1_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable);
|
706
|
+
}
|
707
|
+
#endif
|
357
708
|
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
709
|
+
static
|
710
|
+
size_t HUF_decompress4X1_usingDTable_internal_default(void* dst, size_t dstSize, void const* cSrc,
|
711
|
+
size_t cSrcSize, HUF_DTable const* DTable) {
|
712
|
+
return HUF_decompress4X1_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable);
|
713
|
+
}
|
362
714
|
|
363
|
-
|
364
|
-
|
715
|
+
static HUF_FAST_BMI2_ATTRS
|
716
|
+
void HUF_decompress4X1_usingDTable_internal_fast_c_loop(HUF_DecompressFastArgs* args)
|
717
|
+
{
|
718
|
+
U64 bits[4];
|
719
|
+
BYTE const* ip[4];
|
720
|
+
BYTE* op[4];
|
721
|
+
U16 const* const dtable = (U16 const*)args->dt;
|
722
|
+
BYTE* const oend = args->oend;
|
723
|
+
BYTE const* const ilowest = args->ilowest;
|
724
|
+
|
725
|
+
/* Copy the arguments to local variables */
|
726
|
+
ZSTD_memcpy(&bits, &args->bits, sizeof(bits));
|
727
|
+
ZSTD_memcpy((void*)(&ip), &args->ip, sizeof(ip));
|
728
|
+
ZSTD_memcpy(&op, &args->op, sizeof(op));
|
729
|
+
|
730
|
+
assert(MEM_isLittleEndian());
|
731
|
+
assert(!MEM_32bits());
|
732
|
+
|
733
|
+
for (;;) {
|
734
|
+
BYTE* olimit;
|
735
|
+
int stream;
|
736
|
+
|
737
|
+
/* Assert loop preconditions */
|
738
|
+
#ifndef NDEBUG
|
739
|
+
for (stream = 0; stream < 4; ++stream) {
|
740
|
+
assert(op[stream] <= (stream == 3 ? oend : op[stream + 1]));
|
741
|
+
assert(ip[stream] >= ilowest);
|
742
|
+
}
|
743
|
+
#endif
|
744
|
+
/* Compute olimit */
|
745
|
+
{
|
746
|
+
/* Each iteration produces 5 output symbols per stream */
|
747
|
+
size_t const oiters = (size_t)(oend - op[3]) / 5;
|
748
|
+
/* Each iteration consumes up to 11 bits * 5 = 55 bits < 7 bytes
|
749
|
+
* per stream.
|
750
|
+
*/
|
751
|
+
size_t const iiters = (size_t)(ip[0] - ilowest) / 7;
|
752
|
+
/* We can safely run iters iterations before running bounds checks */
|
753
|
+
size_t const iters = MIN(oiters, iiters);
|
754
|
+
size_t const symbols = iters * 5;
|
755
|
+
|
756
|
+
/* We can simply check that op[3] < olimit, instead of checking all
|
757
|
+
* of our bounds, since we can't hit the other bounds until we've run
|
758
|
+
* iters iterations, which only happens when op[3] == olimit.
|
759
|
+
*/
|
760
|
+
olimit = op[3] + symbols;
|
761
|
+
|
762
|
+
/* Exit fast decoding loop once we reach the end. */
|
763
|
+
if (op[3] == olimit)
|
764
|
+
break;
|
765
|
+
|
766
|
+
/* Exit the decoding loop if any input pointer has crossed the
|
767
|
+
* previous one. This indicates corruption, and a precondition
|
768
|
+
* to our loop is that ip[i] >= ip[0].
|
769
|
+
*/
|
770
|
+
for (stream = 1; stream < 4; ++stream) {
|
771
|
+
if (ip[stream] < ip[stream - 1])
|
772
|
+
goto _out;
|
773
|
+
}
|
774
|
+
}
|
365
775
|
|
776
|
+
#ifndef NDEBUG
|
777
|
+
for (stream = 1; stream < 4; ++stream) {
|
778
|
+
assert(ip[stream] >= ip[stream - 1]);
|
779
|
+
}
|
780
|
+
#endif
|
366
781
|
|
782
|
+
#define HUF_4X1_DECODE_SYMBOL(_stream, _symbol) \
|
783
|
+
do { \
|
784
|
+
int const index = (int)(bits[(_stream)] >> 53); \
|
785
|
+
int const entry = (int)dtable[index]; \
|
786
|
+
bits[(_stream)] <<= (entry & 0x3F); \
|
787
|
+
op[(_stream)][(_symbol)] = (BYTE)((entry >> 8) & 0xFF); \
|
788
|
+
} while (0)
|
789
|
+
|
790
|
+
#define HUF_4X1_RELOAD_STREAM(_stream) \
|
791
|
+
do { \
|
792
|
+
int const ctz = ZSTD_countTrailingZeros64(bits[(_stream)]); \
|
793
|
+
int const nbBits = ctz & 7; \
|
794
|
+
int const nbBytes = ctz >> 3; \
|
795
|
+
op[(_stream)] += 5; \
|
796
|
+
ip[(_stream)] -= nbBytes; \
|
797
|
+
bits[(_stream)] = MEM_read64(ip[(_stream)]) | 1; \
|
798
|
+
bits[(_stream)] <<= nbBits; \
|
799
|
+
} while (0)
|
800
|
+
|
801
|
+
/* Manually unroll the loop because compilers don't consistently
|
802
|
+
* unroll the inner loops, which destroys performance.
|
803
|
+
*/
|
804
|
+
do {
|
805
|
+
/* Decode 5 symbols in each of the 4 streams */
|
806
|
+
HUF_4X_FOR_EACH_STREAM_WITH_VAR(HUF_4X1_DECODE_SYMBOL, 0);
|
807
|
+
HUF_4X_FOR_EACH_STREAM_WITH_VAR(HUF_4X1_DECODE_SYMBOL, 1);
|
808
|
+
HUF_4X_FOR_EACH_STREAM_WITH_VAR(HUF_4X1_DECODE_SYMBOL, 2);
|
809
|
+
HUF_4X_FOR_EACH_STREAM_WITH_VAR(HUF_4X1_DECODE_SYMBOL, 3);
|
810
|
+
HUF_4X_FOR_EACH_STREAM_WITH_VAR(HUF_4X1_DECODE_SYMBOL, 4);
|
811
|
+
|
812
|
+
/* Reload each of the 4 the bitstreams */
|
813
|
+
HUF_4X_FOR_EACH_STREAM(HUF_4X1_RELOAD_STREAM);
|
814
|
+
} while (op[3] < olimit);
|
815
|
+
|
816
|
+
#undef HUF_4X1_DECODE_SYMBOL
|
817
|
+
#undef HUF_4X1_RELOAD_STREAM
|
818
|
+
}
|
367
819
|
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
if (dtd.tableType != 0) return ERROR(GENERIC);
|
375
|
-
return HUF_decompress1X1_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0);
|
820
|
+
_out:
|
821
|
+
|
822
|
+
/* Save the final values of each of the state variables back to args. */
|
823
|
+
ZSTD_memcpy(&args->bits, &bits, sizeof(bits));
|
824
|
+
ZSTD_memcpy((void*)(&args->ip), &ip, sizeof(ip));
|
825
|
+
ZSTD_memcpy(&args->op, &op, sizeof(op));
|
376
826
|
}
|
377
827
|
|
378
|
-
|
379
|
-
|
380
|
-
|
828
|
+
/**
|
829
|
+
* @returns @p dstSize on success (>= 6)
|
830
|
+
* 0 if the fallback implementation should be used
|
831
|
+
* An error if an error occurred
|
832
|
+
*/
|
833
|
+
static HUF_FAST_BMI2_ATTRS
|
834
|
+
size_t
|
835
|
+
HUF_decompress4X1_usingDTable_internal_fast(
|
836
|
+
void* dst, size_t dstSize,
|
837
|
+
const void* cSrc, size_t cSrcSize,
|
838
|
+
const HUF_DTable* DTable,
|
839
|
+
HUF_DecompressFastLoopFn loopFn)
|
381
840
|
{
|
382
|
-
const
|
841
|
+
void const* dt = DTable + 1;
|
842
|
+
BYTE const* const ilowest = (BYTE const*)cSrc;
|
843
|
+
BYTE* const oend = ZSTD_maybeNullPtrAdd((BYTE*)dst, dstSize);
|
844
|
+
HUF_DecompressFastArgs args;
|
845
|
+
{ size_t const ret = HUF_DecompressFastArgs_init(&args, dst, dstSize, cSrc, cSrcSize, DTable);
|
846
|
+
FORWARD_IF_ERROR(ret, "Failed to init fast loop args");
|
847
|
+
if (ret == 0)
|
848
|
+
return 0;
|
849
|
+
}
|
383
850
|
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
ip
|
851
|
+
assert(args.ip[0] >= args.ilowest);
|
852
|
+
loopFn(&args);
|
853
|
+
|
854
|
+
/* Our loop guarantees that ip[] >= ilowest and that we haven't
|
855
|
+
* overwritten any op[].
|
856
|
+
*/
|
857
|
+
assert(args.ip[0] >= ilowest);
|
858
|
+
assert(args.ip[0] >= ilowest);
|
859
|
+
assert(args.ip[1] >= ilowest);
|
860
|
+
assert(args.ip[2] >= ilowest);
|
861
|
+
assert(args.ip[3] >= ilowest);
|
862
|
+
assert(args.op[3] <= oend);
|
863
|
+
|
864
|
+
assert(ilowest == args.ilowest);
|
865
|
+
assert(ilowest + 6 == args.iend[0]);
|
866
|
+
(void)ilowest;
|
867
|
+
|
868
|
+
/* finish bit streams one by one. */
|
869
|
+
{ size_t const segmentSize = (dstSize+3) / 4;
|
870
|
+
BYTE* segmentEnd = (BYTE*)dst;
|
871
|
+
int i;
|
872
|
+
for (i = 0; i < 4; ++i) {
|
873
|
+
BIT_DStream_t bit;
|
874
|
+
if (segmentSize <= (size_t)(oend - segmentEnd))
|
875
|
+
segmentEnd += segmentSize;
|
876
|
+
else
|
877
|
+
segmentEnd = oend;
|
878
|
+
FORWARD_IF_ERROR(HUF_initRemainingDStream(&bit, &args, i, segmentEnd), "corruption");
|
879
|
+
/* Decompress and validate that we've produced exactly the expected length. */
|
880
|
+
args.op[i] += HUF_decodeStreamX1(args.op[i], &bit, segmentEnd, (HUF_DEltX1 const*)dt, HUF_DECODER_FAST_TABLELOG);
|
881
|
+
if (args.op[i] != segmentEnd) return ERROR(corruption_detected);
|
882
|
+
}
|
883
|
+
}
|
388
884
|
|
389
|
-
|
885
|
+
/* decoded size */
|
886
|
+
assert(dstSize != 0);
|
887
|
+
return dstSize;
|
390
888
|
}
|
391
889
|
|
890
|
+
HUF_DGEN(HUF_decompress1X1_usingDTable_internal)
|
392
891
|
|
393
|
-
size_t
|
394
|
-
|
395
|
-
{
|
396
|
-
U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32];
|
397
|
-
return HUF_decompress1X1_DCtx_wksp(DCtx, dst, dstSize, cSrc, cSrcSize,
|
398
|
-
workSpace, sizeof(workSpace));
|
399
|
-
}
|
400
|
-
|
401
|
-
size_t HUF_decompress1X1 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize)
|
892
|
+
static size_t HUF_decompress4X1_usingDTable_internal(void* dst, size_t dstSize, void const* cSrc,
|
893
|
+
size_t cSrcSize, HUF_DTable const* DTable, int flags)
|
402
894
|
{
|
403
|
-
|
404
|
-
|
405
|
-
}
|
895
|
+
HUF_DecompressUsingDTableFn fallbackFn = HUF_decompress4X1_usingDTable_internal_default;
|
896
|
+
HUF_DecompressFastLoopFn loopFn = HUF_decompress4X1_usingDTable_internal_fast_c_loop;
|
406
897
|
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
898
|
+
#if DYNAMIC_BMI2
|
899
|
+
if (flags & HUF_flags_bmi2) {
|
900
|
+
fallbackFn = HUF_decompress4X1_usingDTable_internal_bmi2;
|
901
|
+
} else {
|
902
|
+
return fallbackFn(dst, dstSize, cSrc, cSrcSize, DTable);
|
903
|
+
}
|
904
|
+
#endif
|
905
|
+
if (HUF_ENABLE_FAST_DECODE && !(flags & HUF_flags_disableFast)) {
|
906
|
+
size_t const ret = HUF_decompress4X1_usingDTable_internal_fast(dst, dstSize, cSrc, cSrcSize, DTable, loopFn);
|
907
|
+
if (ret != 0)
|
908
|
+
return ret;
|
909
|
+
}
|
910
|
+
return fallbackFn(dst, dstSize, cSrc, cSrcSize, DTable);
|
415
911
|
}
|
416
912
|
|
417
|
-
static size_t
|
913
|
+
static size_t HUF_decompress4X1_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize,
|
418
914
|
const void* cSrc, size_t cSrcSize,
|
419
|
-
void* workSpace, size_t wkspSize, int
|
915
|
+
void* workSpace, size_t wkspSize, int flags)
|
420
916
|
{
|
421
917
|
const BYTE* ip = (const BYTE*) cSrc;
|
422
918
|
|
423
|
-
size_t const hSize = HUF_readDTableX1_wksp
|
424
|
-
workSpace, wkspSize);
|
919
|
+
size_t const hSize = HUF_readDTableX1_wksp(dctx, cSrc, cSrcSize, workSpace, wkspSize, flags);
|
425
920
|
if (HUF_isError(hSize)) return hSize;
|
426
921
|
if (hSize >= cSrcSize) return ERROR(srcSize_wrong);
|
427
922
|
ip += hSize; cSrcSize -= hSize;
|
428
923
|
|
429
|
-
return HUF_decompress4X1_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx,
|
430
|
-
}
|
431
|
-
|
432
|
-
size_t HUF_decompress4X1_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize,
|
433
|
-
const void* cSrc, size_t cSrcSize,
|
434
|
-
void* workSpace, size_t wkspSize)
|
435
|
-
{
|
436
|
-
return HUF_decompress4X1_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, 0);
|
437
|
-
}
|
438
|
-
|
439
|
-
|
440
|
-
size_t HUF_decompress4X1_DCtx (HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize)
|
441
|
-
{
|
442
|
-
U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32];
|
443
|
-
return HUF_decompress4X1_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize,
|
444
|
-
workSpace, sizeof(workSpace));
|
445
|
-
}
|
446
|
-
size_t HUF_decompress4X1 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize)
|
447
|
-
{
|
448
|
-
HUF_CREATE_STATIC_DTABLEX1(DTable, HUF_TABLELOG_MAX);
|
449
|
-
return HUF_decompress4X1_DCtx(DTable, dst, dstSize, cSrc, cSrcSize);
|
924
|
+
return HUF_decompress4X1_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx, flags);
|
450
925
|
}
|
451
926
|
|
452
927
|
#endif /* HUF_FORCE_DECOMPRESS_X2 */
|
@@ -459,209 +934,322 @@ size_t HUF_decompress4X1 (void* dst, size_t dstSize, const void* cSrc, size_t cS
|
|
459
934
|
/* *************************/
|
460
935
|
|
461
936
|
typedef struct { U16 sequence; BYTE nbBits; BYTE length; } HUF_DEltX2; /* double-symbols decoding */
|
462
|
-
typedef struct { BYTE symbol;
|
937
|
+
typedef struct { BYTE symbol; } sortedSymbol_t;
|
463
938
|
typedef U32 rankValCol_t[HUF_TABLELOG_MAX + 1];
|
464
939
|
typedef rankValCol_t rankVal_t[HUF_TABLELOG_MAX];
|
465
940
|
|
941
|
+
/**
|
942
|
+
* Constructs a HUF_DEltX2 in a U32.
|
943
|
+
*/
|
944
|
+
static U32 HUF_buildDEltX2U32(U32 symbol, U32 nbBits, U32 baseSeq, int level)
|
945
|
+
{
|
946
|
+
U32 seq;
|
947
|
+
DEBUG_STATIC_ASSERT(offsetof(HUF_DEltX2, sequence) == 0);
|
948
|
+
DEBUG_STATIC_ASSERT(offsetof(HUF_DEltX2, nbBits) == 2);
|
949
|
+
DEBUG_STATIC_ASSERT(offsetof(HUF_DEltX2, length) == 3);
|
950
|
+
DEBUG_STATIC_ASSERT(sizeof(HUF_DEltX2) == sizeof(U32));
|
951
|
+
if (MEM_isLittleEndian()) {
|
952
|
+
seq = level == 1 ? symbol : (baseSeq + (symbol << 8));
|
953
|
+
return seq + (nbBits << 16) + ((U32)level << 24);
|
954
|
+
} else {
|
955
|
+
seq = level == 1 ? (symbol << 8) : ((baseSeq << 8) + symbol);
|
956
|
+
return (seq << 16) + (nbBits << 8) + (U32)level;
|
957
|
+
}
|
958
|
+
}
|
466
959
|
|
467
|
-
|
468
|
-
*
|
469
|
-
|
470
|
-
|
471
|
-
const sortedSymbol_t* sortedSymbols, const U32 sortedListSize,
|
472
|
-
U32 nbBitsBaseline, U16 baseSeq)
|
960
|
+
/**
|
961
|
+
* Constructs a HUF_DEltX2.
|
962
|
+
*/
|
963
|
+
static HUF_DEltX2 HUF_buildDEltX2(U32 symbol, U32 nbBits, U32 baseSeq, int level)
|
473
964
|
{
|
474
965
|
HUF_DEltX2 DElt;
|
475
|
-
U32
|
966
|
+
U32 const val = HUF_buildDEltX2U32(symbol, nbBits, baseSeq, level);
|
967
|
+
DEBUG_STATIC_ASSERT(sizeof(DElt) == sizeof(val));
|
968
|
+
ZSTD_memcpy(&DElt, &val, sizeof(val));
|
969
|
+
return DElt;
|
970
|
+
}
|
476
971
|
|
477
|
-
|
478
|
-
|
972
|
+
/**
|
973
|
+
* Constructs 2 HUF_DEltX2s and packs them into a U64.
|
974
|
+
*/
|
975
|
+
static U64 HUF_buildDEltX2U64(U32 symbol, U32 nbBits, U16 baseSeq, int level)
|
976
|
+
{
|
977
|
+
U32 DElt = HUF_buildDEltX2U32(symbol, nbBits, baseSeq, level);
|
978
|
+
return (U64)DElt + ((U64)DElt << 32);
|
979
|
+
}
|
479
980
|
|
480
|
-
|
981
|
+
/**
|
982
|
+
* Fills the DTable rank with all the symbols from [begin, end) that are each
|
983
|
+
* nbBits long.
|
984
|
+
*
|
985
|
+
* @param DTableRank The start of the rank in the DTable.
|
986
|
+
* @param begin The first symbol to fill (inclusive).
|
987
|
+
* @param end The last symbol to fill (exclusive).
|
988
|
+
* @param nbBits Each symbol is nbBits long.
|
989
|
+
* @param tableLog The table log.
|
990
|
+
* @param baseSeq If level == 1 { 0 } else { the first level symbol }
|
991
|
+
* @param level The level in the table. Must be 1 or 2.
|
992
|
+
*/
|
993
|
+
static void HUF_fillDTableX2ForWeight(
|
994
|
+
HUF_DEltX2* DTableRank,
|
995
|
+
sortedSymbol_t const* begin, sortedSymbol_t const* end,
|
996
|
+
U32 nbBits, U32 tableLog,
|
997
|
+
U16 baseSeq, int const level)
|
998
|
+
{
|
999
|
+
U32 const length = 1U << ((tableLog - nbBits) & 0x1F /* quiet static-analyzer */);
|
1000
|
+
const sortedSymbol_t* ptr;
|
1001
|
+
assert(level >= 1 && level <= 2);
|
1002
|
+
switch (length) {
|
1003
|
+
case 1:
|
1004
|
+
for (ptr = begin; ptr != end; ++ptr) {
|
1005
|
+
HUF_DEltX2 const DElt = HUF_buildDEltX2(ptr->symbol, nbBits, baseSeq, level);
|
1006
|
+
*DTableRank++ = DElt;
|
1007
|
+
}
|
1008
|
+
break;
|
1009
|
+
case 2:
|
1010
|
+
for (ptr = begin; ptr != end; ++ptr) {
|
1011
|
+
HUF_DEltX2 const DElt = HUF_buildDEltX2(ptr->symbol, nbBits, baseSeq, level);
|
1012
|
+
DTableRank[0] = DElt;
|
1013
|
+
DTableRank[1] = DElt;
|
1014
|
+
DTableRank += 2;
|
1015
|
+
}
|
1016
|
+
break;
|
1017
|
+
case 4:
|
1018
|
+
for (ptr = begin; ptr != end; ++ptr) {
|
1019
|
+
U64 const DEltX2 = HUF_buildDEltX2U64(ptr->symbol, nbBits, baseSeq, level);
|
1020
|
+
ZSTD_memcpy(DTableRank + 0, &DEltX2, sizeof(DEltX2));
|
1021
|
+
ZSTD_memcpy(DTableRank + 2, &DEltX2, sizeof(DEltX2));
|
1022
|
+
DTableRank += 4;
|
1023
|
+
}
|
1024
|
+
break;
|
1025
|
+
case 8:
|
1026
|
+
for (ptr = begin; ptr != end; ++ptr) {
|
1027
|
+
U64 const DEltX2 = HUF_buildDEltX2U64(ptr->symbol, nbBits, baseSeq, level);
|
1028
|
+
ZSTD_memcpy(DTableRank + 0, &DEltX2, sizeof(DEltX2));
|
1029
|
+
ZSTD_memcpy(DTableRank + 2, &DEltX2, sizeof(DEltX2));
|
1030
|
+
ZSTD_memcpy(DTableRank + 4, &DEltX2, sizeof(DEltX2));
|
1031
|
+
ZSTD_memcpy(DTableRank + 6, &DEltX2, sizeof(DEltX2));
|
1032
|
+
DTableRank += 8;
|
1033
|
+
}
|
1034
|
+
break;
|
1035
|
+
default:
|
1036
|
+
for (ptr = begin; ptr != end; ++ptr) {
|
1037
|
+
U64 const DEltX2 = HUF_buildDEltX2U64(ptr->symbol, nbBits, baseSeq, level);
|
1038
|
+
HUF_DEltX2* const DTableRankEnd = DTableRank + length;
|
1039
|
+
for (; DTableRank != DTableRankEnd; DTableRank += 8) {
|
1040
|
+
ZSTD_memcpy(DTableRank + 0, &DEltX2, sizeof(DEltX2));
|
1041
|
+
ZSTD_memcpy(DTableRank + 2, &DEltX2, sizeof(DEltX2));
|
1042
|
+
ZSTD_memcpy(DTableRank + 4, &DEltX2, sizeof(DEltX2));
|
1043
|
+
ZSTD_memcpy(DTableRank + 6, &DEltX2, sizeof(DEltX2));
|
1044
|
+
}
|
1045
|
+
}
|
1046
|
+
break;
|
1047
|
+
}
|
1048
|
+
}
|
1049
|
+
|
1050
|
+
/* HUF_fillDTableX2Level2() :
|
1051
|
+
* `rankValOrigin` must be a table of at least (HUF_TABLELOG_MAX + 1) U32 */
|
1052
|
+
static void HUF_fillDTableX2Level2(HUF_DEltX2* DTable, U32 targetLog, const U32 consumedBits,
|
1053
|
+
const U32* rankVal, const int minWeight, const int maxWeight1,
|
1054
|
+
const sortedSymbol_t* sortedSymbols, U32 const* rankStart,
|
1055
|
+
U32 nbBitsBaseline, U16 baseSeq)
|
1056
|
+
{
|
1057
|
+
/* Fill skipped values (all positions up to rankVal[minWeight]).
|
1058
|
+
* These are positions only get a single symbol because the combined weight
|
1059
|
+
* is too large.
|
1060
|
+
*/
|
481
1061
|
if (minWeight>1) {
|
482
|
-
U32
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
1062
|
+
U32 const length = 1U << ((targetLog - consumedBits) & 0x1F /* quiet static-analyzer */);
|
1063
|
+
U64 const DEltX2 = HUF_buildDEltX2U64(baseSeq, consumedBits, /* baseSeq */ 0, /* level */ 1);
|
1064
|
+
int const skipSize = rankVal[minWeight];
|
1065
|
+
assert(length > 1);
|
1066
|
+
assert((U32)skipSize < length);
|
1067
|
+
switch (length) {
|
1068
|
+
case 2:
|
1069
|
+
assert(skipSize == 1);
|
1070
|
+
ZSTD_memcpy(DTable, &DEltX2, sizeof(DEltX2));
|
1071
|
+
break;
|
1072
|
+
case 4:
|
1073
|
+
assert(skipSize <= 4);
|
1074
|
+
ZSTD_memcpy(DTable + 0, &DEltX2, sizeof(DEltX2));
|
1075
|
+
ZSTD_memcpy(DTable + 2, &DEltX2, sizeof(DEltX2));
|
1076
|
+
break;
|
1077
|
+
default:
|
1078
|
+
{
|
1079
|
+
int i;
|
1080
|
+
for (i = 0; i < skipSize; i += 8) {
|
1081
|
+
ZSTD_memcpy(DTable + i + 0, &DEltX2, sizeof(DEltX2));
|
1082
|
+
ZSTD_memcpy(DTable + i + 2, &DEltX2, sizeof(DEltX2));
|
1083
|
+
ZSTD_memcpy(DTable + i + 4, &DEltX2, sizeof(DEltX2));
|
1084
|
+
ZSTD_memcpy(DTable + i + 6, &DEltX2, sizeof(DEltX2));
|
1085
|
+
}
|
1086
|
+
}
|
1087
|
+
}
|
488
1088
|
}
|
489
1089
|
|
490
|
-
/*
|
491
|
-
{
|
492
|
-
|
493
|
-
|
494
|
-
const
|
495
|
-
const
|
496
|
-
const
|
497
|
-
U32
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
rankVal[weight] += length;
|
506
|
-
} }
|
1090
|
+
/* Fill each of the second level symbols by weight. */
|
1091
|
+
{
|
1092
|
+
int w;
|
1093
|
+
for (w = minWeight; w < maxWeight1; ++w) {
|
1094
|
+
int const begin = rankStart[w];
|
1095
|
+
int const end = rankStart[w+1];
|
1096
|
+
U32 const nbBits = nbBitsBaseline - w;
|
1097
|
+
U32 const totalBits = nbBits + consumedBits;
|
1098
|
+
HUF_fillDTableX2ForWeight(
|
1099
|
+
DTable + rankVal[w],
|
1100
|
+
sortedSymbols + begin, sortedSymbols + end,
|
1101
|
+
totalBits, targetLog,
|
1102
|
+
baseSeq, /* level */ 2);
|
1103
|
+
}
|
1104
|
+
}
|
507
1105
|
}
|
508
1106
|
|
509
|
-
|
510
1107
|
static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog,
|
511
|
-
const sortedSymbol_t* sortedList,
|
512
|
-
const U32* rankStart,
|
1108
|
+
const sortedSymbol_t* sortedList,
|
1109
|
+
const U32* rankStart, rankValCol_t* rankValOrigin, const U32 maxWeight,
|
513
1110
|
const U32 nbBitsBaseline)
|
514
1111
|
{
|
515
|
-
U32 rankVal
|
1112
|
+
U32* const rankVal = rankValOrigin[0];
|
516
1113
|
const int scaleLog = nbBitsBaseline - targetLog; /* note : targetLog >= srcLog, hence scaleLog <= 1 */
|
517
1114
|
const U32 minBits = nbBitsBaseline - maxWeight;
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
const
|
525
|
-
const
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
U32 sortedRank;
|
1115
|
+
int w;
|
1116
|
+
int const wEnd = (int)maxWeight + 1;
|
1117
|
+
|
1118
|
+
/* Fill DTable in order of weight. */
|
1119
|
+
for (w = 1; w < wEnd; ++w) {
|
1120
|
+
int const begin = (int)rankStart[w];
|
1121
|
+
int const end = (int)rankStart[w+1];
|
1122
|
+
U32 const nbBits = nbBitsBaseline - w;
|
1123
|
+
|
1124
|
+
if (targetLog-nbBits >= minBits) {
|
1125
|
+
/* Enough room for a second symbol. */
|
1126
|
+
int start = rankVal[w];
|
1127
|
+
U32 const length = 1U << ((targetLog - nbBits) & 0x1F /* quiet static-analyzer */);
|
532
1128
|
int minWeight = nbBits + scaleLog;
|
1129
|
+
int s;
|
533
1130
|
if (minWeight < 1) minWeight = 1;
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
1131
|
+
/* Fill the DTable for every symbol of weight w.
|
1132
|
+
* These symbols get at least 1 second symbol.
|
1133
|
+
*/
|
1134
|
+
for (s = begin; s != end; ++s) {
|
1135
|
+
HUF_fillDTableX2Level2(
|
1136
|
+
DTable + start, targetLog, nbBits,
|
1137
|
+
rankValOrigin[nbBits], minWeight, wEnd,
|
1138
|
+
sortedList, rankStart,
|
1139
|
+
nbBitsBaseline, sortedList[s].symbol);
|
1140
|
+
start += length;
|
1141
|
+
}
|
539
1142
|
} else {
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
} }
|
548
|
-
rankVal[weight] += length;
|
1143
|
+
/* Only a single symbol. */
|
1144
|
+
HUF_fillDTableX2ForWeight(
|
1145
|
+
DTable + rankVal[w],
|
1146
|
+
sortedList + begin, sortedList + end,
|
1147
|
+
nbBits, targetLog,
|
1148
|
+
/* baseSeq */ 0, /* level */ 1);
|
1149
|
+
}
|
549
1150
|
}
|
550
1151
|
}
|
551
1152
|
|
1153
|
+
typedef struct {
|
1154
|
+
rankValCol_t rankVal[HUF_TABLELOG_MAX];
|
1155
|
+
U32 rankStats[HUF_TABLELOG_MAX + 1];
|
1156
|
+
U32 rankStart0[HUF_TABLELOG_MAX + 3];
|
1157
|
+
sortedSymbol_t sortedSymbol[HUF_SYMBOLVALUE_MAX + 1];
|
1158
|
+
BYTE weightList[HUF_SYMBOLVALUE_MAX + 1];
|
1159
|
+
U32 calleeWksp[HUF_READ_STATS_WORKSPACE_SIZE_U32];
|
1160
|
+
} HUF_ReadDTableX2_Workspace;
|
1161
|
+
|
552
1162
|
size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
|
553
1163
|
const void* src, size_t srcSize,
|
554
|
-
void* workSpace, size_t wkspSize)
|
1164
|
+
void* workSpace, size_t wkspSize, int flags)
|
555
1165
|
{
|
556
|
-
U32 tableLog, maxW,
|
1166
|
+
U32 tableLog, maxW, nbSymbols;
|
557
1167
|
DTableDesc dtd = HUF_getDTableDesc(DTable);
|
558
|
-
U32
|
1168
|
+
U32 maxTableLog = dtd.maxTableLog;
|
559
1169
|
size_t iSize;
|
560
1170
|
void* dtPtr = DTable+1; /* force compiler to avoid strict-aliasing */
|
561
1171
|
HUF_DEltX2* const dt = (HUF_DEltX2*)dtPtr;
|
562
1172
|
U32 *rankStart;
|
563
1173
|
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
rankVal = (rankValCol_t *)((U32 *)workSpace + spaceUsed32);
|
572
|
-
spaceUsed32 += (sizeof(rankValCol_t) * HUF_TABLELOG_MAX) >> 2;
|
573
|
-
rankStats = (U32 *)workSpace + spaceUsed32;
|
574
|
-
spaceUsed32 += HUF_TABLELOG_MAX + 1;
|
575
|
-
rankStart0 = (U32 *)workSpace + spaceUsed32;
|
576
|
-
spaceUsed32 += HUF_TABLELOG_MAX + 2;
|
577
|
-
sortedSymbol = (sortedSymbol_t *)workSpace + (spaceUsed32 * sizeof(U32)) / sizeof(sortedSymbol_t);
|
578
|
-
spaceUsed32 += HUF_ALIGN(sizeof(sortedSymbol_t) * (HUF_SYMBOLVALUE_MAX + 1), sizeof(U32)) >> 2;
|
579
|
-
weightList = (BYTE *)((U32 *)workSpace + spaceUsed32);
|
580
|
-
spaceUsed32 += HUF_ALIGN(HUF_SYMBOLVALUE_MAX + 1, sizeof(U32)) >> 2;
|
581
|
-
|
582
|
-
if ((spaceUsed32 << 2) > wkspSize) return ERROR(tableLog_tooLarge);
|
583
|
-
|
584
|
-
rankStart = rankStart0 + 1;
|
585
|
-
memset(rankStats, 0, sizeof(U32) * (2 * HUF_TABLELOG_MAX + 2 + 1));
|
1174
|
+
HUF_ReadDTableX2_Workspace* const wksp = (HUF_ReadDTableX2_Workspace*)workSpace;
|
1175
|
+
|
1176
|
+
if (sizeof(*wksp) > wkspSize) return ERROR(GENERIC);
|
1177
|
+
|
1178
|
+
rankStart = wksp->rankStart0 + 1;
|
1179
|
+
ZSTD_memset(wksp->rankStats, 0, sizeof(wksp->rankStats));
|
1180
|
+
ZSTD_memset(wksp->rankStart0, 0, sizeof(wksp->rankStart0));
|
586
1181
|
|
587
1182
|
DEBUG_STATIC_ASSERT(sizeof(HUF_DEltX2) == sizeof(HUF_DTable)); /* if compiler fails here, assertion is wrong */
|
588
1183
|
if (maxTableLog > HUF_TABLELOG_MAX) return ERROR(tableLog_tooLarge);
|
589
|
-
/*
|
1184
|
+
/* ZSTD_memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */
|
590
1185
|
|
591
|
-
iSize =
|
1186
|
+
iSize = HUF_readStats_wksp(wksp->weightList, HUF_SYMBOLVALUE_MAX + 1, wksp->rankStats, &nbSymbols, &tableLog, src, srcSize, wksp->calleeWksp, sizeof(wksp->calleeWksp), flags);
|
592
1187
|
if (HUF_isError(iSize)) return iSize;
|
593
1188
|
|
594
1189
|
/* check result */
|
595
1190
|
if (tableLog > maxTableLog) return ERROR(tableLog_tooLarge); /* DTable can't fit code depth */
|
1191
|
+
if (tableLog <= HUF_DECODER_FAST_TABLELOG && maxTableLog > HUF_DECODER_FAST_TABLELOG) maxTableLog = HUF_DECODER_FAST_TABLELOG;
|
596
1192
|
|
597
1193
|
/* find maxWeight */
|
598
|
-
for (maxW = tableLog; rankStats[maxW]==0; maxW--) {} /* necessarily finds a solution before 0 */
|
1194
|
+
for (maxW = tableLog; wksp->rankStats[maxW]==0; maxW--) {} /* necessarily finds a solution before 0 */
|
599
1195
|
|
600
1196
|
/* Get start index of each weight */
|
601
1197
|
{ U32 w, nextRankStart = 0;
|
602
1198
|
for (w=1; w<maxW+1; w++) {
|
603
|
-
U32
|
604
|
-
nextRankStart += rankStats[w];
|
605
|
-
rankStart[w] =
|
1199
|
+
U32 curr = nextRankStart;
|
1200
|
+
nextRankStart += wksp->rankStats[w];
|
1201
|
+
rankStart[w] = curr;
|
606
1202
|
}
|
607
1203
|
rankStart[0] = nextRankStart; /* put all 0w symbols at the end of sorted list*/
|
608
|
-
|
1204
|
+
rankStart[maxW+1] = nextRankStart;
|
609
1205
|
}
|
610
1206
|
|
611
1207
|
/* sort symbols by weight */
|
612
1208
|
{ U32 s;
|
613
1209
|
for (s=0; s<nbSymbols; s++) {
|
614
|
-
U32 const w = weightList[s];
|
1210
|
+
U32 const w = wksp->weightList[s];
|
615
1211
|
U32 const r = rankStart[w]++;
|
616
|
-
sortedSymbol[r].symbol = (BYTE)s;
|
617
|
-
sortedSymbol[r].weight = (BYTE)w;
|
1212
|
+
wksp->sortedSymbol[r].symbol = (BYTE)s;
|
618
1213
|
}
|
619
1214
|
rankStart[0] = 0; /* forget 0w symbols; this is beginning of weight(1) */
|
620
1215
|
}
|
621
1216
|
|
622
1217
|
/* Build rankVal */
|
623
|
-
{ U32* const rankVal0 = rankVal[0];
|
1218
|
+
{ U32* const rankVal0 = wksp->rankVal[0];
|
624
1219
|
{ int const rescale = (maxTableLog-tableLog) - 1; /* tableLog <= maxTableLog */
|
625
1220
|
U32 nextRankVal = 0;
|
626
1221
|
U32 w;
|
627
1222
|
for (w=1; w<maxW+1; w++) {
|
628
|
-
U32
|
629
|
-
nextRankVal += rankStats[w] << (w+rescale);
|
630
|
-
rankVal0[w] =
|
1223
|
+
U32 curr = nextRankVal;
|
1224
|
+
nextRankVal += wksp->rankStats[w] << (w+rescale);
|
1225
|
+
rankVal0[w] = curr;
|
631
1226
|
} }
|
632
1227
|
{ U32 const minBits = tableLog+1 - maxW;
|
633
1228
|
U32 consumed;
|
634
1229
|
for (consumed = minBits; consumed < maxTableLog - minBits + 1; consumed++) {
|
635
|
-
U32* const rankValPtr = rankVal[consumed];
|
1230
|
+
U32* const rankValPtr = wksp->rankVal[consumed];
|
636
1231
|
U32 w;
|
637
1232
|
for (w = 1; w < maxW+1; w++) {
|
638
1233
|
rankValPtr[w] = rankVal0[w] >> consumed;
|
639
1234
|
} } } }
|
640
1235
|
|
641
1236
|
HUF_fillDTableX2(dt, maxTableLog,
|
642
|
-
sortedSymbol,
|
643
|
-
rankStart0, rankVal, maxW,
|
1237
|
+
wksp->sortedSymbol,
|
1238
|
+
wksp->rankStart0, wksp->rankVal, maxW,
|
644
1239
|
tableLog+1);
|
645
1240
|
|
646
1241
|
dtd.tableLog = (BYTE)maxTableLog;
|
647
1242
|
dtd.tableType = 1;
|
648
|
-
|
1243
|
+
ZSTD_memcpy(DTable, &dtd, sizeof(dtd));
|
649
1244
|
return iSize;
|
650
1245
|
}
|
651
1246
|
|
652
|
-
size_t HUF_readDTableX2(HUF_DTable* DTable, const void* src, size_t srcSize)
|
653
|
-
{
|
654
|
-
U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32];
|
655
|
-
return HUF_readDTableX2_wksp(DTable, src, srcSize,
|
656
|
-
workSpace, sizeof(workSpace));
|
657
|
-
}
|
658
|
-
|
659
1247
|
|
660
1248
|
FORCE_INLINE_TEMPLATE U32
|
661
1249
|
HUF_decodeSymbolX2(void* op, BIT_DStream_t* DStream, const HUF_DEltX2* dt, const U32 dtLog)
|
662
1250
|
{
|
663
1251
|
size_t const val = BIT_lookBitsFast(DStream, dtLog); /* note : dtLog >= 1 */
|
664
|
-
|
1252
|
+
ZSTD_memcpy(op, &dt[val].sequence, 2);
|
665
1253
|
BIT_skipBits(DStream, dt[val].nbBits);
|
666
1254
|
return dt[val].length;
|
667
1255
|
}
|
@@ -670,28 +1258,34 @@ FORCE_INLINE_TEMPLATE U32
|
|
670
1258
|
HUF_decodeLastSymbolX2(void* op, BIT_DStream_t* DStream, const HUF_DEltX2* dt, const U32 dtLog)
|
671
1259
|
{
|
672
1260
|
size_t const val = BIT_lookBitsFast(DStream, dtLog); /* note : dtLog >= 1 */
|
673
|
-
|
674
|
-
if (dt[val].length==1)
|
675
|
-
|
1261
|
+
ZSTD_memcpy(op, &dt[val].sequence, 1);
|
1262
|
+
if (dt[val].length==1) {
|
1263
|
+
BIT_skipBits(DStream, dt[val].nbBits);
|
1264
|
+
} else {
|
676
1265
|
if (DStream->bitsConsumed < (sizeof(DStream->bitContainer)*8)) {
|
677
1266
|
BIT_skipBits(DStream, dt[val].nbBits);
|
678
1267
|
if (DStream->bitsConsumed > (sizeof(DStream->bitContainer)*8))
|
679
1268
|
/* ugly hack; works only because it's the last symbol. Note : can't easily extract nbBits from just this symbol */
|
680
1269
|
DStream->bitsConsumed = (sizeof(DStream->bitContainer)*8);
|
681
|
-
|
1270
|
+
}
|
1271
|
+
}
|
682
1272
|
return 1;
|
683
1273
|
}
|
684
1274
|
|
685
1275
|
#define HUF_DECODE_SYMBOLX2_0(ptr, DStreamPtr) \
|
686
|
-
ptr += HUF_decodeSymbolX2(ptr, DStreamPtr, dt, dtLog)
|
1276
|
+
do { ptr += HUF_decodeSymbolX2(ptr, DStreamPtr, dt, dtLog); } while (0)
|
687
1277
|
|
688
|
-
#define HUF_DECODE_SYMBOLX2_1(ptr, DStreamPtr)
|
689
|
-
|
690
|
-
|
1278
|
+
#define HUF_DECODE_SYMBOLX2_1(ptr, DStreamPtr) \
|
1279
|
+
do { \
|
1280
|
+
if (MEM_64bits() || (HUF_TABLELOG_MAX<=12)) \
|
1281
|
+
ptr += HUF_decodeSymbolX2(ptr, DStreamPtr, dt, dtLog); \
|
1282
|
+
} while (0)
|
691
1283
|
|
692
|
-
#define HUF_DECODE_SYMBOLX2_2(ptr, DStreamPtr)
|
693
|
-
|
694
|
-
|
1284
|
+
#define HUF_DECODE_SYMBOLX2_2(ptr, DStreamPtr) \
|
1285
|
+
do { \
|
1286
|
+
if (MEM_64bits()) \
|
1287
|
+
ptr += HUF_decodeSymbolX2(ptr, DStreamPtr, dt, dtLog); \
|
1288
|
+
} while (0)
|
695
1289
|
|
696
1290
|
HINT_INLINE size_t
|
697
1291
|
HUF_decodeStreamX2(BYTE* p, BIT_DStream_t* bitDPtr, BYTE* const pEnd,
|
@@ -700,19 +1294,37 @@ HUF_decodeStreamX2(BYTE* p, BIT_DStream_t* bitDPtr, BYTE* const pEnd,
|
|
700
1294
|
BYTE* const pStart = p;
|
701
1295
|
|
702
1296
|
/* up to 8 symbols at a time */
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
1297
|
+
if ((size_t)(pEnd - p) >= sizeof(bitDPtr->bitContainer)) {
|
1298
|
+
if (dtLog <= 11 && MEM_64bits()) {
|
1299
|
+
/* up to 10 symbols at a time */
|
1300
|
+
while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-9)) {
|
1301
|
+
HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
|
1302
|
+
HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
|
1303
|
+
HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
|
1304
|
+
HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
|
1305
|
+
HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
|
1306
|
+
}
|
1307
|
+
} else {
|
1308
|
+
/* up to 8 symbols at a time */
|
1309
|
+
while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-(sizeof(bitDPtr->bitContainer)-1))) {
|
1310
|
+
HUF_DECODE_SYMBOLX2_2(p, bitDPtr);
|
1311
|
+
HUF_DECODE_SYMBOLX2_1(p, bitDPtr);
|
1312
|
+
HUF_DECODE_SYMBOLX2_2(p, bitDPtr);
|
1313
|
+
HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
|
1314
|
+
}
|
1315
|
+
}
|
1316
|
+
} else {
|
1317
|
+
BIT_reloadDStream(bitDPtr);
|
708
1318
|
}
|
709
1319
|
|
710
1320
|
/* closer to end : up to 2 symbols at a time */
|
711
|
-
|
712
|
-
|
1321
|
+
if ((size_t)(pEnd - p) >= 2) {
|
1322
|
+
while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p <= pEnd-2))
|
1323
|
+
HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
|
713
1324
|
|
714
|
-
|
715
|
-
|
1325
|
+
while (p <= pEnd-2)
|
1326
|
+
HUF_DECODE_SYMBOLX2_0(p, bitDPtr); /* no need to reload : reached the end of DStream */
|
1327
|
+
}
|
716
1328
|
|
717
1329
|
if (p < pEnd)
|
718
1330
|
p += HUF_decodeLastSymbolX2(p, bitDPtr, dt, dtLog);
|
@@ -733,7 +1345,7 @@ HUF_decompress1X2_usingDTable_internal_body(
|
|
733
1345
|
|
734
1346
|
/* decode */
|
735
1347
|
{ BYTE* const ostart = (BYTE*) dst;
|
736
|
-
BYTE* const oend = ostart
|
1348
|
+
BYTE* const oend = ZSTD_maybeNullPtrAdd(ostart, dstSize);
|
737
1349
|
const void* const dtPtr = DTable+1; /* force compiler to not use strict-aliasing */
|
738
1350
|
const HUF_DEltX2* const dt = (const HUF_DEltX2*)dtPtr;
|
739
1351
|
DTableDesc const dtd = HUF_getDTableDesc(DTable);
|
@@ -747,6 +1359,10 @@ HUF_decompress1X2_usingDTable_internal_body(
|
|
747
1359
|
return dstSize;
|
748
1360
|
}
|
749
1361
|
|
1362
|
+
/* HUF_decompress4X2_usingDTable_internal_body():
|
1363
|
+
* Conditions:
|
1364
|
+
* @dstSize >= 6
|
1365
|
+
*/
|
750
1366
|
FORCE_INLINE_TEMPLATE size_t
|
751
1367
|
HUF_decompress4X2_usingDTable_internal_body(
|
752
1368
|
void* dst, size_t dstSize,
|
@@ -754,6 +1370,7 @@ HUF_decompress4X2_usingDTable_internal_body(
|
|
754
1370
|
const HUF_DTable* DTable)
|
755
1371
|
{
|
756
1372
|
if (cSrcSize < 10) return ERROR(corruption_detected); /* strict minimum : jump table + 1 byte per stream */
|
1373
|
+
if (dstSize < 6) return ERROR(corruption_detected); /* stream 4-split doesn't work */
|
757
1374
|
|
758
1375
|
{ const BYTE* const istart = (const BYTE*) cSrc;
|
759
1376
|
BYTE* const ostart = (BYTE*) dst;
|
@@ -787,58 +1404,62 @@ HUF_decompress4X2_usingDTable_internal_body(
|
|
787
1404
|
DTableDesc const dtd = HUF_getDTableDesc(DTable);
|
788
1405
|
U32 const dtLog = dtd.tableLog;
|
789
1406
|
|
790
|
-
if (length4 > cSrcSize) return ERROR(corruption_detected);
|
1407
|
+
if (length4 > cSrcSize) return ERROR(corruption_detected); /* overflow */
|
1408
|
+
if (opStart4 > oend) return ERROR(corruption_detected); /* overflow */
|
1409
|
+
assert(dstSize >= 6 /* validated above */);
|
791
1410
|
CHECK_F( BIT_initDStream(&bitD1, istart1, length1) );
|
792
1411
|
CHECK_F( BIT_initDStream(&bitD2, istart2, length2) );
|
793
1412
|
CHECK_F( BIT_initDStream(&bitD3, istart3, length3) );
|
794
1413
|
CHECK_F( BIT_initDStream(&bitD4, istart4, length4) );
|
795
1414
|
|
796
1415
|
/* 16-32 symbols per loop (4-8 symbols per stream) */
|
797
|
-
|
1416
|
+
if ((size_t)(oend - op4) >= sizeof(size_t)) {
|
1417
|
+
for ( ; (endSignal) & (op4 < olimit); ) {
|
798
1418
|
#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__))
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
1419
|
+
HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
|
1420
|
+
HUF_DECODE_SYMBOLX2_1(op1, &bitD1);
|
1421
|
+
HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
|
1422
|
+
HUF_DECODE_SYMBOLX2_0(op1, &bitD1);
|
1423
|
+
HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
|
1424
|
+
HUF_DECODE_SYMBOLX2_1(op2, &bitD2);
|
1425
|
+
HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
|
1426
|
+
HUF_DECODE_SYMBOLX2_0(op2, &bitD2);
|
1427
|
+
endSignal &= BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished;
|
1428
|
+
endSignal &= BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished;
|
1429
|
+
HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
|
1430
|
+
HUF_DECODE_SYMBOLX2_1(op3, &bitD3);
|
1431
|
+
HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
|
1432
|
+
HUF_DECODE_SYMBOLX2_0(op3, &bitD3);
|
1433
|
+
HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
|
1434
|
+
HUF_DECODE_SYMBOLX2_1(op4, &bitD4);
|
1435
|
+
HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
|
1436
|
+
HUF_DECODE_SYMBOLX2_0(op4, &bitD4);
|
1437
|
+
endSignal &= BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished;
|
1438
|
+
endSignal &= BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished;
|
819
1439
|
#else
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
1440
|
+
HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
|
1441
|
+
HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
|
1442
|
+
HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
|
1443
|
+
HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
|
1444
|
+
HUF_DECODE_SYMBOLX2_1(op1, &bitD1);
|
1445
|
+
HUF_DECODE_SYMBOLX2_1(op2, &bitD2);
|
1446
|
+
HUF_DECODE_SYMBOLX2_1(op3, &bitD3);
|
1447
|
+
HUF_DECODE_SYMBOLX2_1(op4, &bitD4);
|
1448
|
+
HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
|
1449
|
+
HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
|
1450
|
+
HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
|
1451
|
+
HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
|
1452
|
+
HUF_DECODE_SYMBOLX2_0(op1, &bitD1);
|
1453
|
+
HUF_DECODE_SYMBOLX2_0(op2, &bitD2);
|
1454
|
+
HUF_DECODE_SYMBOLX2_0(op3, &bitD3);
|
1455
|
+
HUF_DECODE_SYMBOLX2_0(op4, &bitD4);
|
1456
|
+
endSignal = (U32)LIKELY((U32)
|
1457
|
+
(BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished)
|
1458
|
+
& (BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished)
|
1459
|
+
& (BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished)
|
1460
|
+
& (BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished));
|
841
1461
|
#endif
|
1462
|
+
}
|
842
1463
|
}
|
843
1464
|
|
844
1465
|
/* check corruption */
|
@@ -862,94 +1483,268 @@ HUF_decompress4X2_usingDTable_internal_body(
|
|
862
1483
|
}
|
863
1484
|
}
|
864
1485
|
|
865
|
-
|
866
|
-
|
1486
|
+
#if HUF_NEED_BMI2_FUNCTION
|
1487
|
+
static BMI2_TARGET_ATTRIBUTE
|
1488
|
+
size_t HUF_decompress4X2_usingDTable_internal_bmi2(void* dst, size_t dstSize, void const* cSrc,
|
1489
|
+
size_t cSrcSize, HUF_DTable const* DTable) {
|
1490
|
+
return HUF_decompress4X2_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable);
|
1491
|
+
}
|
1492
|
+
#endif
|
867
1493
|
|
868
|
-
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
{
|
873
|
-
DTableDesc dtd = HUF_getDTableDesc(DTable);
|
874
|
-
if (dtd.tableType != 1) return ERROR(GENERIC);
|
875
|
-
return HUF_decompress1X2_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0);
|
1494
|
+
static
|
1495
|
+
size_t HUF_decompress4X2_usingDTable_internal_default(void* dst, size_t dstSize, void const* cSrc,
|
1496
|
+
size_t cSrcSize, HUF_DTable const* DTable) {
|
1497
|
+
return HUF_decompress4X2_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable);
|
876
1498
|
}
|
877
1499
|
|
878
|
-
|
879
|
-
|
880
|
-
void* workSpace, size_t wkspSize)
|
1500
|
+
static HUF_FAST_BMI2_ATTRS
|
1501
|
+
void HUF_decompress4X2_usingDTable_internal_fast_c_loop(HUF_DecompressFastArgs* args)
|
881
1502
|
{
|
882
|
-
|
1503
|
+
U64 bits[4];
|
1504
|
+
BYTE const* ip[4];
|
1505
|
+
BYTE* op[4];
|
1506
|
+
BYTE* oend[4];
|
1507
|
+
HUF_DEltX2 const* const dtable = (HUF_DEltX2 const*)args->dt;
|
1508
|
+
BYTE const* const ilowest = args->ilowest;
|
1509
|
+
|
1510
|
+
/* Copy the arguments to local registers. */
|
1511
|
+
ZSTD_memcpy(&bits, &args->bits, sizeof(bits));
|
1512
|
+
ZSTD_memcpy((void*)(&ip), &args->ip, sizeof(ip));
|
1513
|
+
ZSTD_memcpy(&op, &args->op, sizeof(op));
|
1514
|
+
|
1515
|
+
oend[0] = op[1];
|
1516
|
+
oend[1] = op[2];
|
1517
|
+
oend[2] = op[3];
|
1518
|
+
oend[3] = args->oend;
|
1519
|
+
|
1520
|
+
assert(MEM_isLittleEndian());
|
1521
|
+
assert(!MEM_32bits());
|
1522
|
+
|
1523
|
+
for (;;) {
|
1524
|
+
BYTE* olimit;
|
1525
|
+
int stream;
|
1526
|
+
|
1527
|
+
/* Assert loop preconditions */
|
1528
|
+
#ifndef NDEBUG
|
1529
|
+
for (stream = 0; stream < 4; ++stream) {
|
1530
|
+
assert(op[stream] <= oend[stream]);
|
1531
|
+
assert(ip[stream] >= ilowest);
|
1532
|
+
}
|
1533
|
+
#endif
|
1534
|
+
/* Compute olimit */
|
1535
|
+
{
|
1536
|
+
/* Each loop does 5 table lookups for each of the 4 streams.
|
1537
|
+
* Each table lookup consumes up to 11 bits of input, and produces
|
1538
|
+
* up to 2 bytes of output.
|
1539
|
+
*/
|
1540
|
+
/* We can consume up to 7 bytes of input per iteration per stream.
|
1541
|
+
* We also know that each input pointer is >= ip[0]. So we can run
|
1542
|
+
* iters loops before running out of input.
|
1543
|
+
*/
|
1544
|
+
size_t iters = (size_t)(ip[0] - ilowest) / 7;
|
1545
|
+
/* Each iteration can produce up to 10 bytes of output per stream.
|
1546
|
+
* Each output stream my advance at different rates. So take the
|
1547
|
+
* minimum number of safe iterations among all the output streams.
|
1548
|
+
*/
|
1549
|
+
for (stream = 0; stream < 4; ++stream) {
|
1550
|
+
size_t const oiters = (size_t)(oend[stream] - op[stream]) / 10;
|
1551
|
+
iters = MIN(iters, oiters);
|
1552
|
+
}
|
1553
|
+
|
1554
|
+
/* Each iteration produces at least 5 output symbols. So until
|
1555
|
+
* op[3] crosses olimit, we know we haven't executed iters
|
1556
|
+
* iterations yet. This saves us maintaining an iters counter,
|
1557
|
+
* at the expense of computing the remaining # of iterations
|
1558
|
+
* more frequently.
|
1559
|
+
*/
|
1560
|
+
olimit = op[3] + (iters * 5);
|
1561
|
+
|
1562
|
+
/* Exit the fast decoding loop once we reach the end. */
|
1563
|
+
if (op[3] == olimit)
|
1564
|
+
break;
|
1565
|
+
|
1566
|
+
/* Exit the decoding loop if any input pointer has crossed the
|
1567
|
+
* previous one. This indicates corruption, and a precondition
|
1568
|
+
* to our loop is that ip[i] >= ip[0].
|
1569
|
+
*/
|
1570
|
+
for (stream = 1; stream < 4; ++stream) {
|
1571
|
+
if (ip[stream] < ip[stream - 1])
|
1572
|
+
goto _out;
|
1573
|
+
}
|
1574
|
+
}
|
883
1575
|
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
|
888
|
-
|
1576
|
+
#ifndef NDEBUG
|
1577
|
+
for (stream = 1; stream < 4; ++stream) {
|
1578
|
+
assert(ip[stream] >= ip[stream - 1]);
|
1579
|
+
}
|
1580
|
+
#endif
|
889
1581
|
|
890
|
-
|
891
|
-
|
1582
|
+
#define HUF_4X2_DECODE_SYMBOL(_stream, _decode3) \
|
1583
|
+
do { \
|
1584
|
+
if ((_decode3) || (_stream) != 3) { \
|
1585
|
+
int const index = (int)(bits[(_stream)] >> 53); \
|
1586
|
+
HUF_DEltX2 const entry = dtable[index]; \
|
1587
|
+
MEM_write16(op[(_stream)], entry.sequence); \
|
1588
|
+
bits[(_stream)] <<= (entry.nbBits) & 0x3F; \
|
1589
|
+
op[(_stream)] += (entry.length); \
|
1590
|
+
} \
|
1591
|
+
} while (0)
|
1592
|
+
|
1593
|
+
#define HUF_4X2_RELOAD_STREAM(_stream) \
|
1594
|
+
do { \
|
1595
|
+
HUF_4X2_DECODE_SYMBOL(3, 1); \
|
1596
|
+
{ \
|
1597
|
+
int const ctz = ZSTD_countTrailingZeros64(bits[(_stream)]); \
|
1598
|
+
int const nbBits = ctz & 7; \
|
1599
|
+
int const nbBytes = ctz >> 3; \
|
1600
|
+
ip[(_stream)] -= nbBytes; \
|
1601
|
+
bits[(_stream)] = MEM_read64(ip[(_stream)]) | 1; \
|
1602
|
+
bits[(_stream)] <<= nbBits; \
|
1603
|
+
} \
|
1604
|
+
} while (0)
|
1605
|
+
|
1606
|
+
/* Manually unroll the loop because compilers don't consistently
|
1607
|
+
* unroll the inner loops, which destroys performance.
|
1608
|
+
*/
|
1609
|
+
do {
|
1610
|
+
/* Decode 5 symbols from each of the first 3 streams.
|
1611
|
+
* The final stream will be decoded during the reload phase
|
1612
|
+
* to reduce register pressure.
|
1613
|
+
*/
|
1614
|
+
HUF_4X_FOR_EACH_STREAM_WITH_VAR(HUF_4X2_DECODE_SYMBOL, 0);
|
1615
|
+
HUF_4X_FOR_EACH_STREAM_WITH_VAR(HUF_4X2_DECODE_SYMBOL, 0);
|
1616
|
+
HUF_4X_FOR_EACH_STREAM_WITH_VAR(HUF_4X2_DECODE_SYMBOL, 0);
|
1617
|
+
HUF_4X_FOR_EACH_STREAM_WITH_VAR(HUF_4X2_DECODE_SYMBOL, 0);
|
1618
|
+
HUF_4X_FOR_EACH_STREAM_WITH_VAR(HUF_4X2_DECODE_SYMBOL, 0);
|
1619
|
+
|
1620
|
+
/* Decode one symbol from the final stream */
|
1621
|
+
HUF_4X2_DECODE_SYMBOL(3, 1);
|
1622
|
+
|
1623
|
+
/* Decode 4 symbols from the final stream & reload bitstreams.
|
1624
|
+
* The final stream is reloaded last, meaning that all 5 symbols
|
1625
|
+
* are decoded from the final stream before it is reloaded.
|
1626
|
+
*/
|
1627
|
+
HUF_4X_FOR_EACH_STREAM(HUF_4X2_RELOAD_STREAM);
|
1628
|
+
} while (op[3] < olimit);
|
1629
|
+
}
|
892
1630
|
|
1631
|
+
#undef HUF_4X2_DECODE_SYMBOL
|
1632
|
+
#undef HUF_4X2_RELOAD_STREAM
|
893
1633
|
|
894
|
-
|
895
|
-
const void* cSrc, size_t cSrcSize)
|
896
|
-
{
|
897
|
-
U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32];
|
898
|
-
return HUF_decompress1X2_DCtx_wksp(DCtx, dst, dstSize, cSrc, cSrcSize,
|
899
|
-
workSpace, sizeof(workSpace));
|
900
|
-
}
|
1634
|
+
_out:
|
901
1635
|
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
1636
|
+
/* Save the final values of each of the state variables back to args. */
|
1637
|
+
ZSTD_memcpy(&args->bits, &bits, sizeof(bits));
|
1638
|
+
ZSTD_memcpy((void*)(&args->ip), &ip, sizeof(ip));
|
1639
|
+
ZSTD_memcpy(&args->op, &op, sizeof(op));
|
906
1640
|
}
|
907
1641
|
|
908
|
-
|
1642
|
+
|
1643
|
+
static HUF_FAST_BMI2_ATTRS size_t
|
1644
|
+
HUF_decompress4X2_usingDTable_internal_fast(
|
909
1645
|
void* dst, size_t dstSize,
|
910
1646
|
const void* cSrc, size_t cSrcSize,
|
911
|
-
const HUF_DTable* DTable
|
1647
|
+
const HUF_DTable* DTable,
|
1648
|
+
HUF_DecompressFastLoopFn loopFn) {
|
1649
|
+
void const* dt = DTable + 1;
|
1650
|
+
const BYTE* const ilowest = (const BYTE*)cSrc;
|
1651
|
+
BYTE* const oend = ZSTD_maybeNullPtrAdd((BYTE*)dst, dstSize);
|
1652
|
+
HUF_DecompressFastArgs args;
|
1653
|
+
{
|
1654
|
+
size_t const ret = HUF_DecompressFastArgs_init(&args, dst, dstSize, cSrc, cSrcSize, DTable);
|
1655
|
+
FORWARD_IF_ERROR(ret, "Failed to init asm args");
|
1656
|
+
if (ret == 0)
|
1657
|
+
return 0;
|
1658
|
+
}
|
1659
|
+
|
1660
|
+
assert(args.ip[0] >= args.ilowest);
|
1661
|
+
loopFn(&args);
|
1662
|
+
|
1663
|
+
/* note : op4 already verified within main loop */
|
1664
|
+
assert(args.ip[0] >= ilowest);
|
1665
|
+
assert(args.ip[1] >= ilowest);
|
1666
|
+
assert(args.ip[2] >= ilowest);
|
1667
|
+
assert(args.ip[3] >= ilowest);
|
1668
|
+
assert(args.op[3] <= oend);
|
1669
|
+
|
1670
|
+
assert(ilowest == args.ilowest);
|
1671
|
+
assert(ilowest + 6 == args.iend[0]);
|
1672
|
+
(void)ilowest;
|
1673
|
+
|
1674
|
+
/* finish bitStreams one by one */
|
1675
|
+
{
|
1676
|
+
size_t const segmentSize = (dstSize+3) / 4;
|
1677
|
+
BYTE* segmentEnd = (BYTE*)dst;
|
1678
|
+
int i;
|
1679
|
+
for (i = 0; i < 4; ++i) {
|
1680
|
+
BIT_DStream_t bit;
|
1681
|
+
if (segmentSize <= (size_t)(oend - segmentEnd))
|
1682
|
+
segmentEnd += segmentSize;
|
1683
|
+
else
|
1684
|
+
segmentEnd = oend;
|
1685
|
+
FORWARD_IF_ERROR(HUF_initRemainingDStream(&bit, &args, i, segmentEnd), "corruption");
|
1686
|
+
args.op[i] += HUF_decodeStreamX2(args.op[i], &bit, segmentEnd, (HUF_DEltX2 const*)dt, HUF_DECODER_FAST_TABLELOG);
|
1687
|
+
if (args.op[i] != segmentEnd)
|
1688
|
+
return ERROR(corruption_detected);
|
1689
|
+
}
|
1690
|
+
}
|
1691
|
+
|
1692
|
+
/* decoded size */
|
1693
|
+
return dstSize;
|
1694
|
+
}
|
1695
|
+
|
1696
|
+
static size_t HUF_decompress4X2_usingDTable_internal(void* dst, size_t dstSize, void const* cSrc,
|
1697
|
+
size_t cSrcSize, HUF_DTable const* DTable, int flags)
|
912
1698
|
{
|
913
|
-
|
914
|
-
|
915
|
-
|
1699
|
+
HUF_DecompressUsingDTableFn fallbackFn = HUF_decompress4X2_usingDTable_internal_default;
|
1700
|
+
HUF_DecompressFastLoopFn loopFn = HUF_decompress4X2_usingDTable_internal_fast_c_loop;
|
1701
|
+
|
1702
|
+
#if DYNAMIC_BMI2
|
1703
|
+
if (flags & HUF_flags_bmi2) {
|
1704
|
+
fallbackFn = HUF_decompress4X2_usingDTable_internal_bmi2;
|
1705
|
+
} else {
|
1706
|
+
return fallbackFn(dst, dstSize, cSrc, cSrcSize, DTable);
|
1707
|
+
}
|
1708
|
+
#endif
|
1709
|
+
|
1710
|
+
if (HUF_ENABLE_FAST_DECODE && !(flags & HUF_flags_disableFast)) {
|
1711
|
+
size_t const ret = HUF_decompress4X2_usingDTable_internal_fast(dst, dstSize, cSrc, cSrcSize, DTable, loopFn);
|
1712
|
+
if (ret != 0)
|
1713
|
+
return ret;
|
1714
|
+
}
|
1715
|
+
return fallbackFn(dst, dstSize, cSrc, cSrcSize, DTable);
|
916
1716
|
}
|
917
1717
|
|
918
|
-
|
1718
|
+
HUF_DGEN(HUF_decompress1X2_usingDTable_internal)
|
1719
|
+
|
1720
|
+
size_t HUF_decompress1X2_DCtx_wksp(HUF_DTable* DCtx, void* dst, size_t dstSize,
|
919
1721
|
const void* cSrc, size_t cSrcSize,
|
920
|
-
void* workSpace, size_t wkspSize, int
|
1722
|
+
void* workSpace, size_t wkspSize, int flags)
|
921
1723
|
{
|
922
1724
|
const BYTE* ip = (const BYTE*) cSrc;
|
923
1725
|
|
924
|
-
size_t hSize = HUF_readDTableX2_wksp(
|
925
|
-
|
1726
|
+
size_t const hSize = HUF_readDTableX2_wksp(DCtx, cSrc, cSrcSize,
|
1727
|
+
workSpace, wkspSize, flags);
|
926
1728
|
if (HUF_isError(hSize)) return hSize;
|
927
1729
|
if (hSize >= cSrcSize) return ERROR(srcSize_wrong);
|
928
1730
|
ip += hSize; cSrcSize -= hSize;
|
929
1731
|
|
930
|
-
return
|
1732
|
+
return HUF_decompress1X2_usingDTable_internal(dst, dstSize, ip, cSrcSize, DCtx, flags);
|
931
1733
|
}
|
932
1734
|
|
933
|
-
size_t HUF_decompress4X2_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize,
|
1735
|
+
static size_t HUF_decompress4X2_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize,
|
934
1736
|
const void* cSrc, size_t cSrcSize,
|
935
|
-
void* workSpace, size_t wkspSize)
|
1737
|
+
void* workSpace, size_t wkspSize, int flags)
|
936
1738
|
{
|
937
|
-
|
938
|
-
}
|
939
|
-
|
1739
|
+
const BYTE* ip = (const BYTE*) cSrc;
|
940
1740
|
|
941
|
-
size_t
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
workSpace, sizeof(workSpace));
|
947
|
-
}
|
1741
|
+
size_t hSize = HUF_readDTableX2_wksp(dctx, cSrc, cSrcSize,
|
1742
|
+
workSpace, wkspSize, flags);
|
1743
|
+
if (HUF_isError(hSize)) return hSize;
|
1744
|
+
if (hSize >= cSrcSize) return ERROR(srcSize_wrong);
|
1745
|
+
ip += hSize; cSrcSize -= hSize;
|
948
1746
|
|
949
|
-
|
950
|
-
{
|
951
|
-
HUF_CREATE_STATIC_DTABLEX2(DTable, HUF_TABLELOG_MAX);
|
952
|
-
return HUF_decompress4X2_DCtx(DTable, dst, dstSize, cSrc, cSrcSize);
|
1747
|
+
return HUF_decompress4X2_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx, flags);
|
953
1748
|
}
|
954
1749
|
|
955
1750
|
#endif /* HUF_FORCE_DECOMPRESS_X1 */
|
@@ -959,66 +1754,28 @@ size_t HUF_decompress4X2 (void* dst, size_t dstSize, const void* cSrc, size_t cS
|
|
959
1754
|
/* Universal decompression selectors */
|
960
1755
|
/* ***********************************/
|
961
1756
|
|
962
|
-
size_t HUF_decompress1X_usingDTable(void* dst, size_t maxDstSize,
|
963
|
-
const void* cSrc, size_t cSrcSize,
|
964
|
-
const HUF_DTable* DTable)
|
965
|
-
{
|
966
|
-
DTableDesc const dtd = HUF_getDTableDesc(DTable);
|
967
|
-
#if defined(HUF_FORCE_DECOMPRESS_X1)
|
968
|
-
(void)dtd;
|
969
|
-
assert(dtd.tableType == 0);
|
970
|
-
return HUF_decompress1X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0);
|
971
|
-
#elif defined(HUF_FORCE_DECOMPRESS_X2)
|
972
|
-
(void)dtd;
|
973
|
-
assert(dtd.tableType == 1);
|
974
|
-
return HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0);
|
975
|
-
#else
|
976
|
-
return dtd.tableType ? HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0) :
|
977
|
-
HUF_decompress1X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0);
|
978
|
-
#endif
|
979
|
-
}
|
980
|
-
|
981
|
-
size_t HUF_decompress4X_usingDTable(void* dst, size_t maxDstSize,
|
982
|
-
const void* cSrc, size_t cSrcSize,
|
983
|
-
const HUF_DTable* DTable)
|
984
|
-
{
|
985
|
-
DTableDesc const dtd = HUF_getDTableDesc(DTable);
|
986
|
-
#if defined(HUF_FORCE_DECOMPRESS_X1)
|
987
|
-
(void)dtd;
|
988
|
-
assert(dtd.tableType == 0);
|
989
|
-
return HUF_decompress4X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0);
|
990
|
-
#elif defined(HUF_FORCE_DECOMPRESS_X2)
|
991
|
-
(void)dtd;
|
992
|
-
assert(dtd.tableType == 1);
|
993
|
-
return HUF_decompress4X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0);
|
994
|
-
#else
|
995
|
-
return dtd.tableType ? HUF_decompress4X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0) :
|
996
|
-
HUF_decompress4X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0);
|
997
|
-
#endif
|
998
|
-
}
|
999
|
-
|
1000
1757
|
|
1001
1758
|
#if !defined(HUF_FORCE_DECOMPRESS_X1) && !defined(HUF_FORCE_DECOMPRESS_X2)
|
1002
1759
|
typedef struct { U32 tableTime; U32 decode256Time; } algo_time_t;
|
1003
|
-
static const algo_time_t algoTime[16 /* Quantization */][
|
1760
|
+
static const algo_time_t algoTime[16 /* Quantization */][2 /* single, double */] =
|
1004
1761
|
{
|
1005
1762
|
/* single, double, quad */
|
1006
|
-
{{0,0}, {1,1}
|
1007
|
-
{{0,0}, {1,1}
|
1008
|
-
{{
|
1009
|
-
{{
|
1010
|
-
{{
|
1011
|
-
{{
|
1012
|
-
{{
|
1013
|
-
{{
|
1014
|
-
{{
|
1015
|
-
{{
|
1016
|
-
{{
|
1017
|
-
{{
|
1018
|
-
{{
|
1019
|
-
{{
|
1020
|
-
{{
|
1021
|
-
{{
|
1763
|
+
{{0,0}, {1,1}}, /* Q==0 : impossible */
|
1764
|
+
{{0,0}, {1,1}}, /* Q==1 : impossible */
|
1765
|
+
{{ 150,216}, { 381,119}}, /* Q == 2 : 12-18% */
|
1766
|
+
{{ 170,205}, { 514,112}}, /* Q == 3 : 18-25% */
|
1767
|
+
{{ 177,199}, { 539,110}}, /* Q == 4 : 25-32% */
|
1768
|
+
{{ 197,194}, { 644,107}}, /* Q == 5 : 32-38% */
|
1769
|
+
{{ 221,192}, { 735,107}}, /* Q == 6 : 38-44% */
|
1770
|
+
{{ 256,189}, { 881,106}}, /* Q == 7 : 44-50% */
|
1771
|
+
{{ 359,188}, {1167,109}}, /* Q == 8 : 50-56% */
|
1772
|
+
{{ 582,187}, {1570,114}}, /* Q == 9 : 56-62% */
|
1773
|
+
{{ 688,187}, {1712,122}}, /* Q ==10 : 62-69% */
|
1774
|
+
{{ 825,186}, {1965,136}}, /* Q ==11 : 69-75% */
|
1775
|
+
{{ 976,185}, {2131,150}}, /* Q ==12 : 75-81% */
|
1776
|
+
{{1180,186}, {2070,175}}, /* Q ==13 : 81-87% */
|
1777
|
+
{{1377,185}, {1731,202}}, /* Q ==14 : 87-93% */
|
1778
|
+
{{1412,185}, {1695,202}}, /* Q ==15 : 93-99% */
|
1022
1779
|
};
|
1023
1780
|
#endif
|
1024
1781
|
|
@@ -1045,188 +1802,92 @@ U32 HUF_selectDecoder (size_t dstSize, size_t cSrcSize)
|
|
1045
1802
|
U32 const D256 = (U32)(dstSize >> 8);
|
1046
1803
|
U32 const DTime0 = algoTime[Q][0].tableTime + (algoTime[Q][0].decode256Time * D256);
|
1047
1804
|
U32 DTime1 = algoTime[Q][1].tableTime + (algoTime[Q][1].decode256Time * D256);
|
1048
|
-
DTime1 += DTime1 >>
|
1805
|
+
DTime1 += DTime1 >> 5; /* small advantage to algorithm using less memory, to reduce cache eviction */
|
1049
1806
|
return DTime1 < DTime0;
|
1050
1807
|
}
|
1051
1808
|
#endif
|
1052
1809
|
}
|
1053
1810
|
|
1054
|
-
|
1055
|
-
typedef size_t (*decompressionAlgo)(void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);
|
1056
|
-
|
1057
|
-
size_t HUF_decompress (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize)
|
1058
|
-
{
|
1059
|
-
#if !defined(HUF_FORCE_DECOMPRESS_X1) && !defined(HUF_FORCE_DECOMPRESS_X2)
|
1060
|
-
static const decompressionAlgo decompress[2] = { HUF_decompress4X1, HUF_decompress4X2 };
|
1061
|
-
#endif
|
1062
|
-
|
1063
|
-
/* validation checks */
|
1064
|
-
if (dstSize == 0) return ERROR(dstSize_tooSmall);
|
1065
|
-
if (cSrcSize > dstSize) return ERROR(corruption_detected); /* invalid */
|
1066
|
-
if (cSrcSize == dstSize) { memcpy(dst, cSrc, dstSize); return dstSize; } /* not compressed */
|
1067
|
-
if (cSrcSize == 1) { memset(dst, *(const BYTE*)cSrc, dstSize); return dstSize; } /* RLE */
|
1068
|
-
|
1069
|
-
{ U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize);
|
1070
|
-
#if defined(HUF_FORCE_DECOMPRESS_X1)
|
1071
|
-
(void)algoNb;
|
1072
|
-
assert(algoNb == 0);
|
1073
|
-
return HUF_decompress4X1(dst, dstSize, cSrc, cSrcSize);
|
1074
|
-
#elif defined(HUF_FORCE_DECOMPRESS_X2)
|
1075
|
-
(void)algoNb;
|
1076
|
-
assert(algoNb == 1);
|
1077
|
-
return HUF_decompress4X2(dst, dstSize, cSrc, cSrcSize);
|
1078
|
-
#else
|
1079
|
-
return decompress[algoNb](dst, dstSize, cSrc, cSrcSize);
|
1080
|
-
#endif
|
1081
|
-
}
|
1082
|
-
}
|
1083
|
-
|
1084
|
-
size_t HUF_decompress4X_DCtx (HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize)
|
1085
|
-
{
|
1086
|
-
/* validation checks */
|
1087
|
-
if (dstSize == 0) return ERROR(dstSize_tooSmall);
|
1088
|
-
if (cSrcSize > dstSize) return ERROR(corruption_detected); /* invalid */
|
1089
|
-
if (cSrcSize == dstSize) { memcpy(dst, cSrc, dstSize); return dstSize; } /* not compressed */
|
1090
|
-
if (cSrcSize == 1) { memset(dst, *(const BYTE*)cSrc, dstSize); return dstSize; } /* RLE */
|
1091
|
-
|
1092
|
-
{ U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize);
|
1093
|
-
#if defined(HUF_FORCE_DECOMPRESS_X1)
|
1094
|
-
(void)algoNb;
|
1095
|
-
assert(algoNb == 0);
|
1096
|
-
return HUF_decompress4X1_DCtx(dctx, dst, dstSize, cSrc, cSrcSize);
|
1097
|
-
#elif defined(HUF_FORCE_DECOMPRESS_X2)
|
1098
|
-
(void)algoNb;
|
1099
|
-
assert(algoNb == 1);
|
1100
|
-
return HUF_decompress4X2_DCtx(dctx, dst, dstSize, cSrc, cSrcSize);
|
1101
|
-
#else
|
1102
|
-
return algoNb ? HUF_decompress4X2_DCtx(dctx, dst, dstSize, cSrc, cSrcSize) :
|
1103
|
-
HUF_decompress4X1_DCtx(dctx, dst, dstSize, cSrc, cSrcSize) ;
|
1104
|
-
#endif
|
1105
|
-
}
|
1106
|
-
}
|
1107
|
-
|
1108
|
-
size_t HUF_decompress4X_hufOnly(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize)
|
1109
|
-
{
|
1110
|
-
U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32];
|
1111
|
-
return HUF_decompress4X_hufOnly_wksp(dctx, dst, dstSize, cSrc, cSrcSize,
|
1112
|
-
workSpace, sizeof(workSpace));
|
1113
|
-
}
|
1114
|
-
|
1115
|
-
|
1116
|
-
size_t HUF_decompress4X_hufOnly_wksp(HUF_DTable* dctx, void* dst,
|
1117
|
-
size_t dstSize, const void* cSrc,
|
1118
|
-
size_t cSrcSize, void* workSpace,
|
1119
|
-
size_t wkspSize)
|
1120
|
-
{
|
1121
|
-
/* validation checks */
|
1122
|
-
if (dstSize == 0) return ERROR(dstSize_tooSmall);
|
1123
|
-
if (cSrcSize == 0) return ERROR(corruption_detected);
|
1124
|
-
|
1125
|
-
{ U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize);
|
1126
|
-
#if defined(HUF_FORCE_DECOMPRESS_X1)
|
1127
|
-
(void)algoNb;
|
1128
|
-
assert(algoNb == 0);
|
1129
|
-
return HUF_decompress4X1_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize);
|
1130
|
-
#elif defined(HUF_FORCE_DECOMPRESS_X2)
|
1131
|
-
(void)algoNb;
|
1132
|
-
assert(algoNb == 1);
|
1133
|
-
return HUF_decompress4X2_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize);
|
1134
|
-
#else
|
1135
|
-
return algoNb ? HUF_decompress4X2_DCtx_wksp(dctx, dst, dstSize, cSrc,
|
1136
|
-
cSrcSize, workSpace, wkspSize):
|
1137
|
-
HUF_decompress4X1_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize);
|
1138
|
-
#endif
|
1139
|
-
}
|
1140
|
-
}
|
1141
|
-
|
1142
1811
|
size_t HUF_decompress1X_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize,
|
1143
1812
|
const void* cSrc, size_t cSrcSize,
|
1144
|
-
void* workSpace, size_t wkspSize)
|
1813
|
+
void* workSpace, size_t wkspSize, int flags)
|
1145
1814
|
{
|
1146
1815
|
/* validation checks */
|
1147
1816
|
if (dstSize == 0) return ERROR(dstSize_tooSmall);
|
1148
1817
|
if (cSrcSize > dstSize) return ERROR(corruption_detected); /* invalid */
|
1149
|
-
if (cSrcSize == dstSize) {
|
1150
|
-
if (cSrcSize == 1) {
|
1818
|
+
if (cSrcSize == dstSize) { ZSTD_memcpy(dst, cSrc, dstSize); return dstSize; } /* not compressed */
|
1819
|
+
if (cSrcSize == 1) { ZSTD_memset(dst, *(const BYTE*)cSrc, dstSize); return dstSize; } /* RLE */
|
1151
1820
|
|
1152
1821
|
{ U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize);
|
1153
1822
|
#if defined(HUF_FORCE_DECOMPRESS_X1)
|
1154
1823
|
(void)algoNb;
|
1155
1824
|
assert(algoNb == 0);
|
1156
1825
|
return HUF_decompress1X1_DCtx_wksp(dctx, dst, dstSize, cSrc,
|
1157
|
-
cSrcSize, workSpace, wkspSize);
|
1826
|
+
cSrcSize, workSpace, wkspSize, flags);
|
1158
1827
|
#elif defined(HUF_FORCE_DECOMPRESS_X2)
|
1159
1828
|
(void)algoNb;
|
1160
1829
|
assert(algoNb == 1);
|
1161
1830
|
return HUF_decompress1X2_DCtx_wksp(dctx, dst, dstSize, cSrc,
|
1162
|
-
cSrcSize, workSpace, wkspSize);
|
1831
|
+
cSrcSize, workSpace, wkspSize, flags);
|
1163
1832
|
#else
|
1164
1833
|
return algoNb ? HUF_decompress1X2_DCtx_wksp(dctx, dst, dstSize, cSrc,
|
1165
|
-
cSrcSize, workSpace, wkspSize):
|
1834
|
+
cSrcSize, workSpace, wkspSize, flags):
|
1166
1835
|
HUF_decompress1X1_DCtx_wksp(dctx, dst, dstSize, cSrc,
|
1167
|
-
cSrcSize, workSpace, wkspSize);
|
1836
|
+
cSrcSize, workSpace, wkspSize, flags);
|
1168
1837
|
#endif
|
1169
1838
|
}
|
1170
1839
|
}
|
1171
1840
|
|
1172
|
-
size_t HUF_decompress1X_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize,
|
1173
|
-
const void* cSrc, size_t cSrcSize)
|
1174
|
-
{
|
1175
|
-
U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32];
|
1176
|
-
return HUF_decompress1X_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize,
|
1177
|
-
workSpace, sizeof(workSpace));
|
1178
|
-
}
|
1179
1841
|
|
1180
|
-
|
1181
|
-
size_t HUF_decompress1X_usingDTable_bmi2(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable, int bmi2)
|
1842
|
+
size_t HUF_decompress1X_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable, int flags)
|
1182
1843
|
{
|
1183
1844
|
DTableDesc const dtd = HUF_getDTableDesc(DTable);
|
1184
1845
|
#if defined(HUF_FORCE_DECOMPRESS_X1)
|
1185
1846
|
(void)dtd;
|
1186
1847
|
assert(dtd.tableType == 0);
|
1187
|
-
return HUF_decompress1X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable,
|
1848
|
+
return HUF_decompress1X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, flags);
|
1188
1849
|
#elif defined(HUF_FORCE_DECOMPRESS_X2)
|
1189
1850
|
(void)dtd;
|
1190
1851
|
assert(dtd.tableType == 1);
|
1191
|
-
return HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable,
|
1852
|
+
return HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, flags);
|
1192
1853
|
#else
|
1193
|
-
return dtd.tableType ? HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable,
|
1194
|
-
HUF_decompress1X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable,
|
1854
|
+
return dtd.tableType ? HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, flags) :
|
1855
|
+
HUF_decompress1X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, flags);
|
1195
1856
|
#endif
|
1196
1857
|
}
|
1197
1858
|
|
1198
1859
|
#ifndef HUF_FORCE_DECOMPRESS_X2
|
1199
|
-
size_t
|
1860
|
+
size_t HUF_decompress1X1_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int flags)
|
1200
1861
|
{
|
1201
1862
|
const BYTE* ip = (const BYTE*) cSrc;
|
1202
1863
|
|
1203
|
-
size_t const hSize = HUF_readDTableX1_wksp(dctx, cSrc, cSrcSize, workSpace, wkspSize);
|
1864
|
+
size_t const hSize = HUF_readDTableX1_wksp(dctx, cSrc, cSrcSize, workSpace, wkspSize, flags);
|
1204
1865
|
if (HUF_isError(hSize)) return hSize;
|
1205
1866
|
if (hSize >= cSrcSize) return ERROR(srcSize_wrong);
|
1206
1867
|
ip += hSize; cSrcSize -= hSize;
|
1207
1868
|
|
1208
|
-
return HUF_decompress1X1_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx,
|
1869
|
+
return HUF_decompress1X1_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx, flags);
|
1209
1870
|
}
|
1210
1871
|
#endif
|
1211
1872
|
|
1212
|
-
size_t
|
1873
|
+
size_t HUF_decompress4X_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable, int flags)
|
1213
1874
|
{
|
1214
1875
|
DTableDesc const dtd = HUF_getDTableDesc(DTable);
|
1215
1876
|
#if defined(HUF_FORCE_DECOMPRESS_X1)
|
1216
1877
|
(void)dtd;
|
1217
1878
|
assert(dtd.tableType == 0);
|
1218
|
-
return HUF_decompress4X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable,
|
1879
|
+
return HUF_decompress4X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, flags);
|
1219
1880
|
#elif defined(HUF_FORCE_DECOMPRESS_X2)
|
1220
1881
|
(void)dtd;
|
1221
1882
|
assert(dtd.tableType == 1);
|
1222
|
-
return HUF_decompress4X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable,
|
1883
|
+
return HUF_decompress4X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, flags);
|
1223
1884
|
#else
|
1224
|
-
return dtd.tableType ? HUF_decompress4X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable,
|
1225
|
-
HUF_decompress4X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable,
|
1885
|
+
return dtd.tableType ? HUF_decompress4X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, flags) :
|
1886
|
+
HUF_decompress4X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, flags);
|
1226
1887
|
#endif
|
1227
1888
|
}
|
1228
1889
|
|
1229
|
-
size_t
|
1890
|
+
size_t HUF_decompress4X_hufOnly_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int flags)
|
1230
1891
|
{
|
1231
1892
|
/* validation checks */
|
1232
1893
|
if (dstSize == 0) return ERROR(dstSize_tooSmall);
|
@@ -1236,16 +1897,16 @@ size_t HUF_decompress4X_hufOnly_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t ds
|
|
1236
1897
|
#if defined(HUF_FORCE_DECOMPRESS_X1)
|
1237
1898
|
(void)algoNb;
|
1238
1899
|
assert(algoNb == 0);
|
1239
|
-
return
|
1900
|
+
return HUF_decompress4X1_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, flags);
|
1240
1901
|
#elif defined(HUF_FORCE_DECOMPRESS_X2)
|
1241
1902
|
(void)algoNb;
|
1242
1903
|
assert(algoNb == 1);
|
1243
|
-
return
|
1904
|
+
return HUF_decompress4X2_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, flags);
|
1244
1905
|
#else
|
1245
|
-
return algoNb ?
|
1246
|
-
|
1906
|
+
return algoNb ? HUF_decompress4X2_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, flags) :
|
1907
|
+
HUF_decompress4X1_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, flags);
|
1247
1908
|
#endif
|
1248
1909
|
}
|
1249
1910
|
}
|
1250
1911
|
|
1251
|
-
}
|
1912
|
+
} // namespace duckdb_zstd
|