diff --git a/core/translate/schema.rs b/core/translate/schema.rs
index 56ec54313..d233ec427 100644
--- a/core/translate/schema.rs
+++ b/core/translate/schema.rs
@@ -1,4 +1,3 @@
-use std::ops::Range;
use std::sync::Arc;
use crate::ast;
@@ -105,16 +104,15 @@ pub fn translate_create_table(
// https://github.com/sqlite/sqlite/blob/95f6df5b8d55e67d1e34d2bff217305a2f21b1fb/src/build.c#L2856-L2871
// https://github.com/sqlite/sqlite/blob/95f6df5b8d55e67d1e34d2bff217305a2f21b1fb/src/build.c#L1334C5-L1336C65
- let index_regs =
- check_automatic_pk_index_required(&body, &mut program, tbl_name.name.as_str())?;
+ let index_regs = collect_autoindexes(&body, &mut program, &normalized_tbl_name)?;
if let Some(index_regs) = index_regs.as_ref() {
if !schema.indexes_enabled() {
bail_parse_error!("Constraints UNIQUE and PRIMARY KEY (unless INTEGER PRIMARY KEY) on table are not supported without indexes");
}
- for index_reg in index_regs.clone() {
+ for index_reg in index_regs.iter() {
program.emit_insn(Insn::CreateBtree {
db: 0,
- root: index_reg,
+ root: *index_reg,
flags: CreateBTreeFlags::new_index(),
});
}
@@ -147,9 +145,8 @@ pub fn translate_create_table(
if let Some(index_regs) = index_regs {
for (idx, index_reg) in index_regs.into_iter().enumerate() {
let index_name = format!(
- "{}{}_{}",
- PRIMARY_KEY_AUTOMATIC_INDEX_NAME_PREFIX,
- tbl_name.name.as_str(),
+ "{PRIMARY_KEY_AUTOMATIC_INDEX_NAME_PREFIX}{}_{}",
+ normalized_tbl_name,
idx + 1
);
emit_schema_entry(
@@ -296,17 +293,42 @@ pub fn emit_schema_entry(
/// In this case, the PRIMARY KEY column becomes an alias for the rowid.
///
/// Otherwise, an automatic PRIMARY KEY index is required.
-fn check_automatic_pk_index_required(
+fn collect_autoindexes(
body: &ast::CreateTableBody,
program: &mut ProgramBuilder,
tbl_name: &str,
-) -> Result