diff --git a/core/schema.rs b/core/schema.rs index 302ddc3be..0f8f3b50e 100644 --- a/core/schema.rs +++ b/core/schema.rs @@ -39,6 +39,16 @@ pub struct Table { } impl Table { + pub fn column_is_rowid_alias(&self, col: &Column) -> bool { + let composite_primary_key = self + .columns + .iter() + .filter(|col| col.primary_key) + .count() + > 1; + col.primary_key && col.ty == Type::Integer && !composite_primary_key + } + pub fn get_column(&self, name: &str) -> Option<(usize, &Column)> { let name = normalize_ident(name); for (i, column) in self.columns.iter().enumerate() { diff --git a/core/translate.rs b/core/translate.rs index 76785cf01..f26aff90f 100644 --- a/core/translate.rs +++ b/core/translate.rs @@ -266,14 +266,8 @@ fn translate_column( } sqlite3_parser::ast::ResultColumn::Star => { let table = table.unwrap(); - let composite_primary_key = table - .columns - .iter() - .filter(|col| col.primary_key) - .count() - > 1; for (i, col) in table.columns.iter().enumerate() { - if col.primary_key && col.ty == Type::Integer && !composite_primary_key { // rowid alias + if table.column_is_rowid_alias(col) { program.emit_insn(Insn::RowId { cursor_id: cursor_id.unwrap(), dest: target_register + i,