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.
- package/package.json +1 -1
- package/src/data_chunk.cpp +1 -1
- package/src/duckdb/extension/icu/icu-extension.cpp +2 -2
- package/src/duckdb/extension/icu/icu-makedate.cpp +52 -0
- package/src/duckdb/extension/icu/icu-strptime.cpp +1 -1
- package/src/duckdb/extension/icu/third_party/icu/i18n/calendar.cpp +4 -0
- package/src/duckdb/extension/icu/third_party/icu/i18n/dangical.cpp +28 -28
- package/src/duckdb/extension/icu/third_party/icu/i18n/dangical.h +4 -4
- package/src/duckdb/extension/json/include/json_common.hpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_create.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +1 -1
- package/src/duckdb/extension/json/json_functions.cpp +2 -2
- package/src/duckdb/extension/json/json_serializer.cpp +1 -1
- package/src/duckdb/extension/parquet/column_reader.cpp +1 -1
- package/src/duckdb/extension/parquet/column_writer.cpp +3 -3
- package/src/duckdb/src/catalog/catalog_entry/scalar_macro_catalog_entry.cpp +2 -2
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +2 -2
- package/src/duckdb/src/common/operator/cast_operators.cpp +24 -25
- package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +2 -2
- package/src/duckdb/src/common/row_operations/row_scatter.cpp +1 -1
- package/src/duckdb/src/common/types/bit.cpp +18 -18
- package/src/duckdb/src/common/types/blob.cpp +7 -7
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +1 -1
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +1 -1
- package/src/duckdb/src/common/types/hash.cpp +1 -1
- package/src/duckdb/src/common/types/hyperloglog.cpp +1 -1
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
- package/src/duckdb/src/common/types/string_heap.cpp +2 -2
- package/src/duckdb/src/common/types/string_type.cpp +2 -2
- package/src/duckdb/src/common/types/timestamp.cpp +1 -1
- package/src/duckdb/src/common/types/vector.cpp +7 -7
- package/src/duckdb/src/execution/index/art/art_key.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +1 -1
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
- package/src/duckdb/src/function/aggregate/distributive/arg_min_max.cpp +2 -2
- package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +2 -2
- package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +2 -2
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +2 -2
- package/src/duckdb/src/function/aggregate/distributive/kurtosis.cpp +3 -2
- package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -2
- package/src/duckdb/src/function/aggregate/distributive/skew.cpp +5 -1
- package/src/duckdb/src/function/aggregate/distributive/string_agg.cpp +1 -1
- package/src/duckdb/src/function/cast/list_casts.cpp +1 -1
- package/src/duckdb/src/function/cast/struct_cast.cpp +1 -1
- package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -3
- package/src/duckdb/src/function/scalar/bit/bitstring.cpp +1 -1
- package/src/duckdb/src/function/scalar/blob/encode.cpp +1 -1
- package/src/duckdb/src/function/scalar/date/strftime.cpp +3 -3
- package/src/duckdb/src/function/scalar/generic/current_setting.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/ascii.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/concat.cpp +6 -6
- package/src/duckdb/src/function/scalar/string/contains.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/damerau_levenshtein.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/hex.cpp +4 -4
- package/src/duckdb/src/function/scalar/string/instr.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/jaccard.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/jaro_winkler.cpp +5 -5
- package/src/duckdb/src/function/scalar/string/length.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/levenshtein.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/like.cpp +10 -11
- package/src/duckdb/src/function/scalar/string/mismatches.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/nfc_normalize.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/pad.cpp +3 -3
- package/src/duckdb/src/function/scalar/string/prefix.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/printf.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
- package/src/duckdb/src/function/scalar/string/repeat.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/replace.cpp +3 -3
- package/src/duckdb/src/function/scalar/string/reverse.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/starts_with.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/string_split.cpp +3 -3
- package/src/duckdb/src/function/scalar/string/strip_accents.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/substring.cpp +3 -3
- package/src/duckdb/src/function/scalar/string/suffix.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/translate.cpp +3 -3
- package/src/duckdb/src/function/scalar/string/trim.cpp +3 -3
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +5 -7
- package/src/duckdb/src/function/scalar/union/union_extract.cpp +1 -1
- package/src/duckdb/src/function/table/copy_csv.cpp +1 -1
- package/src/duckdb/src/function/table/system/duckdb_functions.cpp +2 -2
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/radix.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +8 -6
- package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/macro_function.hpp +17 -0
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/scalar_macro_function.hpp +3 -0
- package/src/duckdb/src/include/duckdb/function/table_macro_function.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/cse_optimizer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/aggregate_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/alter_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +4 -3
- package/src/duckdb/src/include/duckdb/planner/expression_binder/check_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/constant_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/group_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/insert_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/relation_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/returning_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/update_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/where_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +12 -9
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
- package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
- package/src/duckdb/src/main/capi/result-c.cpp +2 -2
- package/src/duckdb/src/optimizer/cse_optimizer.cpp +9 -8
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +2 -0
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +33 -29
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +6 -5
- package/src/duckdb/src/planner/binder/expression/bind_cast_expression.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_collate_expression.cpp +2 -2
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +8 -7
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +2 -2
- package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +6 -6
- package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +2 -2
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +1 -1
- package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +1 -1
- package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +8 -8
- package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +5 -5
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +2 -2
- package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -2
- package/src/duckdb/src/planner/binder/tableref/plan_expressionlistref.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +4 -4
- package/src/duckdb/src/planner/expression.cpp +2 -1
- package/src/duckdb/src/planner/expression_binder/aggregate_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_binder/alter_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +4 -4
- package/src/duckdb/src/planner/expression_binder/check_binder.cpp +4 -4
- package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/constant_binder.cpp +3 -3
- package/src/duckdb/src/planner/expression_binder/group_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +4 -4
- package/src/duckdb/src/planner/expression_binder/index_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_binder/insert_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +3 -3
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +4 -4
- package/src/duckdb/src/planner/expression_binder/relation_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_binder/returning_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +3 -3
- package/src/duckdb/src/planner/expression_binder/update_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_binder/where_binder.cpp +4 -4
- package/src/duckdb/src/planner/expression_binder.cpp +12 -12
- package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
- package/src/duckdb/src/storage/compression/dictionary_compression.cpp +1 -1
- package/src/duckdb/src/storage/compression/fsst.cpp +3 -3
- package/src/duckdb/src/storage/compression/string_uncompressed.cpp +1 -1
- package/src/duckdb/src/storage/statistics/string_stats.cpp +2 -2
- package/src/statement.cpp +3 -3
package/package.json
CHANGED
package/src/data_chunk.cpp
CHANGED
@@ -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].
|
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.
|
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.
|
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 ¶meters) {
|
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.
|
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
|
-
|
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
|
-
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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].
|
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].
|
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.
|
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].
|
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 = (
|
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 = (
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
1719
|
-
|
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.
|
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.
|
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.
|
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.
|
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);
|