|
|
@ -17,7 +17,7 @@ use miette::{bail, Diagnostic, Result};
|
|
|
|
use thiserror::Error;
|
|
|
|
use thiserror::Error;
|
|
|
|
|
|
|
|
|
|
|
|
use crate::data::expr::{compute_bounds, eval_bytecode, eval_bytecode_pred, Bytecode, Expr};
|
|
|
|
use crate::data::expr::{compute_bounds, eval_bytecode, eval_bytecode_pred, Bytecode, Expr};
|
|
|
|
use crate::data::program::MagicSymbol;
|
|
|
|
use crate::data::program::{HnswSearch, MagicSymbol};
|
|
|
|
use crate::data::relation::{ColType, NullableColType};
|
|
|
|
use crate::data::relation::{ColType, NullableColType};
|
|
|
|
use crate::data::symb::Symbol;
|
|
|
|
use crate::data::symb::Symbol;
|
|
|
|
use crate::data::tuple::{Tuple, TupleIter};
|
|
|
|
use crate::data::tuple::{Tuple, TupleIter};
|
|
|
@ -53,17 +53,11 @@ impl RelAlgebra {
|
|
|
|
RelAlgebra::Filter(i) => i.span,
|
|
|
|
RelAlgebra::Filter(i) => i.span,
|
|
|
|
RelAlgebra::Unification(i) => i.span,
|
|
|
|
RelAlgebra::Unification(i) => i.span,
|
|
|
|
RelAlgebra::StoredWithValidity(i) => i.span,
|
|
|
|
RelAlgebra::StoredWithValidity(i) => i.span,
|
|
|
|
RelAlgebra::HnswSearch(_) => todo!(),
|
|
|
|
RelAlgebra::HnswSearch(i) => i.hnsw_search.span,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pub(crate) struct HnswSearchRA {
|
|
|
|
|
|
|
|
pub(crate) parent: Box<RelAlgebra>,
|
|
|
|
|
|
|
|
pub(crate) to_eliminate: BTreeSet<Symbol>,
|
|
|
|
|
|
|
|
pub(crate) span: SourceSpan,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pub(crate) struct UnificationRA {
|
|
|
|
pub(crate) struct UnificationRA {
|
|
|
|
pub(crate) parent: Box<RelAlgebra>,
|
|
|
|
pub(crate) parent: Box<RelAlgebra>,
|
|
|
|
pub(crate) binding: Symbol,
|
|
|
|
pub(crate) binding: Symbol,
|
|
|
@ -284,6 +278,11 @@ impl Debug for RelAlgebra {
|
|
|
|
.field(&r.storage.name)
|
|
|
|
.field(&r.storage.name)
|
|
|
|
.field(&r.filters)
|
|
|
|
.field(&r.filters)
|
|
|
|
.finish(),
|
|
|
|
.finish(),
|
|
|
|
|
|
|
|
RelAlgebra::HnswSearch(s) => f
|
|
|
|
|
|
|
|
.debug_tuple("HnswSearch")
|
|
|
|
|
|
|
|
.field(&bindings)
|
|
|
|
|
|
|
|
.field(&s.hnsw_search.idx_handle.name)
|
|
|
|
|
|
|
|
.finish(),
|
|
|
|
RelAlgebra::StoredWithValidity(r) => f
|
|
|
|
RelAlgebra::StoredWithValidity(r) => f
|
|
|
|
.debug_tuple("StoredWithValidity")
|
|
|
|
.debug_tuple("StoredWithValidity")
|
|
|
|
.field(&bindings)
|
|
|
|
.field(&bindings)
|
|
|
@ -328,9 +327,6 @@ impl Debug for RelAlgebra {
|
|
|
|
.field(&r.binding)
|
|
|
|
.field(&r.binding)
|
|
|
|
.field(&r.expr)
|
|
|
|
.field(&r.expr)
|
|
|
|
.finish(),
|
|
|
|
.finish(),
|
|
|
|
RelAlgebra::HnswSearch(_) => {
|
|
|
|
|
|
|
|
todo!("HnswSearch")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -353,6 +349,9 @@ impl RelAlgebra {
|
|
|
|
RelAlgebra::Stored(v) => {
|
|
|
|
RelAlgebra::Stored(v) => {
|
|
|
|
v.fill_binding_indices_and_compile()?;
|
|
|
|
v.fill_binding_indices_and_compile()?;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
RelAlgebra::HnswSearch(_) => {
|
|
|
|
|
|
|
|
todo!("fill_binding_indices_and_compile for HnswSearch")
|
|
|
|
|
|
|
|
}
|
|
|
|
RelAlgebra::StoredWithValidity(v) => {
|
|
|
|
RelAlgebra::StoredWithValidity(v) => {
|
|
|
|
v.fill_binding_indices_and_compile()?;
|
|
|
|
v.fill_binding_indices_and_compile()?;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -374,9 +373,6 @@ impl RelAlgebra {
|
|
|
|
r.left.fill_binding_indices_and_compile()?;
|
|
|
|
r.left.fill_binding_indices_and_compile()?;
|
|
|
|
r.right.fill_binding_indices_and_compile()?;
|
|
|
|
r.right.fill_binding_indices_and_compile()?;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
RelAlgebra::HnswSearch(_) => {
|
|
|
|
|
|
|
|
todo!()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Ok(())
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -406,6 +402,12 @@ impl RelAlgebra {
|
|
|
|
span,
|
|
|
|
span,
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub(crate) fn hnsw_search(bindings: Vec<Symbol>, search: HnswSearch) -> Result<Self> {
|
|
|
|
|
|
|
|
Ok(Self::HnswSearch(HnswSearchRA {
|
|
|
|
|
|
|
|
bindings,
|
|
|
|
|
|
|
|
hnsw_search: search,
|
|
|
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
}
|
|
|
|
pub(crate) fn relation(
|
|
|
|
pub(crate) fn relation(
|
|
|
|
bindings: Vec<Symbol>,
|
|
|
|
bindings: Vec<Symbol>,
|
|
|
|
storage: RelationHandle,
|
|
|
|
storage: RelationHandle,
|
|
|
@ -838,6 +840,12 @@ pub(crate) struct StoredRA {
|
|
|
|
pub(crate) span: SourceSpan,
|
|
|
|
pub(crate) span: SourceSpan,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
|
|
|
|
pub(crate) struct HnswSearchRA {
|
|
|
|
|
|
|
|
pub(crate) bindings: Vec<Symbol>,
|
|
|
|
|
|
|
|
pub(crate) hnsw_search: HnswSearch,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
#[derive(Debug)]
|
|
|
|
pub(crate) struct StoredWithValidityRA {
|
|
|
|
pub(crate) struct StoredWithValidityRA {
|
|
|
|
pub(crate) bindings: Vec<Symbol>,
|
|
|
|
pub(crate) bindings: Vec<Symbol>,
|
|
|
@ -1573,7 +1581,7 @@ impl RelAlgebra {
|
|
|
|
RelAlgebra::Filter(r) => r.do_eliminate_temp_vars(used),
|
|
|
|
RelAlgebra::Filter(r) => r.do_eliminate_temp_vars(used),
|
|
|
|
RelAlgebra::NegJoin(r) => r.do_eliminate_temp_vars(used),
|
|
|
|
RelAlgebra::NegJoin(r) => r.do_eliminate_temp_vars(used),
|
|
|
|
RelAlgebra::Unification(r) => r.do_eliminate_temp_vars(used),
|
|
|
|
RelAlgebra::Unification(r) => r.do_eliminate_temp_vars(used),
|
|
|
|
RelAlgebra::HnswSearch(_) => {todo!()}
|
|
|
|
RelAlgebra::HnswSearch(_) => Ok(()),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1588,7 +1596,7 @@ impl RelAlgebra {
|
|
|
|
RelAlgebra::Filter(r) => Some(&r.to_eliminate),
|
|
|
|
RelAlgebra::Filter(r) => Some(&r.to_eliminate),
|
|
|
|
RelAlgebra::NegJoin(r) => Some(&r.to_eliminate),
|
|
|
|
RelAlgebra::NegJoin(r) => Some(&r.to_eliminate),
|
|
|
|
RelAlgebra::Unification(u) => Some(&u.to_eliminate),
|
|
|
|
RelAlgebra::Unification(u) => Some(&u.to_eliminate),
|
|
|
|
RelAlgebra::HnswSearch(_) => {todo!()}
|
|
|
|
RelAlgebra::HnswSearch(_) => None,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1618,7 +1626,7 @@ impl RelAlgebra {
|
|
|
|
bindings.push(u.binding.clone());
|
|
|
|
bindings.push(u.binding.clone());
|
|
|
|
bindings
|
|
|
|
bindings
|
|
|
|
}
|
|
|
|
}
|
|
|
|
RelAlgebra::HnswSearch(_) => {todo!()}
|
|
|
|
RelAlgebra::HnswSearch(s) => s.bindings.clone(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pub(crate) fn iter<'a>(
|
|
|
|
pub(crate) fn iter<'a>(
|
|
|
@ -1637,7 +1645,9 @@ impl RelAlgebra {
|
|
|
|
RelAlgebra::Filter(r) => r.iter(tx, delta_rule, stores),
|
|
|
|
RelAlgebra::Filter(r) => r.iter(tx, delta_rule, stores),
|
|
|
|
RelAlgebra::NegJoin(r) => r.iter(tx, delta_rule, stores),
|
|
|
|
RelAlgebra::NegJoin(r) => r.iter(tx, delta_rule, stores),
|
|
|
|
RelAlgebra::Unification(r) => r.iter(tx, delta_rule, stores),
|
|
|
|
RelAlgebra::Unification(r) => r.iter(tx, delta_rule, stores),
|
|
|
|
RelAlgebra::HnswSearch(_) => {todo!()}
|
|
|
|
RelAlgebra::HnswSearch(_) => {
|
|
|
|
|
|
|
|
todo!()
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1817,6 +1827,7 @@ impl InnerJoin {
|
|
|
|
"stored_mat_join"
|
|
|
|
"stored_mat_join"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
RelAlgebra::HnswSearch(_) => "hnsw_search_join",
|
|
|
|
RelAlgebra::StoredWithValidity(_) => {
|
|
|
|
RelAlgebra::StoredWithValidity(_) => {
|
|
|
|
let join_indices = self
|
|
|
|
let join_indices = self
|
|
|
|
.joiner
|
|
|
|
.joiner
|
|
|
@ -1840,9 +1851,6 @@ impl InnerJoin {
|
|
|
|
RelAlgebra::NegJoin(_) => {
|
|
|
|
RelAlgebra::NegJoin(_) => {
|
|
|
|
panic!("joining on NegJoin")
|
|
|
|
panic!("joining on NegJoin")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
RelAlgebra::HnswSearch(_) => {
|
|
|
|
|
|
|
|
todo!("joining on HnswSearch")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pub(crate) fn iter<'a>(
|
|
|
|
pub(crate) fn iter<'a>(
|
|
|
|