Skip to content

Commit c20ae10

Browse files
authored
Merge pull request #159 from duckdb/bump-v1.3.0
Bump bundled DuckDB to v1.3.0
2 parents d506679 + ae4b625 commit c20ae10

File tree

1,211 files changed

+89578
-61149
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,211 files changed

+89578
-61149
lines changed

.github/workflows/Electron.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
set-up-npm:
2020
if: false
2121
name: Set up NPM
22-
runs-on: ubuntu-20.04
22+
runs-on: ubuntu-22.04
2323
env:
2424
DUCKDB_NODE_BUILD_CACHE: 0
2525
steps:
@@ -41,7 +41,7 @@ jobs:
4141
# From `npm show electron time --json` and https://www.electronjs.org/docs/latest/tutorial/electron-timelines
4242
set-up-electron-versions:
4343
name: Set up Electron version
44-
runs-on: ubuntu-20.04
44+
runs-on: ubuntu-22.04
4545
outputs:
4646
matrix: ${{ steps.setup.outputs.matrix }}
4747
steps:
@@ -59,7 +59,7 @@ jobs:
5959
6060
linux-electron:
6161
name: Electron Linux
62-
runs-on: ubuntu-20.04
62+
runs-on: ubuntu-22.04
6363
needs: [set-up-npm, set-up-electron-versions]
6464
env:
6565
TARGET_ARCH: ${{ matrix.target_arch }}
@@ -271,7 +271,7 @@ jobs:
271271
- win-electron
272272
strategy:
273273
matrix:
274-
os: [windows-latest, ubuntu-latest, ubuntu-22.04, ubuntu-20.04, windows-2019, macos-12, macos-13, macos-14]
274+
os: [windows-latest, ubuntu-latest, ubuntu-22.04, windows-2019, macos-12, macos-13, macos-14]
275275
version: [20]
276276
runs-on: ${{ matrix.os }}
277277
steps:

.github/workflows/NodeJS.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ env:
1818
jobs:
1919
set-up-npm:
2020
name: Set up NPM
21-
runs-on: ubuntu-20.04
21+
runs-on: ubuntu-22.04
2222
env:
2323
DUCKDB_NODE_BUILD_CACHE: 0
2424
steps:
@@ -48,7 +48,7 @@ jobs:
4848
strategy:
4949
matrix:
5050
# node.js current support policy to be found at https://github.com/duckdb/duckdb-node/tree/main/#Supported-Node-versions
51-
node: [ '18', '20', '22', '23']
51+
node: [ '18', '20', '22', '23', '24']
5252
target_arch: [ x64, arm64 ]
5353
isRelease:
5454
- ${{ startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main' }}
@@ -113,7 +113,7 @@ jobs:
113113
strategy:
114114
matrix:
115115
target_arch: [ arm64 ]
116-
node: [ '18', '20', '22', '23']
116+
node: [ '18', '20', '22', '23', '24']
117117
isRelease:
118118
- ${{ startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main' }}
119119
exclude:
@@ -164,7 +164,7 @@ jobs:
164164
strategy:
165165
matrix:
166166
target_arch: [ x64 ]
167-
node: [ '18', '20', '22', '23']
167+
node: [ '18', '20', '22', '23', '24']
168168
isRelease:
169169
- ${{ startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main' }}
170170
env:
@@ -212,7 +212,7 @@ jobs:
212212

213213
strategy:
214214
matrix:
215-
node: [ '18', '20', '22', '23']
215+
node: [ '18', '20', '22', '23', '24']
216216
isRelease:
217217
- ${{ startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main' }}
218218
exclude:
@@ -273,7 +273,7 @@ jobs:
273273
- win-nodejs
274274
strategy:
275275
matrix:
276-
os: [windows-latest, ubuntu-latest, ubuntu-22.04, ubuntu-20.04, windows-2019, macos-12, macos-13, macos-14]
276+
os: [windows-latest, ubuntu-latest, ubuntu-22.04, windows-2019, macos-12, macos-13, macos-14]
277277
version: [20]
278278
runs-on: ${{ matrix.os }}
279279
steps:

binding.gyp

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"src/duckdb/ub_src_common_crypto.cpp",
2222
"src/duckdb/ub_src_common_enums.cpp",
2323
"src/duckdb/ub_src_common_exception.cpp",
24+
"src/duckdb/ub_src_common_multi_file.cpp",
2425
"src/duckdb/ub_src_common_operator.cpp",
2526
"src/duckdb/ub_src_common_progress_bar.cpp",
2627
"src/duckdb/ub_src_common_row_operations.cpp",
@@ -94,7 +95,12 @@
9495
"src/duckdb/ub_src_main_capi.cpp",
9596
"src/duckdb/ub_src_main_capi_cast.cpp",
9697
"src/duckdb/ub_src_main_chunk_scan_state.cpp",
97-
"src/duckdb/ub_src_main_extension.cpp",
98+
"src/duckdb/src/main/extension/extension_alias.cpp",
99+
"src/duckdb/src/main/extension/extension_helper.cpp",
100+
"src/duckdb/src/main/extension/extension_install.cpp",
101+
"src/duckdb/src/main/extension/extension_load.cpp",
102+
"src/duckdb/src/main/extension/extension_util.cpp",
103+
"src/duckdb/ub_src_main_http.cpp",
98104
"src/duckdb/ub_src_main_relation.cpp",
99105
"src/duckdb/ub_src_main_secret.cpp",
100106
"src/duckdb/ub_src_main_settings.cpp",
@@ -136,6 +142,7 @@
136142
"src/duckdb/ub_src_storage_compression_alp.cpp",
137143
"src/duckdb/ub_src_storage_compression.cpp",
138144
"src/duckdb/ub_src_storage_compression_chimp.cpp",
145+
"src/duckdb/ub_src_storage_compression_dict_fsst.cpp",
139146
"src/duckdb/ub_src_storage_compression_dictionary.cpp",
140147
"src/duckdb/ub_src_storage_compression_roaring.cpp",
141148
"src/duckdb/ub_src_storage_metadata.cpp",
@@ -195,29 +202,27 @@
195202
"src/duckdb/third_party/libpg_query/src_backend_parser_scansup.cpp",
196203
"src/duckdb/third_party/libpg_query/src_common_keywords.cpp",
197204
"src/duckdb/third_party/mbedtls/library/aes.cpp",
198-
"src/duckdb/third_party/mbedtls/library/aria.cpp",
199205
"src/duckdb/third_party/mbedtls/library/asn1parse.cpp",
206+
"src/duckdb/third_party/mbedtls/library/asn1write.cpp",
200207
"src/duckdb/third_party/mbedtls/library/base64.cpp",
201208
"src/duckdb/third_party/mbedtls/library/bignum.cpp",
202-
"src/duckdb/third_party/mbedtls/library/camellia.cpp",
209+
"src/duckdb/third_party/mbedtls/library/bignum_core.cpp",
203210
"src/duckdb/third_party/mbedtls/library/cipher.cpp",
204211
"src/duckdb/third_party/mbedtls/library/cipher_wrap.cpp",
205212
"src/duckdb/third_party/mbedtls/library/constant_time.cpp",
206-
"src/duckdb/third_party/mbedtls/library/entropy.cpp",
207-
"src/duckdb/third_party/mbedtls/library/entropy_poll.cpp",
208213
"src/duckdb/third_party/mbedtls/library/gcm.cpp",
209214
"src/duckdb/third_party/mbedtls/library/md.cpp",
210215
"src/duckdb/third_party/mbedtls/library/oid.cpp",
211216
"src/duckdb/third_party/mbedtls/library/pem.cpp",
212217
"src/duckdb/third_party/mbedtls/library/pk.cpp",
213218
"src/duckdb/third_party/mbedtls/library/pk_wrap.cpp",
214219
"src/duckdb/third_party/mbedtls/library/pkparse.cpp",
220+
"src/duckdb/third_party/mbedtls/library/platform.cpp",
215221
"src/duckdb/third_party/mbedtls/library/platform_util.cpp",
216222
"src/duckdb/third_party/mbedtls/library/rsa.cpp",
217223
"src/duckdb/third_party/mbedtls/library/rsa_alt_helpers.cpp",
218224
"src/duckdb/third_party/mbedtls/library/sha1.cpp",
219225
"src/duckdb/third_party/mbedtls/library/sha256.cpp",
220-
"src/duckdb/third_party/mbedtls/library/sha512.cpp",
221226
"src/duckdb/third_party/mbedtls/mbedtls_wrapper.cpp",
222227
"src/duckdb/third_party/yyjson/yyjson.cpp",
223228
"src/duckdb/third_party/zstd/common/debug.cpp",
@@ -252,18 +257,24 @@
252257
"src/duckdb/third_party/zstd/dict/divsufsort.cpp",
253258
"src/duckdb/third_party/zstd/dict/fastcover.cpp",
254259
"src/duckdb/third_party/zstd/dict/zdict.cpp",
255-
"src/duckdb/extension/parquet/column_reader.cpp",
256-
"src/duckdb/extension/parquet/column_writer.cpp",
257-
"src/duckdb/extension/parquet/parquet_crypto.cpp",
260+
"src/duckdb/extension/parquet/serialize_parquet.cpp",
261+
"src/duckdb/extension/parquet/parquet_multi_file_info.cpp",
262+
"src/duckdb/extension/parquet/geo_parquet.cpp",
258263
"src/duckdb/extension/parquet/parquet_extension.cpp",
259-
"src/duckdb/extension/parquet/parquet_metadata.cpp",
264+
"src/duckdb/extension/parquet/zstd_file_system.cpp",
265+
"src/duckdb/extension/parquet/parquet_file_metadata_cache.cpp",
266+
"src/duckdb/extension/parquet/parquet_timestamp.cpp",
260267
"src/duckdb/extension/parquet/parquet_reader.cpp",
268+
"src/duckdb/extension/parquet/column_writer.cpp",
261269
"src/duckdb/extension/parquet/parquet_statistics.cpp",
262-
"src/duckdb/extension/parquet/parquet_timestamp.cpp",
270+
"src/duckdb/extension/parquet/parquet_crypto.cpp",
271+
"src/duckdb/extension/parquet/parquet_metadata.cpp",
272+
"src/duckdb/extension/parquet/parquet_float16.cpp",
273+
"src/duckdb/extension/parquet/column_reader.cpp",
263274
"src/duckdb/extension/parquet/parquet_writer.cpp",
264-
"src/duckdb/extension/parquet/serialize_parquet.cpp",
265-
"src/duckdb/extension/parquet/zstd_file_system.cpp",
266-
"src/duckdb/extension/parquet/geo_parquet.cpp",
275+
"src/duckdb/ub_extension_parquet_reader.cpp",
276+
"src/duckdb/ub_extension_parquet_decoder.cpp",
277+
"src/duckdb/ub_extension_parquet_writer.cpp",
267278
"src/duckdb/third_party/parquet/parquet_types.cpp",
268279
"src/duckdb/third_party/thrift/thrift/protocol/TProtocol.cpp",
269280
"src/duckdb/third_party/thrift/thrift/transport/TTransportException.cpp",
@@ -318,15 +329,16 @@
318329
"src/duckdb/ub_extension_icu_third_party_icu_common.cpp",
319330
"src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp",
320331
"src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp",
321-
"src/duckdb/extension/json/buffered_json_reader.cpp",
322-
"src/duckdb/extension/json/json_enums.cpp",
332+
"src/duckdb/extension/json/json_deserializer.cpp",
333+
"src/duckdb/extension/json/json_reader.cpp",
334+
"src/duckdb/extension/json/serialize_json.cpp",
323335
"src/duckdb/extension/json/json_extension.cpp",
324-
"src/duckdb/extension/json/json_common.cpp",
325-
"src/duckdb/extension/json/json_functions.cpp",
326336
"src/duckdb/extension/json/json_scan.cpp",
337+
"src/duckdb/extension/json/json_functions.cpp",
327338
"src/duckdb/extension/json/json_serializer.cpp",
328-
"src/duckdb/extension/json/json_deserializer.cpp",
329-
"src/duckdb/extension/json/serialize_json.cpp",
339+
"src/duckdb/extension/json/json_multi_file_info.cpp",
340+
"src/duckdb/extension/json/json_enums.cpp",
341+
"src/duckdb/extension/json/json_common.cpp",
330342
"src/duckdb/ub_extension_json_json_functions.cpp",
331343
"src/duckdb/extension/core_functions/function_list.cpp",
332344
"src/duckdb/extension/core_functions/core_functions_extension.cpp",
@@ -371,7 +383,6 @@
371383
"src/duckdb/third_party/brotli/common",
372384
"src/duckdb/third_party/brotli/dec",
373385
"src/duckdb/third_party/brotli/enc",
374-
"src/duckdb/third_party/mbedtls",
375386
"src/duckdb/third_party/mbedtls/include",
376387
"src/duckdb/third_party/mbedtls/library",
377388
"src/duckdb/third_party/miniz",

src/duckdb/extension/core_functions/aggregate/algebraic/avg.cpp

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "core_functions/aggregate/algebraic_functions.hpp"
22
#include "core_functions/aggregate/sum_helpers.hpp"
33
#include "duckdb/common/types/hugeint.hpp"
4+
#include "duckdb/common/types/time.hpp"
45
#include "duckdb/common/exception.hpp"
56
#include "duckdb/function/function_set.hpp"
67
#include "duckdb/planner/expression.hpp"
@@ -22,6 +23,21 @@ struct AvgState {
2223
}
2324
};
2425

26+
struct IntervalAvgState {
27+
int64_t count;
28+
interval_t value;
29+
30+
void Initialize() {
31+
this->count = 0;
32+
this->value = interval_t();
33+
}
34+
35+
void Combine(const IntervalAvgState &other) {
36+
this->count += other.count;
37+
this->value = AddOperator::Operation<interval_t, interval_t, interval_t>(this->value, other.value);
38+
}
39+
};
40+
2541
struct KahanAvgState {
2642
uint64_t count;
2743
double value;
@@ -105,6 +121,20 @@ struct IntegerAverageOperationHugeint : public BaseSumOperation<AverageSetOperat
105121
}
106122
};
107123

124+
struct DiscreteAverageOperation : public BaseSumOperation<AverageSetOperation, AddToHugeint> {
125+
template <class T, class STATE>
126+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
127+
if (state.count == 0) {
128+
finalize_data.ReturnNull();
129+
} else {
130+
hugeint_t remainder;
131+
target = Hugeint::Cast<T>(Hugeint::DivMod(state.value, state.count, remainder));
132+
// Round the result
133+
target += (remainder > (state.count / 2));
134+
}
135+
}
136+
};
137+
108138
struct HugeintAverageOperation : public BaseSumOperation<AverageSetOperation, HugeintAdd> {
109139
template <class T, class STATE>
110140
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
@@ -139,6 +169,74 @@ struct KahanAverageOperation : public BaseSumOperation<AverageSetOperation, Kaha
139169
}
140170
};
141171

172+
struct IntervalAverageOperation : public BaseSumOperation<AverageSetOperation, IntervalAdd> {
173+
// Override BaseSumOperation::Initialize because
174+
// IntervalAvgState does not have an assignment constructor from 0
175+
static void Initialize(IntervalAvgState &state) {
176+
AverageSetOperation::Initialize<IntervalAvgState>(state);
177+
}
178+
179+
template <class RESULT_TYPE, class STATE>
180+
static void Finalize(STATE &state, RESULT_TYPE &target, AggregateFinalizeData &finalize_data) {
181+
if (state.count == 0) {
182+
finalize_data.ReturnNull();
183+
} else {
184+
// DivideOperator does not borrow fractions right,
185+
// TODO: Maybe it should?
186+
// Copy PG implementation.
187+
const auto &value = state.value;
188+
const auto count = UnsafeNumericCast<int64_t>(state.count);
189+
190+
target.months = value.months / count;
191+
auto months_remainder = value.months % count;
192+
193+
target.days = value.days / count;
194+
auto days_remainder = value.days % count;
195+
196+
target.micros = value.micros / count;
197+
auto micros_remainder = value.micros % count;
198+
199+
// Shift the remainders right
200+
months_remainder *= Interval::DAYS_PER_MONTH;
201+
target.days += months_remainder / count;
202+
days_remainder += months_remainder % count;
203+
204+
days_remainder *= Interval::MICROS_PER_DAY;
205+
micros_remainder += days_remainder / count;
206+
target.micros += micros_remainder;
207+
}
208+
}
209+
};
210+
211+
struct TimeTZAverageOperation : public BaseSumOperation<AverageSetOperation, AddToHugeint> {
212+
template <class INPUT_TYPE, class STATE, class OP>
213+
static void Operation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &aggr_unary) {
214+
const auto micros = Time::NormalizeTimeTZ(input).micros;
215+
AverageSetOperation::template AddValues<STATE>(state, 1);
216+
AddToHugeint::template AddNumber<STATE, int64_t>(state, micros);
217+
}
218+
219+
template <class INPUT_TYPE, class STATE, class OP>
220+
static void ConstantOperation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &aggr_unary, idx_t count) {
221+
const auto micros = Time::NormalizeTimeTZ(input).micros;
222+
AverageSetOperation::template AddValues<STATE>(state, count);
223+
AddToHugeint::template AddConstant<STATE, int64_t>(state, micros, count);
224+
}
225+
226+
template <class T, class STATE>
227+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
228+
if (state.count == 0) {
229+
finalize_data.ReturnNull();
230+
} else {
231+
uint64_t remainder;
232+
auto micros = Hugeint::Cast<int64_t>(Hugeint::DivModPositive(state.value, state.count, remainder));
233+
// Round the result
234+
micros += (remainder > (state.count / 2));
235+
target = dtime_tz_t(dtime_t(micros), 0);
236+
}
237+
}
238+
};
239+
142240
AggregateFunction GetAverageAggregate(PhysicalType type) {
143241
switch (type) {
144242
case PhysicalType::INT16: {
@@ -157,6 +255,10 @@ AggregateFunction GetAverageAggregate(PhysicalType type) {
157255
return AggregateFunction::UnaryAggregate<AvgState<hugeint_t>, hugeint_t, double, HugeintAverageOperation>(
158256
LogicalType::HUGEINT, LogicalType::DOUBLE);
159257
}
258+
case PhysicalType::INTERVAL: {
259+
return AggregateFunction::UnaryAggregate<IntervalAvgState, interval_t, interval_t, IntervalAverageOperation>(
260+
LogicalType::INTERVAL, LogicalType::INTERVAL);
261+
}
160262
default:
161263
throw InternalException("Unimplemented average aggregate");
162264
}
@@ -183,8 +285,20 @@ AggregateFunctionSet AvgFun::GetFunctions() {
183285
avg.AddFunction(GetAverageAggregate(PhysicalType::INT32));
184286
avg.AddFunction(GetAverageAggregate(PhysicalType::INT64));
185287
avg.AddFunction(GetAverageAggregate(PhysicalType::INT128));
288+
avg.AddFunction(GetAverageAggregate(PhysicalType::INTERVAL));
186289
avg.AddFunction(AggregateFunction::UnaryAggregate<AvgState<double>, double, double, NumericAverageOperation>(
187290
LogicalType::DOUBLE, LogicalType::DOUBLE));
291+
292+
avg.AddFunction(AggregateFunction::UnaryAggregate<AvgState<hugeint_t>, int64_t, int64_t, DiscreteAverageOperation>(
293+
LogicalType::TIMESTAMP, LogicalType::TIMESTAMP));
294+
avg.AddFunction(AggregateFunction::UnaryAggregate<AvgState<hugeint_t>, int64_t, int64_t, DiscreteAverageOperation>(
295+
LogicalType::TIMESTAMP_TZ, LogicalType::TIMESTAMP_TZ));
296+
avg.AddFunction(AggregateFunction::UnaryAggregate<AvgState<hugeint_t>, int64_t, int64_t, DiscreteAverageOperation>(
297+
LogicalType::TIME, LogicalType::TIME));
298+
avg.AddFunction(
299+
AggregateFunction::UnaryAggregate<AvgState<hugeint_t>, dtime_tz_t, dtime_tz_t, TimeTZAverageOperation>(
300+
LogicalType::TIME_TZ, LogicalType::TIME_TZ));
301+
188302
return avg;
189303
}
190304

src/duckdb/extension/core_functions/aggregate/distributive/arg_min_max.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -545,8 +545,8 @@ class ArgMinMaxNState {
545545
BinaryAggregateHeap<K, V, COMPARATOR> heap;
546546

547547
bool is_initialized = false;
548-
void Initialize(idx_t nval) {
549-
heap.Initialize(nval);
548+
void Initialize(ArenaAllocator &allocator, idx_t nval) {
549+
heap.Initialize(allocator, nval);
550550
is_initialized = true;
551551
}
552552
};
@@ -601,7 +601,7 @@ static void ArgMinMaxNUpdate(Vector inputs[], AggregateInputData &aggr_input, id
601601
if (nval >= MAX_N) {
602602
throw InvalidInputException("Invalid input for arg_min/arg_max: n value must be < %d", MAX_N);
603603
}
604-
state.Initialize(UnsafeNumericCast<idx_t>(nval));
604+
state.Initialize(aggr_input.allocator, UnsafeNumericCast<idx_t>(nval));
605605
}
606606

607607
// Now add the input to the heap

0 commit comments

Comments
 (0)