Skip to content

Commit d392e43

Browse files
Update vendored DuckDB sources to 9565239
1 parent 9565239 commit d392e43

Some content is hidden

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

41 files changed

+1168
-411
lines changed

src/duckdb/extension/core_functions/function_list.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -354,21 +354,21 @@ static const StaticFunctionDefinition core_functions[] = {
354354
DUCKDB_SCALAR_FUNCTION_SET(ToBaseFun),
355355
DUCKDB_SCALAR_FUNCTION(ToBase64Fun),
356356
DUCKDB_SCALAR_FUNCTION_SET_ALIAS(ToBinaryFun),
357-
DUCKDB_SCALAR_FUNCTION(ToCenturiesFun),
358-
DUCKDB_SCALAR_FUNCTION(ToDaysFun),
359-
DUCKDB_SCALAR_FUNCTION(ToDecadesFun),
357+
DUCKDB_SCALAR_FUNCTION_SET(ToCenturiesFun),
358+
DUCKDB_SCALAR_FUNCTION_SET(ToDaysFun),
359+
DUCKDB_SCALAR_FUNCTION_SET(ToDecadesFun),
360360
DUCKDB_SCALAR_FUNCTION_SET_ALIAS(ToHexFun),
361361
DUCKDB_SCALAR_FUNCTION(ToHoursFun),
362362
DUCKDB_SCALAR_FUNCTION(ToMicrosecondsFun),
363-
DUCKDB_SCALAR_FUNCTION(ToMillenniaFun),
363+
DUCKDB_SCALAR_FUNCTION_SET(ToMillenniaFun),
364364
DUCKDB_SCALAR_FUNCTION(ToMillisecondsFun),
365365
DUCKDB_SCALAR_FUNCTION(ToMinutesFun),
366-
DUCKDB_SCALAR_FUNCTION(ToMonthsFun),
367-
DUCKDB_SCALAR_FUNCTION(ToQuartersFun),
366+
DUCKDB_SCALAR_FUNCTION_SET(ToMonthsFun),
367+
DUCKDB_SCALAR_FUNCTION_SET(ToQuartersFun),
368368
DUCKDB_SCALAR_FUNCTION(ToSecondsFun),
369369
DUCKDB_SCALAR_FUNCTION(ToTimestampFun),
370-
DUCKDB_SCALAR_FUNCTION(ToWeeksFun),
371-
DUCKDB_SCALAR_FUNCTION(ToYearsFun),
370+
DUCKDB_SCALAR_FUNCTION_SET(ToWeeksFun),
371+
DUCKDB_SCALAR_FUNCTION_SET(ToYearsFun),
372372
DUCKDB_SCALAR_FUNCTION_ALIAS(TransactionTimestampFun),
373373
DUCKDB_SCALAR_FUNCTION(TranslateFun),
374374
DUCKDB_SCALAR_FUNCTION_SET(TrimFun),

src/duckdb/extension/core_functions/include/core_functions/scalar/date_functions.hpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ struct ToCenturiesFun {
478478
static constexpr const char *Example = "to_centuries(5)";
479479
static constexpr const char *Categories = "";
480480

481-
static ScalarFunction GetFunction();
481+
static ScalarFunctionSet GetFunctions();
482482
};
483483

484484
struct ToDaysFun {
@@ -488,7 +488,7 @@ struct ToDaysFun {
488488
static constexpr const char *Example = "to_days(5)";
489489
static constexpr const char *Categories = "";
490490

491-
static ScalarFunction GetFunction();
491+
static ScalarFunctionSet GetFunctions();
492492
};
493493

494494
struct ToDecadesFun {
@@ -498,7 +498,7 @@ struct ToDecadesFun {
498498
static constexpr const char *Example = "to_decades(5)";
499499
static constexpr const char *Categories = "";
500500

501-
static ScalarFunction GetFunction();
501+
static ScalarFunctionSet GetFunctions();
502502
};
503503

504504
struct ToHoursFun {
@@ -528,7 +528,7 @@ struct ToMillenniaFun {
528528
static constexpr const char *Example = "to_millennia(1)";
529529
static constexpr const char *Categories = "";
530530

531-
static ScalarFunction GetFunction();
531+
static ScalarFunctionSet GetFunctions();
532532
};
533533

534534
struct ToMillisecondsFun {
@@ -558,7 +558,7 @@ struct ToMonthsFun {
558558
static constexpr const char *Example = "to_months(5)";
559559
static constexpr const char *Categories = "";
560560

561-
static ScalarFunction GetFunction();
561+
static ScalarFunctionSet GetFunctions();
562562
};
563563

564564
struct ToQuartersFun {
@@ -568,7 +568,7 @@ struct ToQuartersFun {
568568
static constexpr const char *Example = "to_quarters(5)";
569569
static constexpr const char *Categories = "";
570570

571-
static ScalarFunction GetFunction();
571+
static ScalarFunctionSet GetFunctions();
572572
};
573573

574574
struct ToSecondsFun {
@@ -598,7 +598,7 @@ struct ToWeeksFun {
598598
static constexpr const char *Example = "to_weeks(5)";
599599
static constexpr const char *Categories = "";
600600

601-
static ScalarFunction GetFunction();
601+
static ScalarFunctionSet GetFunctions();
602602
};
603603

604604
struct ToYearsFun {
@@ -608,7 +608,7 @@ struct ToYearsFun {
608608
static constexpr const char *Example = "to_years(5)";
609609
static constexpr const char *Categories = "";
610610

611-
static ScalarFunction GetFunction();
611+
static ScalarFunctionSet GetFunctions();
612612
};
613613

614614
struct WeekFun {

src/duckdb/extension/core_functions/scalar/date/to_interval.cpp

+47-49
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ bool TryMultiplyOperator::Operation(double left, int64_t right, int64_t &result)
1414
struct ToMillenniaOperator {
1515
template <class TA, class TR>
1616
static inline TR Operation(TA input) {
17+
const auto iinput = Cast::Operation<TA, int32_t>(input);
1718
interval_t result;
1819
result.days = 0;
1920
result.micros = 0;
20-
if (!TryMultiplyOperator::Operation<TA, int32_t, int32_t>(input, Interval::MONTHS_PER_MILLENIUM,
21-
result.months)) {
21+
if (!TryMultiplyOperator::Operation<int32_t, int32_t, int32_t>(iinput, Interval::MONTHS_PER_MILLENIUM,
22+
result.months)) {
2223
throw OutOfRangeException("Interval value %s millennia out of range", NumericHelper::ToString(input));
2324
}
2425
return result;
@@ -28,10 +29,12 @@ struct ToMillenniaOperator {
2829
struct ToCenturiesOperator {
2930
template <class TA, class TR>
3031
static inline TR Operation(TA input) {
32+
const auto iinput = Cast::Operation<TA, int32_t>(input);
3133
interval_t result;
3234
result.days = 0;
3335
result.micros = 0;
34-
if (!TryMultiplyOperator::Operation<TA, int32_t, int32_t>(input, Interval::MONTHS_PER_CENTURY, result.months)) {
36+
if (!TryMultiplyOperator::Operation<int32_t, int32_t, int32_t>(iinput, Interval::MONTHS_PER_CENTURY,
37+
result.months)) {
3538
throw OutOfRangeException("Interval value %s centuries out of range", NumericHelper::ToString(input));
3639
}
3740
return result;
@@ -41,10 +44,12 @@ struct ToCenturiesOperator {
4144
struct ToDecadesOperator {
4245
template <class TA, class TR>
4346
static inline TR Operation(TA input) {
47+
const auto iinput = Cast::Operation<TA, int32_t>(input);
4448
interval_t result;
4549
result.days = 0;
4650
result.micros = 0;
47-
if (!TryMultiplyOperator::Operation<TA, int32_t, int32_t>(input, Interval::MONTHS_PER_DECADE, result.months)) {
51+
if (!TryMultiplyOperator::Operation<int32_t, int32_t, int32_t>(iinput, Interval::MONTHS_PER_DECADE,
52+
result.months)) {
4853
throw OutOfRangeException("Interval value %s decades out of range", NumericHelper::ToString(input));
4954
}
5055
return result;
@@ -54,10 +59,11 @@ struct ToDecadesOperator {
5459
struct ToYearsOperator {
5560
template <class TA, class TR>
5661
static inline TR Operation(TA input) {
62+
const auto iinput = Cast::Operation<TA, int32_t>(input);
5763
interval_t result;
5864
result.days = 0;
5965
result.micros = 0;
60-
if (!TryMultiplyOperator::Operation<int32_t, int32_t, int32_t>(input, Interval::MONTHS_PER_YEAR,
66+
if (!TryMultiplyOperator::Operation<int32_t, int32_t, int32_t>(iinput, Interval::MONTHS_PER_YEAR,
6167
result.months)) {
6268
throw OutOfRangeException("Interval value %d years out of range", input);
6369
}
@@ -68,8 +74,9 @@ struct ToYearsOperator {
6874
struct ToQuartersOperator {
6975
template <class TA, class TR>
7076
static inline TR Operation(TA input) {
77+
const auto iinput = Cast::Operation<TA, int32_t>(input);
7178
interval_t result;
72-
if (!TryMultiplyOperator::Operation<int32_t, int32_t, int32_t>(input, Interval::MONTHS_PER_QUARTER,
79+
if (!TryMultiplyOperator::Operation<int32_t, int32_t, int32_t>(iinput, Interval::MONTHS_PER_QUARTER,
7380
result.months)) {
7481
throw OutOfRangeException("Interval value %d quarters out of range", input);
7582
}
@@ -83,7 +90,8 @@ struct ToMonthsOperator {
8390
template <class TA, class TR>
8491
static inline TR Operation(TA input) {
8592
interval_t result;
86-
result.months = input;
93+
result.months = Cast::Operation<TA, int32_t>(input);
94+
;
8795
result.days = 0;
8896
result.micros = 0;
8997
return result;
@@ -93,9 +101,10 @@ struct ToMonthsOperator {
93101
struct ToWeeksOperator {
94102
template <class TA, class TR>
95103
static inline TR Operation(TA input) {
104+
const auto iinput = Cast::Operation<TA, int32_t>(input);
96105
interval_t result;
97106
result.months = 0;
98-
if (!TryMultiplyOperator::Operation<int32_t, int32_t, int32_t>(input, Interval::DAYS_PER_WEEK, result.days)) {
107+
if (!TryMultiplyOperator::Operation<int32_t, int32_t, int32_t>(iinput, Interval::DAYS_PER_WEEK, result.days)) {
99108
throw OutOfRangeException("Interval value %d weeks out of range", input);
100109
}
101110
result.micros = 0;
@@ -108,7 +117,7 @@ struct ToDaysOperator {
108117
static inline TR Operation(TA input) {
109118
interval_t result;
110119
result.months = 0;
111-
result.days = input;
120+
result.days = Cast::Operation<TA, int32_t>(input);
112121
result.micros = 0;
113122
return result;
114123
}
@@ -164,60 +173,49 @@ struct ToMicroSecondsOperator {
164173
}
165174
};
166175

167-
ScalarFunction ToMillenniaFun::GetFunction() {
168-
ScalarFunction function({LogicalType::INTEGER}, LogicalType::INTERVAL,
169-
ScalarFunction::UnaryFunction<int32_t, interval_t, ToMillenniaOperator>);
170-
BaseScalarFunction::SetReturnsError(function);
171-
return function;
176+
template <typename OP>
177+
ScalarFunctionSet GetIntegerIntervalFunctions() {
178+
ScalarFunctionSet function_set;
179+
function_set.AddFunction(ScalarFunction({LogicalType::INTEGER}, LogicalType::INTERVAL,
180+
ScalarFunction::UnaryFunction<int32_t, interval_t, OP>));
181+
function_set.AddFunction(ScalarFunction({LogicalType::BIGINT}, LogicalType::INTERVAL,
182+
ScalarFunction::UnaryFunction<int64_t, interval_t, OP>));
183+
for (auto &func : function_set.functions) {
184+
BaseScalarFunction::SetReturnsError(func);
185+
}
186+
return function_set;
172187
}
173188

174-
ScalarFunction ToCenturiesFun::GetFunction() {
175-
ScalarFunction function({LogicalType::INTEGER}, LogicalType::INTERVAL,
176-
ScalarFunction::UnaryFunction<int32_t, interval_t, ToCenturiesOperator>);
177-
BaseScalarFunction::SetReturnsError(function);
178-
return function;
189+
ScalarFunctionSet ToMillenniaFun::GetFunctions() {
190+
return GetIntegerIntervalFunctions<ToMillenniaOperator>();
179191
}
180192

181-
ScalarFunction ToDecadesFun::GetFunction() {
182-
ScalarFunction function({LogicalType::INTEGER}, LogicalType::INTERVAL,
183-
ScalarFunction::UnaryFunction<int32_t, interval_t, ToDecadesOperator>);
184-
BaseScalarFunction::SetReturnsError(function);
185-
return function;
193+
ScalarFunctionSet ToCenturiesFun::GetFunctions() {
194+
return GetIntegerIntervalFunctions<ToCenturiesOperator>();
186195
}
187196

188-
ScalarFunction ToYearsFun::GetFunction() {
189-
ScalarFunction function({LogicalType::INTEGER}, LogicalType::INTERVAL,
190-
ScalarFunction::UnaryFunction<int32_t, interval_t, ToYearsOperator>);
191-
BaseScalarFunction::SetReturnsError(function);
192-
return function;
197+
ScalarFunctionSet ToDecadesFun::GetFunctions() {
198+
return GetIntegerIntervalFunctions<ToDecadesOperator>();
193199
}
194200

195-
ScalarFunction ToQuartersFun::GetFunction() {
196-
ScalarFunction function({LogicalType::INTEGER}, LogicalType::INTERVAL,
197-
ScalarFunction::UnaryFunction<int32_t, interval_t, ToQuartersOperator>);
198-
BaseScalarFunction::SetReturnsError(function);
199-
return function;
201+
ScalarFunctionSet ToYearsFun::GetFunctions() {
202+
return GetIntegerIntervalFunctions<ToYearsOperator>();
200203
}
201204

202-
ScalarFunction ToMonthsFun::GetFunction() {
203-
ScalarFunction function({LogicalType::INTEGER}, LogicalType::INTERVAL,
204-
ScalarFunction::UnaryFunction<int32_t, interval_t, ToMonthsOperator>);
205-
BaseScalarFunction::SetReturnsError(function);
206-
return function;
205+
ScalarFunctionSet ToQuartersFun::GetFunctions() {
206+
return GetIntegerIntervalFunctions<ToQuartersOperator>();
207207
}
208208

209-
ScalarFunction ToWeeksFun::GetFunction() {
210-
ScalarFunction function({LogicalType::INTEGER}, LogicalType::INTERVAL,
211-
ScalarFunction::UnaryFunction<int32_t, interval_t, ToWeeksOperator>);
212-
BaseScalarFunction::SetReturnsError(function);
213-
return function;
209+
ScalarFunctionSet ToMonthsFun::GetFunctions() {
210+
return GetIntegerIntervalFunctions<ToMonthsOperator>();
214211
}
215212

216-
ScalarFunction ToDaysFun::GetFunction() {
217-
ScalarFunction function({LogicalType::INTEGER}, LogicalType::INTERVAL,
218-
ScalarFunction::UnaryFunction<int32_t, interval_t, ToDaysOperator>);
219-
BaseScalarFunction::SetReturnsError(function);
220-
return function;
213+
ScalarFunctionSet ToWeeksFun::GetFunctions() {
214+
return GetIntegerIntervalFunctions<ToWeeksOperator>();
215+
}
216+
217+
ScalarFunctionSet ToDaysFun::GetFunctions() {
218+
return GetIntegerIntervalFunctions<ToDaysOperator>();
221219
}
222220

223221
ScalarFunction ToHoursFun::GetFunction() {

src/duckdb/extension/core_functions/scalar/list/array_slice.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,7 @@ static unique_ptr<FunctionData> ArraySliceBind(ClientContext &context, ScalarFun
418418
}
419419
if (arguments[0]->return_type.IsJSONType()) {
420420
// This is needed to avoid producing invalid JSON
421+
bound_function.arguments[0] = LogicalType::VARCHAR;
421422
bound_function.return_type = LogicalType::VARCHAR;
422423
} else {
423424
bound_function.return_type = arguments[0]->return_type;

src/duckdb/extension/icu/icu-datefunc.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void ICUDateFunc::BindData::InitCalendar() {
6060

6161
bool ICUDateFunc::BindData::Equals(const FunctionData &other_p) const {
6262
auto &other = other_p.Cast<const BindData>();
63-
return *calendar == *other.calendar;
63+
return calendar->isEquivalentTo(*other.calendar);
6464
}
6565

6666
unique_ptr<FunctionData> ICUDateFunc::BindData::Copy() const {

src/duckdb/extension/parquet/include/parquet_reader.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,9 @@ class ParquetReader : public BaseFileReader {
200200
idx_t schema_index, idx_t column_index,
201201
ParquetColumnSchemaType type = ParquetColumnSchemaType::COLUMN);
202202

203+
MultiFileColumnDefinition ParseColumnDefinition(const duckdb_parquet::FileMetaData &file_meta_data,
204+
ParquetColumnSchema &element);
205+
203206
private:
204207
unique_ptr<FileHandle> file_handle;
205208
};

src/duckdb/extension/parquet/parquet_reader.cpp

+20-12
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,25 @@ unique_ptr<ParquetColumnSchema> ParquetReader::ParseSchema() {
605605
return make_uniq<ParquetColumnSchema>(root);
606606
}
607607

608+
MultiFileColumnDefinition ParquetReader::ParseColumnDefinition(const FileMetaData &file_meta_data,
609+
ParquetColumnSchema &element) {
610+
MultiFileColumnDefinition result(element.name, element.type);
611+
auto &column_schema = file_meta_data.schema[element.schema_index];
612+
613+
if (column_schema.__isset.field_id) {
614+
result.identifier = Value::INTEGER(column_schema.field_id);
615+
} else if (element.parent_schema_index.IsValid()) {
616+
auto &parent_column_schema = file_meta_data.schema[element.parent_schema_index.GetIndex()];
617+
if (parent_column_schema.__isset.field_id) {
618+
result.identifier = Value::INTEGER(parent_column_schema.field_id);
619+
}
620+
}
621+
for (auto &child : element.children) {
622+
result.children.push_back(ParseColumnDefinition(file_meta_data, child));
623+
}
624+
return result;
625+
}
626+
608627
void ParquetReader::InitializeSchema(ClientContext &context) {
609628
auto file_meta_data = GetFileMetadata();
610629

@@ -622,18 +641,7 @@ void ParquetReader::InitializeSchema(ClientContext &context) {
622641
root_schema = ParseSchema();
623642
for (idx_t i = 0; i < root_schema->children.size(); i++) {
624643
auto &element = root_schema->children[i];
625-
auto column = MultiFileColumnDefinition(element.name, element.type);
626-
auto &column_schema = file_meta_data->schema[element.schema_index];
627-
628-
if (column_schema.__isset.field_id) {
629-
column.identifier = Value::INTEGER(column_schema.field_id);
630-
} else if (element.parent_schema_index.IsValid()) {
631-
auto &parent_column_schema = file_meta_data->schema[element.parent_schema_index.GetIndex()];
632-
if (parent_column_schema.__isset.field_id) {
633-
column.identifier = Value::INTEGER(parent_column_schema.field_id);
634-
}
635-
}
636-
columns.emplace_back(std::move(column));
644+
columns.push_back(ParseColumnDefinition(*file_meta_data, element));
637645
}
638646
}
639647

0 commit comments

Comments
 (0)