Skip to content

Commit 8583747

Browse files
committed
resolve feedback
1 parent e1fbfcb commit 8583747

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

src/node_sqlite.cc

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,17 @@ using v8::Uint8Array;
6565
using v8::Value;
6666

6767
inline MaybeLocal<String> Utf8StringMaybeOneByte(Isolate* isolate,
68-
const char* data,
69-
size_t length) {
70-
int len = static_cast<int>(length);
71-
if (simdutf::validate_ascii(data, length)) {
72-
return String::NewFromOneByte(isolate,
73-
reinterpret_cast<const uint8_t*>(data),
74-
NewStringType::kNormal,
75-
len);
68+
std::string_view input) {
69+
int len = static_cast<int>(input.size());
70+
if (simdutf::validate_ascii(input.data(), input.size())) {
71+
return String::NewFromOneByte(
72+
isolate,
73+
reinterpret_cast<const uint8_t*>(input.data()),
74+
NewStringType::kNormal,
75+
len);
7676
}
77-
return String::NewFromUtf8(isolate, data, NewStringType::kNormal, len);
77+
return String::NewFromUtf8(
78+
isolate, input.data(), NewStringType::kNormal, len);
7879
}
7980

8081
#define CHECK_ERROR_OR_THROW(isolate, db, expr, expected, ret) \
@@ -120,7 +121,9 @@ inline MaybeLocal<String> Utf8StringMaybeOneByte(Isolate* isolate,
120121
const char* v = \
121122
reinterpret_cast<const char*>(sqlite3_##from##_text(__VA_ARGS__)); \
122123
int v_len = sqlite3_##from##_bytes(__VA_ARGS__); \
123-
(result) = Utf8StringMaybeOneByte((isolate), v, v_len).As<Value>(); \
124+
(result) = \
125+
Utf8StringMaybeOneByte((isolate), std::string_view(v, v_len)) \
126+
.As<Value>(); \
124127
break; \
125128
} \
126129
case SQLITE_NULL: { \
@@ -2619,6 +2622,9 @@ MaybeLocal<Name> StatementSync::ColumnNameToName(const int column) {
26192622
.As<Name>();
26202623
}
26212624

2625+
// Returns cached internalized column name strings for this statement,
2626+
// invalidating the cache when SQLite re-prepares the statement (e.g. after
2627+
// schema changes like ALTER TABLE) detected via SQLITE_STMTSTATUS_REPREPARE.
26222628
bool StatementSync::GetCachedColumnNames(LocalVector<Name>* keys) {
26232629
Isolate* isolate = env()->isolate();
26242630

@@ -3581,6 +3587,8 @@ void StatementSyncIterator::Next(const FunctionCallbackInfo<Value>& args) {
35813587
if (iter->stmt_->return_arrays_) {
35823588
row_value = Array::New(isolate, row_values.data(), row_values.size());
35833589
} else {
3590+
// Use cached internalized column names to avoid repeated V8 string
3591+
// creation and enable hidden class sharing across row objects.
35843592
if (!iter->stmt_->GetCachedColumnNames(&row_keys)) return;
35853593

35863594
DCHECK_EQ(row_keys.size(), row_values.size());

0 commit comments

Comments
 (0)