Skip to content

Commit ad603d4

Browse files
committed
resolve feedback
1 parent 4fcb1ed commit ad603d4

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

src/node_sqlite.cc

Lines changed: 17 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,8 @@ 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) = Utf8StringMaybeOneByte( \
117+
(isolate), std::string_view(v, v_len)).As<Value>(); \
116118
break; \
117119
} \
118120
case SQLITE_NULL: { \
@@ -2346,6 +2348,9 @@ MaybeLocal<Name> StatementSync::ColumnNameToName(const int column) {
23462348
.As<Name>();
23472349
}
23482350

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

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

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

0 commit comments

Comments
 (0)