duckdb 0.7.2-dev2320.0 → 0.7.2-dev2366.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 (162) hide show
  1. package/package.json +1 -1
  2. package/src/data_chunk.cpp +1 -1
  3. package/src/duckdb/extension/icu/icu-extension.cpp +2 -2
  4. package/src/duckdb/extension/icu/icu-makedate.cpp +52 -0
  5. package/src/duckdb/extension/icu/icu-strptime.cpp +1 -1
  6. package/src/duckdb/extension/icu/third_party/icu/i18n/calendar.cpp +4 -0
  7. package/src/duckdb/extension/icu/third_party/icu/i18n/dangical.cpp +28 -28
  8. package/src/duckdb/extension/icu/third_party/icu/i18n/dangical.h +4 -4
  9. package/src/duckdb/extension/json/include/json_common.hpp +1 -1
  10. package/src/duckdb/extension/json/json_functions/json_create.cpp +1 -1
  11. package/src/duckdb/extension/json/json_functions/json_transform.cpp +1 -1
  12. package/src/duckdb/extension/json/json_functions.cpp +2 -2
  13. package/src/duckdb/extension/json/json_serializer.cpp +1 -1
  14. package/src/duckdb/extension/parquet/column_reader.cpp +1 -1
  15. package/src/duckdb/extension/parquet/column_writer.cpp +3 -3
  16. package/src/duckdb/src/catalog/catalog_entry/scalar_macro_catalog_entry.cpp +2 -2
  17. package/src/duckdb/src/common/arrow/arrow_appender.cpp +2 -2
  18. package/src/duckdb/src/common/operator/cast_operators.cpp +24 -25
  19. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +2 -2
  20. package/src/duckdb/src/common/row_operations/row_scatter.cpp +1 -1
  21. package/src/duckdb/src/common/types/bit.cpp +18 -18
  22. package/src/duckdb/src/common/types/blob.cpp +7 -7
  23. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +1 -1
  24. package/src/duckdb/src/common/types/column/column_data_collection.cpp +1 -1
  25. package/src/duckdb/src/common/types/hash.cpp +1 -1
  26. package/src/duckdb/src/common/types/hyperloglog.cpp +1 -1
  27. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
  28. package/src/duckdb/src/common/types/string_heap.cpp +2 -2
  29. package/src/duckdb/src/common/types/string_type.cpp +2 -2
  30. package/src/duckdb/src/common/types/timestamp.cpp +1 -1
  31. package/src/duckdb/src/common/types/vector.cpp +7 -7
  32. package/src/duckdb/src/execution/index/art/art_key.cpp +2 -2
  33. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +1 -1
  34. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  35. package/src/duckdb/src/function/aggregate/distributive/arg_min_max.cpp +2 -2
  36. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +2 -2
  37. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +2 -2
  38. package/src/duckdb/src/function/aggregate/distributive/first.cpp +2 -2
  39. package/src/duckdb/src/function/aggregate/distributive/kurtosis.cpp +3 -2
  40. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -2
  41. package/src/duckdb/src/function/aggregate/distributive/skew.cpp +5 -1
  42. package/src/duckdb/src/function/aggregate/distributive/string_agg.cpp +1 -1
  43. package/src/duckdb/src/function/cast/list_casts.cpp +1 -1
  44. package/src/duckdb/src/function/cast/struct_cast.cpp +1 -1
  45. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -3
  46. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +1 -1
  47. package/src/duckdb/src/function/scalar/blob/encode.cpp +1 -1
  48. package/src/duckdb/src/function/scalar/date/strftime.cpp +3 -3
  49. package/src/duckdb/src/function/scalar/generic/current_setting.cpp +1 -1
  50. package/src/duckdb/src/function/scalar/string/ascii.cpp +1 -1
  51. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -2
  52. package/src/duckdb/src/function/scalar/string/concat.cpp +6 -6
  53. package/src/duckdb/src/function/scalar/string/contains.cpp +2 -2
  54. package/src/duckdb/src/function/scalar/string/damerau_levenshtein.cpp +2 -2
  55. package/src/duckdb/src/function/scalar/string/hex.cpp +4 -4
  56. package/src/duckdb/src/function/scalar/string/instr.cpp +1 -1
  57. package/src/duckdb/src/function/scalar/string/jaccard.cpp +1 -1
  58. package/src/duckdb/src/function/scalar/string/jaro_winkler.cpp +5 -5
  59. package/src/duckdb/src/function/scalar/string/length.cpp +1 -1
  60. package/src/duckdb/src/function/scalar/string/levenshtein.cpp +2 -2
  61. package/src/duckdb/src/function/scalar/string/like.cpp +10 -11
  62. package/src/duckdb/src/function/scalar/string/mismatches.cpp +2 -2
  63. package/src/duckdb/src/function/scalar/string/nfc_normalize.cpp +1 -1
  64. package/src/duckdb/src/function/scalar/string/pad.cpp +3 -3
  65. package/src/duckdb/src/function/scalar/string/prefix.cpp +2 -2
  66. package/src/duckdb/src/function/scalar/string/printf.cpp +1 -1
  67. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  68. package/src/duckdb/src/function/scalar/string/repeat.cpp +1 -1
  69. package/src/duckdb/src/function/scalar/string/replace.cpp +3 -3
  70. package/src/duckdb/src/function/scalar/string/reverse.cpp +1 -1
  71. package/src/duckdb/src/function/scalar/string/starts_with.cpp +2 -2
  72. package/src/duckdb/src/function/scalar/string/string_split.cpp +3 -3
  73. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +2 -2
  74. package/src/duckdb/src/function/scalar/string/substring.cpp +3 -3
  75. package/src/duckdb/src/function/scalar/string/suffix.cpp +2 -2
  76. package/src/duckdb/src/function/scalar/string/translate.cpp +3 -3
  77. package/src/duckdb/src/function/scalar/string/trim.cpp +3 -3
  78. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  79. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +5 -7
  80. package/src/duckdb/src/function/scalar/union/union_extract.cpp +1 -1
  81. package/src/duckdb/src/function/table/copy_csv.cpp +1 -1
  82. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +2 -2
  83. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  84. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +1 -1
  85. package/src/duckdb/src/include/duckdb/common/radix.hpp +1 -1
  86. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +8 -6
  87. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +1 -1
  88. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +17 -0
  89. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +1 -1
  90. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -2
  91. package/src/duckdb/src/include/duckdb/function/scalar_macro_function.hpp +3 -0
  92. package/src/duckdb/src/include/duckdb/function/table_macro_function.hpp +3 -0
  93. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  94. package/src/duckdb/src/include/duckdb/optimizer/cse_optimizer.hpp +1 -1
  95. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +1 -0
  96. package/src/duckdb/src/include/duckdb/planner/binder.hpp +1 -1
  97. package/src/duckdb/src/include/duckdb/planner/expression_binder/aggregate_binder.hpp +1 -1
  98. package/src/duckdb/src/include/duckdb/planner/expression_binder/alter_binder.hpp +1 -1
  99. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +4 -3
  100. package/src/duckdb/src/include/duckdb/planner/expression_binder/check_binder.hpp +1 -1
  101. package/src/duckdb/src/include/duckdb/planner/expression_binder/constant_binder.hpp +1 -1
  102. package/src/duckdb/src/include/duckdb/planner/expression_binder/group_binder.hpp +1 -1
  103. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  104. package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +1 -1
  105. package/src/duckdb/src/include/duckdb/planner/expression_binder/insert_binder.hpp +1 -1
  106. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +2 -2
  107. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  108. package/src/duckdb/src/include/duckdb/planner/expression_binder/relation_binder.hpp +1 -1
  109. package/src/duckdb/src/include/duckdb/planner/expression_binder/returning_binder.hpp +1 -1
  110. package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +1 -1
  111. package/src/duckdb/src/include/duckdb/planner/expression_binder/update_binder.hpp +1 -1
  112. package/src/duckdb/src/include/duckdb/planner/expression_binder/where_binder.hpp +2 -2
  113. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +12 -9
  114. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  115. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  116. package/src/duckdb/src/main/capi/result-c.cpp +2 -2
  117. package/src/duckdb/src/optimizer/cse_optimizer.cpp +9 -8
  118. package/src/duckdb/src/parser/expression/subquery_expression.cpp +1 -1
  119. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +2 -0
  120. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +33 -29
  121. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +6 -5
  122. package/src/duckdb/src/planner/binder/expression/bind_cast_expression.cpp +1 -1
  123. package/src/duckdb/src/planner/binder/expression/bind_collate_expression.cpp +2 -2
  124. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +1 -1
  125. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +8 -7
  126. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +2 -2
  127. package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +6 -6
  128. package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +2 -2
  129. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +1 -1
  130. package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +1 -1
  131. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +8 -8
  132. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +5 -5
  133. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +2 -2
  134. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  135. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -2
  136. package/src/duckdb/src/planner/binder/tableref/plan_expressionlistref.cpp +1 -1
  137. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +4 -4
  138. package/src/duckdb/src/planner/expression.cpp +2 -1
  139. package/src/duckdb/src/planner/expression_binder/aggregate_binder.cpp +2 -2
  140. package/src/duckdb/src/planner/expression_binder/alter_binder.cpp +2 -2
  141. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +4 -4
  142. package/src/duckdb/src/planner/expression_binder/check_binder.cpp +4 -4
  143. package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +1 -1
  144. package/src/duckdb/src/planner/expression_binder/constant_binder.cpp +3 -3
  145. package/src/duckdb/src/planner/expression_binder/group_binder.cpp +2 -2
  146. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +4 -4
  147. package/src/duckdb/src/planner/expression_binder/index_binder.cpp +2 -2
  148. package/src/duckdb/src/planner/expression_binder/insert_binder.cpp +2 -2
  149. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +3 -3
  150. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +4 -4
  151. package/src/duckdb/src/planner/expression_binder/relation_binder.cpp +2 -2
  152. package/src/duckdb/src/planner/expression_binder/returning_binder.cpp +2 -2
  153. package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +3 -3
  154. package/src/duckdb/src/planner/expression_binder/update_binder.cpp +2 -2
  155. package/src/duckdb/src/planner/expression_binder/where_binder.cpp +4 -4
  156. package/src/duckdb/src/planner/expression_binder.cpp +12 -12
  157. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  158. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +1 -1
  159. package/src/duckdb/src/storage/compression/fsst.cpp +3 -3
  160. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +1 -1
  161. package/src/duckdb/src/storage/statistics/string_stats.cpp +2 -2
  162. package/src/statement.cpp +3 -3
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "duckdb",
3
3
  "main": "./lib/duckdb.js",
4
4
  "types": "./lib/duckdb.d.ts",
5
- "version": "0.7.2-dev2320.0",
5
+ "version": "0.7.2-dev2366.0",
6
6
  "description": "DuckDB node.js API",
7
7
  "gypfile": true,
8
8
  "dependencies": {
@@ -151,7 +151,7 @@ Napi::Array EncodeDataChunk(Napi::Env env, duckdb::DataChunk &chunk, bool with_t
151
151
  auto data = duckdb::FlatVector::GetData<duckdb::string_t>(*vec);
152
152
 
153
153
  for (size_t i = 0; i < chunk.size(); ++i) {
154
- auto buf = Napi::Buffer<char>::Copy(env, data[i].GetDataUnsafe(), data[i].GetSize());
154
+ auto buf = Napi::Buffer<char>::Copy(env, data[i].GetData(), data[i].GetSize());
155
155
  array.Set(i, buf);
156
156
  }
157
157
  desc.Set("data", array);
@@ -69,7 +69,7 @@ struct IcuBindData : public FunctionData {
69
69
  static int32_t ICUGetSortKey(icu::Collator &collator, string_t input, duckdb::unique_ptr<char[]> &buffer,
70
70
  int32_t &buffer_size) {
71
71
  int32_t string_size =
72
- collator.getSortKey(icu::UnicodeString::fromUTF8(icu::StringPiece(input.GetDataUnsafe(), input.GetSize())),
72
+ collator.getSortKey(icu::UnicodeString::fromUTF8(icu::StringPiece(input.GetData(), input.GetSize())),
73
73
  (uint8_t *)buffer.get(), buffer_size);
74
74
  if (string_size > buffer_size) {
75
75
  // have to resize the buffer
@@ -77,7 +77,7 @@ static int32_t ICUGetSortKey(icu::Collator &collator, string_t input, duckdb::un
77
77
  buffer = duckdb::unique_ptr<char[]>(new char[buffer_size]);
78
78
 
79
79
  string_size =
80
- collator.getSortKey(icu::UnicodeString::fromUTF8(icu::StringPiece(input.GetDataUnsafe(), input.GetSize())),
80
+ collator.getSortKey(icu::UnicodeString::fromUTF8(icu::StringPiece(input.GetData(), input.GetSize())),
81
81
  (uint8_t *)buffer.get(), buffer_size);
82
82
  }
83
83
  return string_size;
@@ -3,6 +3,7 @@
3
3
  #include "duckdb/common/types/timestamp.hpp"
4
4
  #include "duckdb/common/vector_operations/senary_executor.hpp"
5
5
  #include "duckdb/common/vector_operations/septenary_executor.hpp"
6
+ #include "duckdb/function/cast/cast_function_set.hpp"
6
7
  #include "duckdb/parser/parsed_data/create_scalar_function_info.hpp"
7
8
  #include "include/icu-datefunc.hpp"
8
9
  #include "include/icu-datetrunc.hpp"
@@ -11,6 +12,56 @@
11
12
 
12
13
  namespace duckdb {
13
14
 
15
+ struct ICUMakeDate : public ICUDateFunc {
16
+ static inline date_t Operation(icu::Calendar *calendar, timestamp_t instant) {
17
+ if (!Timestamp::IsFinite(instant)) {
18
+ return Timestamp::GetDate(instant);
19
+ }
20
+
21
+ // Extract the time zone parts
22
+ auto micros = SetTime(calendar, instant);
23
+ const auto era = ExtractField(calendar, UCAL_ERA);
24
+ const auto year = ExtractField(calendar, UCAL_YEAR);
25
+ const auto mm = ExtractField(calendar, UCAL_MONTH) + 1;
26
+ const auto dd = ExtractField(calendar, UCAL_DATE);
27
+
28
+ const auto yyyy = era ? year : (-year + 1);
29
+ date_t result;
30
+ if (!Date::TryFromDate(yyyy, mm, dd, result)) {
31
+ throw ConversionException("Unable to convert TIMESTAMPTZ to DATE");
32
+ }
33
+
34
+ return result;
35
+ }
36
+
37
+ static bool CastToDate(Vector &source, Vector &result, idx_t count, CastParameters &parameters) {
38
+ auto &cast_data = parameters.cast_data->Cast<CastData>();
39
+ auto info = (BindData *)cast_data.info.get();
40
+ CalendarPtr calendar(info->calendar->clone());
41
+
42
+ UnaryExecutor::Execute<timestamp_t, date_t>(
43
+ source, result, count, [&](timestamp_t input) { return Operation(calendar.get(), input); });
44
+ return true;
45
+ }
46
+
47
+ static BoundCastInfo BindCastToDate(BindCastInput &input, const LogicalType &source, const LogicalType &target) {
48
+ if (!input.context) {
49
+ throw InternalException("Missing context for TIMESTAMPTZ to DATE cast.");
50
+ }
51
+
52
+ auto cast_data = make_uniq<CastData>(make_uniq<BindData>(*input.context));
53
+
54
+ return BoundCastInfo(CastToDate, std::move(cast_data));
55
+ }
56
+
57
+ static void AddCasts(ClientContext &context) {
58
+ auto &config = DBConfig::GetConfig(context);
59
+ auto &casts = config.GetCastFunctions();
60
+
61
+ casts.RegisterCastFunction(LogicalType::TIMESTAMP_TZ, LogicalType::DATE, BindCastToDate);
62
+ }
63
+ };
64
+
14
65
  struct ICUMakeTimestampTZFunc : public ICUDateFunc {
15
66
  template <typename T>
16
67
  static inline timestamp_t Operation(icu::Calendar *calendar, T yyyy, T mm, T dd, T hr, T mn, double ss) {
@@ -95,6 +146,7 @@ struct ICUMakeTimestampTZFunc : public ICUDateFunc {
95
146
 
96
147
  void RegisterICUMakeDateFunctions(ClientContext &context) {
97
148
  ICUMakeTimestampTZFunc::AddFunction("make_timestamptz", context);
149
+ ICUMakeDate::AddCasts(context);
98
150
  }
99
151
 
100
152
  } // namespace duckdb
@@ -255,7 +255,7 @@ struct ICUStrptime : public ICUDateFunc {
255
255
  UnaryExecutor::ExecuteWithNulls<string_t, timestamp_t>(
256
256
  source, result, count, [&](string_t input, ValidityMask &mask, idx_t idx) {
257
257
  timestamp_t result;
258
- const auto str = input.GetDataUnsafe();
258
+ const auto str = input.GetData();
259
259
  const auto len = input.GetSize();
260
260
  string_t tz(nullptr, 0);
261
261
  bool has_offset = false;
@@ -2981,6 +2981,10 @@ void Calendar::computeTime(UErrorCode& status) {
2981
2981
 
2982
2982
  // Compute the Julian day
2983
2983
  int32_t julianDay = computeJulianDay();
2984
+ if (julianDay < getMinimum(UCAL_JULIAN_DAY) || julianDay > getMaximum(UCAL_JULIAN_DAY)) {
2985
+ status = U_ILLEGAL_ARGUMENT_ERROR;
2986
+ return;
2987
+ }
2984
2988
 
2985
2989
  double millis = Grego::julianDayToMillis(julianDay);
2986
2990
 
@@ -56,7 +56,7 @@ DangiCalendar::DangiCalendar(const Locale& aLocale, UErrorCode& success)
56
56
  {
57
57
  }
58
58
 
59
- DangiCalendar::DangiCalendar (const DangiCalendar& other)
59
+ DangiCalendar::DangiCalendar (const DangiCalendar& other)
60
60
  : ChineseCalendar(other)
61
61
  {
62
62
  }
@@ -71,37 +71,37 @@ DangiCalendar::clone() const
71
71
  return new DangiCalendar(*this);
72
72
  }
73
73
 
74
- const char *DangiCalendar::getType() const {
74
+ const char *DangiCalendar::getType() const {
75
75
  return "dangi";
76
76
  }
77
77
 
78
78
  /**
79
79
  * The time zone used for performing astronomical computations for
80
- * Dangi calendar. In Korea various timezones have been used historically
81
- * (cf. http://www.math.snu.ac.kr/~kye/others/lunar.html):
82
- *
83
- * - 1908/04/01: GMT+8
84
- * 1908/04/01 - 1911/12/31: GMT+8.5
85
- * 1912/01/01 - 1954/03/20: GMT+9
86
- * 1954/03/21 - 1961/08/09: GMT+8.5
87
- * 1961/08/10 - : GMT+9
88
- *
89
- * Note that, in 1908-1911, the government did not apply the timezone change
90
- * but used GMT+8. In addition, 1954-1961's timezone change does not affect
91
- * the lunar date calculation. Therefore, the following simpler rule works:
92
- *
93
- * -1911: GMT+8
94
- * 1912-: GMT+9
95
- *
96
- * Unfortunately, our astronomer's approximation doesn't agree with the
97
- * references (http://www.math.snu.ac.kr/~kye/others/lunar.html and
98
- * http://astro.kasi.re.kr/Life/ConvertSolarLunarForm.aspx?MenuID=115)
99
- * in 1897/7/30. So the following ad hoc fix is used here:
100
- *
101
- * -1896: GMT+8
102
- * 1897: GMT+7
103
- * 1898-1911: GMT+8
104
- * 1912- : GMT+9
80
+ * Dangi calendar. In Korea various timezones have been used historically
81
+ * (cf. http://www.math.snu.ac.kr/~kye/others/lunar.html):
82
+ *
83
+ * - 1908/04/01: GMT+8
84
+ * 1908/04/01 - 1911/12/31: GMT+8.5
85
+ * 1912/01/01 - 1954/03/20: GMT+9
86
+ * 1954/03/21 - 1961/08/09: GMT+8.5
87
+ * 1961/08/10 - : GMT+9
88
+ *
89
+ * Note that, in 1908-1911, the government did not apply the timezone change
90
+ * but used GMT+8. In addition, 1954-1961's timezone change does not affect
91
+ * the lunar date calculation. Therefore, the following simpler rule works:
92
+ *
93
+ * -1911: GMT+8
94
+ * 1912-: GMT+9
95
+ *
96
+ * Unfortunately, our astronomer's approximation doesn't agree with the
97
+ * references (http://www.math.snu.ac.kr/~kye/others/lunar.html and
98
+ * http://astro.kasi.re.kr/Life/ConvertSolarLunarForm.aspx?MenuID=115)
99
+ * in 1897/7/30. So the following ad hoc fix is used here:
100
+ *
101
+ * -1896: GMT+8
102
+ * 1897: GMT+7
103
+ * 1898-1911: GMT+8
104
+ * 1912- : GMT+9
105
105
  */
106
106
  static void U_CALLCONV initDangiCalZoneAstroCalc(void) {
107
107
  U_ASSERT(gDangiCalendarZoneAstroCalc == NULL);
@@ -127,7 +127,7 @@ static void U_CALLCONV initDangiCalZoneAstroCalc(void) {
127
127
  ucln_i18n_registerCleanup(UCLN_I18N_DANGI_CALENDAR, calendar_dangi_cleanup);
128
128
  }
129
129
 
130
- const TimeZone* DangiCalendar::getDangiCalZoneAstroCalc(void) const {
130
+ TimeZone* DangiCalendar::getDangiCalZoneAstroCalc(void) {
131
131
  umtx_initOnce(gDangiCalendarInitOnce, &initDangiCalZoneAstroCalc);
132
132
  return gDangiCalendarZoneAstroCalc;
133
133
  }
@@ -27,7 +27,7 @@ U_NAMESPACE_BEGIN
27
27
  * <p><code>DangiCalendar</code> is a concrete subclass of {@link Calendar}
28
28
  * that implements a traditional Korean lunisolar calendar.</p>
29
29
  *
30
- * <p>DangiCalendar usually should be instantiated using
30
+ * <p>DangiCalendar usually should be instantiated using
31
31
  * {@link com.ibm.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
32
32
  * with the tag <code>"@calendar=dangi"</code>.</p>
33
33
  *
@@ -74,10 +74,10 @@ class DangiCalendar : public ChineseCalendar {
74
74
 
75
75
  private:
76
76
 
77
- const TimeZone* getDangiCalZoneAstroCalc(void) const;
77
+ static TimeZone* getDangiCalZoneAstroCalc(void);
78
78
 
79
79
  // UObject stuff
80
- public:
80
+ public:
81
81
  /**
82
82
  * @return The class ID for this object. All objects of a given class have the
83
83
  * same class ID. Objects of other classes have different class IDs.
@@ -108,7 +108,7 @@ class DangiCalendar : public ChineseCalendar {
108
108
 
109
109
 
110
110
  private:
111
-
111
+
112
112
  DangiCalendar(); // default constructor not implemented
113
113
  };
114
114
 
@@ -228,7 +228,7 @@ public:
228
228
  //! Get JSON value using JSON path query (safe, checks the path query)
229
229
  template <class YYJSON_VAL_T>
230
230
  static inline YYJSON_VAL_T *GetPointer(YYJSON_VAL_T *root, const string_t &path_str) {
231
- auto ptr = path_str.GetDataUnsafe();
231
+ auto ptr = path_str.GetData();
232
232
  auto len = path_str.GetSize();
233
233
  if (len == 0) {
234
234
  return GetPointerUnsafe<YYJSON_VAL_T>(root, ptr, len);
@@ -185,7 +185,7 @@ inline yyjson_mut_val *CreateJSONValue(yyjson_mut_doc *doc, const double &value)
185
185
 
186
186
  template <>
187
187
  inline yyjson_mut_val *CreateJSONValue(yyjson_mut_doc *doc, const string_t &value) {
188
- return yyjson_mut_strn(doc, value.GetDataUnsafe(), value.GetSize());
188
+ return yyjson_mut_strn(doc, value.GetData(), value.GetSize());
189
189
  }
190
190
 
191
191
  inline yyjson_mut_val *CreateJSONValueFromJSON(yyjson_mut_doc *doc, const string_t &value) {
@@ -98,7 +98,7 @@ static duckdb::unique_ptr<FunctionData> JSONTransformBind(ClientContext &context
98
98
  auto doc = JSONCommon::ReadDocumentUnsafe(structure_string, JSONCommon::READ_FLAG,
99
99
  json_allocator.GetYYJSONAllocator(), &err);
100
100
  if (err.code != YYJSON_READ_SUCCESS) {
101
- JSONCommon::ThrowParseError(structure_string.GetDataUnsafe(), structure_string.GetSize(), err);
101
+ JSONCommon::ThrowParseError(structure_string.GetData(), structure_string.GetSize(), err);
102
102
  }
103
103
  bound_function.return_type = StructureStringToType(doc->root, context);
104
104
  }
@@ -19,7 +19,7 @@ static void CheckPath(const Value &path_val, string &path, size_t &len) {
19
19
  }
20
20
  auto path_str = path_str_val.GetValueUnsafe<string_t>();
21
21
  len = path_str.GetSize();
22
- auto ptr = path_str.GetDataUnsafe();
22
+ auto ptr = path_str.GetData();
23
23
  // Empty strings and invalid $ paths yield an error
24
24
  if (len == 0) {
25
25
  throw InvalidInputException("Empty JSON path");
@@ -213,7 +213,7 @@ static bool CastVarcharToJSON(Vector &source, Vector &result, idx_t count, CastP
213
213
  bool success = true;
214
214
  UnaryExecutor::ExecuteWithNulls<string_t, string_t>(
215
215
  source, result, count, [&](string_t input, ValidityMask &mask, idx_t idx) {
216
- auto data = (char *)(input.GetDataUnsafe());
216
+ auto data = (char *)(input.GetData());
217
217
  auto length = input.GetSize();
218
218
  yyjson_read_err error;
219
219
 
@@ -227,7 +227,7 @@ void JsonSerializer::WriteValue(const string_t value) {
227
227
  if (skip_if_empty && value.GetSize() == 0) {
228
228
  return;
229
229
  }
230
- auto val = yyjson_mut_strncpy(doc, value.GetDataUnsafe(), value.GetSize());
230
+ auto val = yyjson_mut_strncpy(doc, value.GetData(), value.GetSize());
231
231
  PushValue(val);
232
232
  }
233
233
 
@@ -685,7 +685,7 @@ void StringColumnReader::PrepareDeltaByteArray(ResizeableBuffer &buffer) {
685
685
  if (i == 0 || prefix_data[i] > string_data[i - 1].GetSize()) {
686
686
  throw std::runtime_error("DELTA_BYTE_ARRAY - prefix is out of range - corrupt file?");
687
687
  }
688
- memcpy(result_data, string_data[i - 1].GetDataUnsafe(), prefix_data[i]);
688
+ memcpy(result_data, string_data[i - 1].GetData(), prefix_data[i]);
689
689
  }
690
690
  memcpy(result_data + prefix_data[i], buffer.ptr, suffix_data[i]);
691
691
  buffer.inc(suffix_data[i]);
@@ -1342,7 +1342,7 @@ public:
1342
1342
  }
1343
1343
  stats.Update(ptr[r]);
1344
1344
  temp_writer.Write<uint32_t>(ptr[r].GetSize());
1345
- temp_writer.WriteData((const_data_ptr_t)ptr[r].GetDataUnsafe(), ptr[r].GetSize());
1345
+ temp_writer.WriteData((const_data_ptr_t)ptr[r].GetData(), ptr[r].GetSize());
1346
1346
  }
1347
1347
  }
1348
1348
  }
@@ -1401,7 +1401,7 @@ public:
1401
1401
  stats.Update(value);
1402
1402
  // write this string value to the dictionary
1403
1403
  temp_writer->Write<uint32_t>(value.GetSize());
1404
- temp_writer->WriteData((const_data_ptr_t)(value.GetDataUnsafe()), value.GetSize());
1404
+ temp_writer->WriteData((const_data_ptr_t)(value.GetData()), value.GetSize());
1405
1405
  }
1406
1406
  // flush the dictionary page and add it to the to-be-written pages
1407
1407
  WriteDictionary(state, std::move(temp_writer), values.size());
@@ -1528,7 +1528,7 @@ public:
1528
1528
  stats.Update(string_values[r]);
1529
1529
  // write this string value to the dictionary
1530
1530
  temp_writer->Write<uint32_t>(string_values[r].GetSize());
1531
- temp_writer->WriteData((const_data_ptr_t)string_values[r].GetDataUnsafe(), string_values[r].GetSize());
1531
+ temp_writer->WriteData((const_data_ptr_t)string_values[r].GetData(), string_values[r].GetSize());
1532
1532
  }
1533
1533
  // flush the dictionary page and add it to the to-be-written pages
1534
1534
  WriteDictionary(state, std::move(temp_writer), enum_count);
@@ -21,7 +21,7 @@ ScalarMacroCatalogEntry::ScalarMacroCatalogEntry(Catalog *catalog, SchemaCatalog
21
21
 
22
22
  void ScalarMacroCatalogEntry::Serialize(Serializer &main_serializer) const {
23
23
  D_ASSERT(!internal);
24
- auto &scalar_function = (ScalarMacroFunction &)*function;
24
+ auto &scalar_function = function->Cast<ScalarMacroFunction>();
25
25
  FieldWriter writer(main_serializer);
26
26
  writer.WriteString(schema->name);
27
27
  writer.WriteString(name);
@@ -66,7 +66,7 @@ void TableMacroCatalogEntry::Serialize(Serializer &main_serializer) const {
66
66
  D_ASSERT(!internal);
67
67
  FieldWriter writer(main_serializer);
68
68
 
69
- auto &table_function = (TableMacroFunction &)*function;
69
+ auto &table_function = function->Cast<TableMacroFunction>();
70
70
  writer.WriteString(schema->name);
71
71
  writer.WriteString(name);
72
72
  writer.WriteSerializable(*table_function.query_node);
@@ -195,7 +195,7 @@ struct ArrowEnumData : public ArrowScalarBaseData<TGT> {
195
195
  return input.GetSize();
196
196
  }
197
197
  static void WriteData(data_ptr_t target, string_t input) {
198
- memcpy(target, input.GetDataUnsafe(), input.GetSize());
198
+ memcpy(target, input.GetData(), input.GetSize());
199
199
  }
200
200
  static void EnumAppendVector(ArrowAppendData &append_data, const Vector &input, idx_t size) {
201
201
  D_ASSERT(input.GetVectorType() == VectorType::FLAT_VECTOR);
@@ -301,7 +301,7 @@ struct ArrowVarcharConverter {
301
301
 
302
302
  template <class SRC>
303
303
  static void WriteData(data_ptr_t target, SRC input) {
304
- memcpy(target, input.GetDataUnsafe(), input.GetSize());
304
+ memcpy(target, input.GetData(), input.GetSize());
305
305
  }
306
306
  };
307
307
 
@@ -1097,7 +1097,7 @@ static inline bool TrySimpleIntegerCast(const char *buf, idx_t len, T &result, b
1097
1097
 
1098
1098
  template <>
1099
1099
  bool TryCast::Operation(string_t input, bool &result, bool strict) {
1100
- auto input_data = input.GetDataUnsafe();
1100
+ auto input_data = input.GetData();
1101
1101
  auto input_size = input.GetSize();
1102
1102
 
1103
1103
  switch (input_size) {
@@ -1141,36 +1141,36 @@ bool TryCast::Operation(string_t input, bool &result, bool strict) {
1141
1141
  }
1142
1142
  template <>
1143
1143
  bool TryCast::Operation(string_t input, int8_t &result, bool strict) {
1144
- return TrySimpleIntegerCast<int8_t>(input.GetDataUnsafe(), input.GetSize(), result, strict);
1144
+ return TrySimpleIntegerCast<int8_t>(input.GetData(), input.GetSize(), result, strict);
1145
1145
  }
1146
1146
  template <>
1147
1147
  bool TryCast::Operation(string_t input, int16_t &result, bool strict) {
1148
- return TrySimpleIntegerCast<int16_t>(input.GetDataUnsafe(), input.GetSize(), result, strict);
1148
+ return TrySimpleIntegerCast<int16_t>(input.GetData(), input.GetSize(), result, strict);
1149
1149
  }
1150
1150
  template <>
1151
1151
  bool TryCast::Operation(string_t input, int32_t &result, bool strict) {
1152
- return TrySimpleIntegerCast<int32_t>(input.GetDataUnsafe(), input.GetSize(), result, strict);
1152
+ return TrySimpleIntegerCast<int32_t>(input.GetData(), input.GetSize(), result, strict);
1153
1153
  }
1154
1154
  template <>
1155
1155
  bool TryCast::Operation(string_t input, int64_t &result, bool strict) {
1156
- return TrySimpleIntegerCast<int64_t>(input.GetDataUnsafe(), input.GetSize(), result, strict);
1156
+ return TrySimpleIntegerCast<int64_t>(input.GetData(), input.GetSize(), result, strict);
1157
1157
  }
1158
1158
 
1159
1159
  template <>
1160
1160
  bool TryCast::Operation(string_t input, uint8_t &result, bool strict) {
1161
- return TrySimpleIntegerCast<uint8_t, false>(input.GetDataUnsafe(), input.GetSize(), result, strict);
1161
+ return TrySimpleIntegerCast<uint8_t, false>(input.GetData(), input.GetSize(), result, strict);
1162
1162
  }
1163
1163
  template <>
1164
1164
  bool TryCast::Operation(string_t input, uint16_t &result, bool strict) {
1165
- return TrySimpleIntegerCast<uint16_t, false>(input.GetDataUnsafe(), input.GetSize(), result, strict);
1165
+ return TrySimpleIntegerCast<uint16_t, false>(input.GetData(), input.GetSize(), result, strict);
1166
1166
  }
1167
1167
  template <>
1168
1168
  bool TryCast::Operation(string_t input, uint32_t &result, bool strict) {
1169
- return TrySimpleIntegerCast<uint32_t, false>(input.GetDataUnsafe(), input.GetSize(), result, strict);
1169
+ return TrySimpleIntegerCast<uint32_t, false>(input.GetData(), input.GetSize(), result, strict);
1170
1170
  }
1171
1171
  template <>
1172
1172
  bool TryCast::Operation(string_t input, uint64_t &result, bool strict) {
1173
- return TrySimpleIntegerCast<uint64_t, false>(input.GetDataUnsafe(), input.GetSize(), result, strict);
1173
+ return TrySimpleIntegerCast<uint64_t, false>(input.GetData(), input.GetSize(), result, strict);
1174
1174
  }
1175
1175
 
1176
1176
  template <class T, char decimal_separator = '.'>
@@ -1213,17 +1213,17 @@ static bool TryDoubleCast(const char *buf, idx_t len, T &result, bool strict) {
1213
1213
 
1214
1214
  template <>
1215
1215
  bool TryCast::Operation(string_t input, float &result, bool strict) {
1216
- return TryDoubleCast<float>(input.GetDataUnsafe(), input.GetSize(), result, strict);
1216
+ return TryDoubleCast<float>(input.GetData(), input.GetSize(), result, strict);
1217
1217
  }
1218
1218
 
1219
1219
  template <>
1220
1220
  bool TryCast::Operation(string_t input, double &result, bool strict) {
1221
- return TryDoubleCast<double>(input.GetDataUnsafe(), input.GetSize(), result, strict);
1221
+ return TryDoubleCast<double>(input.GetData(), input.GetSize(), result, strict);
1222
1222
  }
1223
1223
 
1224
1224
  template <>
1225
1225
  bool TryCastErrorMessageCommaSeparated::Operation(string_t input, float &result, string *error_message, bool strict) {
1226
- if (!TryDoubleCast<float, ','>(input.GetDataUnsafe(), input.GetSize(), result, strict)) {
1226
+ if (!TryDoubleCast<float, ','>(input.GetData(), input.GetSize(), result, strict)) {
1227
1227
  HandleCastError::AssignError(StringUtil::Format("Could not cast string to float: \"%s\"", input.GetString()),
1228
1228
  error_message);
1229
1229
  return false;
@@ -1233,7 +1233,7 @@ bool TryCastErrorMessageCommaSeparated::Operation(string_t input, float &result,
1233
1233
 
1234
1234
  template <>
1235
1235
  bool TryCastErrorMessageCommaSeparated::Operation(string_t input, double &result, string *error_message, bool strict) {
1236
- if (!TryDoubleCast<double, ','>(input.GetDataUnsafe(), input.GetSize(), result, strict)) {
1236
+ if (!TryDoubleCast<double, ','>(input.GetData(), input.GetSize(), result, strict)) {
1237
1237
  HandleCastError::AssignError(StringUtil::Format("Could not cast string to double: \"%s\"", input.GetString()),
1238
1238
  error_message);
1239
1239
  return false;
@@ -1518,12 +1518,12 @@ template <>
1518
1518
  bool TryCast::Operation(string_t input, date_t &result, bool strict) {
1519
1519
  idx_t pos;
1520
1520
  bool special = false;
1521
- return Date::TryConvertDate(input.GetDataUnsafe(), input.GetSize(), pos, result, special, strict);
1521
+ return Date::TryConvertDate(input.GetData(), input.GetSize(), pos, result, special, strict);
1522
1522
  }
1523
1523
 
1524
1524
  template <>
1525
1525
  date_t Cast::Operation(string_t input) {
1526
- return Date::FromCString(input.GetDataUnsafe(), input.GetSize());
1526
+ return Date::FromCString(input.GetData(), input.GetSize());
1527
1527
  }
1528
1528
 
1529
1529
  //===--------------------------------------------------------------------===//
@@ -1541,12 +1541,12 @@ bool TryCastErrorMessage::Operation(string_t input, dtime_t &result, string *err
1541
1541
  template <>
1542
1542
  bool TryCast::Operation(string_t input, dtime_t &result, bool strict) {
1543
1543
  idx_t pos;
1544
- return Time::TryConvertTime(input.GetDataUnsafe(), input.GetSize(), pos, result, strict);
1544
+ return Time::TryConvertTime(input.GetData(), input.GetSize(), pos, result, strict);
1545
1545
  }
1546
1546
 
1547
1547
  template <>
1548
1548
  dtime_t Cast::Operation(string_t input) {
1549
- return Time::FromCString(input.GetDataUnsafe(), input.GetSize());
1549
+ return Time::FromCString(input.GetData(), input.GetSize());
1550
1550
  }
1551
1551
 
1552
1552
  //===--------------------------------------------------------------------===//
@@ -1554,7 +1554,7 @@ dtime_t Cast::Operation(string_t input) {
1554
1554
  //===--------------------------------------------------------------------===//
1555
1555
  template <>
1556
1556
  bool TryCastErrorMessage::Operation(string_t input, timestamp_t &result, string *error_message, bool strict) {
1557
- auto cast_result = Timestamp::TryConvertTimestamp(input.GetDataUnsafe(), input.GetSize(), result);
1557
+ auto cast_result = Timestamp::TryConvertTimestamp(input.GetData(), input.GetSize(), result);
1558
1558
  if (cast_result == TimestampCastResult::SUCCESS) {
1559
1559
  return true;
1560
1560
  }
@@ -1568,13 +1568,12 @@ bool TryCastErrorMessage::Operation(string_t input, timestamp_t &result, string
1568
1568
 
1569
1569
  template <>
1570
1570
  bool TryCast::Operation(string_t input, timestamp_t &result, bool strict) {
1571
- return Timestamp::TryConvertTimestamp(input.GetDataUnsafe(), input.GetSize(), result) ==
1572
- TimestampCastResult::SUCCESS;
1571
+ return Timestamp::TryConvertTimestamp(input.GetData(), input.GetSize(), result) == TimestampCastResult::SUCCESS;
1573
1572
  }
1574
1573
 
1575
1574
  template <>
1576
1575
  timestamp_t Cast::Operation(string_t input) {
1577
- return Timestamp::FromCString(input.GetDataUnsafe(), input.GetSize());
1576
+ return Timestamp::FromCString(input.GetData(), input.GetSize());
1578
1577
  }
1579
1578
 
1580
1579
  //===--------------------------------------------------------------------===//
@@ -1582,7 +1581,7 @@ timestamp_t Cast::Operation(string_t input) {
1582
1581
  //===--------------------------------------------------------------------===//
1583
1582
  template <>
1584
1583
  bool TryCastErrorMessage::Operation(string_t input, interval_t &result, string *error_message, bool strict) {
1585
- return Interval::FromCString(input.GetDataUnsafe(), input.GetSize(), result, error_message, strict);
1584
+ return Interval::FromCString(input.GetData(), input.GetSize(), result, error_message, strict);
1586
1585
  }
1587
1586
 
1588
1587
  //===--------------------------------------------------------------------===//
@@ -1715,8 +1714,8 @@ struct HugeIntegerCastOperation {
1715
1714
  template <>
1716
1715
  bool TryCast::Operation(string_t input, hugeint_t &result, bool strict) {
1717
1716
  HugeIntCastData data;
1718
- if (!TryIntegerCast<HugeIntCastData, true, true, HugeIntegerCastOperation>(input.GetDataUnsafe(), input.GetSize(),
1719
- data, strict)) {
1717
+ if (!TryIntegerCast<HugeIntCastData, true, true, HugeIntegerCastOperation>(input.GetData(), input.GetSize(), data,
1718
+ strict)) {
1720
1719
  return false;
1721
1720
  }
1722
1721
  result = data.hugeint;
@@ -1916,7 +1915,7 @@ bool TryDecimalStringCast(string_t input, T &result, string *error_message, uint
1916
1915
  state.round_set = false;
1917
1916
  state.should_round = false;
1918
1917
  if (!TryIntegerCast<DecimalCastData<T>, true, true, DecimalCastOperation, false, decimal_separator>(
1919
- input.GetDataUnsafe(), input.GetSize(), state, false)) {
1918
+ input.GetData(), input.GetSize(), state, false)) {
1920
1919
  string error = StringUtil::Format("Could not convert string \"%s\" to DECIMAL(%d,%d)", input.GetString(),
1921
1920
  (int)width, (int)scale);
1922
1921
  HandleCastError::AssignError(error, error_message);
@@ -163,7 +163,7 @@ static void HeapScatterStringVector(Vector &v, idx_t vcount, const SelectionVect
163
163
  Store<uint32_t>(string_entry.GetSize(), key_locations[i]);
164
164
  key_locations[i] += sizeof(uint32_t);
165
165
  // store the string
166
- memcpy(key_locations[i], string_entry.GetDataUnsafe(), string_entry.GetSize());
166
+ memcpy(key_locations[i], string_entry.GetData(), string_entry.GetSize());
167
167
  key_locations[i] += string_entry.GetSize();
168
168
  }
169
169
  }
@@ -181,7 +181,7 @@ static void HeapScatterStringVector(Vector &v, idx_t vcount, const SelectionVect
181
181
  Store<uint32_t>(string_entry.GetSize(), key_locations[i]);
182
182
  key_locations[i] += sizeof(uint32_t);
183
183
  // store the string
184
- memcpy(key_locations[i], string_entry.GetDataUnsafe(), string_entry.GetSize());
184
+ memcpy(key_locations[i], string_entry.GetData(), string_entry.GetSize());
185
185
  key_locations[i] += string_entry.GetSize();
186
186
  } else {
187
187
  // set the validitymask
@@ -82,7 +82,7 @@ static void ScatterStringVector(UnifiedVectorFormat &col, Vector &rows, data_ptr
82
82
  } else {
83
83
  const auto &str = string_data[col_idx];
84
84
  string_t inserted((const char *)str_locations[i], str.GetSize());
85
- memcpy(inserted.GetDataWriteable(), str.GetDataUnsafe(), str.GetSize());
85
+ memcpy(inserted.GetDataWriteable(), str.GetData(), str.GetSize());
86
86
  str_locations[i] += str.GetSize();
87
87
  inserted.Finalize();
88
88
  Store<string_t>(inserted, row + col_offset);