@@ -66,7 +66,7 @@ using v8::Value;
6666
6767inline MaybeLocal<String> Utf8StringMaybeOneByte (Isolate* isolate,
6868 std::string_view input) {
69- int len = static_cast <int >(input.size ());
69+ const int len = static_cast <int >(input.size ());
7070 if (simdutf::validate_ascii (input.data (), input.size ())) {
7171 return String::NewFromOneByte (
7272 isolate,
@@ -120,7 +120,7 @@ inline MaybeLocal<String> Utf8StringMaybeOneByte(Isolate* isolate,
120120 case SQLITE_TEXT: { \
121121 const char * v = \
122122 reinterpret_cast <const char *>(sqlite3_##from##_text (__VA_ARGS__)); \
123- int v_len = sqlite3_##from##_bytes (__VA_ARGS__); \
123+ const int v_len = sqlite3_##from##_bytes (__VA_ARGS__); \
124124 (result) = \
125125 Utf8StringMaybeOneByte ((isolate), std::string_view (v, v_len)) \
126126 .As <Value>(); \
@@ -2433,6 +2433,10 @@ StatementSync::~StatementSync() {
24332433void StatementSync::Finalize () {
24342434 sqlite3_finalize (statement_);
24352435 statement_ = nullptr ;
2436+ InvalidateColumnNameCache ();
2437+ }
2438+
2439+ void StatementSync::InvalidateColumnNameCache () {
24362440 cached_column_names_.clear ();
24372441}
24382442
@@ -2622,17 +2626,16 @@ MaybeLocal<Name> StatementSync::ColumnNameToName(const int column) {
26222626 .As <Name>();
26232627}
26242628
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.
2629+ // Populates `keys` with cached column names, rebuilding the cache if the
2630+ // statement was re-prepared.
26282631bool StatementSync::GetCachedColumnNames (LocalVector<Name>* keys) {
26292632 Isolate* isolate = env ()->isolate ();
26302633
2631- int reprepare_count =
2632- sqlite3_stmt_status (statement_, SQLITE_STMTSTATUS_REPREPARE, 0 );
2634+ const int reprepare_count =
2635+ sqlite3_stmt_status (statement_, SQLITE_STMTSTATUS_REPREPARE, false );
26332636 if (reprepare_count != cached_column_names_reprepare_count_) {
26342637 cached_column_names_.clear ();
2635- int num_cols = sqlite3_column_count (statement_);
2638+ const int num_cols = sqlite3_column_count (statement_);
26362639 if (num_cols == 0 ) {
26372640 cached_column_names_reprepare_count_ = reprepare_count;
26382641 return true ;
@@ -2641,7 +2644,7 @@ bool StatementSync::GetCachedColumnNames(LocalVector<Name>* keys) {
26412644 for (int i = 0 ; i < num_cols; ++i) {
26422645 Local<Name> key;
26432646 if (!ColumnNameToName (i).ToLocal (&key)) {
2644- cached_column_names_. clear ();
2647+ InvalidateColumnNameCache ();
26452648 return false ;
26462649 }
26472650 cached_column_names_.emplace_back (Global<Name>(isolate, key));
0 commit comments