duckdb 0.3.2-dev890.0 → 0.3.2-dev898.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/duckdb.cpp +188 -0
- package/src/duckdb.hpp +2 -2
- package/src/parquet-amalgamation.cpp +36685 -36685
package/package.json
CHANGED
package/src/duckdb.cpp
CHANGED
|
@@ -75010,6 +75010,10 @@ struct EpochFun {
|
|
|
75010
75010
|
static void RegisterFunction(BuiltinFunctions &set);
|
|
75011
75011
|
};
|
|
75012
75012
|
|
|
75013
|
+
struct MakeDateFun {
|
|
75014
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
75015
|
+
};
|
|
75016
|
+
|
|
75013
75017
|
struct StrfTimeFun {
|
|
75014
75018
|
static void RegisterFunction(BuiltinFunctions &set);
|
|
75015
75019
|
};
|
|
@@ -77822,6 +77826,189 @@ void EpochFun::RegisterFunction(BuiltinFunctions &set) {
|
|
|
77822
77826
|
|
|
77823
77827
|
|
|
77824
77828
|
|
|
77829
|
+
//===----------------------------------------------------------------------===//
|
|
77830
|
+
// DuckDB
|
|
77831
|
+
//
|
|
77832
|
+
// duckdb/common/vector_operations/senary_executor.hpp
|
|
77833
|
+
//
|
|
77834
|
+
//
|
|
77835
|
+
//===----------------------------------------------------------------------===//
|
|
77836
|
+
|
|
77837
|
+
|
|
77838
|
+
|
|
77839
|
+
|
|
77840
|
+
|
|
77841
|
+
namespace duckdb {
|
|
77842
|
+
|
|
77843
|
+
struct SenaryExecutor {
|
|
77844
|
+
static const size_t NCOLS = 6;
|
|
77845
|
+
|
|
77846
|
+
template <class TA, class TB, class TC, class TD, class TE, class TF, class TR,
|
|
77847
|
+
class FUN = std::function<TR(TA, TB, TC, TD, TE, TF)>>
|
|
77848
|
+
static void Execute(DataChunk &input, Vector &result, FUN fun) {
|
|
77849
|
+
D_ASSERT(input.ColumnCount() >= NCOLS);
|
|
77850
|
+
const auto count = input.size();
|
|
77851
|
+
|
|
77852
|
+
bool all_constant = true;
|
|
77853
|
+
bool any_null = false;
|
|
77854
|
+
for (const auto &v : input.data) {
|
|
77855
|
+
if (v.GetVectorType() == VectorType::CONSTANT_VECTOR) {
|
|
77856
|
+
if (ConstantVector::IsNull(v)) {
|
|
77857
|
+
any_null = true;
|
|
77858
|
+
}
|
|
77859
|
+
} else {
|
|
77860
|
+
all_constant = false;
|
|
77861
|
+
break;
|
|
77862
|
+
}
|
|
77863
|
+
}
|
|
77864
|
+
|
|
77865
|
+
if (all_constant) {
|
|
77866
|
+
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
|
77867
|
+
if (any_null) {
|
|
77868
|
+
ConstantVector::SetNull(result, true);
|
|
77869
|
+
} else {
|
|
77870
|
+
auto adata = ConstantVector::GetData<TA>(input.data[0]);
|
|
77871
|
+
auto bdata = ConstantVector::GetData<TB>(input.data[1]);
|
|
77872
|
+
auto cdata = ConstantVector::GetData<TC>(input.data[2]);
|
|
77873
|
+
auto ddata = ConstantVector::GetData<TD>(input.data[3]);
|
|
77874
|
+
auto edata = ConstantVector::GetData<TE>(input.data[4]);
|
|
77875
|
+
auto fdata = ConstantVector::GetData<TF>(input.data[5]);
|
|
77876
|
+
auto result_data = ConstantVector::GetData<TR>(result);
|
|
77877
|
+
result_data[0] = fun(*adata, *bdata, *cdata, *ddata, *edata, *fdata);
|
|
77878
|
+
}
|
|
77879
|
+
} else {
|
|
77880
|
+
result.SetVectorType(VectorType::FLAT_VECTOR);
|
|
77881
|
+
auto result_data = FlatVector::GetData<TR>(result);
|
|
77882
|
+
auto &result_validity = FlatVector::Validity(result);
|
|
77883
|
+
|
|
77884
|
+
bool all_valid = true;
|
|
77885
|
+
vector<VectorData> vdata(NCOLS);
|
|
77886
|
+
for (size_t c = 0; c < NCOLS; ++c) {
|
|
77887
|
+
input.data[c].Orrify(count, vdata[c]);
|
|
77888
|
+
all_valid = all_valid && vdata[c].validity.AllValid();
|
|
77889
|
+
}
|
|
77890
|
+
|
|
77891
|
+
auto adata = (const TA *)(vdata[0].data);
|
|
77892
|
+
auto bdata = (const TB *)(vdata[1].data);
|
|
77893
|
+
auto cdata = (const TC *)(vdata[2].data);
|
|
77894
|
+
auto ddata = (const TD *)(vdata[3].data);
|
|
77895
|
+
auto edata = (const TE *)(vdata[4].data);
|
|
77896
|
+
auto fdata = (const TF *)(vdata[5].data);
|
|
77897
|
+
|
|
77898
|
+
vector<idx_t> idx(NCOLS);
|
|
77899
|
+
if (all_valid) {
|
|
77900
|
+
for (idx_t r = 0; r < count; ++r) {
|
|
77901
|
+
for (size_t c = 0; c < NCOLS; ++c) {
|
|
77902
|
+
idx[c] = vdata[c].sel->get_index(r);
|
|
77903
|
+
}
|
|
77904
|
+
result_data[r] =
|
|
77905
|
+
fun(adata[idx[0]], bdata[idx[1]], cdata[idx[2]], ddata[idx[3]], edata[idx[4]], fdata[idx[5]]);
|
|
77906
|
+
}
|
|
77907
|
+
} else {
|
|
77908
|
+
for (idx_t r = 0; r < count; ++r) {
|
|
77909
|
+
all_valid = true;
|
|
77910
|
+
for (size_t c = 0; c < NCOLS; ++c) {
|
|
77911
|
+
idx[c] = vdata[c].sel->get_index(r);
|
|
77912
|
+
if (!vdata[c].validity.RowIsValid(idx[c])) {
|
|
77913
|
+
result_validity.SetInvalid(r);
|
|
77914
|
+
all_valid = false;
|
|
77915
|
+
break;
|
|
77916
|
+
}
|
|
77917
|
+
}
|
|
77918
|
+
if (all_valid) {
|
|
77919
|
+
result_data[r] = fun(adata[idx[0]], bdata[idx[1]], cdata[idx[2]], ddata[idx[3]], edata[idx[4]],
|
|
77920
|
+
fdata[idx[5]]);
|
|
77921
|
+
}
|
|
77922
|
+
}
|
|
77923
|
+
}
|
|
77924
|
+
}
|
|
77925
|
+
}
|
|
77926
|
+
};
|
|
77927
|
+
|
|
77928
|
+
} // namespace duckdb
|
|
77929
|
+
|
|
77930
|
+
|
|
77931
|
+
namespace duckdb {
|
|
77932
|
+
|
|
77933
|
+
struct MakeDateOperator {
|
|
77934
|
+
template <typename YYYY, typename MM, typename DD, typename RESULT_TYPE>
|
|
77935
|
+
static RESULT_TYPE Operation(YYYY yyyy, MM mm, DD dd) {
|
|
77936
|
+
return Date::FromDate(yyyy, mm, dd);
|
|
77937
|
+
}
|
|
77938
|
+
};
|
|
77939
|
+
|
|
77940
|
+
template <typename T>
|
|
77941
|
+
static void ExecuteMakeDate(DataChunk &input, ExpressionState &state, Vector &result) {
|
|
77942
|
+
D_ASSERT(input.ColumnCount() == 3);
|
|
77943
|
+
auto &yyyy = input.data[0];
|
|
77944
|
+
auto &mm = input.data[1];
|
|
77945
|
+
auto &dd = input.data[2];
|
|
77946
|
+
|
|
77947
|
+
TernaryExecutor::Execute<T, T, T, date_t>(yyyy, mm, dd, result, input.size(),
|
|
77948
|
+
MakeDateOperator::Operation<T, T, T, date_t>);
|
|
77949
|
+
}
|
|
77950
|
+
|
|
77951
|
+
struct MakeTimeOperator {
|
|
77952
|
+
template <typename HH, typename MM, typename SS, typename RESULT_TYPE>
|
|
77953
|
+
static RESULT_TYPE Operation(HH hh, MM mm, SS ss) {
|
|
77954
|
+
int64_t secs = ss;
|
|
77955
|
+
int64_t micros = std::round((ss - secs) * Interval::MICROS_PER_SEC);
|
|
77956
|
+
return Time::FromTime(hh, mm, secs, micros);
|
|
77957
|
+
}
|
|
77958
|
+
};
|
|
77959
|
+
|
|
77960
|
+
template <typename T>
|
|
77961
|
+
static void ExecuteMakeTime(DataChunk &input, ExpressionState &state, Vector &result) {
|
|
77962
|
+
D_ASSERT(input.ColumnCount() == 3);
|
|
77963
|
+
auto &yyyy = input.data[0];
|
|
77964
|
+
auto &mm = input.data[1];
|
|
77965
|
+
auto &dd = input.data[2];
|
|
77966
|
+
|
|
77967
|
+
TernaryExecutor::Execute<T, T, double, dtime_t>(yyyy, mm, dd, result, input.size(),
|
|
77968
|
+
MakeTimeOperator::Operation<T, T, double, dtime_t>);
|
|
77969
|
+
}
|
|
77970
|
+
|
|
77971
|
+
struct MakeTimestampOperator {
|
|
77972
|
+
template <typename YYYY, typename MM, typename DD, typename HR, typename MN, typename SS, typename RESULT_TYPE>
|
|
77973
|
+
static RESULT_TYPE Operation(YYYY yyyy, MM mm, DD dd, HR hr, MN mn, SS ss) {
|
|
77974
|
+
const auto d = MakeDateOperator::Operation<YYYY, MM, DD, date_t>(yyyy, mm, dd);
|
|
77975
|
+
const auto t = MakeTimeOperator::Operation<HR, MN, SS, dtime_t>(hr, mn, ss);
|
|
77976
|
+
return Timestamp::FromDatetime(d, t);
|
|
77977
|
+
}
|
|
77978
|
+
};
|
|
77979
|
+
|
|
77980
|
+
template <typename T>
|
|
77981
|
+
static void ExecuteMakeTimestamp(DataChunk &input, ExpressionState &state, Vector &result) {
|
|
77982
|
+
D_ASSERT(input.ColumnCount() == 6);
|
|
77983
|
+
|
|
77984
|
+
auto func = MakeTimestampOperator::Operation<T, T, T, T, T, double, timestamp_t>;
|
|
77985
|
+
SenaryExecutor::Execute<T, T, T, T, T, double, timestamp_t>(input, result, func);
|
|
77986
|
+
}
|
|
77987
|
+
|
|
77988
|
+
void MakeDateFun::RegisterFunction(BuiltinFunctions &set) {
|
|
77989
|
+
ScalarFunctionSet make_date("make_date");
|
|
77990
|
+
make_date.AddFunction(ScalarFunction({LogicalType::BIGINT, LogicalType::BIGINT, LogicalType::BIGINT},
|
|
77991
|
+
LogicalType::DATE, ExecuteMakeDate<int64_t>));
|
|
77992
|
+
set.AddFunction(make_date);
|
|
77993
|
+
|
|
77994
|
+
ScalarFunctionSet make_time("make_time");
|
|
77995
|
+
make_time.AddFunction(ScalarFunction({LogicalType::BIGINT, LogicalType::BIGINT, LogicalType::DOUBLE},
|
|
77996
|
+
LogicalType::TIME, ExecuteMakeTime<int64_t>));
|
|
77997
|
+
set.AddFunction(make_time);
|
|
77998
|
+
|
|
77999
|
+
ScalarFunctionSet make_timestamp("make_timestamp");
|
|
78000
|
+
make_timestamp.AddFunction(ScalarFunction({LogicalType::BIGINT, LogicalType::BIGINT, LogicalType::BIGINT,
|
|
78001
|
+
LogicalType::BIGINT, LogicalType::BIGINT, LogicalType::DOUBLE},
|
|
78002
|
+
LogicalType::TIMESTAMP, ExecuteMakeTimestamp<int64_t>));
|
|
78003
|
+
set.AddFunction(make_timestamp);
|
|
78004
|
+
}
|
|
78005
|
+
|
|
78006
|
+
} // namespace duckdb
|
|
78007
|
+
|
|
78008
|
+
|
|
78009
|
+
|
|
78010
|
+
|
|
78011
|
+
|
|
77825
78012
|
|
|
77826
78013
|
|
|
77827
78014
|
|
|
@@ -79152,6 +79339,7 @@ void BuiltinFunctions::RegisterDateFunctions() {
|
|
|
79152
79339
|
Register<CurrentDateFun>();
|
|
79153
79340
|
Register<CurrentTimestampFun>();
|
|
79154
79341
|
Register<EpochFun>();
|
|
79342
|
+
Register<MakeDateFun>();
|
|
79155
79343
|
Register<StrfTimeFun>();
|
|
79156
79344
|
Register<StrpTimeFun>();
|
|
79157
79345
|
Register<ToIntervalFun>();
|
package/src/duckdb.hpp
CHANGED
|
@@ -11,8 +11,8 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
|
|
11
11
|
#pragma once
|
|
12
12
|
#define DUCKDB_AMALGAMATION 1
|
|
13
13
|
#define DUCKDB_AMALGAMATION_EXTENDED 1
|
|
14
|
-
#define DUCKDB_SOURCE_ID "
|
|
15
|
-
#define DUCKDB_VERSION "0.3.2-
|
|
14
|
+
#define DUCKDB_SOURCE_ID "e15519f1c"
|
|
15
|
+
#define DUCKDB_VERSION "0.3.2-dev898"
|
|
16
16
|
//===----------------------------------------------------------------------===//
|
|
17
17
|
// DuckDB
|
|
18
18
|
//
|