mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-10 02:34:20 +01:00
Remove 'cursor_hint': it is never needed
This commit is contained in:
@@ -503,7 +503,6 @@ fn open_loop(
|
||||
program,
|
||||
referenced_tables,
|
||||
predicate,
|
||||
None,
|
||||
condition_metadata,
|
||||
None,
|
||||
)?;
|
||||
@@ -531,7 +530,7 @@ fn open_loop(
|
||||
predicates,
|
||||
iter_dir,
|
||||
} => {
|
||||
let cursor_id = program.resolve_cursor_id(&table_reference.table_identifier, None);
|
||||
let cursor_id = program.resolve_cursor_id(&table_reference.table_identifier);
|
||||
if iter_dir
|
||||
.as_ref()
|
||||
.is_some_and(|dir| *dir == IterationDirection::Backwards)
|
||||
@@ -575,7 +574,6 @@ fn open_loop(
|
||||
program,
|
||||
referenced_tables,
|
||||
expr,
|
||||
None,
|
||||
condition_metadata,
|
||||
None,
|
||||
)?;
|
||||
@@ -592,14 +590,13 @@ fn open_loop(
|
||||
predicates,
|
||||
..
|
||||
} => {
|
||||
let table_cursor_id =
|
||||
program.resolve_cursor_id(&table_reference.table_identifier, None);
|
||||
let table_cursor_id = program.resolve_cursor_id(&table_reference.table_identifier);
|
||||
|
||||
// Open the loop for the index search.
|
||||
// Primary key equality search is handled with a SeekRowid instruction which does not loop, since it is a single row lookup.
|
||||
if !matches!(search, Search::PrimaryKeyEq { .. }) {
|
||||
let index_cursor_id = if let Search::IndexSearch { index, .. } = search {
|
||||
Some(program.resolve_cursor_id(&index.name, None))
|
||||
Some(program.resolve_cursor_id(&index.name))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
@@ -617,14 +614,7 @@ fn open_loop(
|
||||
ast::Operator::Equals
|
||||
| ast::Operator::Greater
|
||||
| ast::Operator::GreaterEquals => {
|
||||
translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
cmp_expr,
|
||||
cmp_reg,
|
||||
None,
|
||||
None,
|
||||
)?;
|
||||
translate_expr(program, Some(referenced_tables), cmp_expr, cmp_reg, None)?;
|
||||
}
|
||||
ast::Operator::Less | ast::Operator::LessEquals => {
|
||||
program.emit_insn(Insn::Null {
|
||||
@@ -657,14 +647,7 @@ fn open_loop(
|
||||
*m.termination_label_stack.last().unwrap(),
|
||||
);
|
||||
if *cmp_op == ast::Operator::Less || *cmp_op == ast::Operator::LessEquals {
|
||||
translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
cmp_expr,
|
||||
cmp_reg,
|
||||
None,
|
||||
None,
|
||||
)?;
|
||||
translate_expr(program, Some(referenced_tables), cmp_expr, cmp_reg, None)?;
|
||||
}
|
||||
|
||||
program.defer_label_resolution(scan_loop_body_label, program.offset() as usize);
|
||||
@@ -755,14 +738,7 @@ fn open_loop(
|
||||
|
||||
if let Search::PrimaryKeyEq { cmp_expr } = search {
|
||||
let src_reg = program.alloc_register();
|
||||
translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
cmp_expr,
|
||||
src_reg,
|
||||
None,
|
||||
None,
|
||||
)?;
|
||||
translate_expr(program, Some(referenced_tables), cmp_expr, src_reg, None)?;
|
||||
program.emit_insn_with_label_dependency(
|
||||
Insn::SeekRowid {
|
||||
cursor_id: table_cursor_id,
|
||||
@@ -784,7 +760,6 @@ fn open_loop(
|
||||
program,
|
||||
referenced_tables,
|
||||
predicate,
|
||||
None,
|
||||
condition_metadata,
|
||||
None,
|
||||
)?;
|
||||
@@ -909,7 +884,7 @@ fn inner_loop_source_emit(
|
||||
for expr in group_by.iter() {
|
||||
let key_reg = cur_reg;
|
||||
cur_reg += 1;
|
||||
translate_expr(program, Some(referenced_tables), expr, key_reg, None, None)?;
|
||||
translate_expr(program, Some(referenced_tables), expr, key_reg, None)?;
|
||||
}
|
||||
for agg in aggregates.iter() {
|
||||
// Here we are collecting scalars for the group by sorter, which will include
|
||||
@@ -921,7 +896,7 @@ fn inner_loop_source_emit(
|
||||
for expr in agg.args.iter() {
|
||||
let agg_reg = cur_reg;
|
||||
cur_reg += 1;
|
||||
translate_expr(program, Some(referenced_tables), expr, agg_reg, None, None)?;
|
||||
translate_expr(program, Some(referenced_tables), expr, agg_reg, None)?;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -991,7 +966,7 @@ fn inner_loop_source_emit(
|
||||
let start_reg = program.alloc_registers(orderby_sorter_column_count);
|
||||
for (i, (expr, _)) in order_by.iter().enumerate() {
|
||||
let key_reg = start_reg + i;
|
||||
translate_expr(program, Some(referenced_tables), expr, key_reg, None, None)?;
|
||||
translate_expr(program, Some(referenced_tables), expr, key_reg, None)?;
|
||||
}
|
||||
let mut cur_reg = start_reg + order_by_len;
|
||||
let mut cur_idx_in_orderby_sorter = order_by_len;
|
||||
@@ -1007,14 +982,7 @@ fn inner_loop_source_emit(
|
||||
contains_aggregates,
|
||||
} => {
|
||||
assert!(!*contains_aggregates);
|
||||
translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
cur_reg,
|
||||
None,
|
||||
None,
|
||||
)?;
|
||||
translate_expr(program, Some(referenced_tables), expr, cur_reg, None)?;
|
||||
}
|
||||
other => unreachable!("{:?}", other),
|
||||
}
|
||||
@@ -1044,7 +1012,7 @@ fn inner_loop_source_emit(
|
||||
m.aggregation_start_register = Some(start_reg);
|
||||
for (i, agg) in aggregates.iter().enumerate() {
|
||||
let reg = start_reg + i;
|
||||
translate_aggregation(program, referenced_tables, agg, reg, None)?;
|
||||
translate_aggregation(program, referenced_tables, agg, reg)?;
|
||||
}
|
||||
for (i, expr) in result_columns.iter().enumerate() {
|
||||
match expr {
|
||||
@@ -1058,7 +1026,7 @@ fn inner_loop_source_emit(
|
||||
continue;
|
||||
}
|
||||
let reg = start_reg + num_aggs + i;
|
||||
translate_expr(program, Some(referenced_tables), expr, reg, None, None)?;
|
||||
translate_expr(program, Some(referenced_tables), expr, reg, None)?;
|
||||
}
|
||||
ResultSetColumn::Agg(_) => { /* do nothing, aggregates are computed above */ }
|
||||
}
|
||||
@@ -1076,7 +1044,7 @@ fn inner_loop_source_emit(
|
||||
} => {
|
||||
assert!(!*contains_aggregates);
|
||||
let reg = start_reg + i;
|
||||
translate_expr(program, Some(referenced_tables), expr, reg, None, None)?;
|
||||
translate_expr(program, Some(referenced_tables), expr, reg, None)?;
|
||||
}
|
||||
other => unreachable!(
|
||||
"Unexpected non-scalar result column in inner loop: {:?}",
|
||||
@@ -1131,10 +1099,10 @@ fn close_loop(
|
||||
let right_cursor_id = match right.as_ref() {
|
||||
SourceOperator::Scan {
|
||||
table_reference, ..
|
||||
} => program.resolve_cursor_id(&table_reference.table_identifier, None),
|
||||
} => program.resolve_cursor_id(&table_reference.table_identifier),
|
||||
SourceOperator::Search {
|
||||
table_reference, ..
|
||||
} => program.resolve_cursor_id(&table_reference.table_identifier, None),
|
||||
} => program.resolve_cursor_id(&table_reference.table_identifier),
|
||||
_ => unreachable!(),
|
||||
};
|
||||
program.emit_insn(Insn::NullRow {
|
||||
@@ -1165,7 +1133,7 @@ fn close_loop(
|
||||
iter_dir,
|
||||
..
|
||||
} => {
|
||||
let cursor_id = program.resolve_cursor_id(&table_reference.table_identifier, None);
|
||||
let cursor_id = program.resolve_cursor_id(&table_reference.table_identifier);
|
||||
program.resolve_label(*m.next_row_labels.get(id).unwrap(), program.offset());
|
||||
if iter_dir
|
||||
.as_ref()
|
||||
@@ -1210,9 +1178,9 @@ fn close_loop(
|
||||
return Ok(());
|
||||
}
|
||||
let cursor_id = match search {
|
||||
Search::IndexSearch { index, .. } => program.resolve_cursor_id(&index.name, None),
|
||||
Search::IndexSearch { index, .. } => program.resolve_cursor_id(&index.name),
|
||||
Search::PrimaryKeySearch { .. } => {
|
||||
program.resolve_cursor_id(&table_reference.table_identifier, None)
|
||||
program.resolve_cursor_id(&table_reference.table_identifier)
|
||||
}
|
||||
Search::PrimaryKeyEq { .. } => unreachable!(),
|
||||
};
|
||||
@@ -1562,7 +1530,6 @@ fn group_by_emit(
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
cur_reg,
|
||||
None,
|
||||
Some(&precomputed_exprs_to_register),
|
||||
)?;
|
||||
cur_reg += 1;
|
||||
@@ -1582,7 +1549,6 @@ fn group_by_emit(
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
cur_reg,
|
||||
None,
|
||||
Some(&precomputed_exprs_to_register),
|
||||
)?;
|
||||
}
|
||||
@@ -1688,7 +1654,6 @@ fn agg_without_group_by_emit(
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
output_reg + i,
|
||||
None,
|
||||
Some(&precomputed_exprs_to_register),
|
||||
)?;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ pub fn translate_condition_expr(
|
||||
program: &mut ProgramBuilder,
|
||||
referenced_tables: &[BTreeTableReference],
|
||||
expr: &ast::Expr,
|
||||
cursor_hint: Option<usize>,
|
||||
condition_metadata: ConditionMetadata,
|
||||
precomputed_exprs_to_registers: Option<&Vec<(&ast::Expr, usize)>>,
|
||||
) -> Result<()> {
|
||||
@@ -34,7 +33,6 @@ pub fn translate_condition_expr(
|
||||
program,
|
||||
referenced_tables,
|
||||
lhs,
|
||||
cursor_hint,
|
||||
ConditionMetadata {
|
||||
jump_if_condition_is_true: false,
|
||||
..condition_metadata
|
||||
@@ -45,7 +43,6 @@ pub fn translate_condition_expr(
|
||||
program,
|
||||
referenced_tables,
|
||||
rhs,
|
||||
cursor_hint,
|
||||
condition_metadata,
|
||||
precomputed_exprs_to_registers,
|
||||
);
|
||||
@@ -56,7 +53,6 @@ pub fn translate_condition_expr(
|
||||
program,
|
||||
referenced_tables,
|
||||
lhs,
|
||||
cursor_hint,
|
||||
ConditionMetadata {
|
||||
// If the first condition is true, we don't need to evaluate the second condition.
|
||||
jump_if_condition_is_true: true,
|
||||
@@ -70,7 +66,6 @@ pub fn translate_condition_expr(
|
||||
program,
|
||||
referenced_tables,
|
||||
rhs,
|
||||
cursor_hint,
|
||||
condition_metadata,
|
||||
precomputed_exprs_to_registers,
|
||||
);
|
||||
@@ -82,7 +77,6 @@ pub fn translate_condition_expr(
|
||||
Some(referenced_tables),
|
||||
lhs,
|
||||
lhs_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
);
|
||||
if let ast::Expr::Literal(_) = lhs.as_ref() {
|
||||
@@ -94,7 +88,6 @@ pub fn translate_condition_expr(
|
||||
Some(referenced_tables),
|
||||
rhs,
|
||||
rhs_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
);
|
||||
if let ast::Expr::Literal(_) = rhs.as_ref() {
|
||||
@@ -343,7 +336,6 @@ pub fn translate_condition_expr(
|
||||
Some(referenced_tables),
|
||||
lhs,
|
||||
lhs_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
|
||||
@@ -373,7 +365,6 @@ pub fn translate_condition_expr(
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
rhs_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
// If this is not the last condition, we need to jump to the 'jump_target_when_true' label if the condition is true.
|
||||
@@ -417,7 +408,6 @@ pub fn translate_condition_expr(
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
rhs_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
program.emit_insn_with_label_dependency(
|
||||
@@ -463,7 +453,6 @@ pub fn translate_condition_expr(
|
||||
Some(referenced_tables),
|
||||
lhs,
|
||||
column_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
if let ast::Expr::Literal(_) = lhs.as_ref() {
|
||||
@@ -474,7 +463,6 @@ pub fn translate_condition_expr(
|
||||
Some(referenced_tables),
|
||||
rhs,
|
||||
pattern_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
if let ast::Expr::Literal(_) = rhs.as_ref() {
|
||||
@@ -547,7 +535,6 @@ pub fn translate_condition_expr(
|
||||
program,
|
||||
referenced_tables,
|
||||
expr,
|
||||
cursor_hint,
|
||||
condition_metadata,
|
||||
precomputed_exprs_to_registers,
|
||||
);
|
||||
@@ -563,7 +550,6 @@ pub fn translate_expr(
|
||||
referenced_tables: Option<&[BTreeTableReference]>,
|
||||
expr: &ast::Expr,
|
||||
target_register: usize,
|
||||
cursor_hint: Option<usize>,
|
||||
precomputed_exprs_to_registers: Option<&Vec<(&ast::Expr, usize)>>,
|
||||
) -> Result<usize> {
|
||||
if let Some(precomputed_exprs_to_registers) = precomputed_exprs_to_registers {
|
||||
@@ -590,7 +576,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
e1,
|
||||
e1_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
let e2_reg = program.alloc_register();
|
||||
@@ -599,7 +584,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
e2,
|
||||
e2_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
|
||||
@@ -723,7 +707,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
expr,
|
||||
reg_expr,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
let reg_type = program.alloc_register();
|
||||
@@ -796,7 +779,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&args[0],
|
||||
regs,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
program.emit_insn(Insn::Function {
|
||||
@@ -823,7 +805,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
arg,
|
||||
reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
}
|
||||
@@ -861,7 +842,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
arg,
|
||||
target_register,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
if index < args.len() - 1 {
|
||||
@@ -897,7 +877,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
arg,
|
||||
reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
}
|
||||
@@ -930,7 +909,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
arg,
|
||||
reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
}
|
||||
@@ -967,7 +945,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&args[0],
|
||||
temp_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
program.emit_insn(Insn::NotNull {
|
||||
@@ -980,7 +957,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&args[1],
|
||||
temp_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
program.emit_insn(Insn::Copy {
|
||||
@@ -1013,7 +989,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
arg,
|
||||
reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
if let ast::Expr::Literal(_) = arg {
|
||||
@@ -1061,7 +1036,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&args[0],
|
||||
regs,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
program.emit_insn(Insn::Function {
|
||||
@@ -1098,7 +1072,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
arg,
|
||||
target_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
}
|
||||
@@ -1136,7 +1109,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&args[0],
|
||||
str_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
translate_expr(
|
||||
@@ -1144,7 +1116,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&args[1],
|
||||
start_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
if args.len() == 3 {
|
||||
@@ -1153,7 +1124,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&args[2],
|
||||
length_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
}
|
||||
@@ -1183,7 +1153,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&args[0],
|
||||
regs,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
program.emit_insn(Insn::Function {
|
||||
@@ -1207,7 +1176,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&args[0],
|
||||
arg_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
start_reg = arg_reg;
|
||||
@@ -1232,7 +1200,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
arg,
|
||||
target_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
}
|
||||
@@ -1272,7 +1239,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
arg,
|
||||
reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
if let ast::Expr::Literal(_) = arg {
|
||||
@@ -1305,7 +1271,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
arg,
|
||||
reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
if let ast::Expr::Literal(_) = arg {
|
||||
@@ -1339,7 +1304,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
arg,
|
||||
reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
if let ast::Expr::Literal(_) = arg {
|
||||
@@ -1377,7 +1341,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&args[0],
|
||||
first_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
let second_reg = program.alloc_register();
|
||||
@@ -1386,7 +1349,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&args[1],
|
||||
second_reg,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
program.emit_insn(Insn::Function {
|
||||
@@ -1431,7 +1393,7 @@ pub fn translate_expr(
|
||||
is_rowid_alias: is_primary_key,
|
||||
} => {
|
||||
let tbl_ref = referenced_tables.as_ref().unwrap().get(*table).unwrap();
|
||||
let cursor_id = program.resolve_cursor_id(&tbl_ref.table_identifier, cursor_hint);
|
||||
let cursor_id = program.resolve_cursor_id(&tbl_ref.table_identifier);
|
||||
if *is_primary_key {
|
||||
program.emit_insn(Insn::RowId {
|
||||
cursor_id,
|
||||
@@ -1518,7 +1480,6 @@ pub fn translate_expr(
|
||||
referenced_tables,
|
||||
&exprs[0],
|
||||
target_register,
|
||||
cursor_hint,
|
||||
precomputed_exprs_to_registers,
|
||||
)?;
|
||||
} else {
|
||||
@@ -1586,7 +1547,6 @@ pub fn translate_aggregation(
|
||||
referenced_tables: &[BTreeTableReference],
|
||||
agg: &Aggregate,
|
||||
target_register: usize,
|
||||
cursor_hint: Option<usize>,
|
||||
) -> Result<usize> {
|
||||
let dest = match agg.func {
|
||||
AggFunc::Avg => {
|
||||
@@ -1595,14 +1555,7 @@ pub fn translate_aggregation(
|
||||
}
|
||||
let expr = &agg.args[0];
|
||||
let expr_reg = program.alloc_register();
|
||||
let _ = translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
expr_reg,
|
||||
cursor_hint,
|
||||
None,
|
||||
)?;
|
||||
let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?;
|
||||
program.emit_insn(Insn::AggStep {
|
||||
acc_reg: target_register,
|
||||
col: expr_reg,
|
||||
@@ -1617,14 +1570,7 @@ pub fn translate_aggregation(
|
||||
} else {
|
||||
let expr = &agg.args[0];
|
||||
let expr_reg = program.alloc_register();
|
||||
let _ = translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
expr_reg,
|
||||
cursor_hint,
|
||||
None,
|
||||
);
|
||||
let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None);
|
||||
expr_reg
|
||||
};
|
||||
program.emit_insn(Insn::AggStep {
|
||||
@@ -1660,20 +1606,12 @@ pub fn translate_aggregation(
|
||||
delimiter_expr = ast::Expr::Literal(ast::Literal::String(String::from("\",\"")));
|
||||
}
|
||||
|
||||
translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
expr_reg,
|
||||
cursor_hint,
|
||||
None,
|
||||
)?;
|
||||
translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?;
|
||||
translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
&delimiter_expr,
|
||||
delimiter_reg,
|
||||
cursor_hint,
|
||||
None,
|
||||
)?;
|
||||
|
||||
@@ -1692,14 +1630,7 @@ pub fn translate_aggregation(
|
||||
}
|
||||
let expr = &agg.args[0];
|
||||
let expr_reg = program.alloc_register();
|
||||
let _ = translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
expr_reg,
|
||||
cursor_hint,
|
||||
None,
|
||||
)?;
|
||||
let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?;
|
||||
program.emit_insn(Insn::AggStep {
|
||||
acc_reg: target_register,
|
||||
col: expr_reg,
|
||||
@@ -1714,14 +1645,7 @@ pub fn translate_aggregation(
|
||||
}
|
||||
let expr = &agg.args[0];
|
||||
let expr_reg = program.alloc_register();
|
||||
let _ = translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
expr_reg,
|
||||
cursor_hint,
|
||||
None,
|
||||
)?;
|
||||
let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?;
|
||||
program.emit_insn(Insn::AggStep {
|
||||
acc_reg: target_register,
|
||||
col: expr_reg,
|
||||
@@ -1751,20 +1675,12 @@ pub fn translate_aggregation(
|
||||
_ => crate::bail_parse_error!("Incorrect delimiter parameter"),
|
||||
};
|
||||
|
||||
translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
expr_reg,
|
||||
cursor_hint,
|
||||
None,
|
||||
)?;
|
||||
translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?;
|
||||
translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
&delimiter_expr,
|
||||
delimiter_reg,
|
||||
cursor_hint,
|
||||
None,
|
||||
)?;
|
||||
|
||||
@@ -1783,14 +1699,7 @@ pub fn translate_aggregation(
|
||||
}
|
||||
let expr = &agg.args[0];
|
||||
let expr_reg = program.alloc_register();
|
||||
let _ = translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
expr_reg,
|
||||
cursor_hint,
|
||||
None,
|
||||
)?;
|
||||
let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?;
|
||||
program.emit_insn(Insn::AggStep {
|
||||
acc_reg: target_register,
|
||||
col: expr_reg,
|
||||
@@ -1805,14 +1714,7 @@ pub fn translate_aggregation(
|
||||
}
|
||||
let expr = &agg.args[0];
|
||||
let expr_reg = program.alloc_register();
|
||||
let _ = translate_expr(
|
||||
program,
|
||||
Some(referenced_tables),
|
||||
expr,
|
||||
expr_reg,
|
||||
cursor_hint,
|
||||
None,
|
||||
)?;
|
||||
let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?;
|
||||
program.emit_insn(Insn::AggStep {
|
||||
acc_reg: target_register,
|
||||
col: expr_reg,
|
||||
@@ -1897,7 +1799,6 @@ pub fn translate_aggregation_groupby(
|
||||
&delimiter_expr,
|
||||
delimiter_reg,
|
||||
None,
|
||||
None,
|
||||
)?;
|
||||
|
||||
program.emit_insn(Insn::AggStep {
|
||||
@@ -1964,7 +1865,6 @@ pub fn translate_aggregation_groupby(
|
||||
&delimiter_expr,
|
||||
delimiter_reg,
|
||||
None,
|
||||
None,
|
||||
)?;
|
||||
|
||||
program.emit_insn(Insn::AggStep {
|
||||
|
||||
@@ -98,7 +98,6 @@ pub fn translate_insert(
|
||||
expr,
|
||||
column_registers_start + col,
|
||||
None,
|
||||
None,
|
||||
)?;
|
||||
}
|
||||
program.emit_insn(Insn::Yield {
|
||||
|
||||
@@ -343,14 +343,7 @@ impl ProgramBuilder {
|
||||
}
|
||||
|
||||
// translate table to cursor id
|
||||
pub fn resolve_cursor_id(
|
||||
&self,
|
||||
table_identifier: &str,
|
||||
cursor_hint: Option<CursorID>,
|
||||
) -> CursorID {
|
||||
if let Some(cursor_hint) = cursor_hint {
|
||||
return cursor_hint;
|
||||
}
|
||||
pub fn resolve_cursor_id(&self, table_identifier: &str) -> CursorID {
|
||||
self.cursor_ref
|
||||
.iter()
|
||||
.position(|(t_ident, _)| {
|
||||
|
||||
Reference in New Issue
Block a user