Skip to content

Commit fd4215d

Browse files
committed
resolve feedback
1 parent 4fcb1ed commit fd4215d

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
@@ -57,16 +57,17 @@ using v8::Uint8Array;
5757
using v8::Value;
5858

5959
inline MaybeLocal<String> Utf8StringMaybeOneByte(Isolate* isolate,
60-
const char* data,
61-
size_t length) {
62-
int len = static_cast<int>(length);
63-
if (simdutf::validate_ascii(data, length)) {
64-
return String::NewFromOneByte(isolate,
65-
reinterpret_cast<const uint8_t*>(data),
66-
NewStringType::kNormal,
67-
len);
60+
std::string_view input) {
61+
int len = static_cast<int>(input.size());
62+
if (simdutf::validate_ascii(input.data(), input.size())) {
63+
return String::NewFromOneByte(
64+
isolate,
65+
reinterpret_cast<const uint8_t*>(input.data()),
66+
NewStringType::kNormal,
67+
len);
6868
}
69-
return String::NewFromUtf8(isolate, data, NewStringType::kNormal, len);
69+
return String::NewFromUtf8(
70+
isolate, input.data(), NewStringType::kNormal, len);
7071
}
7172

7273
#define CHECK_ERROR_OR_THROW(isolate, db, expr, expected, ret) \
@@ -112,7 +113,9 @@ inline MaybeLocal<String> Utf8StringMaybeOneByte(Isolate* isolate,
112113
const char* v = \
113114
reinterpret_cast<const char*>(sqlite3_##from##_text(__VA_ARGS__)); \
114115
int v_len = sqlite3_##from##_bytes(__VA_ARGS__); \
115-
(result) = Utf8StringMaybeOneByte((isolate), v, v_len).As<Value>(); \
116+
(result) = \
117+
Utf8StringMaybeOneByte((isolate), std::string_view(v, v_len)) \
118+
.As<Value>(); \
116119
break; \
117120
} \
118121
case SQLITE_NULL: { \
@@ -2346,6 +2349,9 @@ MaybeLocal<Name> StatementSync::ColumnNameToName(const int column) {
23462349
.As<Name>();
23472350
}
23482351

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

@@ -3302,6 +3308,8 @@ void StatementSyncIterator::Next(const FunctionCallbackInfo<Value>& args) {
33023308
if (iter->stmt_->return_arrays_) {
33033309
row_value = Array::New(isolate, row_values.data(), row_values.size());
33043310
} else {
3311+
// Use cached internalized column names to avoid repeated V8 string
3312+
// creation and enable hidden class sharing across row objects.
33053313
if (!iter->stmt_->GetCachedColumnNames(&row_keys)) return;
33063314

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

0 commit comments

Comments
 (0)