commit
a1f57ec0d2
@ -245,8 +245,7 @@ impl ColumnType {
|
|||||||
|
|
||||||
pub(crate) fn get_enum_name(&self) -> Option<&String> {
|
pub(crate) fn get_enum_name(&self) -> Option<&String> {
|
||||||
match self {
|
match self {
|
||||||
// FIXME: How to get rid of this feature gate?
|
ColumnType::Enum(s, _) => Some(s),
|
||||||
ColumnType::Enum(s, _) if cfg!(feature = "sqlx-postgres") => Some(s),
|
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -300,13 +299,10 @@ impl From<ColumnType> for sea_query::ColumnType {
|
|||||||
ColumnType::Money(s) => sea_query::ColumnType::Money(s),
|
ColumnType::Money(s) => sea_query::ColumnType::Money(s),
|
||||||
ColumnType::Json => sea_query::ColumnType::Json,
|
ColumnType::Json => sea_query::ColumnType::Json,
|
||||||
ColumnType::JsonBinary => sea_query::ColumnType::JsonBinary,
|
ColumnType::JsonBinary => sea_query::ColumnType::JsonBinary,
|
||||||
ColumnType::Custom(s) => {
|
ColumnType::Custom(s) | ColumnType::Enum(s, _) => {
|
||||||
sea_query::ColumnType::Custom(sea_query::SeaRc::new(sea_query::Alias::new(&s)))
|
sea_query::ColumnType::Custom(sea_query::SeaRc::new(sea_query::Alias::new(&s)))
|
||||||
}
|
}
|
||||||
ColumnType::Uuid => sea_query::ColumnType::Uuid,
|
ColumnType::Uuid => sea_query::ColumnType::Uuid,
|
||||||
ColumnType::Enum(s, _) => {
|
|
||||||
sea_query::ColumnType::Custom(sea_query::SeaRc::new(sea_query::Alias::new(&s)))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ use crate::{
|
|||||||
PrimaryKeyTrait, QueryTrait,
|
PrimaryKeyTrait, QueryTrait,
|
||||||
};
|
};
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
use sea_query::{Alias, Expr, Func, InsertStatement, ValueTuple};
|
use sea_query::{Alias, Expr, InsertStatement, ValueTuple};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Insert<A>
|
pub struct Insert<A>
|
||||||
@ -125,7 +125,6 @@ where
|
|||||||
let av = am.take(col);
|
let av = am.take(col);
|
||||||
let av_has_val = av.is_set() || av.is_unchanged();
|
let av_has_val = av.is_set() || av.is_unchanged();
|
||||||
let col_def = col.def();
|
let col_def = col.def();
|
||||||
let enum_name = col_def.get_column_type().get_enum_name();
|
|
||||||
|
|
||||||
if columns_empty {
|
if columns_empty {
|
||||||
self.columns.push(av_has_val);
|
self.columns.push(av_has_val);
|
||||||
@ -134,11 +133,10 @@ where
|
|||||||
}
|
}
|
||||||
if av_has_val {
|
if av_has_val {
|
||||||
columns.push(col);
|
columns.push(col);
|
||||||
let val = av.into_value().unwrap();
|
let val = Expr::val(av.into_value().unwrap());
|
||||||
let expr = if let Some(enum_name) = enum_name {
|
let expr = match col_def.get_column_type().get_enum_name() {
|
||||||
Func::cast_as(val, Alias::new(enum_name))
|
Some(enum_name) => val.as_enum(Alias::new(enum_name)),
|
||||||
} else {
|
None => val.into(),
|
||||||
Expr::val(val).into()
|
|
||||||
};
|
};
|
||||||
values.push(expr);
|
values.push(expr);
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ use crate::{ColumnTrait, EntityTrait, Iterable, QueryFilter, QueryOrder, QuerySe
|
|||||||
use core::fmt::Debug;
|
use core::fmt::Debug;
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
pub use sea_query::JoinType;
|
pub use sea_query::JoinType;
|
||||||
use sea_query::{Alias, DynIden, Expr, Func, IntoColumnRef, SeaRc, SelectStatement, SimpleExpr};
|
use sea_query::{Alias, DynIden, Expr, IntoColumnRef, SeaRc, SelectStatement, SimpleExpr};
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Select<E>
|
pub struct Select<E>
|
||||||
@ -115,15 +115,14 @@ where
|
|||||||
|
|
||||||
fn column_list(&self) -> Vec<SimpleExpr> {
|
fn column_list(&self) -> Vec<SimpleExpr> {
|
||||||
let table = SeaRc::new(E::default()) as DynIden;
|
let table = SeaRc::new(E::default()) as DynIden;
|
||||||
|
let text_type = SeaRc::new(Alias::new("text")) as DynIden;
|
||||||
E::Column::iter()
|
E::Column::iter()
|
||||||
.map(|col| {
|
.map(|col| {
|
||||||
let col_def = col.def();
|
let col_def = col.def();
|
||||||
let enum_name = col_def.get_column_type().get_enum_name();
|
let expr = Expr::tbl(table.clone(), col);
|
||||||
let col_expr = Expr::tbl(table.clone(), col);
|
match col_def.get_column_type().get_enum_name() {
|
||||||
if enum_name.is_some() {
|
Some(_) => expr.as_enum(text_type.clone()),
|
||||||
Func::cast_expr_as(col_expr, Alias::new("text"))
|
None => expr.into(),
|
||||||
} else {
|
|
||||||
col_expr.into()
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
|
@ -3,7 +3,7 @@ use crate::{
|
|||||||
QueryTrait,
|
QueryTrait,
|
||||||
};
|
};
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
use sea_query::{Alias, Expr, Func, IntoIden, SimpleExpr, UpdateStatement};
|
use sea_query::{Alias, Expr, IntoIden, SimpleExpr, UpdateStatement};
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Update;
|
pub struct Update;
|
||||||
@ -105,14 +105,12 @@ where
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let col_def = col.def();
|
let col_def = col.def();
|
||||||
let enum_name = col_def.get_column_type().get_enum_name();
|
|
||||||
let av = self.model.get(col);
|
let av = self.model.get(col);
|
||||||
if av.is_set() {
|
if av.is_set() {
|
||||||
let val = av.into_value().unwrap();
|
let val = Expr::val(av.into_value().unwrap());
|
||||||
let expr = if let Some(enum_name) = enum_name {
|
let expr = match col_def.get_column_type().get_enum_name() {
|
||||||
Func::cast_as(val, Alias::new(enum_name))
|
Some(enum_name) => val.as_enum(Alias::new(enum_name)),
|
||||||
} else {
|
None => val.into(),
|
||||||
Expr::val(val).into()
|
|
||||||
};
|
};
|
||||||
self.query.value_expr(col, expr);
|
self.query.value_expr(col, expr);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user