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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "duckdb",
3
3
  "main": "./lib/duckdb.js",
4
- "version": "0.3.2-dev890.0",
4
+ "version": "0.3.2-dev898.0",
5
5
  "description": "DuckDB node.js API",
6
6
  "gypfile": true,
7
7
  "dependencies": {
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 "a3178f09c"
15
- #define DUCKDB_VERSION "0.3.2-dev890"
14
+ #define DUCKDB_SOURCE_ID "e15519f1c"
15
+ #define DUCKDB_VERSION "0.3.2-dev898"
16
16
  //===----------------------------------------------------------------------===//
17
17
  // DuckDB
18
18
  //