diff --git a/core/translate/planner.rs b/core/translate/planner.rs index 998145263..d15a2fab6 100644 --- a/core/translate/planner.rs +++ b/core/translate/planner.rs @@ -509,23 +509,17 @@ fn parse_join( let left_tables = &tables[..table_index]; assert!(!left_tables.is_empty()); let right_table = &tables[table_index]; - let mut left_col = - parse_row_id(&name_normalized, 0, || left_tables.len() != 1)?; + let mut left_col = None; for (left_table_idx, left_table) in left_tables.iter().enumerate() { - if left_col.is_some() { - break; - } left_col = left_table .columns() .iter() .enumerate() .find(|(_, col)| col.name == name_normalized) - .map(|(idx, col)| ast::Expr::Column { - database: None, - table: left_table_idx, - column: idx, - is_rowid_alias: col.is_rowid_alias, - }); + .map(|(idx, col)| (left_table_idx, idx, col)); + if left_col.is_some() { + break; + } } if left_col.is_none() { crate::bail_parse_error!( @@ -533,33 +527,33 @@ fn parse_join( distinct_name.0 ); } - let right_col = - parse_row_id(&name_normalized, right_table.table_index, || false)?.or_else( - || { - right_table - .table - .columns() - .iter() - .enumerate() - .find(|(_, col)| col.name == name_normalized) - .map(|(i, col)| ast::Expr::Column { - database: None, - table: right_table.table_index, - column: i, - is_rowid_alias: col.is_rowid_alias, - }) - }, - ); + let right_col = right_table + .columns() + .iter() + .enumerate() + .find(|(_, col)| col.name == name_normalized); if right_col.is_none() { crate::bail_parse_error!( "cannot join using column {} - column not present in all tables", distinct_name.0 ); } + let (left_table_idx, left_col_idx, left_col) = left_col.unwrap(); + let (right_col_idx, right_col) = right_col.unwrap(); using_predicates.push(ast::Expr::Binary( - Box::new(left_col.unwrap()), + Box::new(ast::Expr::Column { + database: None, + table: left_table_idx, + column: left_col_idx, + is_rowid_alias: left_col.is_rowid_alias, + }), ast::Operator::Equals, - Box::new(right_col.unwrap()), + Box::new(ast::Expr::Column { + database: None, + table: right_table.table_index, + column: right_col_idx, + is_rowid_alias: right_col.is_rowid_alias, + }), )); } predicates = Some(using_predicates); diff --git a/testing/join.test b/testing/join.test index 2b6d6c45d..64b3dcbd3 100755 --- a/testing/join.test +++ b/testing/join.test @@ -114,14 +114,6 @@ do_execsql_test left-join-row-id { 13| 14|} -do_execsql_test left-join-row-id-2 { - select u.rowid, p.rowid from users u left join products as p using(rowid) where u.rowid >= 10 limit 5; -} {10|10 -11|11 -12| -13| -14|} - do_execsql_test left-join-constant-condition-true { select u.first_name, p.name from users u left join products as p on true limit 1; } {Jamie|hat} diff --git a/testing/select.test b/testing/select.test index 9babd104c..e39030a22 100755 --- a/testing/select.test +++ b/testing/select.test @@ -85,7 +85,7 @@ do_execsql_test select-rowid { } {5|Edward} do_execsql_test select-rowid-2 { - select users.rowid, first_name from users u where rowid = 5; + select u.rowid, first_name from users u where rowid = 5; } {5|Edward} do_execsql_test seekrowid {