Identity Tuple
This commit is contained in:
parent
0c4b69e3b3
commit
92ac1098cb
@ -1,30 +1,33 @@
|
|||||||
use sea_query::{Iden, IntoIden};
|
use sea_query::{Iden, IntoIden};
|
||||||
|
use crate::{IdenStatic};
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum Identity {
|
pub enum Identity {
|
||||||
Unary(Rc<dyn Iden>),
|
Unary(Rc<dyn Iden>),
|
||||||
// Binary((Rc<dyn Iden>, Rc<dyn Iden>)),
|
Binary(Rc<dyn Iden>, Rc<dyn Iden>),
|
||||||
// Ternary((Rc<dyn Iden>, Rc<dyn Iden>, Rc<dyn Iden>)),
|
// Ternary(Rc<dyn Iden>, Rc<dyn Iden>, Rc<dyn Iden>),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait IntoIdentity {
|
pub trait IntoIdentity {
|
||||||
fn into_identity(self) -> Identity;
|
fn into_identity(self) -> Identity;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Identity {
|
|
||||||
pub fn into_iden(self) -> Rc<dyn Iden> {
|
|
||||||
match self {
|
|
||||||
Self::Unary(iden) => iden,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T> IntoIdentity for T
|
impl<T> IntoIdentity for T
|
||||||
where
|
where
|
||||||
T: IntoIden,
|
T: IdenStatic,
|
||||||
{
|
{
|
||||||
fn into_identity(self) -> Identity {
|
fn into_identity(self) -> Identity {
|
||||||
Identity::Unary(self.into_iden())
|
Identity::Unary(self.into_iden())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T, C> IntoIdentity for (T, C)
|
||||||
|
where
|
||||||
|
T: IdenStatic,
|
||||||
|
C: IdenStatic,
|
||||||
|
{
|
||||||
|
fn into_identity(self) -> Identity {
|
||||||
|
Identity::Binary(self.0.into_iden(), self.1.into_iden())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -219,6 +219,12 @@ fn join_condition(rel: RelationDef) -> SimpleExpr {
|
|||||||
match (owner_keys, foreign_keys) {
|
match (owner_keys, foreign_keys) {
|
||||||
(Identity::Unary(o1), Identity::Unary(f1)) => {
|
(Identity::Unary(o1), Identity::Unary(f1)) => {
|
||||||
Expr::tbl(Rc::clone(&from_tbl), o1).equals(Rc::clone(&to_tbl), f1)
|
Expr::tbl(Rc::clone(&from_tbl), o1).equals(Rc::clone(&to_tbl), f1)
|
||||||
} // _ => panic!("Owner key and foreign key mismatch"),
|
}
|
||||||
|
(Identity::Binary(o1, o2), Identity::Binary(f1, f2)) => {
|
||||||
|
Expr::tbl(Rc::clone(&from_tbl), o1).equals(Rc::clone(&to_tbl), f1).and(
|
||||||
|
Expr::tbl(Rc::clone(&from_tbl), o2).equals(Rc::clone(&to_tbl), f2)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
_ => panic!("Owner key and foreign key mismatch"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user