duckdb 1.1.4-dev2.0 → 1.1.4-dev9.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.
Files changed (1747) hide show
  1. package/.github/workflows/NodeJS.yml +5 -54
  2. package/binding.gyp +73 -52
  3. package/package.json +1 -1
  4. package/src/duckdb/{src → extension}/core_functions/aggregate/algebraic/avg.cpp +2 -2
  5. package/src/duckdb/{src → extension}/core_functions/aggregate/algebraic/corr.cpp +4 -4
  6. package/src/duckdb/{src → extension}/core_functions/aggregate/algebraic/covar.cpp +2 -2
  7. package/src/duckdb/{src → extension}/core_functions/aggregate/algebraic/stddev.cpp +2 -2
  8. package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/approx_count.cpp +1 -1
  9. package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/arg_min_max.cpp +66 -18
  10. package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/bitagg.cpp +1 -1
  11. package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/bitstring_agg.cpp +5 -7
  12. package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/bool.cpp +3 -1
  13. package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/kurtosis.cpp +1 -1
  14. package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/product.cpp +1 -1
  15. package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/skew.cpp +2 -2
  16. package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/string_agg.cpp +1 -1
  17. package/src/duckdb/{src → extension}/core_functions/aggregate/distributive/sum.cpp +13 -2
  18. package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/approx_top_k.cpp +3 -3
  19. package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/approximate_quantile.cpp +51 -15
  20. package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/mad.cpp +25 -10
  21. package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/mode.cpp +215 -71
  22. package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/quantile.cpp +58 -31
  23. package/src/duckdb/{src → extension}/core_functions/aggregate/holistic/reservoir_quantile.cpp +2 -2
  24. package/src/duckdb/{src → extension}/core_functions/aggregate/nested/binned_histogram.cpp +9 -4
  25. package/src/duckdb/{src → extension}/core_functions/aggregate/nested/histogram.cpp +4 -2
  26. package/src/duckdb/{src → extension}/core_functions/aggregate/nested/list.cpp +1 -1
  27. package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_avg.cpp +1 -1
  28. package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_count.cpp +2 -2
  29. package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_intercept.cpp +6 -2
  30. package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_r2.cpp +2 -2
  31. package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_slope.cpp +2 -2
  32. package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_sxx_syy.cpp +2 -2
  33. package/src/duckdb/{src → extension}/core_functions/aggregate/regression/regr_sxy.cpp +3 -3
  34. package/src/duckdb/extension/core_functions/core_functions_extension.cpp +85 -0
  35. package/src/duckdb/{src → extension}/core_functions/function_list.cpp +30 -51
  36. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/algebraic/corr.hpp +3 -7
  37. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/algebraic_functions.hpp +1 -1
  38. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/distributive_functions.hpp +16 -21
  39. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/histogram_helpers.hpp +1 -1
  40. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/holistic_functions.hpp +1 -1
  41. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/nested_functions.hpp +1 -1
  42. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/quantile_helpers.hpp +2 -2
  43. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/quantile_sort_tree.hpp +140 -58
  44. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/quantile_state.hpp +50 -43
  45. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/regression/regr_count.hpp +2 -2
  46. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/regression/regr_slope.hpp +3 -7
  47. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/regression_functions.hpp +1 -1
  48. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/array_functions.hpp +1 -1
  49. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/bit_functions.hpp +1 -1
  50. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/blob_functions.hpp +1 -10
  51. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/date_functions.hpp +22 -55
  52. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/debug_functions.hpp +1 -1
  53. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/enum_functions.hpp +1 -1
  54. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/generic_functions.hpp +1 -10
  55. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/list_functions.hpp +4 -4
  56. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/map_functions.hpp +1 -10
  57. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/math_functions.hpp +1 -1
  58. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/operators_functions.hpp +1 -1
  59. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/random_functions.hpp +1 -1
  60. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/string_functions.hpp +10 -103
  61. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/struct_functions.hpp +1 -19
  62. package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/union_functions.hpp +1 -1
  63. package/src/duckdb/extension/core_functions/include/core_functions_extension.hpp +22 -0
  64. package/src/duckdb/{src → extension}/core_functions/lambda_functions.cpp +1 -1
  65. package/src/duckdb/{src → extension}/core_functions/scalar/array/array_functions.cpp +11 -4
  66. package/src/duckdb/{src → extension}/core_functions/scalar/array/array_value.cpp +2 -2
  67. package/src/duckdb/{src → extension}/core_functions/scalar/bit/bitstring.cpp +12 -5
  68. package/src/duckdb/{src → extension}/core_functions/scalar/blob/base64.cpp +4 -2
  69. package/src/duckdb/{src → extension}/core_functions/scalar/blob/encode.cpp +4 -2
  70. package/src/duckdb/{src → extension}/core_functions/scalar/date/age.cpp +9 -3
  71. package/src/duckdb/extension/core_functions/scalar/date/current.cpp +29 -0
  72. package/src/duckdb/{src → extension}/core_functions/scalar/date/date_diff.cpp +1 -1
  73. package/src/duckdb/{src → extension}/core_functions/scalar/date/date_part.cpp +42 -9
  74. package/src/duckdb/{src → extension}/core_functions/scalar/date/date_sub.cpp +1 -1
  75. package/src/duckdb/{src → extension}/core_functions/scalar/date/date_trunc.cpp +4 -1
  76. package/src/duckdb/{src → extension}/core_functions/scalar/date/epoch.cpp +19 -3
  77. package/src/duckdb/{src → extension}/core_functions/scalar/date/make_date.cpp +40 -5
  78. package/src/duckdb/{src → extension}/core_functions/scalar/date/time_bucket.cpp +4 -1
  79. package/src/duckdb/{src → extension}/core_functions/scalar/date/to_interval.cpp +54 -28
  80. package/src/duckdb/{src → extension}/core_functions/scalar/debug/vector_type.cpp +1 -1
  81. package/src/duckdb/{src → extension}/core_functions/scalar/enum/enum_functions.cpp +2 -7
  82. package/src/duckdb/{src → extension}/core_functions/scalar/generic/alias.cpp +2 -2
  83. package/src/duckdb/{src/function → extension/core_functions}/scalar/generic/binning.cpp +4 -3
  84. package/src/duckdb/{src → extension}/core_functions/scalar/generic/can_implicitly_cast.cpp +1 -1
  85. package/src/duckdb/{src → extension}/core_functions/scalar/generic/current_setting.cpp +1 -1
  86. package/src/duckdb/{src → extension}/core_functions/scalar/generic/hash.cpp +1 -1
  87. package/src/duckdb/{src → extension}/core_functions/scalar/generic/least.cpp +30 -10
  88. package/src/duckdb/{src → extension}/core_functions/scalar/generic/stats.cpp +1 -1
  89. package/src/duckdb/{src → extension}/core_functions/scalar/generic/system_functions.cpp +1 -1
  90. package/src/duckdb/{src → extension}/core_functions/scalar/generic/typeof.cpp +1 -1
  91. package/src/duckdb/{src → extension}/core_functions/scalar/list/array_slice.cpp +93 -88
  92. package/src/duckdb/{src → extension}/core_functions/scalar/list/flatten.cpp +1 -1
  93. package/src/duckdb/{src → extension}/core_functions/scalar/list/list_aggregates.cpp +7 -3
  94. package/src/duckdb/{src → extension}/core_functions/scalar/list/list_distance.cpp +8 -2
  95. package/src/duckdb/{src → extension}/core_functions/scalar/list/list_filter.cpp +3 -3
  96. package/src/duckdb/{src → extension}/core_functions/scalar/list/list_has_any_or_all.cpp +3 -3
  97. package/src/duckdb/{src → extension}/core_functions/scalar/list/list_reduce.cpp +5 -5
  98. package/src/duckdb/{src → extension}/core_functions/scalar/list/list_sort.cpp +1 -1
  99. package/src/duckdb/{src → extension}/core_functions/scalar/list/list_transform.cpp +3 -3
  100. package/src/duckdb/{src → extension}/core_functions/scalar/list/list_value.cpp +3 -3
  101. package/src/duckdb/{src → extension}/core_functions/scalar/list/range.cpp +7 -1
  102. package/src/duckdb/{src → extension}/core_functions/scalar/map/cardinality.cpp +1 -1
  103. package/src/duckdb/{src → extension}/core_functions/scalar/map/map.cpp +5 -4
  104. package/src/duckdb/{src → extension}/core_functions/scalar/map/map_concat.cpp +1 -1
  105. package/src/duckdb/{src → extension}/core_functions/scalar/map/map_entries.cpp +1 -1
  106. package/src/duckdb/{src → extension}/core_functions/scalar/map/map_extract.cpp +13 -25
  107. package/src/duckdb/{src → extension}/core_functions/scalar/map/map_from_entries.cpp +2 -1
  108. package/src/duckdb/{src → extension}/core_functions/scalar/map/map_keys_values.cpp +11 -9
  109. package/src/duckdb/{src → extension}/core_functions/scalar/math/numeric.cpp +83 -37
  110. package/src/duckdb/{src → extension}/core_functions/scalar/operators/bitwise.cpp +19 -1
  111. package/src/duckdb/{src → extension}/core_functions/scalar/random/random.cpp +4 -3
  112. package/src/duckdb/{src → extension}/core_functions/scalar/random/setseed.cpp +2 -1
  113. package/src/duckdb/{src → extension}/core_functions/scalar/string/ascii.cpp +1 -1
  114. package/src/duckdb/{src → extension}/core_functions/scalar/string/bar.cpp +6 -4
  115. package/src/duckdb/{src → extension}/core_functions/scalar/string/chr.cpp +1 -1
  116. package/src/duckdb/{src → extension}/core_functions/scalar/string/damerau_levenshtein.cpp +1 -1
  117. package/src/duckdb/{src → extension}/core_functions/scalar/string/format_bytes.cpp +1 -1
  118. package/src/duckdb/{src → extension}/core_functions/scalar/string/hamming.cpp +1 -1
  119. package/src/duckdb/{src → extension}/core_functions/scalar/string/hex.cpp +7 -3
  120. package/src/duckdb/{src → extension}/core_functions/scalar/string/instr.cpp +4 -4
  121. package/src/duckdb/{src → extension}/core_functions/scalar/string/jaccard.cpp +1 -1
  122. package/src/duckdb/extension/core_functions/scalar/string/jaro_winkler.cpp +112 -0
  123. package/src/duckdb/{src → extension}/core_functions/scalar/string/left_right.cpp +6 -6
  124. package/src/duckdb/{src → extension}/core_functions/scalar/string/levenshtein.cpp +1 -1
  125. package/src/duckdb/{src → extension}/core_functions/scalar/string/pad.cpp +9 -5
  126. package/src/duckdb/{src → extension}/core_functions/scalar/string/parse_path.cpp +4 -4
  127. package/src/duckdb/{src → extension}/core_functions/scalar/string/printf.cpp +3 -1
  128. package/src/duckdb/{src → extension}/core_functions/scalar/string/repeat.cpp +4 -1
  129. package/src/duckdb/{src → extension}/core_functions/scalar/string/replace.cpp +1 -1
  130. package/src/duckdb/{src → extension}/core_functions/scalar/string/reverse.cpp +1 -1
  131. package/src/duckdb/{src → extension}/core_functions/scalar/string/starts_with.cpp +5 -3
  132. package/src/duckdb/{src → extension}/core_functions/scalar/string/to_base.cpp +1 -1
  133. package/src/duckdb/{src → extension}/core_functions/scalar/string/translate.cpp +1 -1
  134. package/src/duckdb/{src → extension}/core_functions/scalar/string/trim.cpp +1 -1
  135. package/src/duckdb/{src → extension}/core_functions/scalar/string/unicode.cpp +1 -1
  136. package/src/duckdb/{src → extension}/core_functions/scalar/string/url_encode.cpp +1 -1
  137. package/src/duckdb/{src → extension}/core_functions/scalar/struct/struct_insert.cpp +25 -31
  138. package/src/duckdb/{src → extension}/core_functions/scalar/union/union_extract.cpp +1 -1
  139. package/src/duckdb/{src → extension}/core_functions/scalar/union/union_tag.cpp +1 -1
  140. package/src/duckdb/{src → extension}/core_functions/scalar/union/union_value.cpp +3 -3
  141. package/src/duckdb/extension/icu/icu-dateadd.cpp +16 -11
  142. package/src/duckdb/extension/icu/icu-datefunc.cpp +2 -2
  143. package/src/duckdb/extension/icu/icu-datepart.cpp +8 -5
  144. package/src/duckdb/extension/icu/icu-datesub.cpp +2 -2
  145. package/src/duckdb/extension/icu/icu-datetrunc.cpp +8 -1
  146. package/src/duckdb/extension/icu/icu-list-range.cpp +2 -2
  147. package/src/duckdb/extension/icu/icu-makedate.cpp +18 -7
  148. package/src/duckdb/extension/icu/icu-strptime.cpp +9 -3
  149. package/src/duckdb/extension/icu/icu-table-range.cpp +2 -2
  150. package/src/duckdb/extension/icu/icu-timebucket.cpp +4 -1
  151. package/src/duckdb/extension/icu/icu-timezone.cpp +67 -1
  152. package/src/duckdb/extension/icu/icu_extension.cpp +60 -5
  153. package/src/duckdb/extension/icu/include/icu-datefunc.hpp +2 -1
  154. package/src/duckdb/extension/icu/third_party/icu/common/bytestriebuilder.cpp +1 -1
  155. package/src/duckdb/extension/icu/third_party/icu/common/dtintrv.cpp +1 -1
  156. package/src/duckdb/extension/icu/third_party/icu/common/filteredbrk.cpp +1 -1
  157. package/src/duckdb/extension/icu/third_party/icu/common/locid.cpp +1 -1
  158. package/src/duckdb/extension/icu/third_party/icu/common/lsr.cpp +1 -1
  159. package/src/duckdb/extension/icu/third_party/icu/common/lsr.h +2 -2
  160. package/src/duckdb/extension/icu/third_party/icu/common/messagepattern.cpp +2 -2
  161. package/src/duckdb/extension/icu/third_party/icu/common/normlzr.cpp +1 -1
  162. package/src/duckdb/extension/icu/third_party/icu/common/rbbinode.h +1 -1
  163. package/src/duckdb/extension/icu/third_party/icu/common/schriter.cpp +1 -1
  164. package/src/duckdb/extension/icu/third_party/icu/common/stringtriebuilder.cpp +8 -8
  165. package/src/duckdb/extension/icu/third_party/icu/common/ucharstriebuilder.cpp +1 -1
  166. package/src/duckdb/extension/icu/third_party/icu/common/uchriter.cpp +1 -1
  167. package/src/duckdb/extension/icu/third_party/icu/common/unicode/brkiter.h +2 -2
  168. package/src/duckdb/extension/icu/third_party/icu/common/unicode/bytestriebuilder.h +1 -1
  169. package/src/duckdb/extension/icu/third_party/icu/common/unicode/chariter.h +3 -3
  170. package/src/duckdb/extension/icu/third_party/icu/common/unicode/dtintrv.h +3 -3
  171. package/src/duckdb/extension/icu/third_party/icu/common/unicode/locid.h +3 -3
  172. package/src/duckdb/extension/icu/third_party/icu/common/unicode/messagepattern.h +4 -4
  173. package/src/duckdb/extension/icu/third_party/icu/common/unicode/normlzr.h +3 -3
  174. package/src/duckdb/extension/icu/third_party/icu/common/unicode/parsepos.h +4 -4
  175. package/src/duckdb/extension/icu/third_party/icu/common/unicode/rbbi.h +2 -2
  176. package/src/duckdb/extension/icu/third_party/icu/common/unicode/schriter.h +1 -1
  177. package/src/duckdb/extension/icu/third_party/icu/common/unicode/strenum.h +2 -2
  178. package/src/duckdb/extension/icu/third_party/icu/common/unicode/stringpiece.h +1 -1
  179. package/src/duckdb/extension/icu/third_party/icu/common/unicode/stringtriebuilder.h +9 -9
  180. package/src/duckdb/extension/icu/third_party/icu/common/unicode/ucharstriebuilder.h +1 -1
  181. package/src/duckdb/extension/icu/third_party/icu/common/unicode/uchriter.h +1 -1
  182. package/src/duckdb/extension/icu/third_party/icu/common/unicode/uniset.h +3 -3
  183. package/src/duckdb/extension/icu/third_party/icu/common/unicode/unistr.h +12 -12
  184. package/src/duckdb/extension/icu/third_party/icu/common/unicode/uobject.h +2 -2
  185. package/src/duckdb/extension/icu/third_party/icu/common/unifiedcache.h +4 -4
  186. package/src/duckdb/extension/icu/third_party/icu/common/uniset.cpp +1 -1
  187. package/src/duckdb/extension/icu/third_party/icu/common/ustr_titlecase_brkiter.cpp +1 -1
  188. package/src/duckdb/extension/icu/third_party/icu/common/ustrenum.cpp +2 -2
  189. package/src/duckdb/extension/icu/third_party/icu/common/uvector.cpp +1 -1
  190. package/src/duckdb/extension/icu/third_party/icu/common/uvector.h +3 -3
  191. package/src/duckdb/extension/icu/third_party/icu/common/uvectr32.cpp +1 -1
  192. package/src/duckdb/extension/icu/third_party/icu/common/uvectr32.h +3 -3
  193. package/src/duckdb/extension/icu/third_party/icu/common/uvectr64.cpp +1 -1
  194. package/src/duckdb/extension/icu/third_party/icu/common/uvectr64.h +3 -3
  195. package/src/duckdb/extension/icu/third_party/icu/i18n/alphaindex.cpp +2 -2
  196. package/src/duckdb/extension/icu/third_party/icu/i18n/calendar.cpp +1 -1
  197. package/src/duckdb/extension/icu/third_party/icu/i18n/choicfmt.cpp +1 -1
  198. package/src/duckdb/extension/icu/third_party/icu/i18n/coleitr.cpp +2 -2
  199. package/src/duckdb/extension/icu/third_party/icu/i18n/coll.cpp +2 -2
  200. package/src/duckdb/extension/icu/third_party/icu/i18n/collationiterator.cpp +1 -1
  201. package/src/duckdb/extension/icu/third_party/icu/i18n/collationiterator.h +2 -2
  202. package/src/duckdb/extension/icu/third_party/icu/i18n/collationsettings.cpp +1 -1
  203. package/src/duckdb/extension/icu/third_party/icu/i18n/collationsettings.h +2 -2
  204. package/src/duckdb/extension/icu/third_party/icu/i18n/currpinf.cpp +1 -1
  205. package/src/duckdb/extension/icu/third_party/icu/i18n/datefmt.cpp +2 -2
  206. package/src/duckdb/extension/icu/third_party/icu/i18n/dcfmtsym.cpp +1 -1
  207. package/src/duckdb/extension/icu/third_party/icu/i18n/decimfmt.cpp +1 -1
  208. package/src/duckdb/extension/icu/third_party/icu/i18n/dtfmtsym.cpp +1 -1
  209. package/src/duckdb/extension/icu/third_party/icu/i18n/dtitvfmt.cpp +1 -1
  210. package/src/duckdb/extension/icu/third_party/icu/i18n/dtitvinf.cpp +1 -1
  211. package/src/duckdb/extension/icu/third_party/icu/i18n/dtptngen.cpp +2 -2
  212. package/src/duckdb/extension/icu/third_party/icu/i18n/dtptngen_impl.h +4 -4
  213. package/src/duckdb/extension/icu/third_party/icu/i18n/dtrule.cpp +2 -2
  214. package/src/duckdb/extension/icu/third_party/icu/i18n/fmtable.cpp +1 -1
  215. package/src/duckdb/extension/icu/third_party/icu/i18n/format.cpp +1 -1
  216. package/src/duckdb/extension/icu/third_party/icu/i18n/fpositer.cpp +1 -1
  217. package/src/duckdb/extension/icu/third_party/icu/i18n/measfmt.cpp +1 -1
  218. package/src/duckdb/extension/icu/third_party/icu/i18n/measunit.cpp +1 -1
  219. package/src/duckdb/extension/icu/third_party/icu/i18n/measure.cpp +1 -1
  220. package/src/duckdb/extension/icu/third_party/icu/i18n/msgfmt.cpp +2 -2
  221. package/src/duckdb/extension/icu/third_party/icu/i18n/nfrs.cpp +1 -1
  222. package/src/duckdb/extension/icu/third_party/icu/i18n/nfrs.h +2 -2
  223. package/src/duckdb/extension/icu/third_party/icu/i18n/nfrule.cpp +1 -1
  224. package/src/duckdb/extension/icu/third_party/icu/i18n/nfrule.h +2 -2
  225. package/src/duckdb/extension/icu/third_party/icu/i18n/nfsubs.cpp +9 -9
  226. package/src/duckdb/extension/icu/third_party/icu/i18n/nfsubs.h +2 -2
  227. package/src/duckdb/extension/icu/third_party/icu/i18n/number_asformat.cpp +1 -1
  228. package/src/duckdb/extension/icu/third_party/icu/i18n/number_asformat.h +1 -1
  229. package/src/duckdb/extension/icu/third_party/icu/i18n/numfmt.cpp +1 -1
  230. package/src/duckdb/extension/icu/third_party/icu/i18n/olsontz.cpp +1 -1
  231. package/src/duckdb/extension/icu/third_party/icu/i18n/olsontz.h +1 -1
  232. package/src/duckdb/extension/icu/third_party/icu/i18n/plurfmt.cpp +2 -2
  233. package/src/duckdb/extension/icu/third_party/icu/i18n/plurrule.cpp +1 -1
  234. package/src/duckdb/extension/icu/third_party/icu/i18n/rbnf.cpp +4 -4
  235. package/src/duckdb/extension/icu/third_party/icu/i18n/rbtz.cpp +2 -2
  236. package/src/duckdb/extension/icu/third_party/icu/i18n/region.cpp +2 -2
  237. package/src/duckdb/extension/icu/third_party/icu/i18n/reldtfmt.cpp +1 -1
  238. package/src/duckdb/extension/icu/third_party/icu/i18n/reldtfmt.h +1 -1
  239. package/src/duckdb/extension/icu/third_party/icu/i18n/rulebasedcollator.cpp +1 -1
  240. package/src/duckdb/extension/icu/third_party/icu/i18n/selfmt.cpp +2 -2
  241. package/src/duckdb/extension/icu/third_party/icu/i18n/simpletz.cpp +1 -1
  242. package/src/duckdb/extension/icu/third_party/icu/i18n/smpdtfmt.cpp +1 -1
  243. package/src/duckdb/extension/icu/third_party/icu/i18n/sortkey.cpp +1 -1
  244. package/src/duckdb/extension/icu/third_party/icu/i18n/timezone.cpp +1 -1
  245. package/src/duckdb/extension/icu/third_party/icu/i18n/tmutamt.cpp +1 -1
  246. package/src/duckdb/extension/icu/third_party/icu/i18n/tzfmt.cpp +1 -1
  247. package/src/duckdb/extension/icu/third_party/icu/i18n/tzgnames.cpp +1 -1
  248. package/src/duckdb/extension/icu/third_party/icu/i18n/tzgnames.h +2 -2
  249. package/src/duckdb/extension/icu/third_party/icu/i18n/tznames.cpp +3 -3
  250. package/src/duckdb/extension/icu/third_party/icu/i18n/tznames_impl.cpp +2 -2
  251. package/src/duckdb/extension/icu/third_party/icu/i18n/tznames_impl.h +2 -2
  252. package/src/duckdb/extension/icu/third_party/icu/i18n/tzrule.cpp +8 -8
  253. package/src/duckdb/extension/icu/third_party/icu/i18n/tztrans.cpp +2 -2
  254. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/alphaindex.h +2 -2
  255. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/calendar.h +2 -2
  256. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/choicfmt.h +1 -1
  257. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/coleitr.h +2 -2
  258. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/coll.h +2 -2
  259. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/currpinf.h +3 -3
  260. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/datefmt.h +1 -1
  261. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dcfmtsym.h +2 -2
  262. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/decimfmt.h +1 -1
  263. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dtfmtsym.h +2 -2
  264. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dtitvfmt.h +3 -3
  265. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dtitvinf.h +3 -3
  266. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dtptngen.h +2 -2
  267. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/dtrule.h +2 -2
  268. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/fieldpos.h +4 -4
  269. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/fmtable.h +2 -2
  270. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/format.h +2 -2
  271. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/fpositer.h +2 -2
  272. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/measfmt.h +1 -1
  273. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/measunit.h +2 -2
  274. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/measure.h +1 -1
  275. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/msgfmt.h +2 -2
  276. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/numfmt.h +1 -1
  277. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/plurfmt.h +2 -2
  278. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/plurrule.h +2 -2
  279. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/rbnf.h +1 -1
  280. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/rbtz.h +2 -2
  281. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/region.h +2 -2
  282. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/search.h +2 -2
  283. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/selfmt.h +2 -2
  284. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/simpletz.h +1 -1
  285. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/smpdtfmt.h +1 -1
  286. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/sortkey.h +3 -3
  287. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/stsearch.h +1 -1
  288. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tblcoll.h +1 -1
  289. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/timezone.h +2 -2
  290. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tmutamt.h +3 -3
  291. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tmutfmt.h +2 -2
  292. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tzfmt.h +1 -1
  293. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tznames.h +2 -2
  294. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tzrule.h +8 -8
  295. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/tztrans.h +2 -2
  296. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/vtzone.h +2 -2
  297. package/src/duckdb/extension/icu/third_party/icu/i18n/utf16collationiterator.cpp +2 -2
  298. package/src/duckdb/extension/icu/third_party/icu/i18n/utf16collationiterator.h +2 -2
  299. package/src/duckdb/extension/icu/third_party/icu/i18n/vtzone.cpp +2 -2
  300. package/src/duckdb/extension/json/buffered_json_reader.cpp +6 -1
  301. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +2 -0
  302. package/src/duckdb/extension/json/include/json_common.hpp +14 -10
  303. package/src/duckdb/extension/json/include/json_scan.hpp +48 -7
  304. package/src/duckdb/extension/json/include/json_structure.hpp +2 -1
  305. package/src/duckdb/extension/json/include/json_transform.hpp +5 -2
  306. package/src/duckdb/extension/json/json_functions/copy_json.cpp +1 -1
  307. package/src/duckdb/extension/json/json_functions/json_create.cpp +57 -20
  308. package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +7 -6
  309. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +6 -5
  310. package/src/duckdb/extension/json/json_functions/json_structure.cpp +20 -17
  311. package/src/duckdb/extension/json/json_functions/json_transform.cpp +48 -17
  312. package/src/duckdb/extension/json/json_functions/read_json.cpp +83 -34
  313. package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +3 -3
  314. package/src/duckdb/extension/json/json_functions.cpp +14 -16
  315. package/src/duckdb/extension/json/json_scan.cpp +36 -16
  316. package/src/duckdb/extension/json/json_serializer.cpp +1 -1
  317. package/src/duckdb/extension/json/serialize_json.cpp +2 -2
  318. package/src/duckdb/extension/parquet/column_reader.cpp +136 -116
  319. package/src/duckdb/extension/parquet/column_writer.cpp +870 -604
  320. package/src/duckdb/extension/parquet/geo_parquet.cpp +4 -5
  321. package/src/duckdb/extension/parquet/include/boolean_column_reader.hpp +0 -4
  322. package/src/duckdb/extension/parquet/include/column_reader.hpp +24 -19
  323. package/src/duckdb/extension/parquet/include/column_writer.hpp +7 -5
  324. package/src/duckdb/extension/parquet/include/decode_utils.hpp +138 -18
  325. package/src/duckdb/extension/parquet/include/geo_parquet.hpp +4 -3
  326. package/src/duckdb/extension/parquet/include/null_column_reader.hpp +1 -14
  327. package/src/duckdb/extension/parquet/include/parquet_bss_encoder.hpp +45 -0
  328. package/src/duckdb/extension/parquet/include/parquet_crypto.hpp +1 -1
  329. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +101 -90
  330. package/src/duckdb/extension/parquet/include/parquet_dbp_encoder.hpp +179 -0
  331. package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +2 -3
  332. package/src/duckdb/extension/parquet/include/parquet_dlba_encoder.hpp +48 -0
  333. package/src/duckdb/extension/parquet/include/parquet_extension.hpp +8 -0
  334. package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
  335. package/src/duckdb/extension/parquet/include/parquet_metadata.hpp +5 -0
  336. package/src/duckdb/extension/parquet/include/parquet_reader.hpp +22 -18
  337. package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +1 -5
  338. package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +87 -3
  339. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +30 -16
  340. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +1 -0
  341. package/src/duckdb/extension/parquet/include/string_column_reader.hpp +0 -8
  342. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
  343. package/src/duckdb/extension/parquet/include/templated_column_reader.hpp +1 -42
  344. package/src/duckdb/extension/parquet/include/thrift_tools.hpp +13 -1
  345. package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +4 -0
  346. package/src/duckdb/extension/parquet/parquet_extension.cpp +240 -197
  347. package/src/duckdb/extension/parquet/parquet_metadata.cpp +138 -6
  348. package/src/duckdb/extension/parquet/parquet_reader.cpp +155 -79
  349. package/src/duckdb/extension/parquet/parquet_statistics.cpp +258 -38
  350. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +17 -3
  351. package/src/duckdb/extension/parquet/parquet_writer.cpp +65 -34
  352. package/src/duckdb/extension/parquet/serialize_parquet.cpp +4 -0
  353. package/src/duckdb/extension/parquet/zstd_file_system.cpp +13 -0
  354. package/src/duckdb/src/catalog/catalog.cpp +272 -97
  355. package/src/duckdb/src/catalog/catalog_entry/duck_index_entry.cpp +9 -4
  356. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +8 -0
  357. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +145 -95
  358. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +9 -3
  359. package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +15 -0
  360. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +40 -24
  361. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +1 -1
  362. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +2 -2
  363. package/src/duckdb/src/catalog/catalog_entry.cpp +3 -0
  364. package/src/duckdb/src/catalog/catalog_entry_retriever.cpp +60 -5
  365. package/src/duckdb/src/catalog/catalog_search_path.cpp +27 -14
  366. package/src/duckdb/src/catalog/catalog_set.cpp +75 -31
  367. package/src/duckdb/src/catalog/default/default_functions.cpp +13 -8
  368. package/src/duckdb/src/catalog/default/default_views.cpp +1 -0
  369. package/src/duckdb/src/catalog/dependency_manager.cpp +133 -5
  370. package/src/duckdb/src/catalog/duck_catalog.cpp +17 -9
  371. package/src/duckdb/src/common/adbc/adbc.cpp +18 -0
  372. package/src/duckdb/src/common/allocator.cpp +3 -1
  373. package/src/duckdb/src/common/arrow/arrow_appender.cpp +30 -9
  374. package/src/duckdb/src/common/arrow/arrow_converter.cpp +63 -82
  375. package/src/duckdb/src/common/arrow/arrow_merge_event.cpp +4 -3
  376. package/src/duckdb/src/common/arrow/arrow_type_extension.cpp +361 -0
  377. package/src/duckdb/src/common/arrow/arrow_util.cpp +10 -6
  378. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +6 -2
  379. package/src/duckdb/src/common/arrow/physical_arrow_collector.cpp +2 -1
  380. package/src/duckdb/src/common/arrow/schema_metadata.cpp +27 -14
  381. package/src/duckdb/src/common/assert.cpp +1 -2
  382. package/src/duckdb/src/common/bind_helpers.cpp +1 -1
  383. package/src/duckdb/src/common/box_renderer.cpp +316 -26
  384. package/src/duckdb/src/common/cgroups.cpp +7 -1
  385. package/src/duckdb/src/common/compressed_file_system.cpp +1 -1
  386. package/src/duckdb/src/common/enum_util.cpp +2865 -6882
  387. package/src/duckdb/src/common/enums/compression_type.cpp +12 -0
  388. package/src/duckdb/src/common/enums/metric_type.cpp +24 -0
  389. package/src/duckdb/src/common/enums/optimizer_type.cpp +4 -0
  390. package/src/duckdb/src/common/enums/physical_operator_type.cpp +2 -0
  391. package/src/duckdb/src/common/error_data.cpp +23 -6
  392. package/src/duckdb/src/common/exception/binder_exception.cpp +1 -1
  393. package/src/duckdb/src/common/exception.cpp +20 -28
  394. package/src/duckdb/src/common/extra_type_info.cpp +85 -20
  395. package/src/duckdb/src/common/file_buffer.cpp +5 -2
  396. package/src/duckdb/src/common/file_system.cpp +8 -3
  397. package/src/duckdb/src/common/fsst.cpp +3 -3
  398. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  399. package/src/duckdb/src/common/local_file_system.cpp +169 -60
  400. package/src/duckdb/src/common/multi_file_list.cpp +4 -1
  401. package/src/duckdb/src/common/multi_file_reader.cpp +240 -63
  402. package/src/duckdb/src/common/opener_file_system.cpp +37 -0
  403. package/src/duckdb/src/common/operator/cast_operators.cpp +77 -11
  404. package/src/duckdb/src/common/operator/string_cast.cpp +6 -2
  405. package/src/duckdb/src/common/pipe_file_system.cpp +4 -4
  406. package/src/duckdb/src/common/progress_bar/progress_bar.cpp +25 -14
  407. package/src/duckdb/src/common/radix_partitioning.cpp +17 -16
  408. package/src/duckdb/src/common/random_engine.cpp +39 -3
  409. package/src/duckdb/src/common/render_tree.cpp +3 -19
  410. package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
  411. package/src/duckdb/src/common/row_operations/row_gather.cpp +2 -58
  412. package/src/duckdb/src/common/row_operations/row_matcher.cpp +2 -2
  413. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -0
  414. package/src/duckdb/src/common/row_operations/row_scatter.cpp +20 -19
  415. package/src/duckdb/src/common/serializer/buffered_file_writer.cpp +1 -1
  416. package/src/duckdb/src/common/serializer/memory_stream.cpp +36 -0
  417. package/src/duckdb/src/common/sort/comparators.cpp +7 -7
  418. package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
  419. package/src/duckdb/src/common/stacktrace.cpp +127 -0
  420. package/src/duckdb/src/common/string_util.cpp +157 -32
  421. package/src/duckdb/src/common/tree_renderer/text_tree_renderer.cpp +15 -3
  422. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -0
  423. package/src/duckdb/src/common/types/column/column_data_collection.cpp +71 -8
  424. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +27 -6
  425. package/src/duckdb/src/common/types/conflict_manager.cpp +21 -7
  426. package/src/duckdb/src/common/types/date.cpp +39 -25
  427. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +4 -11
  428. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +21 -7
  429. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +10 -1
  430. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +17 -17
  431. package/src/duckdb/src/common/types/timestamp.cpp +70 -33
  432. package/src/duckdb/src/common/types/uuid.cpp +11 -0
  433. package/src/duckdb/src/common/types/validity_mask.cpp +16 -5
  434. package/src/duckdb/src/common/types/value.cpp +357 -199
  435. package/src/duckdb/src/common/types/varint.cpp +64 -18
  436. package/src/duckdb/src/common/types/vector.cpp +78 -38
  437. package/src/duckdb/src/common/types.cpp +199 -92
  438. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +2 -1
  439. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +32 -5
  440. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +3 -1
  441. package/src/duckdb/src/execution/adaptive_filter.cpp +6 -2
  442. package/src/duckdb/src/execution/aggregate_hashtable.cpp +410 -111
  443. package/src/duckdb/src/execution/column_binding_resolver.cpp +2 -2
  444. package/src/duckdb/src/execution/expression_executor/execute_between.cpp +6 -0
  445. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +4 -3
  446. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
  447. package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +2 -2
  448. package/src/duckdb/src/execution/expression_executor/execute_function.cpp +1 -0
  449. package/src/duckdb/src/execution/expression_executor/execute_operator.cpp +5 -4
  450. package/src/duckdb/src/execution/expression_executor.cpp +5 -3
  451. package/src/duckdb/src/execution/index/art/art.cpp +208 -72
  452. package/src/duckdb/src/execution/index/art/base_leaf.cpp +1 -1
  453. package/src/duckdb/src/execution/index/art/leaf.cpp +12 -7
  454. package/src/duckdb/src/execution/index/art/node.cpp +2 -1
  455. package/src/duckdb/src/execution/index/art/node256_leaf.cpp +6 -6
  456. package/src/duckdb/src/execution/index/art/plan_art.cpp +50 -55
  457. package/src/duckdb/src/execution/index/art/prefix.cpp +7 -13
  458. package/src/duckdb/src/execution/index/bound_index.cpp +30 -5
  459. package/src/duckdb/src/execution/index/fixed_size_allocator.cpp +3 -5
  460. package/src/duckdb/src/execution/index/fixed_size_buffer.cpp +14 -9
  461. package/src/duckdb/src/execution/join_hashtable.cpp +254 -158
  462. package/src/duckdb/src/execution/operator/aggregate/grouped_aggregate_data.cpp +1 -1
  463. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +7 -7
  464. package/src/duckdb/src/execution/operator/aggregate/physical_partitioned_aggregate.cpp +226 -0
  465. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +3 -3
  466. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +3 -3
  467. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +77 -70
  468. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +114 -50
  469. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +2 -2
  470. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +19 -10
  471. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +22 -15
  472. package/src/duckdb/src/execution/operator/csv_scanner/encode/csv_encoder.cpp +95 -0
  473. package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +6 -1
  474. package/src/duckdb/src/execution/operator/csv_scanner/scanner/csv_schema.cpp +75 -2
  475. package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +40 -12
  476. package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +395 -163
  477. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +20 -23
  478. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +115 -49
  479. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +66 -12
  480. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +20 -23
  481. package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +220 -46
  482. package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +43 -32
  483. package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +54 -119
  484. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +184 -20
  485. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +83 -21
  486. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_validator.cpp +63 -0
  487. package/src/duckdb/src/execution/operator/helper/physical_reservoir_sample.cpp +7 -4
  488. package/src/duckdb/src/execution/operator/helper/physical_set.cpp +1 -1
  489. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +3 -2
  490. package/src/duckdb/src/execution/operator/helper/physical_verify_vector.cpp +9 -1
  491. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +132 -15
  492. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -55
  493. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +284 -154
  494. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +40 -55
  495. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +0 -1
  496. package/src/duckdb/src/execution/operator/order/physical_order.cpp +7 -3
  497. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +298 -227
  498. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +5 -2
  499. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +3 -4
  500. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +32 -19
  501. package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +1 -0
  502. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +6 -0
  503. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +58 -19
  504. package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +11 -27
  505. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +308 -119
  506. package/src/duckdb/src/execution/operator/persistent/physical_update.cpp +105 -55
  507. package/src/duckdb/src/execution/operator/projection/physical_tableinout_function.cpp +6 -2
  508. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +1 -1
  509. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +15 -6
  510. package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +92 -50
  511. package/src/duckdb/src/execution/operator/schema/physical_alter.cpp +0 -1
  512. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +8 -4
  513. package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +54 -22
  514. package/src/duckdb/src/execution/operator/set/physical_union.cpp +5 -1
  515. package/src/duckdb/src/execution/physical_operator.cpp +15 -9
  516. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +101 -12
  517. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +11 -140
  518. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +11 -13
  519. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +1 -1
  520. package/src/duckdb/src/execution/physical_plan/plan_delete.cpp +1 -1
  521. package/src/duckdb/src/execution/physical_plan/plan_delim_join.cpp +1 -1
  522. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +6 -5
  523. package/src/duckdb/src/execution/physical_plan/plan_export.cpp +0 -4
  524. package/src/duckdb/src/execution/physical_plan/plan_filter.cpp +1 -1
  525. package/src/duckdb/src/execution/physical_plan/plan_get.cpp +16 -13
  526. package/src/duckdb/src/execution/physical_plan/plan_insert.cpp +1 -1
  527. package/src/duckdb/src/execution/physical_plan/plan_order.cpp +7 -7
  528. package/src/duckdb/src/execution/physical_plan/plan_prepare.cpp +2 -2
  529. package/src/duckdb/src/execution/physical_plan/plan_projection.cpp +1 -1
  530. package/src/duckdb/src/execution/physical_plan/plan_sample.cpp +8 -3
  531. package/src/duckdb/src/execution/physical_plan/plan_set_operation.cpp +1 -2
  532. package/src/duckdb/src/execution/physical_plan/plan_simple.cpp +1 -2
  533. package/src/duckdb/src/execution/physical_plan/plan_top_n.cpp +3 -2
  534. package/src/duckdb/src/execution/physical_plan_generator.cpp +0 -22
  535. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +136 -116
  536. package/src/duckdb/src/execution/sample/base_reservoir_sample.cpp +136 -0
  537. package/src/duckdb/src/execution/sample/reservoir_sample.cpp +930 -0
  538. package/src/duckdb/src/function/aggregate/distributive/count.cpp +6 -12
  539. package/src/duckdb/src/function/aggregate/distributive/{first.cpp → first_last_any.cpp} +37 -18
  540. package/src/duckdb/src/{core_functions → function}/aggregate/distributive/minmax.cpp +19 -12
  541. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +72 -13
  542. package/src/duckdb/src/function/built_in_functions.cpp +85 -2
  543. package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
  544. package/src/duckdb/src/function/cast/string_cast.cpp +1 -1
  545. package/src/duckdb/src/function/cast/struct_cast.cpp +81 -49
  546. package/src/duckdb/src/function/cast/union/from_struct.cpp +7 -5
  547. package/src/duckdb/src/function/compression_config.cpp +6 -0
  548. package/src/duckdb/src/function/encoding_function.cpp +134 -0
  549. package/src/duckdb/src/function/function.cpp +8 -13
  550. package/src/duckdb/src/function/function_binder.cpp +100 -21
  551. package/src/duckdb/src/function/function_list.cpp +178 -0
  552. package/src/duckdb/src/function/macro_function.cpp +4 -4
  553. package/src/duckdb/src/function/pragma/pragma_functions.cpp +0 -2
  554. package/src/duckdb/src/function/pragma/pragma_queries.cpp +0 -4
  555. package/src/duckdb/src/{core_functions/core_functions.cpp → function/register_function_list.cpp} +12 -8
  556. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +62 -23
  557. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +33 -16
  558. package/src/duckdb/src/function/scalar/compressed_materialization_utils.cpp +21 -0
  559. package/src/duckdb/src/{core_functions/scalar/blob → function/scalar}/create_sort_key.cpp +86 -23
  560. package/src/duckdb/src/{core_functions → function}/scalar/date/strftime.cpp +6 -4
  561. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +5 -7
  562. package/src/duckdb/src/{core_functions → function}/scalar/generic/error.cpp +3 -1
  563. package/src/duckdb/src/function/scalar/generic/getvariable.cpp +2 -2
  564. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +1 -7
  565. package/src/duckdb/src/function/scalar/list/list_extract.cpp +27 -21
  566. package/src/duckdb/src/function/scalar/list/list_resize.cpp +8 -12
  567. package/src/duckdb/src/function/scalar/list/list_select.cpp +1 -4
  568. package/src/duckdb/src/function/scalar/list/list_zip.cpp +6 -6
  569. package/src/duckdb/src/{core_functions → function}/scalar/map/map_contains.cpp +2 -2
  570. package/src/duckdb/src/function/scalar/nested_functions.cpp +0 -11
  571. package/src/duckdb/src/function/scalar/{operators → operator}/add.cpp +2 -1
  572. package/src/duckdb/src/function/scalar/{operators → operator}/arithmetic.cpp +195 -127
  573. package/src/duckdb/src/function/scalar/sequence/nextval.cpp +30 -21
  574. package/src/duckdb/src/function/scalar/strftime_format.cpp +10 -0
  575. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +11 -41
  576. package/src/duckdb/src/function/scalar/string/concat.cpp +22 -20
  577. package/src/duckdb/src/function/scalar/string/concat_ws.cpp +2 -2
  578. package/src/duckdb/src/function/scalar/string/contains.cpp +16 -19
  579. package/src/duckdb/src/function/scalar/string/length.cpp +38 -24
  580. package/src/duckdb/src/function/scalar/string/like.cpp +80 -47
  581. package/src/duckdb/src/{core_functions → function}/scalar/string/md5.cpp +2 -2
  582. package/src/duckdb/src/function/scalar/string/nfc_normalize.cpp +2 -6
  583. package/src/duckdb/src/function/scalar/string/prefix.cpp +0 -4
  584. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +2 -1
  585. package/src/duckdb/src/function/scalar/string/regexp.cpp +17 -7
  586. package/src/duckdb/src/{core_functions → function}/scalar/string/regexp_escape.cpp +2 -2
  587. package/src/duckdb/src/{core_functions → function}/scalar/string/sha1.cpp +1 -1
  588. package/src/duckdb/src/{core_functions → function}/scalar/string/sha256.cpp +1 -1
  589. package/src/duckdb/src/{core_functions → function}/scalar/string/string_split.cpp +4 -5
  590. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +3 -6
  591. package/src/duckdb/src/function/scalar/string/substring.cpp +14 -13
  592. package/src/duckdb/src/function/scalar/string/suffix.cpp +0 -4
  593. package/src/duckdb/src/function/scalar/struct/struct_concat.cpp +115 -0
  594. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +35 -31
  595. package/src/duckdb/src/{core_functions → function}/scalar/struct/struct_pack.cpp +7 -7
  596. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +5 -8
  597. package/src/duckdb/src/function/scalar/system/write_log.cpp +170 -0
  598. package/src/duckdb/src/function/scalar_function.cpp +5 -5
  599. package/src/duckdb/src/function/table/arrow/arrow_array_scan_state.cpp +3 -2
  600. package/src/duckdb/src/function/table/arrow/arrow_duck_schema.cpp +287 -1
  601. package/src/duckdb/src/function/table/arrow/arrow_type_info.cpp +6 -6
  602. package/src/duckdb/src/function/table/arrow.cpp +32 -352
  603. package/src/duckdb/src/function/table/arrow_conversion.cpp +43 -7
  604. package/src/duckdb/src/function/table/copy_csv.cpp +38 -23
  605. package/src/duckdb/src/function/table/glob.cpp +1 -1
  606. package/src/duckdb/src/function/table/query_function.cpp +12 -7
  607. package/src/duckdb/src/function/table/read_csv.cpp +114 -46
  608. package/src/duckdb/src/function/table/read_file.cpp +26 -6
  609. package/src/duckdb/src/function/table/sniff_csv.cpp +25 -5
  610. package/src/duckdb/src/function/table/system/duckdb_columns.cpp +1 -1
  611. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +1 -1
  612. package/src/duckdb/src/function/table/system/duckdb_dependencies.cpp +6 -7
  613. package/src/duckdb/src/function/table/system/duckdb_extensions.cpp +1 -1
  614. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +141 -16
  615. package/src/duckdb/src/function/table/system/duckdb_log.cpp +64 -0
  616. package/src/duckdb/src/function/table/system/duckdb_log_contexts.cpp +65 -0
  617. package/src/duckdb/src/function/table/system/duckdb_memory.cpp +0 -1
  618. package/src/duckdb/src/function/table/system/duckdb_settings.cpp +1 -1
  619. package/src/duckdb/src/function/table/system/duckdb_tables.cpp +1 -13
  620. package/src/duckdb/src/function/table/system/duckdb_types.cpp +1 -1
  621. package/src/duckdb/src/function/table/system/pragma_storage_info.cpp +17 -0
  622. package/src/duckdb/src/function/table/system/pragma_table_info.cpp +6 -0
  623. package/src/duckdb/src/function/table/system/pragma_table_sample.cpp +95 -0
  624. package/src/duckdb/src/function/table/system/test_all_types.cpp +56 -46
  625. package/src/duckdb/src/function/table/system_functions.cpp +3 -0
  626. package/src/duckdb/src/function/table/table_scan.cpp +487 -289
  627. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  628. package/src/duckdb/src/function/table_function.cpp +10 -6
  629. package/src/duckdb/src/function/window/window_aggregate_function.cpp +248 -0
  630. package/src/duckdb/src/function/window/window_aggregate_states.cpp +48 -0
  631. package/src/duckdb/src/function/window/window_aggregator.cpp +88 -0
  632. package/src/duckdb/src/function/window/window_boundaries_state.cpp +854 -0
  633. package/src/duckdb/src/function/window/window_collection.cpp +146 -0
  634. package/src/duckdb/src/function/window/window_constant_aggregator.cpp +357 -0
  635. package/src/duckdb/src/function/window/window_custom_aggregator.cpp +146 -0
  636. package/src/duckdb/src/function/window/window_distinct_aggregator.cpp +758 -0
  637. package/src/duckdb/src/function/window/window_executor.cpp +99 -0
  638. package/src/duckdb/src/function/window/window_index_tree.cpp +63 -0
  639. package/src/duckdb/src/function/window/window_merge_sort_tree.cpp +275 -0
  640. package/src/duckdb/src/function/window/window_naive_aggregator.cpp +361 -0
  641. package/src/duckdb/src/function/window/window_rank_function.cpp +288 -0
  642. package/src/duckdb/src/function/window/window_rownumber_function.cpp +191 -0
  643. package/src/duckdb/src/function/window/window_segment_tree.cpp +594 -0
  644. package/src/duckdb/src/function/window/window_shared_expressions.cpp +50 -0
  645. package/src/duckdb/src/function/window/window_token_tree.cpp +142 -0
  646. package/src/duckdb/src/function/window/window_value_function.cpp +566 -0
  647. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +74 -17
  648. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
  649. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +2 -0
  650. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +9 -0
  651. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/function_entry.hpp +4 -10
  652. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/pragma_function_catalog_entry.hpp +1 -1
  653. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/scalar_function_catalog_entry.hpp +2 -2
  654. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +2 -0
  655. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +18 -3
  656. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +1 -1
  657. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +2 -1
  658. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +5 -2
  659. package/src/duckdb/src/include/duckdb/catalog/catalog_entry_retriever.hpp +21 -18
  660. package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +3 -2
  661. package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +10 -2
  662. package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +11 -0
  663. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +9 -4
  664. package/src/duckdb/src/include/duckdb/common/allocator.hpp +3 -0
  665. package/src/duckdb/src/include/duckdb/common/array_ptr.hpp +8 -0
  666. package/src/duckdb/src/include/duckdb/common/arrow/appender/append_data.hpp +4 -1
  667. package/src/duckdb/src/include/duckdb/common/arrow/appender/list_data.hpp +3 -1
  668. package/src/duckdb/src/include/duckdb/common/arrow/appender/list_view_data.hpp +3 -1
  669. package/src/duckdb/src/include/duckdb/common/arrow/appender/varchar_data.hpp +2 -1
  670. package/src/duckdb/src/include/duckdb/common/arrow/arrow_appender.hpp +7 -3
  671. package/src/duckdb/src/include/duckdb/common/arrow/arrow_converter.hpp +26 -3
  672. package/src/duckdb/src/include/duckdb/common/arrow/arrow_query_result.hpp +1 -1
  673. package/src/duckdb/src/include/duckdb/common/arrow/arrow_type_extension.hpp +144 -0
  674. package/src/duckdb/src/include/duckdb/common/arrow/arrow_util.hpp +5 -2
  675. package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +2 -0
  676. package/src/duckdb/src/include/duckdb/common/arrow/schema_metadata.hpp +11 -4
  677. package/src/duckdb/src/include/duckdb/common/assert.hpp +12 -1
  678. package/src/duckdb/src/include/duckdb/common/atomic_ptr.hpp +102 -0
  679. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +65 -6
  680. package/src/duckdb/src/include/duckdb/common/chrono.hpp +1 -0
  681. package/src/duckdb/src/include/duckdb/common/column_index.hpp +72 -0
  682. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +120 -0
  683. package/src/duckdb/src/include/duckdb/{core_functions/core_functions.hpp → common/enums/collation_type.hpp} +2 -7
  684. package/src/duckdb/src/include/duckdb/common/enums/compression_type.hpp +5 -2
  685. package/src/duckdb/src/include/duckdb/common/enums/function_errors.hpp +18 -0
  686. package/src/duckdb/src/include/duckdb/common/enums/memory_tag.hpp +3 -2
  687. package/src/duckdb/src/include/duckdb/common/enums/metric_type.hpp +7 -2
  688. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +4 -0
  689. package/src/duckdb/src/include/duckdb/common/enums/order_preservation_type.hpp +1 -1
  690. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +1 -0
  691. package/src/duckdb/src/include/duckdb/common/enums/profiler_format.hpp +1 -1
  692. package/src/duckdb/src/include/duckdb/{core_functions/aggregate → common/enums}/quantile_enum.hpp +3 -1
  693. package/src/duckdb/src/include/duckdb/common/enums/scan_vector_type.hpp +2 -0
  694. package/src/duckdb/src/include/duckdb/common/error_data.hpp +1 -0
  695. package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +4 -0
  696. package/src/duckdb/src/include/duckdb/common/exception.hpp +1 -1
  697. package/src/duckdb/src/include/duckdb/common/extension_type_info.hpp +37 -0
  698. package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +7 -2
  699. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +9 -3
  700. package/src/duckdb/src/include/duckdb/common/fast_mem.hpp +6 -6
  701. package/src/duckdb/src/include/duckdb/common/file_buffer.hpp +19 -10
  702. package/src/duckdb/src/include/duckdb/common/file_opener.hpp +2 -0
  703. package/src/duckdb/src/include/duckdb/common/file_system.hpp +6 -1
  704. package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -2
  705. package/src/duckdb/src/include/duckdb/common/helper.hpp +6 -0
  706. package/src/duckdb/src/include/duckdb/common/hugeint.hpp +10 -0
  707. package/src/duckdb/src/include/duckdb/common/insertion_order_preserving_map.hpp +12 -2
  708. package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +3 -0
  709. package/src/duckdb/src/include/duckdb/common/multi_file_list.hpp +2 -1
  710. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +147 -27
  711. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +4 -0
  712. package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +2 -7
  713. package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +16 -5
  714. package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +16 -0
  715. package/src/duckdb/src/include/duckdb/common/optional_idx.hpp +4 -0
  716. package/src/duckdb/src/include/duckdb/common/platform.hpp +34 -3
  717. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +10 -13
  718. package/src/duckdb/src/include/duckdb/common/random_engine.hpp +8 -3
  719. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +0 -2
  720. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_writer.hpp +1 -1
  721. package/src/duckdb/src/include/duckdb/common/serializer/memory_stream.hpp +7 -0
  722. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +1 -0
  723. package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +1 -0
  724. package/src/duckdb/src/include/duckdb/common/stacktrace.hpp +25 -0
  725. package/src/duckdb/src/include/duckdb/common/string_util.hpp +30 -2
  726. package/src/duckdb/src/include/duckdb/common/tree_renderer/graphviz_tree_renderer.hpp +1 -1
  727. package/src/duckdb/src/include/duckdb/common/tree_renderer/html_tree_renderer.hpp +1 -1
  728. package/src/duckdb/src/include/duckdb/common/tree_renderer/json_tree_renderer.hpp +1 -1
  729. package/src/duckdb/src/include/duckdb/common/tree_renderer/text_tree_renderer.hpp +3 -2
  730. package/src/duckdb/src/include/duckdb/common/tree_renderer.hpp +2 -0
  731. package/src/duckdb/src/include/duckdb/common/type_util.hpp +8 -0
  732. package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +8 -0
  733. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +13 -2
  734. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +2 -1
  735. package/src/duckdb/src/include/duckdb/common/types/conflict_manager.hpp +21 -4
  736. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +4 -1
  737. package/src/duckdb/src/include/duckdb/common/types/date.hpp +9 -4
  738. package/src/duckdb/src/include/duckdb/common/types/date_lookup_cache.hpp +1 -1
  739. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +58 -10
  740. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +0 -4
  741. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_allocator.hpp +4 -0
  742. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +4 -0
  743. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -0
  744. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +43 -16
  745. package/src/duckdb/src/include/duckdb/common/types/uuid.hpp +3 -1
  746. package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +63 -21
  747. package/src/duckdb/src/include/duckdb/common/types/value.hpp +62 -16
  748. package/src/duckdb/src/include/duckdb/common/types/varint.hpp +13 -0
  749. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +34 -7
  750. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +15 -0
  751. package/src/duckdb/src/include/duckdb/common/types.hpp +12 -7
  752. package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +10 -0
  753. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +12 -13
  754. package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +27 -0
  755. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +111 -4
  756. package/src/duckdb/src/include/duckdb/common/vector_operations/vector_operations.hpp +0 -1
  757. package/src/duckdb/src/include/duckdb/execution/adaptive_filter.hpp +2 -0
  758. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +48 -10
  759. package/src/duckdb/src/include/duckdb/execution/executor.hpp +2 -1
  760. package/src/duckdb/src/include/duckdb/execution/expression_executor.hpp +0 -1
  761. package/src/duckdb/src/include/duckdb/execution/ht_entry.hpp +25 -27
  762. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +28 -18
  763. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +1 -0
  764. package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +2 -2
  765. package/src/duckdb/src/include/duckdb/execution/index/bound_index.hpp +23 -16
  766. package/src/duckdb/src/include/duckdb/execution/index/fixed_size_allocator.hpp +4 -0
  767. package/src/duckdb/src/include/duckdb/execution/index/fixed_size_buffer.hpp +2 -2
  768. package/src/duckdb/src/include/duckdb/execution/join_hashtable.hpp +25 -16
  769. package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +15 -10
  770. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +1 -1
  771. package/src/duckdb/src/include/duckdb/execution/operator/{persistent/physical_fixed_batch_copy.hpp → aggregate/physical_partitioned_aggregate.hpp} +25 -27
  772. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_ungrouped_aggregate.hpp +1 -2
  773. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +5 -4
  774. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/ungrouped_aggregate_state.hpp +21 -1
  775. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +38 -9
  776. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp +8 -9
  777. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp +7 -1
  778. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp +29 -23
  779. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp +15 -13
  780. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp +13 -5
  781. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp +2 -1
  782. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp +24 -10
  783. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_schema.hpp +36 -1
  784. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state.hpp +21 -13
  785. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp +52 -22
  786. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp +6 -6
  787. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_validator.hpp +58 -0
  788. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/encode/csv_encoder.hpp +62 -0
  789. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp +6 -3
  790. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner_boundary.hpp +16 -6
  791. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp +9 -4
  792. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine_options.hpp +8 -4
  793. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +55 -10
  794. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +2 -2
  795. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_buffered_batch_collector.hpp +2 -2
  796. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_limit.hpp +2 -2
  797. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_reservoir_sample.hpp +1 -1
  798. package/src/duckdb/src/include/duckdb/execution/operator/join/join_filter_pushdown.hpp +28 -7
  799. package/src/duckdb/src/include/duckdb/execution/operator/join/perfect_hash_join_executor.hpp +6 -9
  800. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +17 -16
  801. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +1 -1
  802. package/src/duckdb/src/include/duckdb/execution/operator/order/physical_order.hpp +7 -3
  803. package/src/duckdb/src/include/duckdb/execution/operator/order/physical_top_n.hpp +5 -1
  804. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp +2 -2
  805. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp +2 -2
  806. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_insert.hpp +55 -4
  807. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_update.hpp +2 -0
  808. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_tableinout_function.hpp +2 -2
  809. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_positional_scan.hpp +2 -1
  810. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +10 -9
  811. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_create_art_index.hpp +16 -13
  812. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +0 -4
  813. package/src/duckdb/src/include/duckdb/execution/partition_info.hpp +79 -0
  814. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +20 -9
  815. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +1 -11
  816. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +0 -2
  817. package/src/duckdb/src/include/duckdb/execution/progress_data.hpp +58 -0
  818. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +2 -1
  819. package/src/duckdb/src/include/duckdb/execution/reservoir_sample.hpp +160 -31
  820. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_function_utils.hpp +31 -0
  821. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +61 -10
  822. package/src/duckdb/src/include/duckdb/{core_functions → function}/aggregate/minmax_n_helpers.hpp +1 -1
  823. package/src/duckdb/src/include/duckdb/{core_functions → function}/aggregate/sort_key_helpers.hpp +2 -2
  824. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +47 -27
  825. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -0
  826. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +3 -10
  827. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +13 -6
  828. package/src/duckdb/src/include/duckdb/function/compression/compression.hpp +15 -0
  829. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +29 -6
  830. package/src/duckdb/src/include/duckdb/{core_functions → function}/create_sort_key.hpp +4 -1
  831. package/src/duckdb/src/include/duckdb/function/encoding_function.hpp +78 -0
  832. package/src/duckdb/src/include/duckdb/function/function.hpp +22 -1
  833. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -0
  834. package/src/duckdb/src/include/duckdb/function/function_list.hpp +39 -0
  835. package/src/duckdb/src/include/duckdb/function/function_set.hpp +13 -7
  836. package/src/duckdb/src/include/duckdb/{core_functions → function}/lambda_functions.hpp +1 -1
  837. package/src/duckdb/src/include/duckdb/function/partition_stats.hpp +36 -0
  838. package/src/duckdb/src/include/duckdb/function/register_function_list_helper.hpp +69 -0
  839. package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +154 -23
  840. package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_utils.hpp +45 -0
  841. package/src/duckdb/src/include/duckdb/function/scalar/date_functions.hpp +45 -0
  842. package/src/duckdb/src/include/duckdb/function/scalar/generic_common.hpp +36 -0
  843. package/src/duckdb/src/include/duckdb/function/scalar/generic_functions.hpp +32 -23
  844. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
  845. package/src/duckdb/src/include/duckdb/function/scalar/list_functions.hpp +156 -0
  846. package/src/duckdb/src/include/duckdb/function/scalar/map_functions.hpp +27 -0
  847. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +4 -45
  848. package/src/duckdb/src/include/duckdb/function/scalar/operator_functions.hpp +102 -0
  849. package/src/duckdb/src/include/duckdb/function/scalar/operators.hpp +2 -16
  850. package/src/duckdb/src/include/duckdb/function/scalar/sequence_functions.hpp +16 -25
  851. package/src/duckdb/src/include/duckdb/function/scalar/sequence_utils.hpp +38 -0
  852. package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +1 -0
  853. package/src/duckdb/src/include/duckdb/function/scalar/string_common.hpp +49 -0
  854. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +401 -76
  855. package/src/duckdb/src/include/duckdb/function/scalar/struct_functions.hpp +63 -0
  856. package/src/duckdb/src/include/duckdb/function/scalar/struct_utils.hpp +33 -0
  857. package/src/duckdb/src/include/duckdb/function/scalar/system_functions.hpp +45 -0
  858. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +17 -8
  859. package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +59 -6
  860. package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_type_info.hpp +12 -9
  861. package/src/duckdb/src/include/duckdb/function/table/arrow/enum/arrow_type_info_type.hpp +2 -0
  862. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +18 -13
  863. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +7 -4
  864. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +14 -0
  865. package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +15 -10
  866. package/src/duckdb/src/include/duckdb/function/table_function.hpp +94 -18
  867. package/src/duckdb/src/include/duckdb/{core_functions → function}/to_interval.hpp +1 -1
  868. package/src/duckdb/src/include/duckdb/function/window/window_aggregate_function.hpp +44 -0
  869. package/src/duckdb/src/include/duckdb/function/window/window_aggregate_states.hpp +56 -0
  870. package/src/duckdb/src/include/duckdb/function/window/window_aggregator.hpp +194 -0
  871. package/src/duckdb/src/include/duckdb/function/window/window_boundaries_state.hpp +153 -0
  872. package/src/duckdb/src/include/duckdb/function/window/window_collection.hpp +146 -0
  873. package/src/duckdb/src/include/duckdb/function/window/window_constant_aggregator.hpp +38 -0
  874. package/src/duckdb/src/include/duckdb/function/window/window_custom_aggregator.hpp +32 -0
  875. package/src/duckdb/src/include/duckdb/function/window/window_distinct_aggregator.hpp +39 -0
  876. package/src/duckdb/src/include/duckdb/function/window/window_executor.hpp +122 -0
  877. package/src/duckdb/src/include/duckdb/function/window/window_index_tree.hpp +42 -0
  878. package/src/duckdb/src/include/duckdb/function/window/window_merge_sort_tree.hpp +108 -0
  879. package/src/duckdb/src/include/duckdb/function/window/window_naive_aggregator.hpp +33 -0
  880. package/src/duckdb/src/include/duckdb/function/window/window_rank_function.hpp +63 -0
  881. package/src/duckdb/src/include/duckdb/function/window/window_rownumber_function.hpp +43 -0
  882. package/src/duckdb/src/include/duckdb/function/window/window_segment_tree.hpp +31 -0
  883. package/src/duckdb/src/include/duckdb/function/window/window_shared_expressions.hpp +76 -0
  884. package/src/duckdb/src/include/duckdb/function/window/window_token_tree.hpp +46 -0
  885. package/src/duckdb/src/include/duckdb/function/window/window_value_function.hpp +79 -0
  886. package/src/duckdb/src/include/duckdb/logging/http_logger.hpp +2 -0
  887. package/src/duckdb/src/include/duckdb/logging/log_manager.hpp +81 -0
  888. package/src/duckdb/src/include/duckdb/logging/log_storage.hpp +127 -0
  889. package/src/duckdb/src/include/duckdb/logging/logger.hpp +287 -0
  890. package/src/duckdb/src/include/duckdb/logging/logging.hpp +83 -0
  891. package/src/duckdb/src/include/duckdb/main/appender.hpp +41 -18
  892. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +6 -3
  893. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +7 -2
  894. package/src/duckdb/src/include/duckdb/main/capi/extension_api.hpp +317 -231
  895. package/src/duckdb/src/include/duckdb/main/client_config.hpp +17 -1
  896. package/src/duckdb/src/include/duckdb/main/client_context.hpp +28 -6
  897. package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +1 -0
  898. package/src/duckdb/src/include/duckdb/main/client_context_wrapper.hpp +5 -0
  899. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -2
  900. package/src/duckdb/src/include/duckdb/main/client_properties.hpp +8 -3
  901. package/src/duckdb/src/include/duckdb/main/config.hpp +52 -8
  902. package/src/duckdb/src/include/duckdb/main/connection.hpp +18 -3
  903. package/src/duckdb/src/include/duckdb/main/database.hpp +8 -7
  904. package/src/duckdb/src/include/duckdb/main/database_file_opener.hpp +5 -1
  905. package/src/duckdb/src/include/duckdb/main/database_manager.hpp +3 -0
  906. package/src/duckdb/src/include/duckdb/main/db_instance_cache.hpp +1 -0
  907. package/src/duckdb/src/include/duckdb/main/extension.hpp +8 -2
  908. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +548 -9
  909. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +18 -0
  910. package/src/duckdb/src/include/duckdb/main/extension_util.hpp +12 -7
  911. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +3 -3
  912. package/src/duckdb/src/include/duckdb/main/profiling_info.hpp +2 -2
  913. package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +8 -4
  914. package/src/duckdb/src/include/duckdb/main/relation/create_table_relation.hpp +3 -1
  915. package/src/duckdb/src/include/duckdb/main/relation/delete_relation.hpp +2 -2
  916. package/src/duckdb/src/include/duckdb/main/relation/subquery_relation.hpp +1 -4
  917. package/src/duckdb/src/include/duckdb/main/relation/table_function_relation.hpp +3 -1
  918. package/src/duckdb/src/include/duckdb/main/relation/table_relation.hpp +3 -0
  919. package/src/duckdb/src/include/duckdb/main/relation/update_relation.hpp +3 -2
  920. package/src/duckdb/src/include/duckdb/main/relation/value_relation.hpp +7 -0
  921. package/src/duckdb/src/include/duckdb/main/relation/view_relation.hpp +1 -0
  922. package/src/duckdb/src/include/duckdb/main/relation/write_parquet_relation.hpp +1 -1
  923. package/src/duckdb/src/include/duckdb/main/relation.hpp +45 -9
  924. package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +20 -22
  925. package/src/duckdb/src/include/duckdb/main/settings.hpp +613 -378
  926. package/src/duckdb/src/include/duckdb/main/table_description.hpp +14 -4
  927. package/src/duckdb/src/include/duckdb/optimizer/build_probe_side_optimizer.hpp +1 -3
  928. package/src/duckdb/src/include/duckdb/optimizer/column_lifetime_analyzer.hpp +14 -7
  929. package/src/duckdb/src/include/duckdb/optimizer/common_aggregate_optimizer.hpp +2 -2
  930. package/src/duckdb/src/include/duckdb/optimizer/empty_result_pullup.hpp +27 -0
  931. package/src/duckdb/src/include/duckdb/optimizer/expression_heuristics.hpp +1 -1
  932. package/src/duckdb/src/include/duckdb/optimizer/filter_combiner.hpp +6 -1
  933. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  934. package/src/duckdb/src/include/duckdb/optimizer/in_clause_rewriter.hpp +3 -0
  935. package/src/duckdb/src/include/duckdb/optimizer/join_filter_pushdown_optimizer.hpp +5 -0
  936. package/src/duckdb/src/include/duckdb/optimizer/join_order/plan_enumerator.hpp +2 -0
  937. package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_statistics_helper.hpp +2 -2
  938. package/src/duckdb/src/include/duckdb/optimizer/late_materialization.hpp +45 -0
  939. package/src/duckdb/src/include/duckdb/optimizer/matcher/expression_matcher.hpp +23 -0
  940. package/src/duckdb/src/include/duckdb/optimizer/matcher/type_matcher.hpp +18 -0
  941. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +9 -0
  942. package/src/duckdb/src/include/duckdb/optimizer/remove_unused_columns.hpp +33 -11
  943. package/src/duckdb/src/include/duckdb/optimizer/rule/distinct_aggregate_optimizer.hpp +34 -0
  944. package/src/duckdb/src/include/duckdb/optimizer/sampling_pushdown.hpp +25 -0
  945. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +3 -1
  946. package/src/duckdb/src/include/duckdb/optimizer/sum_rewriter.hpp +37 -0
  947. package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +4 -0
  948. package/src/duckdb/src/include/duckdb/parallel/event.hpp +3 -0
  949. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +1 -1
  950. package/src/duckdb/src/include/duckdb/parallel/pipeline_executor.hpp +26 -8
  951. package/src/duckdb/src/include/duckdb/parallel/thread_context.hpp +3 -0
  952. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +51 -3
  953. package/src/duckdb/src/include/duckdb/parser/constraints/unique_constraint.hpp +28 -44
  954. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +3 -0
  955. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -2
  956. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  957. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +2 -2
  958. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +6 -6
  959. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +11 -1
  960. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +12 -0
  961. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +1 -0
  962. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_scalar_function_info.hpp +3 -2
  963. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +22 -1
  964. package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +3 -4
  965. package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_column_info.hpp +1 -1
  966. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_function_info.hpp +16 -12
  967. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +3 -3
  968. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +5 -5
  969. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +12 -3
  970. package/src/duckdb/src/include/duckdb/parser/parser.hpp +3 -0
  971. package/src/duckdb/src/include/duckdb/parser/qualified_name.hpp +17 -57
  972. package/src/duckdb/src/include/duckdb/parser/qualified_name_set.hpp +19 -3
  973. package/src/duckdb/src/include/duckdb/parser/simplified_token.hpp +2 -1
  974. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +12 -9
  975. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -1
  976. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +2 -2
  977. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +45 -28
  978. package/src/duckdb/src/include/duckdb/planner/binder.hpp +23 -11
  979. package/src/duckdb/src/include/duckdb/planner/binding_alias.hpp +44 -0
  980. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +1 -0
  981. package/src/duckdb/src/include/duckdb/planner/collation_binding.hpp +4 -3
  982. package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +11 -10
  983. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +2 -0
  984. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -0
  985. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +4 -4
  986. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +6 -0
  987. package/src/duckdb/src/include/duckdb/planner/expression.hpp +2 -0
  988. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -0
  989. package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +9 -4
  990. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +8 -2
  991. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +1 -2
  992. package/src/duckdb/src/include/duckdb/planner/filter/dynamic_filter.hpp +48 -0
  993. package/src/duckdb/src/include/duckdb/planner/filter/in_filter.hpp +37 -0
  994. package/src/duckdb/src/include/duckdb/planner/filter/optional_filter.hpp +35 -0
  995. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +4 -0
  996. package/src/duckdb/src/include/duckdb/planner/logical_operator_visitor.hpp +3 -0
  997. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +2 -0
  998. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_index.hpp +9 -9
  999. package/src/duckdb/src/include/duckdb/planner/operator/logical_filter.hpp +4 -0
  1000. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +16 -7
  1001. package/src/duckdb/src/include/duckdb/planner/operator/logical_insert.hpp +2 -0
  1002. package/src/duckdb/src/include/duckdb/planner/operator/logical_join.hpp +4 -0
  1003. package/src/duckdb/src/include/duckdb/planner/operator/logical_order.hpp +5 -1
  1004. package/src/duckdb/src/include/duckdb/planner/operator/logical_top_n.hpp +5 -3
  1005. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +14 -6
  1006. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +12 -8
  1007. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -0
  1008. package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -0
  1009. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +82 -26
  1010. package/src/duckdb/src/include/duckdb/storage/buffer/buffer_handle.hpp +1 -1
  1011. package/src/duckdb/src/include/duckdb/storage/buffer/buffer_pool.hpp +10 -3
  1012. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +2 -1
  1013. package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +4 -13
  1014. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +14 -15
  1015. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_constants.hpp +1 -1
  1016. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +13 -15
  1017. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +1 -1
  1018. package/src/duckdb/src/include/duckdb/storage/compression/dictionary/analyze.hpp +46 -0
  1019. package/src/duckdb/src/include/duckdb/storage/compression/dictionary/common.hpp +60 -0
  1020. package/src/duckdb/src/include/duckdb/storage/compression/dictionary/compression.hpp +61 -0
  1021. package/src/duckdb/src/include/duckdb/storage/compression/dictionary/decompression.hpp +50 -0
  1022. package/src/duckdb/src/include/duckdb/storage/compression/empty_validity.hpp +100 -0
  1023. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +1 -1
  1024. package/src/duckdb/src/include/duckdb/storage/compression/roaring/appender.hpp +150 -0
  1025. package/src/duckdb/src/include/duckdb/storage/compression/roaring/roaring.hpp +618 -0
  1026. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +53 -31
  1027. package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -3
  1028. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +0 -1
  1029. package/src/duckdb/src/include/duckdb/storage/segment/uncompressed.hpp +4 -1
  1030. package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +3 -3
  1031. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +1 -1
  1032. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +5 -4
  1033. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +16 -1
  1034. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +2 -1
  1035. package/src/duckdb/src/include/duckdb/storage/storage_index.hpp +70 -0
  1036. package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +5 -7
  1037. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +4 -3
  1038. package/src/duckdb/src/include/duckdb/storage/storage_options.hpp +23 -0
  1039. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +34 -6
  1040. package/src/duckdb/src/include/duckdb/storage/table/append_state.hpp +2 -0
  1041. package/src/duckdb/src/include/duckdb/storage/table/array_column_data.hpp +2 -2
  1042. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  1043. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +39 -10
  1044. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +56 -14
  1045. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +35 -29
  1046. package/src/duckdb/src/include/duckdb/storage/table/delete_state.hpp +1 -1
  1047. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  1048. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +7 -1
  1049. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +19 -6
  1050. package/src/duckdb/src/include/duckdb/storage/table/row_version_manager.hpp +2 -1
  1051. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +29 -6
  1052. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +10 -10
  1053. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +5 -0
  1054. package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +26 -19
  1055. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +8 -1
  1056. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +16 -14
  1057. package/src/duckdb/src/include/duckdb/storage/table/validity_column_data.hpp +2 -0
  1058. package/src/duckdb/src/include/duckdb/storage/table_io_manager.hpp +3 -0
  1059. package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +1 -0
  1060. package/src/duckdb/src/include/duckdb/storage/temporary_file_manager.hpp +228 -61
  1061. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +14 -10
  1062. package/src/duckdb/src/include/duckdb/transaction/commit_state.hpp +3 -1
  1063. package/src/duckdb/src/include/duckdb/transaction/duck_transaction.hpp +3 -2
  1064. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +1 -0
  1065. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +19 -17
  1066. package/src/duckdb/src/include/duckdb/transaction/rollback_state.hpp +5 -2
  1067. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +1 -2
  1068. package/src/duckdb/src/include/duckdb/transaction/undo_buffer.hpp +13 -8
  1069. package/src/duckdb/src/include/duckdb/transaction/undo_buffer_allocator.hpp +79 -0
  1070. package/src/duckdb/src/include/duckdb/transaction/update_info.hpp +43 -13
  1071. package/src/duckdb/src/include/duckdb/transaction/wal_write_state.hpp +4 -1
  1072. package/src/duckdb/src/include/duckdb/verification/copied_statement_verifier.hpp +4 -2
  1073. package/src/duckdb/src/include/duckdb/verification/deserialized_statement_verifier.hpp +4 -2
  1074. package/src/duckdb/src/include/duckdb/verification/external_statement_verifier.hpp +4 -2
  1075. package/src/duckdb/src/include/duckdb/verification/fetch_row_verifier.hpp +4 -2
  1076. package/src/duckdb/src/include/duckdb/verification/no_operator_caching_verifier.hpp +4 -2
  1077. package/src/duckdb/src/include/duckdb/verification/parsed_statement_verifier.hpp +4 -2
  1078. package/src/duckdb/src/include/duckdb/verification/prepared_statement_verifier.hpp +7 -3
  1079. package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +11 -5
  1080. package/src/duckdb/src/include/duckdb/verification/unoptimized_statement_verifier.hpp +4 -2
  1081. package/src/duckdb/src/include/duckdb.h +424 -41
  1082. package/src/duckdb/src/include/duckdb_extension.h +301 -195
  1083. package/src/duckdb/src/logging/log_manager.cpp +157 -0
  1084. package/src/duckdb/src/logging/log_storage.cpp +209 -0
  1085. package/src/duckdb/src/logging/logger.cpp +211 -0
  1086. package/src/duckdb/src/logging/logging.cpp +42 -0
  1087. package/src/duckdb/src/main/appender.cpp +187 -45
  1088. package/src/duckdb/src/main/attached_database.cpp +16 -8
  1089. package/src/duckdb/src/main/capi/appender-c.cpp +47 -4
  1090. package/src/duckdb/src/main/capi/arrow-c.cpp +9 -4
  1091. package/src/duckdb/src/main/capi/config-c.cpp +17 -4
  1092. package/src/duckdb/src/main/capi/datetime-c.cpp +15 -0
  1093. package/src/duckdb/src/main/capi/duckdb-c.cpp +54 -13
  1094. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +212 -4
  1095. package/src/duckdb/src/main/capi/helper-c.cpp +3 -0
  1096. package/src/duckdb/src/main/capi/prepared-c.cpp +26 -7
  1097. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +1 -1
  1098. package/src/duckdb/src/main/capi/result-c.cpp +3 -0
  1099. package/src/duckdb/src/main/capi/table_description-c.cpp +43 -10
  1100. package/src/duckdb/src/main/capi/threading-c.cpp +4 -4
  1101. package/src/duckdb/src/main/client_context.cpp +125 -51
  1102. package/src/duckdb/src/main/client_context_file_opener.cpp +4 -0
  1103. package/src/duckdb/src/main/client_context_wrapper.cpp +4 -0
  1104. package/src/duckdb/src/main/client_data.cpp +1 -1
  1105. package/src/duckdb/src/main/client_verify.cpp +39 -20
  1106. package/src/duckdb/src/main/config.cpp +266 -74
  1107. package/src/duckdb/src/main/connection.cpp +53 -13
  1108. package/src/duckdb/src/main/database.cpp +39 -18
  1109. package/src/duckdb/src/main/database_manager.cpp +12 -11
  1110. package/src/duckdb/src/main/db_instance_cache.cpp +14 -7
  1111. package/src/duckdb/src/main/extension/extension_helper.cpp +24 -23
  1112. package/src/duckdb/src/main/extension/extension_install.cpp +19 -7
  1113. package/src/duckdb/src/main/extension/extension_load.cpp +91 -41
  1114. package/src/duckdb/src/main/extension/extension_util.cpp +40 -19
  1115. package/src/duckdb/src/main/extension.cpp +20 -11
  1116. package/src/duckdb/src/main/profiling_info.cpp +19 -5
  1117. package/src/duckdb/src/main/query_profiler.cpp +135 -36
  1118. package/src/duckdb/src/main/query_result.cpp +2 -1
  1119. package/src/duckdb/src/main/relation/aggregate_relation.cpp +3 -3
  1120. package/src/duckdb/src/main/relation/create_table_relation.cpp +5 -4
  1121. package/src/duckdb/src/main/relation/create_view_relation.cpp +2 -2
  1122. package/src/duckdb/src/main/relation/cross_product_relation.cpp +2 -2
  1123. package/src/duckdb/src/main/relation/delete_relation.cpp +2 -2
  1124. package/src/duckdb/src/main/relation/delim_get_relation.cpp +1 -1
  1125. package/src/duckdb/src/main/relation/distinct_relation.cpp +1 -1
  1126. package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
  1127. package/src/duckdb/src/main/relation/filter_relation.cpp +1 -1
  1128. package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
  1129. package/src/duckdb/src/main/relation/join_relation.cpp +5 -5
  1130. package/src/duckdb/src/main/relation/order_relation.cpp +1 -1
  1131. package/src/duckdb/src/main/relation/projection_relation.cpp +3 -3
  1132. package/src/duckdb/src/main/relation/query_relation.cpp +1 -1
  1133. package/src/duckdb/src/main/relation/read_csv_relation.cpp +58 -20
  1134. package/src/duckdb/src/main/relation/setop_relation.cpp +2 -2
  1135. package/src/duckdb/src/main/relation/subquery_relation.cpp +3 -8
  1136. package/src/duckdb/src/main/relation/table_function_relation.cpp +10 -1
  1137. package/src/duckdb/src/main/relation/table_relation.cpp +19 -3
  1138. package/src/duckdb/src/main/relation/update_relation.cpp +2 -2
  1139. package/src/duckdb/src/main/relation/value_relation.cpp +42 -2
  1140. package/src/duckdb/src/main/relation/view_relation.cpp +8 -2
  1141. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  1142. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  1143. package/src/duckdb/src/main/relation.cpp +49 -28
  1144. package/src/duckdb/src/main/secret/secret_manager.cpp +1 -1
  1145. package/src/duckdb/src/main/secret/secret_storage.cpp +6 -4
  1146. package/src/duckdb/src/main/settings/autogenerated_settings.cpp +1102 -0
  1147. package/src/duckdb/src/main/settings/custom_settings.cpp +1343 -0
  1148. package/src/duckdb/src/optimizer/build_probe_side_optimizer.cpp +60 -37
  1149. package/src/duckdb/src/optimizer/column_binding_replacer.cpp +1 -1
  1150. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +126 -72
  1151. package/src/duckdb/src/optimizer/common_aggregate_optimizer.cpp +22 -6
  1152. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +3 -3
  1153. package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +2 -2
  1154. package/src/duckdb/src/optimizer/compressed_materialization.cpp +3 -3
  1155. package/src/duckdb/src/optimizer/cse_optimizer.cpp +7 -7
  1156. package/src/duckdb/src/optimizer/deliminator.cpp +6 -5
  1157. package/src/duckdb/src/optimizer/empty_result_pullup.cpp +96 -0
  1158. package/src/duckdb/src/optimizer/expression_heuristics.cpp +11 -3
  1159. package/src/duckdb/src/optimizer/expression_rewriter.cpp +9 -2
  1160. package/src/duckdb/src/optimizer/filter_combiner.cpp +190 -88
  1161. package/src/duckdb/src/optimizer/filter_pushdown.cpp +6 -5
  1162. package/src/duckdb/src/optimizer/in_clause_rewriter.cpp +25 -9
  1163. package/src/duckdb/src/optimizer/join_filter_pushdown_optimizer.cpp +170 -72
  1164. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +5 -4
  1165. package/src/duckdb/src/optimizer/join_order/plan_enumerator.cpp +3 -1
  1166. package/src/duckdb/src/optimizer/join_order/query_graph_manager.cpp +7 -7
  1167. package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +15 -6
  1168. package/src/duckdb/src/optimizer/join_order/relation_statistics_helper.cpp +37 -22
  1169. package/src/duckdb/src/optimizer/late_materialization.cpp +414 -0
  1170. package/src/duckdb/src/optimizer/limit_pushdown.cpp +1 -0
  1171. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +30 -2
  1172. package/src/duckdb/src/optimizer/optimizer.cpp +67 -7
  1173. package/src/duckdb/src/optimizer/pullup/pullup_filter.cpp +3 -3
  1174. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  1175. package/src/duckdb/src/optimizer/pullup/pullup_set_operation.cpp +1 -1
  1176. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +2 -2
  1177. package/src/duckdb/src/optimizer/pushdown/pushdown_filter.cpp +1 -1
  1178. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +1 -1
  1179. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +3 -3
  1180. package/src/duckdb/src/optimizer/pushdown/pushdown_projection.cpp +5 -3
  1181. package/src/duckdb/src/optimizer/pushdown/pushdown_set_operation.cpp +1 -1
  1182. package/src/duckdb/src/optimizer/pushdown/pushdown_unnest.cpp +52 -0
  1183. package/src/duckdb/src/optimizer/pushdown/pushdown_window.cpp +2 -2
  1184. package/src/duckdb/src/optimizer/regex_range_filter.cpp +1 -1
  1185. package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +1 -1
  1186. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +168 -38
  1187. package/src/duckdb/src/optimizer/rule/arithmetic_simplification.cpp +2 -1
  1188. package/src/duckdb/src/optimizer/rule/comparison_simplification.cpp +8 -5
  1189. package/src/duckdb/src/optimizer/rule/conjunction_simplification.cpp +2 -2
  1190. package/src/duckdb/src/optimizer/rule/constant_folding.cpp +2 -2
  1191. package/src/duckdb/src/optimizer/rule/distinct_aggregate_optimizer.cpp +65 -0
  1192. package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
  1193. package/src/duckdb/src/optimizer/rule/enum_comparison.cpp +2 -1
  1194. package/src/duckdb/src/optimizer/rule/equal_or_null_simplification.cpp +4 -3
  1195. package/src/duckdb/src/optimizer/rule/in_clause_simplification_rule.cpp +3 -3
  1196. package/src/duckdb/src/optimizer/rule/like_optimizations.cpp +3 -1
  1197. package/src/duckdb/src/optimizer/rule/move_constants.cpp +9 -9
  1198. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +4 -3
  1199. package/src/duckdb/src/optimizer/rule/timestamp_comparison.cpp +1 -1
  1200. package/src/duckdb/src/optimizer/sampling_pushdown.cpp +24 -0
  1201. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +1 -1
  1202. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +1 -1
  1203. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +1 -1
  1204. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +74 -0
  1205. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +10 -7
  1206. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +3 -3
  1207. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +3 -3
  1208. package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +3 -0
  1209. package/src/duckdb/src/optimizer/sum_rewriter.cpp +174 -0
  1210. package/src/duckdb/src/optimizer/topn_optimizer.cpp +71 -0
  1211. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +5 -5
  1212. package/src/duckdb/src/parallel/event.cpp +4 -0
  1213. package/src/duckdb/src/parallel/executor.cpp +11 -29
  1214. package/src/duckdb/src/parallel/executor_task.cpp +8 -3
  1215. package/src/duckdb/src/parallel/pipeline.cpp +15 -8
  1216. package/src/duckdb/src/parallel/pipeline_executor.cpp +67 -43
  1217. package/src/duckdb/src/parallel/thread_context.cpp +12 -1
  1218. package/src/duckdb/src/parser/column_definition.cpp +3 -3
  1219. package/src/duckdb/src/parser/constraints/unique_constraint.cpp +72 -9
  1220. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -3
  1221. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +1 -1
  1222. package/src/duckdb/src/parser/expression/function_expression.cpp +1 -1
  1223. package/src/duckdb/src/parser/expression/lambda_expression.cpp +3 -3
  1224. package/src/duckdb/src/parser/expression/lambdaref_expression.cpp +1 -1
  1225. package/src/duckdb/src/parser/expression/star_expression.cpp +46 -2
  1226. package/src/duckdb/src/parser/expression/window_expression.cpp +24 -1
  1227. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +26 -2
  1228. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +5 -3
  1229. package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +29 -1
  1230. package/src/duckdb/src/parser/parsed_data/attach_info.cpp +6 -6
  1231. package/src/duckdb/src/parser/parsed_data/create_aggregate_function_info.cpp +1 -1
  1232. package/src/duckdb/src/parser/parsed_data/create_function_info.cpp +17 -0
  1233. package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +16 -15
  1234. package/src/duckdb/src/parser/parsed_data/create_macro_info.cpp +1 -1
  1235. package/src/duckdb/src/parser/parsed_data/create_pragma_function_info.cpp +1 -1
  1236. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  1237. package/src/duckdb/src/parser/parsed_data/create_schema_info.cpp +1 -1
  1238. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +1 -1
  1239. package/src/duckdb/src/parser/parsed_data/create_table_info.cpp +1 -0
  1240. package/src/duckdb/src/parser/parsed_data/create_type_info.cpp +4 -4
  1241. package/src/duckdb/src/parser/parsed_data/load_info.cpp +1 -0
  1242. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +31 -1
  1243. package/src/duckdb/src/parser/parsed_expression.cpp +1 -1
  1244. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -1
  1245. package/src/duckdb/src/parser/parser.cpp +129 -0
  1246. package/src/duckdb/src/parser/qualified_name.cpp +99 -0
  1247. package/src/duckdb/src/parser/query_error_context.cpp +35 -6
  1248. package/src/duckdb/src/parser/query_node/select_node.cpp +4 -4
  1249. package/src/duckdb/src/parser/statement/delete_statement.cpp +6 -1
  1250. package/src/duckdb/src/parser/statement/insert_statement.cpp +4 -3
  1251. package/src/duckdb/src/parser/statement/update_statement.cpp +6 -1
  1252. package/src/duckdb/src/parser/tableref/pivotref.cpp +2 -2
  1253. package/src/duckdb/src/parser/tableref.cpp +2 -2
  1254. package/src/duckdb/src/parser/transform/constraint/transform_constraint.cpp +16 -24
  1255. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +1 -1
  1256. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +5 -5
  1257. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +61 -13
  1258. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +10 -4
  1259. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -2
  1260. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +30 -3
  1261. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  1262. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +25 -6
  1263. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +1 -1
  1264. package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +10 -3
  1265. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +4 -3
  1266. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +18 -3
  1267. package/src/duckdb/src/parser/transform/statement/transform_comment_on.cpp +1 -1
  1268. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +0 -1
  1269. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +5 -5
  1270. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -12
  1271. package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +11 -3
  1272. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +1 -1
  1273. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +2 -0
  1274. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +3 -3
  1275. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +4 -4
  1276. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +2 -2
  1277. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +21 -3
  1278. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +8 -6
  1279. package/src/duckdb/src/parser/transformer.cpp +2 -2
  1280. package/src/duckdb/src/planner/bind_context.cpp +308 -136
  1281. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +30 -31
  1282. package/src/duckdb/src/planner/binder/expression/bind_between_expression.cpp +4 -2
  1283. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +102 -94
  1284. package/src/duckdb/src/planner/binder/expression/bind_comparison_expression.cpp +7 -5
  1285. package/src/duckdb/src/planner/binder/expression/bind_conjunction_expression.cpp +1 -1
  1286. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +7 -7
  1287. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +10 -10
  1288. package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +24 -6
  1289. package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +23 -15
  1290. package/src/duckdb/src/planner/binder/expression/bind_parameter_expression.cpp +1 -1
  1291. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +97 -19
  1292. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +74 -16
  1293. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +6 -6
  1294. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +49 -15
  1295. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +32 -23
  1296. package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +20 -3
  1297. package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +2 -2
  1298. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +3 -0
  1299. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +6 -5
  1300. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +38 -19
  1301. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +2 -12
  1302. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +117 -412
  1303. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +423 -144
  1304. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  1305. package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +5 -0
  1306. package/src/duckdb/src/planner/binder/statement/bind_execute.cpp +1 -1
  1307. package/src/duckdb/src/planner/binder/statement/bind_export.cpp +0 -4
  1308. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +31 -13
  1309. package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +1 -1
  1310. package/src/duckdb/src/planner/binder/statement/bind_simple.cpp +96 -27
  1311. package/src/duckdb/src/planner/binder/statement/bind_summarize.cpp +1 -1
  1312. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +5 -3
  1313. package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +7 -6
  1314. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +36 -9
  1315. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +34 -34
  1316. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +72 -35
  1317. package/src/duckdb/src/planner/binder/tableref/bind_showref.cpp +99 -18
  1318. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +23 -11
  1319. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +22 -19
  1320. package/src/duckdb/src/planner/binder.cpp +23 -45
  1321. package/src/duckdb/src/planner/binding_alias.cpp +69 -0
  1322. package/src/duckdb/src/planner/bound_parameter_map.cpp +1 -1
  1323. package/src/duckdb/src/planner/bound_result_modifier.cpp +6 -2
  1324. package/src/duckdb/src/planner/collation_binding.cpp +38 -4
  1325. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +17 -5
  1326. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
  1327. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +8 -1
  1328. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
  1329. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +24 -4
  1330. package/src/duckdb/src/planner/expression.cpp +7 -1
  1331. package/src/duckdb/src/planner/expression_binder/aggregate_binder.cpp +1 -1
  1332. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
  1333. package/src/duckdb/src/planner/expression_binder/group_binder.cpp +2 -2
  1334. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +16 -0
  1335. package/src/duckdb/src/planner/expression_binder/index_binder.cpp +53 -1
  1336. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +3 -3
  1337. package/src/duckdb/src/planner/expression_binder/order_binder.cpp +8 -8
  1338. package/src/duckdb/src/planner/expression_binder/relation_binder.cpp +1 -1
  1339. package/src/duckdb/src/planner/expression_binder/select_bind_state.cpp +2 -2
  1340. package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +1 -1
  1341. package/src/duckdb/src/planner/expression_binder/update_binder.cpp +1 -1
  1342. package/src/duckdb/src/planner/expression_binder.cpp +7 -7
  1343. package/src/duckdb/src/planner/expression_iterator.cpp +6 -3
  1344. package/src/duckdb/src/planner/filter/constant_filter.cpp +17 -2
  1345. package/src/duckdb/src/planner/filter/dynamic_filter.cpp +68 -0
  1346. package/src/duckdb/src/planner/filter/in_filter.cpp +84 -0
  1347. package/src/duckdb/src/planner/filter/null_filter.cpp +1 -2
  1348. package/src/duckdb/src/planner/filter/optional_filter.cpp +29 -0
  1349. package/src/duckdb/src/planner/filter/struct_filter.cpp +11 -6
  1350. package/src/duckdb/src/planner/joinside.cpp +6 -5
  1351. package/src/duckdb/src/planner/logical_operator.cpp +4 -1
  1352. package/src/duckdb/src/planner/logical_operator_visitor.cpp +68 -2
  1353. package/src/duckdb/src/planner/operator/logical_comparison_join.cpp +23 -0
  1354. package/src/duckdb/src/planner/operator/logical_create_index.cpp +16 -12
  1355. package/src/duckdb/src/planner/operator/logical_filter.cpp +1 -1
  1356. package/src/duckdb/src/planner/operator/logical_get.cpp +48 -25
  1357. package/src/duckdb/src/planner/operator/logical_insert.cpp +1 -1
  1358. package/src/duckdb/src/planner/operator/logical_join.cpp +1 -1
  1359. package/src/duckdb/src/planner/operator/logical_order.cpp +4 -11
  1360. package/src/duckdb/src/planner/operator/logical_top_n.cpp +7 -0
  1361. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +33 -5
  1362. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +2 -2
  1363. package/src/duckdb/src/planner/table_binding.cpp +74 -36
  1364. package/src/duckdb/src/planner/table_filter.cpp +5 -8
  1365. package/src/duckdb/src/storage/arena_allocator.cpp +5 -4
  1366. package/src/duckdb/src/storage/buffer/block_handle.cpp +88 -17
  1367. package/src/duckdb/src/storage/buffer/block_manager.cpp +34 -26
  1368. package/src/duckdb/src/storage/buffer/buffer_handle.cpp +2 -2
  1369. package/src/duckdb/src/storage/buffer/buffer_pool.cpp +70 -49
  1370. package/src/duckdb/src/storage/buffer_manager.cpp +4 -0
  1371. package/src/duckdb/src/storage/checkpoint_manager.cpp +24 -5
  1372. package/src/duckdb/src/storage/compression/bitpacking.cpp +14 -16
  1373. package/src/duckdb/src/storage/compression/dictionary/analyze.cpp +54 -0
  1374. package/src/duckdb/src/storage/compression/dictionary/common.cpp +90 -0
  1375. package/src/duckdb/src/storage/compression/dictionary/compression.cpp +174 -0
  1376. package/src/duckdb/src/storage/compression/dictionary/decompression.cpp +115 -0
  1377. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +53 -545
  1378. package/src/duckdb/src/storage/compression/empty_validity.cpp +15 -0
  1379. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +25 -16
  1380. package/src/duckdb/src/storage/compression/fsst.cpp +101 -47
  1381. package/src/duckdb/src/storage/compression/numeric_constant.cpp +92 -2
  1382. package/src/duckdb/src/storage/compression/rle.cpp +216 -46
  1383. package/src/duckdb/src/storage/compression/roaring/analyze.cpp +179 -0
  1384. package/src/duckdb/src/storage/compression/roaring/common.cpp +282 -0
  1385. package/src/duckdb/src/storage/compression/roaring/compress.cpp +481 -0
  1386. package/src/duckdb/src/storage/compression/roaring/metadata.cpp +262 -0
  1387. package/src/duckdb/src/storage/compression/roaring/scan.cpp +364 -0
  1388. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +47 -65
  1389. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +102 -39
  1390. package/src/duckdb/src/storage/compression/zstd.cpp +1049 -0
  1391. package/src/duckdb/src/storage/data_table.cpp +312 -172
  1392. package/src/duckdb/src/storage/local_storage.cpp +104 -46
  1393. package/src/duckdb/src/storage/metadata/metadata_manager.cpp +1 -1
  1394. package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +7 -3
  1395. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +138 -58
  1396. package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +14 -0
  1397. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +19 -8
  1398. package/src/duckdb/src/storage/serialization/serialize_statement.cpp +2 -0
  1399. package/src/duckdb/src/storage/serialization/serialize_table_filter.cpp +43 -0
  1400. package/src/duckdb/src/storage/serialization/serialize_types.cpp +32 -5
  1401. package/src/duckdb/src/storage/single_file_block_manager.cpp +6 -8
  1402. package/src/duckdb/src/storage/standard_buffer_manager.cpp +82 -71
  1403. package/src/duckdb/src/storage/statistics/column_statistics.cpp +3 -3
  1404. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +18 -17
  1405. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +34 -22
  1406. package/src/duckdb/src/storage/statistics/string_stats.cpp +14 -3
  1407. package/src/duckdb/src/storage/storage_info.cpp +72 -10
  1408. package/src/duckdb/src/storage/storage_manager.cpp +41 -47
  1409. package/src/duckdb/src/storage/table/array_column_data.cpp +7 -1
  1410. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +10 -9
  1411. package/src/duckdb/src/storage/table/column_data.cpp +105 -43
  1412. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +307 -132
  1413. package/src/duckdb/src/storage/table/column_segment.cpp +36 -13
  1414. package/src/duckdb/src/storage/table/list_column_data.cpp +4 -4
  1415. package/src/duckdb/src/storage/table/row_group.cpp +159 -66
  1416. package/src/duckdb/src/storage/table/row_group_collection.cpp +157 -68
  1417. package/src/duckdb/src/storage/table/row_version_manager.cpp +33 -10
  1418. package/src/duckdb/src/storage/table/scan_state.cpp +21 -7
  1419. package/src/duckdb/src/storage/table/standard_column_data.cpp +68 -5
  1420. package/src/duckdb/src/storage/table/struct_column_data.cpp +42 -4
  1421. package/src/duckdb/src/storage/table/table_statistics.cpp +91 -5
  1422. package/src/duckdb/src/storage/table/update_segment.cpp +287 -210
  1423. package/src/duckdb/src/storage/table_index_list.cpp +55 -58
  1424. package/src/duckdb/src/storage/temporary_file_manager.cpp +412 -149
  1425. package/src/duckdb/src/storage/wal_replay.cpp +132 -48
  1426. package/src/duckdb/src/storage/write_ahead_log.cpp +75 -48
  1427. package/src/duckdb/src/transaction/cleanup_state.cpp +0 -1
  1428. package/src/duckdb/src/transaction/commit_state.cpp +23 -14
  1429. package/src/duckdb/src/transaction/duck_transaction.cpp +29 -25
  1430. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +18 -6
  1431. package/src/duckdb/src/transaction/meta_transaction.cpp +3 -2
  1432. package/src/duckdb/src/transaction/rollback_state.cpp +5 -2
  1433. package/src/duckdb/src/transaction/transaction_context.cpp +9 -1
  1434. package/src/duckdb/src/transaction/undo_buffer.cpp +35 -27
  1435. package/src/duckdb/src/transaction/undo_buffer_allocator.cpp +72 -0
  1436. package/src/duckdb/src/transaction/wal_write_state.cpp +12 -10
  1437. package/src/duckdb/src/verification/copied_statement_verifier.cpp +7 -4
  1438. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +7 -5
  1439. package/src/duckdb/src/verification/external_statement_verifier.cpp +7 -4
  1440. package/src/duckdb/src/verification/fetch_row_verifier.cpp +7 -4
  1441. package/src/duckdb/src/verification/no_operator_caching_verifier.cpp +8 -4
  1442. package/src/duckdb/src/verification/parsed_statement_verifier.cpp +7 -4
  1443. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +16 -12
  1444. package/src/duckdb/src/verification/statement_verifier.cpp +20 -15
  1445. package/src/duckdb/src/verification/unoptimized_statement_verifier.cpp +7 -4
  1446. package/src/duckdb/third_party/fsst/libfsst.hpp +1 -0
  1447. package/src/duckdb/third_party/httplib/httplib.hpp +15 -22
  1448. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +4 -2
  1449. package/src/duckdb/third_party/libpg_query/pg_functions.cpp +2 -4
  1450. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +14278 -13832
  1451. package/src/duckdb/third_party/parquet/parquet_types.cpp +3410 -1686
  1452. package/src/duckdb/third_party/parquet/parquet_types.h +1585 -1204
  1453. package/src/duckdb/third_party/skiplist/SkipList.h +0 -1
  1454. package/src/duckdb/third_party/snappy/snappy-stubs-internal.h +13 -15
  1455. package/src/duckdb/third_party/zstd/common/debug.cpp +36 -0
  1456. package/src/duckdb/third_party/zstd/common/entropy_common.cpp +173 -49
  1457. package/src/duckdb/third_party/zstd/common/error_private.cpp +11 -3
  1458. package/src/duckdb/third_party/zstd/common/fse_decompress.cpp +126 -97
  1459. package/src/duckdb/third_party/zstd/common/pool.cpp +376 -0
  1460. package/src/duckdb/third_party/zstd/common/threading.cpp +193 -0
  1461. package/src/duckdb/third_party/zstd/common/xxhash.cpp +18 -14
  1462. package/src/duckdb/third_party/zstd/common/zstd_common.cpp +3 -38
  1463. package/src/duckdb/third_party/zstd/compress/fse_compress.cpp +93 -165
  1464. package/src/duckdb/third_party/zstd/compress/hist.cpp +28 -31
  1465. package/src/duckdb/third_party/zstd/compress/huf_compress.cpp +957 -291
  1466. package/src/duckdb/third_party/zstd/compress/zstd_compress.cpp +3988 -1124
  1467. package/src/duckdb/third_party/zstd/compress/zstd_compress_literals.cpp +120 -43
  1468. package/src/duckdb/third_party/zstd/compress/zstd_compress_sequences.cpp +47 -23
  1469. package/src/duckdb/third_party/zstd/compress/zstd_compress_superblock.cpp +274 -424
  1470. package/src/duckdb/third_party/zstd/compress/zstd_double_fast.cpp +403 -153
  1471. package/src/duckdb/third_party/zstd/compress/zstd_fast.cpp +741 -268
  1472. package/src/duckdb/third_party/zstd/compress/zstd_lazy.cpp +1339 -278
  1473. package/src/duckdb/third_party/zstd/compress/zstd_ldm.cpp +334 -222
  1474. package/src/duckdb/third_party/zstd/compress/zstd_opt.cpp +674 -298
  1475. package/src/duckdb/third_party/zstd/compress/zstdmt_compress.cpp +1885 -0
  1476. package/src/duckdb/third_party/zstd/decompress/huf_decompress.cpp +1247 -586
  1477. package/src/duckdb/third_party/zstd/decompress/zstd_ddict.cpp +18 -17
  1478. package/src/duckdb/third_party/zstd/decompress/zstd_decompress.cpp +724 -270
  1479. package/src/duckdb/third_party/zstd/decompress/zstd_decompress_block.cpp +1193 -393
  1480. package/src/duckdb/third_party/zstd/deprecated/zbuff_common.cpp +30 -0
  1481. package/src/duckdb/third_party/zstd/deprecated/zbuff_compress.cpp +171 -0
  1482. package/src/duckdb/third_party/zstd/deprecated/zbuff_decompress.cpp +80 -0
  1483. package/src/duckdb/third_party/zstd/dict/cover.cpp +1271 -0
  1484. package/src/duckdb/third_party/zstd/dict/divsufsort.cpp +1916 -0
  1485. package/src/duckdb/third_party/zstd/dict/fastcover.cpp +775 -0
  1486. package/src/duckdb/third_party/zstd/dict/zdict.cpp +1139 -0
  1487. package/src/duckdb/third_party/zstd/include/zdict.h +473 -0
  1488. package/src/duckdb/third_party/zstd/include/zstd/common/allocations.h +58 -0
  1489. package/src/duckdb/third_party/zstd/include/zstd/common/bits.h +204 -0
  1490. package/src/duckdb/third_party/zstd/include/zstd/common/bitstream.h +88 -85
  1491. package/src/duckdb/third_party/zstd/include/zstd/common/compiler.h +243 -47
  1492. package/src/duckdb/third_party/zstd/include/zstd/common/cpu.h +253 -0
  1493. package/src/duckdb/third_party/zstd/include/zstd/common/debug.h +31 -31
  1494. package/src/duckdb/third_party/zstd/include/zstd/common/error_private.h +94 -6
  1495. package/src/duckdb/third_party/zstd/include/zstd/common/fse.h +424 -64
  1496. package/src/duckdb/third_party/zstd/include/zstd/common/huf.h +255 -70
  1497. package/src/duckdb/third_party/zstd/include/zstd/common/mem.h +125 -85
  1498. package/src/duckdb/third_party/zstd/include/zstd/common/pool.h +84 -0
  1499. package/src/duckdb/third_party/zstd/include/zstd/common/portability_macros.h +158 -0
  1500. package/src/duckdb/third_party/zstd/include/zstd/common/threading.h +152 -0
  1501. package/src/duckdb/third_party/zstd/include/zstd/common/{xxhash.h → xxhash.hpp} +0 -1
  1502. package/src/duckdb/third_party/zstd/include/zstd/common/{xxhash_static.h → xxhash_static.hpp} +1 -1
  1503. package/src/duckdb/third_party/zstd/include/zstd/common/zstd_deps.h +122 -0
  1504. package/src/duckdb/third_party/zstd/include/zstd/common/zstd_internal.h +143 -174
  1505. package/src/duckdb/third_party/zstd/include/zstd/common/zstd_trace.h +159 -0
  1506. package/src/duckdb/third_party/zstd/include/zstd/compress/clevels.h +136 -0
  1507. package/src/duckdb/third_party/zstd/include/zstd/compress/hist.h +4 -4
  1508. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_compress_internal.h +631 -220
  1509. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_compress_literals.h +17 -7
  1510. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_compress_sequences.h +2 -2
  1511. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_compress_superblock.h +3 -2
  1512. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_cwksp.h +256 -153
  1513. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_double_fast.h +16 -3
  1514. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_fast.h +4 -3
  1515. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_lazy.h +145 -11
  1516. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_ldm.h +14 -6
  1517. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_ldm_geartab.h +110 -0
  1518. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_opt.h +33 -9
  1519. package/src/duckdb/third_party/zstd/include/zstd/compress/zstdmt_compress.h +107 -0
  1520. package/src/duckdb/third_party/zstd/include/zstd/decompress/zstd_ddict.h +4 -3
  1521. package/src/duckdb/third_party/zstd/include/zstd/decompress/zstd_decompress_block.h +20 -6
  1522. package/src/duckdb/third_party/zstd/include/zstd/decompress/zstd_decompress_internal.h +88 -16
  1523. package/src/duckdb/third_party/zstd/include/zstd/deprecated/zbuff.h +214 -0
  1524. package/src/duckdb/third_party/zstd/include/zstd/dict/cover.h +156 -0
  1525. package/src/duckdb/third_party/zstd/include/zstd/dict/divsufsort.h +62 -0
  1526. package/src/duckdb/third_party/zstd/include/zstd.h +2171 -93
  1527. package/src/duckdb/third_party/zstd/include/{zstd/common/zstd_errors.h → zstd_errors.h} +32 -10
  1528. package/src/duckdb/ub_extension_core_functions_aggregate_algebraic.cpp +8 -0
  1529. package/src/duckdb/ub_extension_core_functions_aggregate_distributive.cpp +20 -0
  1530. package/src/duckdb/ub_extension_core_functions_aggregate_holistic.cpp +12 -0
  1531. package/src/duckdb/ub_extension_core_functions_aggregate_nested.cpp +6 -0
  1532. package/src/duckdb/ub_extension_core_functions_aggregate_regression.cpp +14 -0
  1533. package/src/duckdb/ub_extension_core_functions_scalar_array.cpp +4 -0
  1534. package/src/duckdb/ub_extension_core_functions_scalar_bit.cpp +2 -0
  1535. package/src/duckdb/ub_extension_core_functions_scalar_blob.cpp +4 -0
  1536. package/src/duckdb/ub_extension_core_functions_scalar_date.cpp +20 -0
  1537. package/src/duckdb/ub_extension_core_functions_scalar_debug.cpp +2 -0
  1538. package/src/duckdb/ub_extension_core_functions_scalar_enum.cpp +2 -0
  1539. package/src/duckdb/ub_extension_core_functions_scalar_generic.cpp +18 -0
  1540. package/src/duckdb/ub_extension_core_functions_scalar_list.cpp +22 -0
  1541. package/src/duckdb/ub_extension_core_functions_scalar_map.cpp +14 -0
  1542. package/src/duckdb/ub_extension_core_functions_scalar_math.cpp +2 -0
  1543. package/src/duckdb/ub_extension_core_functions_scalar_operators.cpp +2 -0
  1544. package/src/duckdb/ub_extension_core_functions_scalar_random.cpp +4 -0
  1545. package/src/duckdb/ub_extension_core_functions_scalar_string.cpp +48 -0
  1546. package/src/duckdb/ub_extension_core_functions_scalar_struct.cpp +2 -0
  1547. package/src/duckdb/ub_extension_core_functions_scalar_union.cpp +6 -0
  1548. package/src/duckdb/ub_src_common.cpp +4 -0
  1549. package/src/duckdb/ub_src_common_arrow.cpp +3 -1
  1550. package/src/duckdb/ub_src_execution.cpp +0 -6
  1551. package/src/duckdb/ub_src_execution_operator_aggregate.cpp +2 -0
  1552. package/src/duckdb/ub_src_execution_operator_csv_scanner_encode.cpp +2 -0
  1553. package/src/duckdb/ub_src_execution_operator_csv_scanner_util.cpp +2 -0
  1554. package/src/duckdb/ub_src_execution_sample.cpp +4 -0
  1555. package/src/duckdb/ub_src_function.cpp +6 -0
  1556. package/src/duckdb/ub_src_function_aggregate.cpp +0 -2
  1557. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +3 -1
  1558. package/src/duckdb/ub_src_function_scalar.cpp +2 -8
  1559. package/src/duckdb/ub_src_function_scalar_date.cpp +2 -0
  1560. package/src/duckdb/ub_src_function_scalar_generic.cpp +2 -2
  1561. package/src/duckdb/ub_src_function_scalar_map.cpp +2 -0
  1562. package/src/duckdb/ub_src_function_scalar_operator.cpp +8 -0
  1563. package/src/duckdb/ub_src_function_scalar_string.cpp +10 -0
  1564. package/src/duckdb/ub_src_function_scalar_struct.cpp +4 -0
  1565. package/src/duckdb/ub_src_function_scalar_system.cpp +2 -0
  1566. package/src/duckdb/ub_src_function_table_system.cpp +6 -0
  1567. package/src/duckdb/ub_src_function_window.cpp +36 -0
  1568. package/src/duckdb/ub_src_logging.cpp +8 -0
  1569. package/src/duckdb/ub_src_main_settings.cpp +3 -1
  1570. package/src/duckdb/ub_src_optimizer.cpp +8 -0
  1571. package/src/duckdb/ub_src_optimizer_pushdown.cpp +2 -0
  1572. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  1573. package/src/duckdb/ub_src_parser.cpp +2 -0
  1574. package/src/duckdb/ub_src_parser_parsed_data.cpp +2 -0
  1575. package/src/duckdb/ub_src_planner.cpp +2 -0
  1576. package/src/duckdb/ub_src_planner_filter.cpp +6 -0
  1577. package/src/duckdb/ub_src_storage_compression.cpp +4 -0
  1578. package/src/duckdb/ub_src_storage_compression_dictionary.cpp +8 -0
  1579. package/src/duckdb/ub_src_storage_compression_roaring.cpp +10 -0
  1580. package/src/duckdb/ub_src_transaction.cpp +2 -0
  1581. package/vendor.py +1 -1
  1582. package/src/duckdb/extension/json/yyjson/include/yyjson.hpp +0 -6003
  1583. package/src/duckdb/extension/json/yyjson/yyjson.cpp +0 -8218
  1584. package/src/duckdb/src/common/arrow/appender/list_data.cpp +0 -78
  1585. package/src/duckdb/src/common/arrow/appender/map_data.cpp +0 -91
  1586. package/src/duckdb/src/common/cycle_counter.cpp +0 -76
  1587. package/src/duckdb/src/common/field_writer.cpp +0 -97
  1588. package/src/duckdb/src/common/http_state.cpp +0 -95
  1589. package/src/duckdb/src/common/preserved_error.cpp +0 -87
  1590. package/src/duckdb/src/common/row_operations/row_match.cpp +0 -359
  1591. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +0 -27
  1592. package/src/duckdb/src/common/serializer/buffered_serializer.cpp +0 -36
  1593. package/src/duckdb/src/common/serializer/format_serializer.cpp +0 -15
  1594. package/src/duckdb/src/common/serializer.cpp +0 -24
  1595. package/src/duckdb/src/common/types/chunk_collection.cpp +0 -190
  1596. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +0 -183
  1597. package/src/duckdb/src/core_functions/scalar/date/current.cpp +0 -54
  1598. package/src/duckdb/src/core_functions/scalar/list/list_cosine_similarity.cpp +0 -78
  1599. package/src/duckdb/src/core_functions/scalar/list/list_inner_product.cpp +0 -70
  1600. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +0 -412
  1601. package/src/duckdb/src/core_functions/scalar/secret/which_secret.cpp +0 -28
  1602. package/src/duckdb/src/core_functions/scalar/string/jaro_winkler.cpp +0 -71
  1603. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +0 -238
  1604. package/src/duckdb/src/execution/index/art/node16.cpp +0 -196
  1605. package/src/duckdb/src/execution/index/art/node4.cpp +0 -189
  1606. package/src/duckdb/src/execution/index/unknown_index.cpp +0 -65
  1607. package/src/duckdb/src/execution/operator/csv_scanner/base_csv_reader.cpp +0 -595
  1608. package/src/duckdb/src/execution/operator/csv_scanner/buffered_csv_reader.cpp +0 -434
  1609. package/src/duckdb/src/execution/operator/csv_scanner/csv_buffer.cpp +0 -89
  1610. package/src/duckdb/src/execution/operator/csv_scanner/csv_buffer_manager.cpp +0 -90
  1611. package/src/duckdb/src/execution/operator/csv_scanner/csv_file_handle.cpp +0 -95
  1612. package/src/duckdb/src/execution/operator/csv_scanner/csv_reader_options.cpp +0 -494
  1613. package/src/duckdb/src/execution/operator/csv_scanner/csv_state_machine.cpp +0 -35
  1614. package/src/duckdb/src/execution/operator/csv_scanner/csv_state_machine_cache.cpp +0 -99
  1615. package/src/duckdb/src/execution/operator/csv_scanner/parallel_csv_reader.cpp +0 -689
  1616. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +0 -242
  1617. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +0 -695
  1618. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +0 -1487
  1619. package/src/duckdb/src/execution/operator/persistent/csv_buffer.cpp +0 -72
  1620. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +0 -158
  1621. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +0 -280
  1622. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +0 -666
  1623. package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +0 -499
  1624. package/src/duckdb/src/execution/operator/schema/physical_create_index.cpp +0 -207
  1625. package/src/duckdb/src/execution/partitionable_hashtable.cpp +0 -207
  1626. package/src/duckdb/src/execution/physical_plan/plan_limit_percent.cpp +0 -18
  1627. package/src/duckdb/src/execution/physical_plan/plan_show_select.cpp +0 -47
  1628. package/src/duckdb/src/execution/reservoir_sample.cpp +0 -324
  1629. package/src/duckdb/src/execution/window_executor.cpp +0 -1830
  1630. package/src/duckdb/src/execution/window_segment_tree.cpp +0 -2073
  1631. package/src/duckdb/src/extension_forward_decl/icu.cpp +0 -59
  1632. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +0 -15
  1633. package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +0 -29
  1634. package/src/duckdb/src/function/scalar/generic_functions.cpp +0 -11
  1635. package/src/duckdb/src/function/scalar/list/list_concat.cpp +0 -143
  1636. package/src/duckdb/src/function/scalar/operators.cpp +0 -14
  1637. package/src/duckdb/src/function/scalar/sequence_functions.cpp +0 -10
  1638. package/src/duckdb/src/function/scalar/string_functions.cpp +0 -22
  1639. package/src/duckdb/src/function/table/pragma_detailed_profiling_output.cpp +0 -173
  1640. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +0 -101
  1641. package/src/duckdb/src/include/duckdb/catalog/mapping_value.hpp +0 -92
  1642. package/src/duckdb/src/include/duckdb/common/arrow/arrow_types_extension.hpp +0 -42
  1643. package/src/duckdb/src/include/duckdb/common/cycle_counter.hpp +0 -68
  1644. package/src/duckdb/src/include/duckdb/common/enums/index_type.hpp +0 -34
  1645. package/src/duckdb/src/include/duckdb/common/http_state.hpp +0 -113
  1646. package/src/duckdb/src/include/duckdb/common/platform.h +0 -58
  1647. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +0 -59
  1648. package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +0 -192
  1649. package/src/duckdb/src/include/duckdb/common/types/chunk_collection.hpp +0 -137
  1650. package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +0 -65
  1651. package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +0 -63
  1652. package/src/duckdb/src/include/duckdb/execution/index/unknown_index.hpp +0 -65
  1653. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp +0 -103
  1654. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp +0 -74
  1655. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp +0 -60
  1656. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_sniffer.hpp +0 -253
  1657. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_option.hpp +0 -155
  1658. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp +0 -163
  1659. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp +0 -35
  1660. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp +0 -228
  1661. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp +0 -70
  1662. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp +0 -93
  1663. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp +0 -60
  1664. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp +0 -197
  1665. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp +0 -21
  1666. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp +0 -30
  1667. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp +0 -99
  1668. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp +0 -87
  1669. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp +0 -70
  1670. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp +0 -80
  1671. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_casting.hpp +0 -137
  1672. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_error.hpp +0 -104
  1673. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_index_join.hpp +0 -79
  1674. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/base_csv_reader.hpp +0 -119
  1675. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/buffered_csv_reader.hpp +0 -72
  1676. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_buffer.hpp +0 -110
  1677. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_buffer_manager.hpp +0 -103
  1678. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_file_handle.hpp +0 -59
  1679. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_line_info.hpp +0 -46
  1680. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_reader_options.hpp +0 -210
  1681. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_sniffer.hpp +0 -131
  1682. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state.hpp +0 -28
  1683. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state_machine.hpp +0 -70
  1684. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state_machine_cache.hpp +0 -65
  1685. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/parallel_csv_reader.hpp +0 -167
  1686. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/quote_rules.hpp +0 -21
  1687. package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +0 -343
  1688. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +0 -165
  1689. package/src/duckdb/src/include/duckdb/optimizer/column_lifetime_optimizer.hpp +0 -45
  1690. package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +0 -57
  1691. package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_info.hpp +0 -45
  1692. package/src/duckdb/src/include/duckdb/parser/statement/show_statement.hpp +0 -32
  1693. package/src/duckdb/src/include/duckdb/planner/operator/logical_limit_percent.hpp +0 -49
  1694. package/src/duckdb/src/include/duckdb/planner/operator/logical_show.hpp +0 -42
  1695. package/src/duckdb/src/main/settings/settings.cpp +0 -2056
  1696. package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +0 -36
  1697. package/src/duckdb/src/parser/parsed_data/comment_on_info.cpp +0 -19
  1698. package/src/duckdb/src/parser/statement/show_statement.cpp +0 -15
  1699. package/src/duckdb/src/planner/binder/statement/bind_show.cpp +0 -30
  1700. package/src/duckdb/src/planner/operator/logical_limit_percent.cpp +0 -14
  1701. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +0 -70
  1702. package/src/duckdb/third_party/fsst/fsst_avx512.cpp +0 -140
  1703. package/src/duckdb/third_party/fsst/fsst_avx512.inc +0 -57
  1704. package/src/duckdb/third_party/fsst/fsst_avx512_unroll1.inc +0 -57
  1705. package/src/duckdb/third_party/fsst/fsst_avx512_unroll2.inc +0 -114
  1706. package/src/duckdb/third_party/fsst/fsst_avx512_unroll3.inc +0 -171
  1707. package/src/duckdb/third_party/fsst/fsst_avx512_unroll4.inc +0 -228
  1708. package/src/duckdb/third_party/parquet/parquet_constants.cpp +0 -17
  1709. package/src/duckdb/third_party/parquet/parquet_constants.h +0 -24
  1710. package/src/duckdb/third_party/re2/util/pod_array.h +0 -55
  1711. package/src/duckdb/third_party/re2/util/sparse_array.h +0 -392
  1712. package/src/duckdb/third_party/re2/util/sparse_set.h +0 -264
  1713. package/src/duckdb/third_party/zstd/include/zstd/common/fse_static.h +0 -421
  1714. package/src/duckdb/third_party/zstd/include/zstd/common/huf_static.h +0 -238
  1715. package/src/duckdb/third_party/zstd/include/zstd_static.h +0 -1070
  1716. package/src/duckdb/ub_src_core_functions.cpp +0 -6
  1717. package/src/duckdb/ub_src_core_functions_aggregate_algebraic.cpp +0 -8
  1718. package/src/duckdb/ub_src_core_functions_aggregate_distributive.cpp +0 -24
  1719. package/src/duckdb/ub_src_core_functions_aggregate_holistic.cpp +0 -12
  1720. package/src/duckdb/ub_src_core_functions_aggregate_nested.cpp +0 -6
  1721. package/src/duckdb/ub_src_core_functions_aggregate_regression.cpp +0 -14
  1722. package/src/duckdb/ub_src_core_functions_scalar_array.cpp +0 -4
  1723. package/src/duckdb/ub_src_core_functions_scalar_bit.cpp +0 -2
  1724. package/src/duckdb/ub_src_core_functions_scalar_blob.cpp +0 -6
  1725. package/src/duckdb/ub_src_core_functions_scalar_date.cpp +0 -22
  1726. package/src/duckdb/ub_src_core_functions_scalar_debug.cpp +0 -2
  1727. package/src/duckdb/ub_src_core_functions_scalar_enum.cpp +0 -2
  1728. package/src/duckdb/ub_src_core_functions_scalar_generic.cpp +0 -18
  1729. package/src/duckdb/ub_src_core_functions_scalar_list.cpp +0 -22
  1730. package/src/duckdb/ub_src_core_functions_scalar_map.cpp +0 -16
  1731. package/src/duckdb/ub_src_core_functions_scalar_math.cpp +0 -2
  1732. package/src/duckdb/ub_src_core_functions_scalar_operators.cpp +0 -2
  1733. package/src/duckdb/ub_src_core_functions_scalar_random.cpp +0 -4
  1734. package/src/duckdb/ub_src_core_functions_scalar_secret.cpp +0 -2
  1735. package/src/duckdb/ub_src_core_functions_scalar_string.cpp +0 -58
  1736. package/src/duckdb/ub_src_core_functions_scalar_struct.cpp +0 -4
  1737. package/src/duckdb/ub_src_core_functions_scalar_union.cpp +0 -6
  1738. package/src/duckdb/ub_src_execution_operator_csv_scanner.cpp +0 -18
  1739. package/src/duckdb/ub_src_function_scalar_operators.cpp +0 -8
  1740. /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/algebraic/covar.hpp +0 -0
  1741. /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/algebraic/stddev.hpp +0 -0
  1742. /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/aggregate/sum_helpers.hpp +0 -0
  1743. /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/array_kernels.hpp +0 -0
  1744. /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/function_list.hpp +0 -0
  1745. /package/src/duckdb/{src/include/duckdb → extension/core_functions/include}/core_functions/scalar/secret_functions.hpp +0 -0
  1746. /package/src/duckdb/src/function/scalar/{operators → operator}/multiply.cpp +0 -0
  1747. /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) 2013-2020, Yann Collet, Facebook, Inc.
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 <string.h> /* memcpy, memset */
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
- // #define HUF_isError ERR_isError
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 TARGET_ATTRIBUTE("bmi2") size_t fn##_bmi2( \
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 bmi2) \
118
+ size_t cSrcSize, HUF_DTable const* DTable, int flags) \
79
119
  { \
80
- if (bmi2) { \
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 bmi2) \
130
+ size_t cSrcSize, HUF_DTable const* DTable, int flags) \
91
131
  { \
92
- (void)bmi2; \
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
- memcpy(&dtd, table, sizeof(dtd));
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 byte; BYTE nbBits; } HUF_DEltX1; /* single-symbol decoding */
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
- size_t HUF_readDTableX1_wksp(HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize)
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
- U32* rankVal;
128
- BYTE* huffWeight;
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
- /* memset(huffWeight, 0, sizeof(huffWeight)); */ /* is not necessary, even though some analyzer complain ... */
399
+ /* ZSTD_memset(huffWeight, 0, sizeof(huffWeight)); */ /* is not necessary, even though some analyzer complain ... */
140
400
 
141
- iSize = HUF_readStats(huffWeight, HUF_SYMBOLVALUE_MAX + 1, rankVal, &nbSymbols, &tableLog, src, srcSize);
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
- memcpy(DTable, &dtd, sizeof(dtd));
413
+ ZSTD_memcpy(DTable, &dtd, sizeof(dtd));
150
414
  }
151
415
 
152
- /* Calculate starting value for each rank */
153
- { U32 n, nextRankStart = 0;
154
- for (n=1; n<tableLog+1; n++) {
155
- U32 const current = nextRankStart;
156
- nextRankStart += (rankVal[n] << (n-1));
157
- rankVal[n] = current;
158
- } }
159
-
160
- /* fill DTable */
161
- { U32 n;
162
- size_t const nEnd = nbSymbols;
163
- for (n=0; n<nEnd; n++) {
164
- size_t const w = huffWeight[n];
165
- size_t const length = (1 << w) >> 1;
166
- size_t const uStart = rankVal[w];
167
- size_t const uEnd = uStart + length;
168
- size_t u;
169
- HUF_DEltX1 D;
170
- D.byte = (BYTE)n;
171
- D.nbBits = (BYTE)(tableLog + 1 - w);
172
- rankVal[w] = (U32)uEnd;
173
- if (length < 4) {
174
- /* Use length in the loop bound so the compiler knows it is short. */
175
- for (u = 0; u < length; ++u)
176
- dt[uStart + u] = D;
177
- } else {
178
- /* Unroll the loop 4 times, we know it is a power of 2. */
179
- for (u = uStart; u < uEnd; u += 4) {
180
- dt[u + 0] = D;
181
- dt[u + 1] = D;
182
- dt[u + 2] = D;
183
- dt[u + 3] = D;
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
- size_t HUF_readDTableX1(HUF_DTable* DTable, const void* src, size_t srcSize)
189
- {
190
- U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32];
191
- return HUF_readDTableX1_wksp(DTable, src, srcSize,
192
- workSpace, sizeof(workSpace));
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
- if (MEM_64bits() || (HUF_TABLELOG_MAX<=12)) \
209
- HUF_DECODE_SYMBOLX1_0(ptr, DStreamPtr)
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
- if (MEM_64bits()) \
213
- HUF_DECODE_SYMBOLX1_0(ptr, DStreamPtr)
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
- while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-3)) {
222
- HUF_DECODE_SYMBOLX1_2(p, bitDPtr);
223
- HUF_DECODE_SYMBOLX1_1(p, bitDPtr);
224
- HUF_DECODE_SYMBOLX1_2(p, bitDPtr);
225
- HUF_DECODE_SYMBOLX1_0(p, bitDPtr);
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 + dstSize;
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
- for ( ; (endSignal) & (op4 < olimit) ; ) {
312
- HUF_DECODE_SYMBOLX1_2(op1, &bitD1);
313
- HUF_DECODE_SYMBOLX1_2(op2, &bitD2);
314
- HUF_DECODE_SYMBOLX1_2(op3, &bitD3);
315
- HUF_DECODE_SYMBOLX1_2(op4, &bitD4);
316
- HUF_DECODE_SYMBOLX1_1(op1, &bitD1);
317
- HUF_DECODE_SYMBOLX1_1(op2, &bitD2);
318
- HUF_DECODE_SYMBOLX1_1(op3, &bitD3);
319
- HUF_DECODE_SYMBOLX1_1(op4, &bitD4);
320
- HUF_DECODE_SYMBOLX1_2(op1, &bitD1);
321
- HUF_DECODE_SYMBOLX1_2(op2, &bitD2);
322
- HUF_DECODE_SYMBOLX1_2(op3, &bitD3);
323
- HUF_DECODE_SYMBOLX1_2(op4, &bitD4);
324
- HUF_DECODE_SYMBOLX1_0(op1, &bitD1);
325
- HUF_DECODE_SYMBOLX1_0(op2, &bitD2);
326
- HUF_DECODE_SYMBOLX1_0(op3, &bitD3);
327
- HUF_DECODE_SYMBOLX1_0(op4, &bitD4);
328
- endSignal &= BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished;
329
- endSignal &= BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished;
330
- endSignal &= BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished;
331
- endSignal &= BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished;
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
- typedef size_t (*HUF_decompress_usingDTable_t)(void *dst, size_t dstSize,
359
- const void *cSrc,
360
- size_t cSrcSize,
361
- const HUF_DTable *DTable);
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
- HUF_DGEN(HUF_decompress1X1_usingDTable_internal)
364
- HUF_DGEN(HUF_decompress4X1_usingDTable_internal)
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
- size_t HUF_decompress1X1_usingDTable(
369
- void* dst, size_t dstSize,
370
- const void* cSrc, size_t cSrcSize,
371
- const HUF_DTable* DTable)
372
- {
373
- DTableDesc dtd = HUF_getDTableDesc(DTable);
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
- size_t HUF_decompress1X1_DCtx_wksp(HUF_DTable* DCtx, void* dst, size_t dstSize,
379
- const void* cSrc, size_t cSrcSize,
380
- void* workSpace, size_t wkspSize)
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 BYTE* ip = (const BYTE*) cSrc;
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
- size_t const hSize = HUF_readDTableX1_wksp(DCtx, cSrc, cSrcSize, workSpace, wkspSize);
385
- if (HUF_isError(hSize)) return hSize;
386
- if (hSize >= cSrcSize) return ERROR(srcSize_wrong);
387
- ip += hSize; cSrcSize -= hSize;
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
- return HUF_decompress1X1_usingDTable_internal(dst, dstSize, ip, cSrcSize, DCtx, /* bmi2 */ 0);
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 HUF_decompress1X1_DCtx(HUF_DTable* DCtx, void* dst, size_t dstSize,
394
- const void* cSrc, size_t cSrcSize)
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
- HUF_CREATE_STATIC_DTABLEX1(DTable, HUF_TABLELOG_MAX);
404
- return HUF_decompress1X1_DCtx (DTable, dst, dstSize, cSrc, cSrcSize);
405
- }
895
+ HUF_DecompressUsingDTableFn fallbackFn = HUF_decompress4X1_usingDTable_internal_default;
896
+ HUF_DecompressFastLoopFn loopFn = HUF_decompress4X1_usingDTable_internal_fast_c_loop;
406
897
 
407
- size_t HUF_decompress4X1_usingDTable(
408
- void* dst, size_t dstSize,
409
- const void* cSrc, size_t cSrcSize,
410
- const HUF_DTable* DTable)
411
- {
412
- DTableDesc dtd = HUF_getDTableDesc(DTable);
413
- if (dtd.tableType != 0) return ERROR(GENERIC);
414
- return HUF_decompress4X1_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0);
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 HUF_decompress4X1_DCtx_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t dstSize,
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 bmi2)
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 (dctx, cSrc, cSrcSize,
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, bmi2);
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; BYTE weight; } sortedSymbol_t;
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
- /* HUF_fillDTableX2Level2() :
468
- * `rankValOrigin` must be a table of at least (HUF_TABLELOG_MAX + 1) U32 */
469
- static void HUF_fillDTableX2Level2(HUF_DEltX2* DTable, U32 sizeLog, const U32 consumed,
470
- const U32* rankValOrigin, const int minWeight,
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 rankVal[HUF_TABLELOG_MAX + 1];
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
- /* get pre-calculated rankVal */
478
- memcpy(rankVal, rankValOrigin, sizeof(rankVal));
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
- /* fill skipped values */
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 i, skipSize = rankVal[minWeight];
483
- MEM_writeLE16(&(DElt.sequence), baseSeq);
484
- DElt.nbBits = (BYTE)(consumed);
485
- DElt.length = 1;
486
- for (i = 0; i < skipSize; i++)
487
- DTable[i] = DElt;
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
- /* fill DTable */
491
- { U32 s; for (s=0; s<sortedListSize; s++) { /* note : sortedSymbols already skipped */
492
- const U32 symbol = sortedSymbols[s].symbol;
493
- const U32 weight = sortedSymbols[s].weight;
494
- const U32 nbBits = nbBitsBaseline - weight;
495
- const U32 length = 1 << (sizeLog-nbBits);
496
- const U32 start = rankVal[weight];
497
- U32 i = start;
498
- const U32 end = start + length;
499
-
500
- MEM_writeLE16(&(DElt.sequence), (U16)(baseSeq + (symbol << 8)));
501
- DElt.nbBits = (BYTE)(nbBits + consumed);
502
- DElt.length = 2;
503
- do { DTable[i++] = DElt; } while (i<end); /* since length >= 1 */
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, const U32 sortedListSize,
512
- const U32* rankStart, rankVal_t rankValOrigin, const U32 maxWeight,
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[HUF_TABLELOG_MAX + 1];
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
- U32 s;
519
-
520
- memcpy(rankVal, rankValOrigin, sizeof(rankVal));
521
-
522
- /* fill DTable */
523
- for (s=0; s<sortedListSize; s++) {
524
- const U16 symbol = sortedList[s].symbol;
525
- const U32 weight = sortedList[s].weight;
526
- const U32 nbBits = nbBitsBaseline - weight;
527
- const U32 start = rankVal[weight];
528
- const U32 length = 1 << (targetLog-nbBits);
529
-
530
- if (targetLog-nbBits >= minBits) { /* enough room for a second symbol */
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
- sortedRank = rankStart[minWeight];
535
- HUF_fillDTableX2Level2(DTable+start, targetLog-nbBits, nbBits,
536
- rankValOrigin[nbBits], minWeight,
537
- sortedList+sortedRank, sortedListSize-sortedRank,
538
- nbBitsBaseline, symbol);
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
- HUF_DEltX2 DElt;
541
- MEM_writeLE16(&(DElt.sequence), symbol);
542
- DElt.nbBits = (BYTE)(nbBits);
543
- DElt.length = 1;
544
- { U32 const end = start + length;
545
- U32 u;
546
- for (u = start; u < end; u++) DTable[u] = DElt;
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, sizeOfSort, nbSymbols;
1166
+ U32 tableLog, maxW, nbSymbols;
557
1167
  DTableDesc dtd = HUF_getDTableDesc(DTable);
558
- U32 const maxTableLog = dtd.maxTableLog;
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
- rankValCol_t* rankVal;
565
- U32* rankStats;
566
- U32* rankStart0;
567
- sortedSymbol_t* sortedSymbol;
568
- BYTE* weightList;
569
- size_t spaceUsed32 = 0;
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
- /* memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */
1184
+ /* ZSTD_memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */
590
1185
 
591
- iSize = HUF_readStats(weightList, HUF_SYMBOLVALUE_MAX + 1, rankStats, &nbSymbols, &tableLog, src, srcSize);
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 current = nextRankStart;
604
- nextRankStart += rankStats[w];
605
- rankStart[w] = current;
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
- sizeOfSort = nextRankStart;
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 current = nextRankVal;
629
- nextRankVal += rankStats[w] << (w+rescale);
630
- rankVal0[w] = current;
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, sizeOfSort,
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
- memcpy(DTable, &dtd, sizeof(dtd));
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
- memcpy(op, dt+val, 2);
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
- memcpy(op, dt+val, 1);
674
- if (dt[val].length==1) BIT_skipBits(DStream, dt[val].nbBits);
675
- else {
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
- if (MEM_64bits() || (HUF_TABLELOG_MAX<=12)) \
690
- ptr += HUF_decodeSymbolX2(ptr, DStreamPtr, dt, dtLog)
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
- if (MEM_64bits()) \
694
- ptr += HUF_decodeSymbolX2(ptr, DStreamPtr, dt, dtLog)
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
- while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-(sizeof(bitDPtr->bitContainer)-1))) {
704
- HUF_DECODE_SYMBOLX2_2(p, bitDPtr);
705
- HUF_DECODE_SYMBOLX2_1(p, bitDPtr);
706
- HUF_DECODE_SYMBOLX2_2(p, bitDPtr);
707
- HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
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
- while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p <= pEnd-2))
712
- HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
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
- while (p <= pEnd-2)
715
- HUF_DECODE_SYMBOLX2_0(p, bitDPtr); /* no need to reload : reached the end of DStream */
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 + dstSize;
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); /* overflow */
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
- for ( ; (endSignal) & (op4 < olimit); ) {
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
- HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
800
- HUF_DECODE_SYMBOLX2_1(op1, &bitD1);
801
- HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
802
- HUF_DECODE_SYMBOLX2_0(op1, &bitD1);
803
- HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
804
- HUF_DECODE_SYMBOLX2_1(op2, &bitD2);
805
- HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
806
- HUF_DECODE_SYMBOLX2_0(op2, &bitD2);
807
- endSignal &= BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished;
808
- endSignal &= BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished;
809
- HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
810
- HUF_DECODE_SYMBOLX2_1(op3, &bitD3);
811
- HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
812
- HUF_DECODE_SYMBOLX2_0(op3, &bitD3);
813
- HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
814
- HUF_DECODE_SYMBOLX2_1(op4, &bitD4);
815
- HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
816
- HUF_DECODE_SYMBOLX2_0(op4, &bitD4);
817
- endSignal &= BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished;
818
- endSignal &= BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished;
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
- HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
821
- HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
822
- HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
823
- HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
824
- HUF_DECODE_SYMBOLX2_1(op1, &bitD1);
825
- HUF_DECODE_SYMBOLX2_1(op2, &bitD2);
826
- HUF_DECODE_SYMBOLX2_1(op3, &bitD3);
827
- HUF_DECODE_SYMBOLX2_1(op4, &bitD4);
828
- HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
829
- HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
830
- HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
831
- HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
832
- HUF_DECODE_SYMBOLX2_0(op1, &bitD1);
833
- HUF_DECODE_SYMBOLX2_0(op2, &bitD2);
834
- HUF_DECODE_SYMBOLX2_0(op3, &bitD3);
835
- HUF_DECODE_SYMBOLX2_0(op4, &bitD4);
836
- endSignal = (U32)LIKELY(
837
- (U32)(BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished)
838
- & (U32)(BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished)
839
- & (U32)(BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished)
840
- & (U32)(BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished));
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
- HUF_DGEN(HUF_decompress1X2_usingDTable_internal)
866
- HUF_DGEN(HUF_decompress4X2_usingDTable_internal)
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
- size_t HUF_decompress1X2_usingDTable(
869
- void* dst, size_t dstSize,
870
- const void* cSrc, size_t cSrcSize,
871
- const HUF_DTable* DTable)
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
- size_t HUF_decompress1X2_DCtx_wksp(HUF_DTable* DCtx, void* dst, size_t dstSize,
879
- const void* cSrc, size_t cSrcSize,
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
- const BYTE* ip = (const BYTE*) cSrc;
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
- size_t const hSize = HUF_readDTableX2_wksp(DCtx, cSrc, cSrcSize,
885
- workSpace, wkspSize);
886
- if (HUF_isError(hSize)) return hSize;
887
- if (hSize >= cSrcSize) return ERROR(srcSize_wrong);
888
- ip += hSize; cSrcSize -= hSize;
1576
+ #ifndef NDEBUG
1577
+ for (stream = 1; stream < 4; ++stream) {
1578
+ assert(ip[stream] >= ip[stream - 1]);
1579
+ }
1580
+ #endif
889
1581
 
890
- return HUF_decompress1X2_usingDTable_internal(dst, dstSize, ip, cSrcSize, DCtx, /* bmi2 */ 0);
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
- size_t HUF_decompress1X2_DCtx(HUF_DTable* DCtx, void* dst, size_t dstSize,
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
- size_t HUF_decompress1X2 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize)
903
- {
904
- HUF_CREATE_STATIC_DTABLEX2(DTable, HUF_TABLELOG_MAX);
905
- return HUF_decompress1X2_DCtx(DTable, dst, dstSize, cSrc, cSrcSize);
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
- size_t HUF_decompress4X2_usingDTable(
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
- DTableDesc dtd = HUF_getDTableDesc(DTable);
914
- if (dtd.tableType != 1) return ERROR(GENERIC);
915
- return HUF_decompress4X2_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0);
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
- static size_t HUF_decompress4X2_DCtx_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t dstSize,
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 bmi2)
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(dctx, cSrc, cSrcSize,
925
- workSpace, wkspSize);
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 HUF_decompress4X2_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx, bmi2);
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
- return HUF_decompress4X2_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, /* bmi2 */ 0);
938
- }
939
-
1739
+ const BYTE* ip = (const BYTE*) cSrc;
940
1740
 
941
- size_t HUF_decompress4X2_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize,
942
- const void* cSrc, size_t cSrcSize)
943
- {
944
- U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32];
945
- return HUF_decompress4X2_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize,
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
- size_t HUF_decompress4X2 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize)
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 */][3 /* single, double, quad */] =
1760
+ static const algo_time_t algoTime[16 /* Quantization */][2 /* single, double */] =
1004
1761
  {
1005
1762
  /* single, double, quad */
1006
- {{0,0}, {1,1}, {2,2}}, /* Q==0 : impossible */
1007
- {{0,0}, {1,1}, {2,2}}, /* Q==1 : impossible */
1008
- {{ 38,130}, {1313, 74}, {2151, 38}}, /* Q == 2 : 12-18% */
1009
- {{ 448,128}, {1353, 74}, {2238, 41}}, /* Q == 3 : 18-25% */
1010
- {{ 556,128}, {1353, 74}, {2238, 47}}, /* Q == 4 : 25-32% */
1011
- {{ 714,128}, {1418, 74}, {2436, 53}}, /* Q == 5 : 32-38% */
1012
- {{ 883,128}, {1437, 74}, {2464, 61}}, /* Q == 6 : 38-44% */
1013
- {{ 897,128}, {1515, 75}, {2622, 68}}, /* Q == 7 : 44-50% */
1014
- {{ 926,128}, {1613, 75}, {2730, 75}}, /* Q == 8 : 50-56% */
1015
- {{ 947,128}, {1729, 77}, {3359, 77}}, /* Q == 9 : 56-62% */
1016
- {{1107,128}, {2083, 81}, {4006, 84}}, /* Q ==10 : 62-69% */
1017
- {{1177,128}, {2379, 87}, {4785, 88}}, /* Q ==11 : 69-75% */
1018
- {{1242,128}, {2415, 93}, {5155, 84}}, /* Q ==12 : 75-81% */
1019
- {{1349,128}, {2644,106}, {5260,106}}, /* Q ==13 : 81-87% */
1020
- {{1455,128}, {2422,124}, {4174,124}}, /* Q ==14 : 87-93% */
1021
- {{ 722,128}, {1891,145}, {1936,146}}, /* Q ==15 : 93-99% */
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 >> 3; /* advantage to algorithm using less memory, to reduce cache eviction */
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) { memcpy(dst, cSrc, dstSize); return dstSize; } /* not compressed */
1150
- if (cSrcSize == 1) { memset(dst, *(const BYTE*)cSrc, dstSize); return dstSize; } /* RLE */
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, bmi2);
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, bmi2);
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, bmi2) :
1194
- HUF_decompress1X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, bmi2);
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 HUF_decompress1X1_DCtx_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int bmi2)
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, bmi2);
1869
+ return HUF_decompress1X1_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx, flags);
1209
1870
  }
1210
1871
  #endif
1211
1872
 
1212
- size_t HUF_decompress4X_usingDTable_bmi2(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable, int bmi2)
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, bmi2);
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, bmi2);
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, bmi2) :
1225
- HUF_decompress4X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, bmi2);
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 HUF_decompress4X_hufOnly_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int bmi2)
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 HUF_decompress4X1_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, bmi2);
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 HUF_decompress4X2_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, bmi2);
1904
+ return HUF_decompress4X2_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, flags);
1244
1905
  #else
1245
- return algoNb ? HUF_decompress4X2_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, bmi2) :
1246
- HUF_decompress4X1_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, bmi2);
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