From 7144e79bcf3f77e61e080562b0e2ad6049feda3b Mon Sep 17 00:00:00 2001 From: Zaid Humayun Date: Wed, 18 Mar 2026 22:56:47 +0100 Subject: [PATCH 1/2] Fix the drop sequence bug from https://github.com/tursodatabase/turso/issues/5807 This commit normalizes the table name before emitting instructions for drop table. Earlier, the non-normalized name was being emitted. --- core/translate/schema.rs | 4 ++-- testing/sqltests/tests/autoincr.sqltest | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/core/translate/schema.rs b/core/translate/schema.rs index 71864a2be7..c10f53e474 100644 --- a/core/translate/schema.rs +++ b/core/translate/schema.rs @@ -1822,7 +1822,7 @@ pub fn translate_drop_table( let seq_cursor_id = program.alloc_cursor_id(CursorType::BTreeTable(seq_table.clone())); let seq_table_name_reg = program.alloc_register(); let dropped_table_name_reg = - program.emit_string8_new_reg(tbl_name.name.as_str().to_string()); + program.emit_string8_new_reg(normalize_ident(tbl_name.name.as_str())); program.mark_last_insn_constant(); program.emit_insn(Insn::OpenWrite { @@ -1875,7 +1875,7 @@ pub fn translate_drop_table( { let ver_cursor_id = program.alloc_cursor_id(CursorType::BTreeTable(version_table.clone())); let ver_table_name_reg = program.alloc_register(); - let dropped_name_reg = program.emit_string8_new_reg(tbl_name.name.as_str().to_string()); + let dropped_name_reg = program.emit_string8_new_reg(normalize_ident(tbl_name.name.as_str())); program.mark_last_insn_constant(); program.emit_insn(Insn::OpenWrite { diff --git a/testing/sqltests/tests/autoincr.sqltest b/testing/sqltests/tests/autoincr.sqltest index 41aab66c48..1a1ae6308a 100644 --- a/testing/sqltests/tests/autoincr.sqltest +++ b/testing/sqltests/tests/autoincr.sqltest @@ -169,6 +169,23 @@ test autoinc-drop-last-table-empties-sequence { expect { } +# https://github.com/tursodatabase/turso/issues/5807 +# DROP TABLE should remove sqlite_sequence entries even for quoted mixed-case names. +@cross-check-integrity +test autoinc-drop-mixed-case-table-removes-sequence-entry { + CREATE TABLE "MiXeD Name"(id INTEGER PRIMARY KEY AUTOINCREMENT, v); + INSERT INTO "MiXeD Name"(v) VALUES('x'); + DROP TABLE "MiXeD Name"; + CREATE TABLE "MiXeD Name"(id INTEGER PRIMARY KEY AUTOINCREMENT, v); + INSERT INTO "MiXeD Name"(v) VALUES('y'); + SELECT id, v FROM "MiXeD Name"; + SELECT seq FROM sqlite_sequence; +} +expect { + 1|y + 1 +} + # Test: Renaming an AUTOINCREMENT table updates sqlite_sequence in place. @cross-check-integrity test autoinc-rename-table-updates-sequence-entry { From c499b3998d975413529b22118df3030cbc87f350 Mon Sep 17 00:00:00 2001 From: Zaid Humayun Date: Wed, 18 Mar 2026 23:06:30 +0100 Subject: [PATCH 2/2] Formatting fixes --- core/translate/schema.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/translate/schema.rs b/core/translate/schema.rs index c10f53e474..f889a9406d 100644 --- a/core/translate/schema.rs +++ b/core/translate/schema.rs @@ -1875,7 +1875,8 @@ pub fn translate_drop_table( { let ver_cursor_id = program.alloc_cursor_id(CursorType::BTreeTable(version_table.clone())); let ver_table_name_reg = program.alloc_register(); - let dropped_name_reg = program.emit_string8_new_reg(normalize_ident(tbl_name.name.as_str())); + let dropped_name_reg = + program.emit_string8_new_reg(normalize_ident(tbl_name.name.as_str())); program.mark_last_insn_constant(); program.emit_insn(Insn::OpenWrite {