From 8aaa27868b948c52c9c15b704acc3bfb83983afa Mon Sep 17 00:00:00 2001 From: Kould Date: Thu, 2 Jan 2025 11:50:12 +0800 Subject: [PATCH] fix: special mapping of row ids --- core/translate/emitter.rs | 9 ++++++--- testing/where.test | 4 ++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/core/translate/emitter.rs b/core/translate/emitter.rs index 964f3c354..3713516a4 100644 --- a/core/translate/emitter.rs +++ b/core/translate/emitter.rs @@ -977,9 +977,12 @@ fn try_index_cover( let (pos, _) = table.get_column(&index_column.name).unwrap(); index_column_map.insert(pos, i); } - for pk_name in table.primary_key_column_names.iter() { - // SAFETY: the primary key column must exist in the table - let (pos, _) = table.get_column(pk_name).unwrap(); + if table.has_rowid { + let pos = table + .columns + .iter() + .position(|column| column.is_rowid_alias) + .unwrap(); index_column_map.insert(pos, index_column_map.len()); } diff --git a/testing/where.test b/testing/where.test index 264bdfdd8..8e4081409 100755 --- a/testing/where.test +++ b/testing/where.test @@ -318,6 +318,10 @@ do_execsql_test where-age-index-seek-regression-test-2 { select count(1) from users where age > 0; } {10000} +do_execsql_test where-age-index-cover-seek { + select id, age from users where age > 90; +} {120|90} + do_execsql_test where-simple-between { SELECT * FROM products WHERE price BETWEEN 70 AND 100; } {1|hat|79.0