diff --git a/core/translate/schema.rs b/core/translate/schema.rs
index 3b8ad3024..feeb5123a 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, tbl_name.name.as_str())?;
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(),
});
}
@@ -145,13 +143,10 @@ pub fn translate_create_table(
// If we need an automatic index, add its entry to sqlite_schema
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,
- normalize_ident(tbl_name.name.as_str()),
- idx + 1
- );
+ for (_idx, index_reg) in index_regs.into_iter().enumerate() {
+ let index_name = String::from(PRIMARY_KEY_AUTOMATIC_INDEX_NAME_PREFIX)
+ + &normalize_ident(tbl_name.name.as_str())
+ + stringify!(_idx + 1);
emit_schema_entry(
&mut program,
&resolver,
@@ -296,17 +291,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