76 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
1.0.1 - 2026-05-30
- 1.0.1 - Borrowed scalar primitive conversions for
Value
sea-query-sqlx 0.9.0 - 2026-05-29
- sea-query-sqlx 0.9.0 — SQLx
0.9, Rust1.94.0, temporary Jiff and pgvector binder limitations
1.0.0 - 2026-05-28
- 1.0.0 - Stable SeaQuery 1.0 release notes
Release Candidates
- 1.0.0-rc.34 — Table partitioning, Jiff binder support,
JSON_TABLErefactor - 1.0.0-rc.33 —
Value::Enum, Postgres advisory locks,SelectExprTrait - 1.0.0-rc.32 —
EXPLAIN,FILTERon aggregates,ALTER TABLE DROP CONSTRAINT - 1.0.0-rc.31 —
SELECT INTO,eq_any/ne_all,Value::array_type - 1.0.0-rc.30 — Tokenizer comment parsing, dependency reductions
- 1.0.0-rc.29 — Legacy
serialoption for Postgres - 1.0.0-rc.28 — Restore Value system
- 1.0.0-rc.27 — Revert
impl Iden for String - 1.0.0-rc.26 —
From<Vec<Value>> for Array,FromIterator<T> for Array - 1.0.0-rc.24 — Array API redesign
- 1.0.0-rc.23 —
Value::Enum,ON CONFLICT ON CONSTRAINT, CTEVALUESclause - 1.0.0-rc.22 — Index operator class,
DROP COLUMN IF EXISTS, nullable values - 1.0.0-rc.20 —
ValueTupleIter, SQLite decimal fix
New features
- Support
EXPLAINstatements https://github.com/SeaQL/sea-query/pull/1044 #![forbid(unsafe_code)]in all workspace crates https://github.com/SeaQL/sea-query/pull/930- Unify
ExprandSimpleExpras one type.SimpleExpris kept as an alias ofExpr, but they can now be used interchangeably. There may be a few compile errors and some clippy warnings, basically just remove the redundant.into()https://github.com/SeaQL/sea-query/pull/889
pub type SimpleExpr = Expr; // !
impl From<Expr> for SimpleExpr { .. } // now removed
- New
Identype system. Previously,DynIdenis an alias toSeaRc<dyn Iden>, and is lazily rendered. Now, it's anCow<'static, str>, and is eagerly rendered.SeaRcis no longer an alias toRc/Arc, now is only a unit struct. As such,Send/Syncis no longer needed. It's still possible to dynamically serialize a String as identifier, see example usage. https://github.com/SeaQL/sea-query/pull/909
pub type DynIden = SeaRc<dyn Iden>; // old
pub struct DynIden(pub(crate) Cow<'static, str>); // new
pub struct SeaRc<I>(pub(crate) RcOrArc<I>); // old
pub struct SeaRc; // new
- Reworked
TableRefandColumnRefvariants https://github.com/SeaQL/sea-query/pull/927
// the following variants are collapsed into one:
enum TableRef {
Table(DynIden),
SchemaTable(DynIden, DynIden),
DatabaseSchemaTable(DynIden, DynIden, DynIden),
TableAlias(DynIden, DynIden),
SchemaTableAlias(DynIden, DynIden, DynIden),
DatabaseSchemaTableAlias(DynIden, DynIden, DynIden, DynIden),
..
}
// now it's just:
enum TableRef {
Table(TableName, Option<DynIden>), // optional Alias
..
}
pub struct DatabaseName(pub DynIden);
pub struct SchemaName(pub Option<DatabaseName>, pub DynIden);
/// A table name, potentially qualified as [database.][schema.]table
pub struct TableName(pub Option<SchemaName>, pub DynIden);
// before
enum ColumnRef {
Column(DynIden),
TableColumn(DynIden, DynIden),
SchemaTableColumn(DynIden, DynIden, DynIden),
Asterisk,
TableAsterisk(DynIden),
}
// now
enum ColumnRef {
/// A column name, potentially qualified as [database.][schema.][table.]column
Column(ColumnName),
/// An `*` expression, potentially qualified as [database.][schema.][table.]*
Asterisk(Option<TableName>),
}
pub struct ColumnName(pub Option<TableName>, pub DynIden);
Enhancements
- Supports Jiff types except
jiff::Zoned. At the moment this support is only available through the SQLx binder. When using SQLx with multiple backends, enableunimplemented-jiff-sqlx-mysqlto suppress the compile-time error. After enabling it, runtime panics may occur. - Add
Expr::not_existshttps://github.com/SeaQL/sea-query/pull/983 - Add
serdefeature. Currently, enabling it allowsValueto be serializable https://github.com/SeaQL/sea-query/pull/966 - Add
Keyword::Defaulthttps://github.com/SeaQL/sea-query/pull/965 - Enable
clippy::nurseryhttps://github.com/SeaQL/sea-query/pull/938 - Removed unnecessary
'staticbounds from type signatures https://github.com/SeaQL/sea-query/pull/921 cast_as_quotednow allows you to qualify the type name. https://github.com/SeaQL/sea-query/pull/922
let query = Query::select()
.expr(Func::cast_as_quoted("hello", ("MySchema", "MyType")))
.to_owned();
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT CAST('hello' AS "MySchema"."MyType")"#
);
- Most
Valuevariants are now unboxed (exceptBigDecimalandArray). Previously the size is 24 bytes. https://github.com/SeaQL/sea-query/pull/925
assert_eq!(std::mem::size_of::<Value>(), 32);
- Merged
Func/FunctionandPgFunc/PgFunction. Now the latter is just an alias of the former https://github.com/SeaQL/sea-query/pull/944
// old
condition.add(Func::lower(Expr::col(column)).eq(SimpleExpr::FunctionCall(Func::lower(value))))
// new
condition.add(Func::lower(Expr::col(*column)).eq(Func::lower(value)));
impl From<Expr> for Condition. Now you can useExprinstead ofConditionExpression, which has been removed from the public API https://github.com/SeaQL/sea-query/pull/915
Cond::all().add(ConditionExpression::Expr(Expr::new(..))) // old
Cond::all().add(Expr::new(..)) // new
- Replaced
serialwithGENERATED BY DEFAULT AS IDENTITY(Postgres) https://github.com/SeaQL/sea-query/pull/918 To restore legacy behaviour, you can enable theoption-postgres-use-serialfeature flag
let table = Table::create()
.table(Char::Table)
.col(ColumnDef::new(Char::Id).integer().not_null().auto_increment().primary_key())
.to_owned();
assert_eq!(
table.to_string(PostgresQueryBuilder),
[
r#"CREATE TABLE "character" ("#,
r#""id" integer GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
r#")"#,
].join(" ")
);
// if you needed to support legacy system you can still do:
let table = Table::create()
.table(Char::Table)
.col(ColumnDef::new(Char::Id).custom("serial").not_null().primary_key())
.to_owned();
assert_eq!(
table.to_string(PostgresQueryBuilder),
[
r#"CREATE TABLE "character" ("#,
r#""id" serial NOT NULL PRIMARY KEY"#,
r#")"#,
].join(" ")
);
Breaking Changes
- Removed inherent
SimpleExprmethods that duplicateExprTrait. If you encounter the following error, please adduse sea_query::ExprTraitin scope https://github.com/SeaQL/sea-query/pull/890
error[E0599]: no method named `like` found for enum `sea_query::Expr` in the current scope
|
| Expr::col((self.entity_name(), *self)).like(s)
|
| fn like<L>(self, like: L) -> Expr
| ---- the method is available for `sea_query::Expr` here
|
= help: items from traits can only be used if the trait is in scope
help: trait `ExprTrait` which provides `like` is implemented but not in scope; perhaps you want to import it
|
-> + use sea_query::ExprTrait;
error[E0308]: mismatched types
--> src/sqlite/discovery.rs:27:57
|
| .and_where(Expr::col(Alias::new("type")).eq("table"))
| -- ^^^^^^^ expected `&Expr`, found `&str`
| |
| arguments to this method are incorrect
|
= note: expected reference `&sea_query::Expr`
found reference `&'static str`
- Added
non_exhaustiveto AST enums. It allows us to add new features and extend the AST without breaking the API. If you encounter the following error, please add a wildcard match_ => {..}https://github.com/SeaQL/sea-query/pull/891
error[E0004]: non-exhaustive patterns: `&_` not covered
|
| match table_ref {
| ^^^^^^^^^ pattern `&_` not covered
|
note: `TableRef` defined here
|
| pub enum TableRef {
| ^^^^^^^^^^^^^^^^^
= note: the matched value is of type `&TableRef`
= note: `TableRef` is marked as non-exhaustive, so a wildcard `_` is necessary to match exhaustively
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
| TableRef::FunctionCall(_, tbl) => SeaRc::clone(tbl),
-> | &_ => todo!(),
ExprTrait::eqcollided withstd::cmp::Eq. If you encounter the following error, please usestd::cmp::PartialEq::eq(a, b)orsea_query::ExprTrait::eq(a, b)explicitly https://github.com/SeaQL/sea-query/pull/890
error[E0308]: mismatched types
|
| fn eq(&self, other: &Self) -> bool {
| ---- expected `bool` because of return type
| format!("{:?}", self.0).eq(&format!("{:?}", other.0))
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `bool`, found `Expr`
For more information about this error, try `rustc --explain E0308`.
error: could not compile `seaography` (lib) due to 1 previous error
- The method signature of
Iden::unquotedis changed. If you're implementingIdenmanually, you can modify it like below https://github.com/SeaQL/sea-query/pull/909
error[E0050]: method `unquoted` has 2 parameters but the declaration in trait `types::Iden::unquoted` has 1
--> src/tests_cfg.rs:31:17
|
| fn unquoted(&self, s: &mut dyn std::fmt::Write) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 1 parameter, found 2
|
::: src/types.rs:63:17
|
| fn unquoted(&self) -> &str;
| ----- trait requires 1 parameter
impl Iden for Glyph {
- fn unquoted(&self, s: &mut dyn fmt::Write) {
+ fn unquoted(&self) -> &str {
- write!(
- s,
- "{}",
match self {
Self::Table => "glyph",
Self::Id => "id",
Self::Tokens => "tokens",
}
- )
- .unwrap();
}
}
- Removed
ConditionExpressionfrom the public API. Instead, just convert betweenConditionandExprusingFrom/Intohttps://github.com/SeaQL/sea-query/pull/915
error[E0603]: enum `ConditionExpression` is private
--> tests/mysql/query.rs:734:20
|
> | use sea_query::ConditionExpression;
| ^^^^^^^^^^^^^^^^^^^ private enum
> | Cond::all().add(ConditionExpression::Expr(Expr::new(
| ^^^^^^^^^^^^^^^^^^^ use of undeclared type `ConditionExpression`
Simply do the following:
Cond::all().add(Expr::new(..))
- Reworked
ColumnRefvariants may cause compile error.
error[E0277]: the trait bound `fn(std::option::Option<TableName>) -> sea_query::ColumnRef {sea_query::ColumnRef::Asterisk}: IntoColumnRef` is not satisfied
--> src/executor/query.rs:1599:21
|
> | .column(ColumnRef::Asterisk)
| ------ ^^^^^^^^^^^^^^^^^^^ the trait `sea_query::Iden` is not implemented for fn item `fn(std::option::Option<TableName>) -> sea_query::ColumnRef {sea_query::ColumnRef::Asterisk}`
| |
| required by a bound introduced by this call
error[E0308]: mismatched types
--> src/executor/query.rs:1607:54
|
> | SimpleExpr::Column(ColumnRef::Column("id".into_iden()))
| ----------------- ^^^^^^^^^^^^^^^^ expected `ColumnName`, found `DynIden`
| |
| arguments to this enum variant are incorrect
In the former case Asterisk has an additional inner Option<TableName>, you can simply put None.
.column(ColumnRef::Asterisk(None))
In the latter case, &'static str can now be used in most methods that accepts ColumnRef.
Expr::column("id")
- Reworked
TableRefvariants may cause compile error.
error[E0061]: this enum variant takes 2 arguments but 1 argument was supplied
--> src/entity/relation.rs:526:15
|
> | from_tbl: TableRef::Table("foo".into_iden()),
| ^^^^^^^^^^^^^^^-------------------
| ||
| |expected `TableName`, found `DynIden`
| argument #2 of type `Option<DynIden>` is missing
It's recommended to use the IntoTableRef trait to convert types instead of constructing AST manually.
use sea_orm::sea_query::IntoTableRef;
from_tbl: "foo".into_table_ref(),
- Replace
dyn <Trait>withimpl <Trait>https://github.com/SeaQL/sea-query/pull/982 This gained us up to 10% performance, however it does meandyn QueryBuilderis no longer possible.
Minor breaking changes
-
Changed
Into*traits (likeIntoCondition) to be defined astrait IntoCondition: Into<Condition>and implemented for allT: Into<Condition>. NowIntoConditionandInto<Condition>are completely interchangable. But you can still use.into_condition()for readability.If you have manually implemented
Into*traits, it may cause conflicts. You should rewrite your impls as asimpl From<..> for Condition.Full list of changed traits:
IntoColumnDefhttps://github.com/SeaQL/sea-query/pull/975IntoColumnRefhttps://github.com/SeaQL/sea-query/pull/959IntoConditionhttps://github.com/SeaQL/sea-query/pull/939IntoIdenhttps://github.com/SeaQL/sea-query/pull/973IntoIndexColumnhttps://github.com/SeaQL/sea-query/pull/976IntoLikeExprhttps://github.com/SeaQL/sea-query/pull/974IntoTableRefhttps://github.com/SeaQL/sea-query/pull/958IntoTypeRefhttps://github.com/SeaQL/sea-query/pull/969IntoValueTuplehttps://github.com/SeaQL/sea-query/pull/960
-
Unboxed
Valuevariants may cause compile error. Simply remove theBoxin these cases https://github.com/SeaQL/sea-query/pull/925
error[E0308]: mismatched types
--> /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/sea-schema-0.17.0-rc.3/src/sqlite/def/table.rs:248:59
|
> | Value::String(Some(Box::new(string_value.to_string()))));
| ---- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `String`, found `Box<String>`
| |
| arguments to this enum variant are incorrect
-
Blanket-implemented
SqliteExprandPgExprforT where T: ExprTraithttps://github.com/SeaQL/sea-query/pull/914Now you can use database-specific operators with all expression types. If you had custom implementations in your own code, some may no longer compile and may need to be deleted.
-
Replaced
ColumnSpec::Check(Expr)withColumnSpec::Check(Check)to support named check constraints https://github.com/SeaQL/sea-query/pull/920 -
SelectStatement::cross_joinno longer accepts a condition https://github.com/SeaQL/sea-query/pull/956 -
Turned
TypeReffrom an enum into a struct that reusesTableName. https://github.com/SeaQL/sea-query/pull/969 -
Changed
Expr::TypeName(DynIden)toExpr::TypeName(TypeRef), which can be qualified.If you manually construct this variant and it no longer compiles, just add
.into(). -
Renamed
QueryBuilder::prepare_simple_exprtoprepare_exprhttps://github.com/SeaQL/sea-query/pull/988 -
Changed signature of
Expr::Customhttps://github.com/SeaQL/sea-query/pull/940
enum Expr {
- Custom(String),
+ Custom(Cow<'static, str>),
}
fn cust<T>(s: T) -> Self
where
- T: Into<String>,
+ T: Into<Cow<'static, str>>,
{
Self::Custom(s.into())
}
You many encounter the following error:
| let sql = self.sql.trim();
| ^^^^^^^^ borrowed value does not live long enough
...
| Expr::cust_with_values(sql, values.0)
| ------------------------------------- argument requires that `self.stmt.sql` is borrowed for `'static`
Simply convert the &str to String:
let sql = self.sql.trim().to_owned();
Bug Fixes
- Removed invalid condition requirement on
SelectStatement::cross_joinhttps://github.com/SeaQL/sea-query/pull/956
Upgrades
- Upgraded to Rust Edition 2024 https://github.com/SeaQL/sea-query/pull/885
Maintainence
sea-query-binderhas been superseded withsea-query-sqlx
0.32.7 - 2025-08-06
Enhancements
- Added
ValueType::is_option
Bug Fixes
- Fix incorrect casting of
ChronoDateTimeWithTimeZoneinValue::Arrayhttps://github.com/SeaQL/sea-query/pull/933 - Add missing parenthesis to
WINDOWclause https://github.com/SeaQL/sea-query/pull/919
SELECT .. OVER "w" FROM "character" WINDOW "w" AS (PARTITION BY "ww")
- Fix serializing iden as a value in
ALTER TYPE ... RENAME TO ...statements https://github.com/SeaQL/sea-query/pull/924
ALTER TYPE "font" RENAME TO "typeface"
- Fixed the issue where milliseconds were truncated when formatting
Value::Constanthttps://github.com/SeaQL/sea-query/pull/929
'2025-01-01 00:00:00.000000'
^^^^^^^
0.32.6 - 2025-05-27
Enhancements
- impl
From<Condition>andFrom<ConditionExpression>forSimpleExprhttps://github.com/SeaQL/sea-query/pull/886
0.32.5 - 2025-05-07
New features
- Support for creating functional indexes in Postgres and MySQL https://github.com/SeaQL/sea-query/pull/869
Enhancements
- Make
RcOrArca documented type alias instead of a direct reexport https://github.com/SeaQL/sea-query/pull/875 - Impl
Idenfor&'static str(don't wrap strings inAlias::new) https://github.com/SeaQL/sea-query/pull/882
0.32.4 - 2025-04-17
New Features
- Added support for temporary tables https://github.com/SeaQL/sea-query/pull/878
let statement = Table::create()
.table(Font::Table)
.temporary()
.col(
ColumnDef::new(Font::Id)
.integer()
.not_null()
.primary_key()
.auto_increment()
)
.col(ColumnDef::new(Font::Name).string().not_null())
.take();
assert_eq!(
statement.to_string(MysqlQueryBuilder),
[
"CREATE TEMPORARY TABLE `font` (",
"`id` int NOT NULL PRIMARY KEY AUTO_INCREMENT,",
"`name` varchar(255) NOT NULL",
")",
]
.join(" ")
);
- Added
Value::dummy_value
use sea_query::Value;
let v = Value::Int(None);
let n = v.dummy_value();
assert_eq!(n, Value::Int(Some(0)));
Bug Fixes
- Quote type properly in
AsEnumcasting https://github.com/SeaQL/sea-query/pull/880
let query = Query::select()
.expr(Expr::col(Char::FontSize).as_enum(TextArray))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT CAST("font_size" AS "text"[]) FROM "character""#
);
0.32.3 - 2025-03-16
New Features
- Support
Update FROM ..https://github.com/SeaQL/sea-query/pull/861
let query = Query::update()
.table(Glyph::Table)
.value(Glyph::Tokens, Expr::column((Char::Table, Char::Character)))
.from(Char::Table)
.cond_where(
Expr::col((Glyph::Table, Glyph::Image))
.eq(Expr::col((Char::Table, Char::UserData))),
)
.to_owned();
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"UPDATE "glyph" SET "tokens" = "character"."character" FROM "character" WHERE "glyph"."image" = "character"."user_data""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"UPDATE "glyph" SET "tokens" = "character"."character" FROM "character" WHERE "glyph"."image" = "character"."user_data""#
);
- Support
TABLESAMPLE(Postgres) https://github.com/SeaQL/sea-query/pull/865
use sea_query::extension::postgres::PostgresSelectStatementExt;
let query = Query::select()
.columns([Glyph::Image])
.from(Glyph::Table)
.table_sample(SampleMethod::SYSTEM, 50.0, None)
.to_owned();
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT "image" FROM "glyph" TABLESAMPLE SYSTEM (50)"#
);
- Support
ALTER COLUMN USING ..(Postgres) https://github.com/SeaQL/sea-query/pull/848
let table = Table::alter()
.table(Char::Table)
.modify_column(
ColumnDef::new(Char::Id)
.integer()
.using(Expr::col(Char::Id).cast_as(Alias::new("integer"))),
)
.to_owned();
assert_eq!(
table.to_string(PostgresQueryBuilder),
[
r#"ALTER TABLE "character""#,
r#"ALTER COLUMN "id" TYPE integer USING CAST("id" AS integer)"#,
]
.join(" ")
);
House Keeping
- Updated
ordered-floatto4 - Updated
thiserrorto2
0.32.2 - 2025-02-18
New Features
- Added
with_cteto useWITHclauses in all statements https://github.com/SeaQL/sea-query/pull/859
let select = SelectStatement::new()
.columns([Glyph::Id, Glyph::Image, Glyph::Aspect])
.from(Glyph::Table)
.to_owned();
let cte = CommonTableExpression::new()
.query(select)
.table_name(Alias::new("cte"))
.to_owned();
let select = SelectStatement::new()
.columns([Glyph::Id, Glyph::Image, Glyph::Aspect])
.from(Alias::new("cte"))
.with_cte(cte)
.to_owned();
assert_eq!(
select.to_string(PostgresQueryBuilder),
[
r#"WITH "cte" AS"#,
r#"(SELECT "id", "image", "aspect""#,
r#"FROM "glyph")"#,
r#"SELECT "id", "image", "aspect" FROM "cte""#,
]
.join(" ")
);
Enhancements
- Added
Expr::columnhttps://github.com/SeaQL/sea-query/pull/852 - Added Postgres function
DATE_TRUNChttps://github.com/SeaQL/sea-query/pull/825 - Added
INCLUDEclause for Postgres BTree index https://github.com/SeaQL/sea-query/pull/826
Bug Fixes
- Write empty Postgres array as '{}' https://github.com/SeaQL/sea-query/pull/854
0.32.1 - 2024-12-01
New Features
- Added
Value::as_null
let v = Value::Int(Some(2));
let n = v.as_null();
assert_eq!(n, Value::Int(None));
- Added bitwise and/or operators (
bit_and,bit_or) https://github.com/SeaQL/sea-query/pull/841
let query = Query::select()
.expr(1.bit_and(2).eq(3))
.to_owned();
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT (1 & 2) = 3"#
);
Enhancements
- Added
GREATEST&LEASTfunction https://github.com/SeaQL/sea-query/pull/844 - Added
ValueType::enum_type_name()https://github.com/SeaQL/sea-query/pull/836 - Removed "one common table" restriction on recursive CTE https://github.com/SeaQL/sea-query/pull/835
House keeping
- Remove unnecessary string hashes https://github.com/SeaQL/sea-query/pull/815
0.32.0 - 2024-10-17
Releases
2024-08-09
sea-query/0.32.0-rc.1sea-query-binder/0.7.0-rc.1sea-query-binder/0.7.0-rc.2sea-query-rusqlite/0.7.0-rc.1sea-query-postgres/0.5.0-rc.1
2024-10-05
sea-query/0.32.0-rc.2sea-query-attr/0.1.3sea-query-derive/0.4.2sea-query-rusqlite/0.7.0-rc.2
New Features
- Construct Postgres query with vector extension https://github.com/SeaQL/sea-query/pull/774
- Added
postgres-vectorfeature flag - Added
Value::Vector,ColumnType::Vector,ColumnDef::vector(),PgBinOper::EuclideanDistance,PgBinOper::NegativeInnerProductandPgBinOper::CosineDistance
assert_eq!( Query::select() .columns([Char::Character]) .from(Char::Table) .and_where( Expr::col(Char::Character).eq(Expr::val(pgvector::Vector::from(vec![1.0, 2.0]))) ) .to_string(PostgresQueryBuilder), r#"SELECT "character" FROM "character" WHERE "character" = '[1,2]'"# ); - Added
- Added
ExprTraitto unifyExprandSimpleExprmethods https://github.com/SeaQL/sea-query/pull/791 - Support partial index
CREATE INDEX .. WHERE ..https://github.com/SeaQL/sea-query/pull/478
Enhancements
- Replace
Educewith manual implementations https://github.com/SeaQL/sea-query/pull/817
sea-query-derive
- Merged
#[enum_def]intosea-query-derive #[enum_def]now impl additionalIdenStaticandAsRef<str>https://github.com/SeaQL/sea-query/pull/769
sea-query-attr
- Updated
syn,heckanddarling sea-query-attris now deprecated
Upgrades
- Upgrade
sqlxto0.8https://github.com/SeaQL/sea-query/pull/798 - Upgrade
bigdecimalto0.4https://github.com/SeaQL/sea-query/pull/798 - Upgrade
rusqliteto0.32https://github.com/SeaQL/sea-query/pull/802
0.31.1 - 2024-10-05
Enhancements
- Derive
Eq,Ord,HashforAliashttps://github.com/SeaQL/sea-query/pull/818 - Added
Func::md5function https://github.com/SeaQL/sea-query/pull/786 - Added Postgres Json functions
JSON_BUILD_OBJECTandJSON_AGGhttps://github.com/SeaQL/sea-query/pull/787 - Added Postgres function
ARRAY_AGGhttps://github.com/SeaQL/sea-query/pull/846 - Added
Func::cast_as_quotedhttps://github.com/SeaQL/sea-query/pull/789 - Added
IF NOT EXISTStoALTER TYPE ADD VALUEhttps://github.com/SeaQL/sea-query/pull/803
0.31.0 - 2024-08-02
Versions
sea-query/0.31.0-rc.1: 2024-01-31sea-query/0.31.0-rc.4: 2024-02-02sea-query/0.31.0-rc.5: 2024-04-14sea-query/0.31.0-rc.6: 2024-05-03sea-query/0.31.0-rc.7: 2024-06-02sea-query/0.31.0-rc.8: 2024-06-19sea-query-binder/0.6.0-rc.1: 2024-01-31sea-query-binder/0.6.0-rc.2: 2024-04-14sea-query-binder/0.6.0-rc.3: 2024-06-19sea-query-binder/0.6.0-rc.4: 2024-06-25sea-query-binder/0.6.0: 2024-08-02sea-query-rusqlite/0.6.0-rc.1: 2024-02-19sea-query-rusqlite/0.6.0: 2024-08-02sea-query-attr/0.1.2: 2024-04-14sea-query-diesel/0.2.0: 2024-08-02
New Features
- Added
table_nameattribute toenum_defmacro https://github.com/SeaQL/sea-query/pull/759 - Added
ColumnType::Blobhttps://github.com/SeaQL/sea-query/pull/777
Breaking Changes
- Rework SQLite type mapping https://github.com/SeaQL/sea-query/pull/735
assert_eq!(
Table::create()
.table(Alias::new("strange"))
.col(ColumnDef::new(Alias::new("id")).integer().not_null().auto_increment().primary_key())
.col(ColumnDef::new(Alias::new("int1")).integer())
.col(ColumnDef::new(Alias::new("int2")).tiny_integer())
.col(ColumnDef::new(Alias::new("int3")).small_integer())
.col(ColumnDef::new(Alias::new("int4")).big_integer())
.col(ColumnDef::new(Alias::new("string1")).string())
.col(ColumnDef::new(Alias::new("string2")).string_len(24))
.col(ColumnDef::new(Alias::new("char1")).char())
.col(ColumnDef::new(Alias::new("char2")).char_len(24))
.col(ColumnDef::new(Alias::new("text_col")).text())
.col(ColumnDef::new(Alias::new("json_col")).json())
.col(ColumnDef::new(Alias::new("uuid_col")).uuid())
.col(ColumnDef::new(Alias::new("decimal1")).decimal())
.col(ColumnDef::new(Alias::new("decimal2")).decimal_len(12, 4))
.col(ColumnDef::new(Alias::new("money1")).money())
.col(ColumnDef::new(Alias::new("money2")).money_len(12, 4))
.col(ColumnDef::new(Alias::new("float_col")).float())
.col(ColumnDef::new(Alias::new("double_col")).double())
.col(ColumnDef::new(Alias::new("date_col")).date())
.col(ColumnDef::new(Alias::new("time_col")).time())
.col(ColumnDef::new(Alias::new("datetime_col")).date_time())
.col(ColumnDef::new(Alias::new("boolean_col")).boolean())
.col(ColumnDef::new(Alias::new("binary2")).binary_len(1024))
.col(ColumnDef::new(Alias::new("binary3")).var_binary(1024))
.col(ColumnDef::new(Alias::new("binary4")).blob())
.to_string(SqliteQueryBuilder),
[
r#"CREATE TABLE "strange" ( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,"#,
r#""int1" integer,"#,
r#""int2" tinyint,"#,
r#""int3" smallint,"#,
r#""int4" bigint,"#,
r#""string1" varchar,"#,
r#""string2" varchar(24),"#,
r#""char1" char,"#,
r#""char2" char(24),"#,
r#""text_col" text,"#,
r#""json_col" json_text,"#,
r#""uuid_col" uuid_text,"#,
r#""decimal1" real,"#,
r#""decimal2" real(12, 4),"#,
r#""money1" real_money,"#,
r#""money2" real_money(12, 4),"#,
r#""float_col" float,"#,
r#""double_col" double,"#,
r#""date_col" date_text,"#,
r#""time_col" time_text,"#,
r#""datetime_col" datetime_text,"#,
r#""boolean_col" boolean,"#,
r#""binary2" blob(1024),"#,
r#""binary3" varbinary_blob(1024),"#,
r#""binary4" blob"#,
r#")"#,
]
.join(" ")
);
- MySQL money type maps to decimal
- MySQL blob types moved to
sea_query::extension::mysql::MySqlType;ColumnDef::blob()now takes no parameters
assert_eq!(
Table::create()
.table(BinaryType::Table)
.col(ColumnDef::new(BinaryType::BinaryLen).binary_len(32))
.col(ColumnDef::new(BinaryType::Binary).binary())
.col(ColumnDef::new(BinaryType::Blob).blob())
.col(ColumnDef::new(BinaryType::TinyBlob).custom(MySqlType::TinyBlob))
.col(ColumnDef::new(BinaryType::MediumBlob).custom(MySqlType::MediumBlob))
.col(ColumnDef::new(BinaryType::LongBlob).custom(MySqlType::LongBlob))
.to_string(MysqlQueryBuilder),
[
"CREATE TABLE `binary_type` (",
"`binlen` binary(32),",
"`bin` binary(1),",
"`b` blob,",
"`tb` tinyblob,",
"`mb` mediumblob,",
"`lb` longblob",
")",
]
.join(" ")
);
ColumnDef::binary()set column type as binary with default length of 1- Removed
BlobSizeenum - Added
StringLento represent length of var-char/binary
/// Length for var-char/binary; default to 255
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub enum StringLen {
/// String size
N(u32),
Max,
#[default]
None,
}
ValueType::columntype()ofVec<u8>maps toVarBinary(StringLen::None)ValueType::columntype()ofStringmaps toString(StringLen::None)ColumnType::Bitmaps tobitfor PostgresColumnType::BinaryandColumnType::VarBinarymap tobyteafor PostgresValue::DecimalandValue::BigDecimalbind asrealfor SQLiteColumnType::Year(Option<MySqlYear>)changed toColumnType::Year
Enhancements
- Added
IntoColumnDeftrait, allowing&mut ColumnDef/ColumnDefas argument - Added
ColumnType::string()andColumnType::var_binary()as shim for old API - Added
ON DUPLICATE KEY DO NOTHINGpolyfill for MySQL https://github.com/SeaQL/sea-query/pull/765 - Added non-TLS runtime https://github.com/SeaQL/sea-query/pull/783
House keeping
- Added
ColumnTypemapping documentation - Replace
derivativewitheducehttps://github.com/SeaQL/sea-query/pull/763
Upgrades
- Upgrade
rusqliteto0.31https://github.com/SeaQL/sea-query/pull/755 - Upgrade
timeto0.3.36https://github.com/SeaQL/sea-query/pull/788
0.30.8 - Pending
Enhancements
- Added
InsertStatement::values_from_panichttps://github.com/SeaQL/sea-query/pull/739
0.30.7 - 2024-01-12
Enhancements
- Added
SelectStatement::applyhttps://github.com/SeaQL/sea-query/pull/730
House keeping
- Slight refactors and documentation update
0.30.6 - 2024-01-01
House keeping
- Fix clippy warnings on Rust 1.75 https://github.com/SeaQL/sea-query/pull/729
sea-query-rusqlite 0.5.0 - 2023-12-29
- Upgrade
rusqliteto0.30https://github.com/SeaQL/sea-query/pull/728
0.30.5 - 2023-12-14
New Features
- Added feature flag
option-more-parenthesesto have more parentheses in expressions https://github.com/SeaQL/sea-query/pull/723 - Added feature flag
option-sqlite-exact-column-typeto only useintegerfor SQLite - Support
COUNT(DISTINCT "column")https://github.com/SeaQL/sea-query/pull/700 - Support index hints for MySQL (via
extension::mysql::MySqlSelectStatementExt) https://github.com/SeaQL/sea-query/pull/636 - Support expressions for
ON CONFLICTtargets https://github.com/SeaQL/sea-query/pull/692
Enhancements
- Add
from_clearto allow emptying current from tables in select statement https://github.com/SeaQL/sea-query/pull/716
Breaking Changes
- Caution: do not use the
--all-featuresparam in Cargo. If you want to enable all features, use theall-featuresfeature flag instead.
0.30.4 - 2023-12-01
Enhancements
- Impl
QueryStatementWriteras inherent methods forWithQuery
0.30.3 - 2023-11-22
New Features
- Added
LTreecolumn type https://github.com/SeaQL/sea-query/pull/604 - Improved parenthesis omission logic https://github.com/SeaQL/sea-query/pull/675
Bug Fixes
- Fixed
BIGINT PRIMARY KEY AUTOINCREMENTfor SQLite https://github.com/SeaQL/sea-query/issues/689
Upgrades
- Upgrade
chronoto0.4.27
Breaking changes
- Removed
ToTokensforPgIntervalhttps://github.com/SeaQL/sea-query/pull/710
sea-query-derive 0.4.1 - 2023-10-19
- Upgrade
synto2
0.30.2 - 2023-09-23
Bug Fixes
- Fixed incorrect behavior when adding an autoincrement column for Postgres https://github.com/SeaQL/sea-query/pull/697
Enhancements
- Make
ValueTuplehashable
0.30.1 - 2023-08-25
Versions
New Features
- Added
Func::roundandFunc::round_with_precisionhttps://github.com/SeaQL/sea-query/pull/671
Enhancements
- Added some getters to
FunctionCallhttps://github.com/SeaQL/sea-query/pull/677
Bug Fixes
- Fixed bytea literal syntax for Postgres https://github.com/SeaQL/sea-query/pull/666
- Fixed issues with semantics of parenthesis removal https://github.com/SeaQL/sea-query/pull/675
- Fixed behaviour in
FunctionCallwhen callingargmultiple times https://github.com/SeaQL/sea-query/pull/687
Breaking changes
- As part of https://github.com/SeaQL/sea-query/pull/687, calling
FunctionCall::argmultiple times will append the arguments instead of replacing old values
0.30.0 - 2023-07-20
This is a small (but major) upgrade, the only changes are:
- Upgrade SQLx to
0.7https://github.com/SeaQL/sea-query/pull/652 - Upgrade ipnetwork to
0.20
Versions
Notes
sea-query 0.29 has a number of breaking changes, so it might be easier for you to first upgrade to 0.29, then upgrade sqlx by bumping to 0.30.
0.29.1 - 2023-07-12
Versions
sea-query/0.29.0-rc.1: 2023-03-22sea-query/0.29.0(Yanked)sea-query/0.29.1: 2023-07-12sea-query-binder/0.4.0sea-query-postgres/0.3.0sea-query-rusqlite/0.3.0
New Features
- Added
ValueTuple::Manyfor tuple with length up to 12 https://github.com/SeaQL/sea-query/pull/564 - Added
CREATE TABLE CHECKconstraints https://github.com/SeaQL/sea-query/pull/567 - Added support generated column spec https://github.com/SeaQL/sea-query/pull/581
- Added
BIT_AND,BIT_ORfunctions https://github.com/SeaQL/sea-query/pull/582 - Added implementation
SqlxBinder,RusqliteBinderandPostgresBinderforWithQueryhttps://github.com/SeaQL/sea-query/pull/580 - Added new type
Asterikshttps://github.com/SeaQL/sea-query/pull/596 - Added
IF NOT EXISTSforDROP INDEXin Postgres and Sqlite https://github.com/SeaQL/sea-query/pull/610 - Added
->and->>operators for Postgres https://github.com/SeaQL/sea-query/pull/617 - Added
TableCreateStatement::set_extraandTableCreateStatement::get_extrahttps://github.com/SeaQL/sea-query/pull/611 - Added
TableCreateStatement::commentandColumnDef::commentfor MySQL comments https://github.com/SeaQL/sea-query/pull/622 - Added
PgExpr::get_json_fieldandPgExpr::cast_json_fieldmethods for constructing Postgres JSON expressions https://github.com/SeaQL/sea-query/pull/630 - Added
PgBinOper::RegexandPgBinOper::RegexCaseInsensitivefor Postgres Regex operators - Added
BinOper::Customfor defining custom binary operators - Added
GLOBoperator for Sqlite https://github.com/SeaQL/sea-query/pull/651/ - Added
CREATE or DROP EXTENSIONstatements for Postgres https://github.com/SeaQL/sea-query/pull/616 - Added a feature flag
hashable-value, which willimpl Hash for Value; when enabled,Value::Float(NaN) == Value::Float(NaN)would be true https://github.com/SeaQL/sea-query/pull/598 - Added
PgBinOper::Overlapfor Postgres operators https://github.com/SeaQL/sea-query/pull/653
Enhancements
- Implemented
PartialEqforDynIden,SimpleExprand related types https://github.com/SeaQL/sea-query/pull/620
Breaking changes
- Removed variants
Four, Five, Sixfromenum ValueTupleas part of https://github.com/SeaQL/sea-query/pull/564 - Removed
Expr::tbl,Expr::greater_than,Expr::greater_or_equal,Expr::less_than,Expr::less_or_equal,Expr::into_simple_exprhttps://github.com/SeaQL/sea-query/pull/551 - Removed
SimpleExpr::equalsandSimpleExpr::not_equalshttps://github.com/SeaQL/sea-query/pull/551 - Removed
InsertStatement::exprs,InsertStatement::exprs_panichttps://github.com/SeaQL/sea-query/pull/551 - Removed
OnConflict::update_value,OnConflict::update_values,OnConflict::update_expr,OnConflict::update_exprshttps://github.com/SeaQL/sea-query/pull/551 - Removed
UpdateStatement::exprs,UpdateStatement::col_expr,UpdateStatement::value_exprhttps://github.com/SeaQL/sea-query/pull/551 BigIntegernow maps tobigintinstead ofintegeron SQLite https://github.com/SeaQL/sea-query/pull/556Table::truncatenow panic for Sqlite https://github.com/SeaQL/sea-query/pull/590- Deprecated
Expr::asteriksandExpr::table_asterikshttps://github.com/SeaQL/sea-query/pull/596 Expr::cust,Expr::cust_with_values,Expr::cust_with_expr,Expr::cust_with_exprs,TableForeignKey::name,ForeignKeyCreateStatement::name,ForeignKeyDropStatement::name,TableIndex::name,IndexCreateStatement::name,IndexDropStatement::name,SqlWriterValues::new,ColumnType::custom,TableCreateStatement::engine,TableCreateStatement::collate,TableCreateStatement::character_set,TableRef::new,LikeExpr::strnow acceptT: Into<String>https://github.com/SeaQL/sea-query/pull/594OnConflict::valuesandOnConflict::update_columnswill append the new values keeping the old values intact instead of erasing them https://github.com/SeaQL/sea-query/pull/609- As part of https://github.com/SeaQL/sea-query/pull/620,
SeaRcnow becomes a wrapper type. If you usedSeaRcfor something other thandyn Iden, you now have to useRcOrArc. However be reminded that it is not an intended use of the API anyway.
// new definition
struct SeaRc<I>(RcOrArc<I>);
// remains unchanged
type DynIden = SeaRc<dyn Iden>;
// if you did:
let _: DynIden = Rc::new(Alias::new("char"));
// replace with:
let _: DynIden = SeaRc::new(Alias::new("char"));
- Added new type
Quoteand changed theIdentrait:
struct Quote(pub(crate) u8, pub(crate) u8);
trait Iden {
// then:
fn prepare(&self, s: &mut dyn fmt::Write, q: char);
// now:
fn prepare(&self, s: &mut dyn fmt::Write, q: Quote);
// then:
fn quoted(&self, q: char) -> String;
// now:
fn quoted(&self, q: Quote) -> String;
}
House keeping
- Elided unnecessary lifetimes https://github.com/SeaQL/sea-query/pull/552
- Changed all
version = "^x.y.z"intoversion = "x.y.z"in all Cargo.toml https://github.com/SeaQL/sea-query/pull/547/ - Disabled default features and enable only the needed ones https://github.com/SeaQL/sea-query/pull/547/
tests_cfgmodule is available only if you enabledtests-cfgfeature https://github.com/SeaQL/sea-query/pull/584- Removed hard coded quotes https://github.com/SeaQL/sea-query/pull/613
- Enabled required
synv1 features https://github.com/SeaQL/sea-query/pull/624 - Fix macro hygiene (
any!/all!) https://github.com/SeaQL/sea-query/pull/639 https://github.com/SeaQL/sea-query/pull/640
Bug fixes
ALTER TABLEnow panic if has multiple column for Sqlite https://github.com/SeaQL/sea-query/pull/595- Fixed alter primary key column statements for Postgres https://github.com/SeaQL/sea-query/pull/646
0.28.5 - 2023-05-11
- Added implementation
SqlxBinder,RusqliteBinderandPostgresBinderforWithQueryhttps://github.com/SeaQL/sea-query/pull/580sea-query-binder0.3.1sea-query-postgres0.2.1sea-query-rusqlite0.2.1
0.28.4 - 2023-04-11
Bug fixes
- Fix quoted string bug while inserting array of strings to Postgres https://github.com/SeaQL/sea-query/pull/576
- Added comma if multiple names are passed to
TypeDropStatementhttps://github.com/SeaQL/sea-query/pull/623
0.28.3 - 2023-01-18
Enhancements
- Added getter for the
UpdateStatement::valuesfield https://github.com/SeaQL/sea-query/pull/578 - Implements
PartialEqforColumnTypehttps://github.com/SeaQL/sea-query/pull/579 - Added helper function to construct
ColumnType::Customhttps://github.com/SeaQL/sea-query/pull/579
0.28.2 - 2023-01-04
Enhancements
- Added
Cow<str>conversion toValuehttps://github.com/SeaQL/sea-query/pull/550 - Added convert various
UUIDdefined inuuid::fmtmodule intosea_query::Value::Uuidhttps://github.com/SeaQL/sea-query/pull/563
0.28.1 - 2022-12-29
Bug fixes
- Fixes Postgres
GEN_RANDOM_UUIDhttps://github.com/SeaQL/sea-query/issues/568
0.28.0 - 2022-12-09
New Features
- New struct
FunctionCallwhich hold function and arguments https://github.com/SeaQL/sea-query/pull/475 - New trait
IdenStaticwith methodfn as_str(&self) -> &'static strhttps://github.com/SeaQL/sea-query/pull/508 - New traits
PgExprandSqliteExprfor custom expressions https://github.com/SeaQL/sea-query/pull/519 - Support
BigDecimal,IpNetworkandMacAddressforsea-query-postgreshttps://github.com/SeaQL/sea-query/pull/503
API Additions
- Added
SelectStatement::from_functionhttps://github.com/SeaQL/sea-query/pull/475 - Added binary operators from the Postgres
pg_trgmextension https://github.com/SeaQL/sea-query/pull/486 - Added
ILIKEandNOT ILIKEoperators https://github.com/SeaQL/sea-query/pull/473 - Added the
mulanddivmethods forSimpleExprhttps://github.com/SeaQL/sea-query/pull/510 - Added the
MATCH,->and->>operators for SQLite https://github.com/SeaQL/sea-query/pull/513 - Added the
FULL OUTER JOINhttps://github.com/SeaQL/sea-query/pull/497 - Added
PgFunc::get_random_uuidhttps://github.com/SeaQL/sea-query/pull/530 - Added
SimpleExpr::eq,SimpleExpr::ne,Expr::not_equalshttps://github.com/SeaQL/sea-query/pull/528 - Added
PgFunc::starts_withhttps://github.com/SeaQL/sea-query/pull/529 - Added
Expr::custom_keywordandSimpleExpr::nothttps://github.com/SeaQL/sea-query/pull/535 - Added
SimpleExpr::like,SimpleExpr::not_likeandExpr::cast_ashttps://github.com/SeaQL/sea-query/pull/539 - Added support for
NULLS NOT DISTINCTclause for Postgres https://github.com/SeaQL/sea-query/pull/532 - Added
Expr::cust_with_exprandExpr::cust_with_exprshttps://github.com/SeaQL/sea-query/pull/531 - Added support for converting
&Stringto Value https://github.com/SeaQL/sea-query/issues/537
Enhancements
- Made
value::with_arraymodule public and therefore makingNotU8trait public https://github.com/SeaQL/sea-query/pull/511 - Drop the
Sizedrequirement on implementers ofSchemaBuildershttps://github.com/SeaQL/sea-query/pull/524
Bug fixes
- Wrap unions into parenthesis https://github.com/SeaQL/sea-query/pull/498
- Syntax error on empty condition https://github.com/SeaQL/sea-query/pull/505
// given
let (statement, values) = sea_query::Query::select()
.column(Glyph::Id)
.from(Glyph::Table)
.cond_where(Cond::any()
.add(Cond::all()) // empty all() => TRUE
.add(Cond::any()) // empty any() => FALSE
)
.build(sea_query::MysqlQueryBuilder);
// old behavior
assert_eq!(statement, r#"SELECT `id` FROM `glyph`"#);
// new behavior
assert_eq!(
statement,
r#"SELECT `id` FROM `glyph` WHERE (TRUE) OR (FALSE)"#
);
Breaking changes
- MSRV is up to 1.62 https://github.com/SeaQL/sea-query/pull/535
ColumnType::Arraydefinition changed fromArray(SeaRc<Box<ColumnType>>)toArray(SeaRc<ColumnType>)https://github.com/SeaQL/sea-query/pull/492Func::*now returnsFunctionCallinstead ofSimpleExprhttps://github.com/SeaQL/sea-query/pull/475Func::coalescenow acceptsIntoIterator<Item = SimpleExpr>instead ofIntoIterator<Item = Into<SimpleExpr>https://github.com/SeaQL/sea-query/pull/475- Removed
Expr::argandExpr::args- these functions are no longer needed https://github.com/SeaQL/sea-query/pull/475 - Moved all Postgres specific operators to
PgBinOperhttps://github.com/SeaQL/sea-query/pull/507 Expr::value,Expr::gt,Expr::gte,Expr::lt,Expr::lte,Expr::add,Expr::div,Expr::sub,Expr::modulo,Expr::left_shift,Expr::right_shift,Expr::between,Expr::not_between,Expr::is,Expr::is_not,Expr::if_nullnow acceptsInto<SimpleExpr>instead ofInto<Value>https://github.com/SeaQL/sea-query/pull/476Expr::is_in,Expr::is_not_innow acceptsInto<SimpleExpr>instead ofInto<Value>and convert it toSimpleExpr::Tupleinstead ofSimpleExpr::Valueshttps://github.com/SeaQL/sea-query/pull/476Expr::exprnow acceptsInto<SimpleExpr>instead ofSimpleExprhttps://github.com/SeaQL/sea-query/pull/475- Moved
Expr::ilike,Expr::not_ilike,Expr::matches,Expr::contains,Expr::contained,Expr::concatenate,Expr::concat,SimpleExpr::concatenateandSimpleExpr::concatto new traitPgExprhttps://github.com/SeaQL/sea-query/pull/519 Expr::equalsnow acceptsC: IntoColumnRefinstead ofT: IntoIden, C: IntoIdenhttps://github.com/SeaQL/sea-query/pull/528- Removed integer and date time column types' display length / precision option https://github.com/SeaQL/sea-query/pull/525
Deprecations
- Deprecated
Expr::greater_than,Expr::greater_or_equal,Expr::less_thanandExpr::less_or_equalhttps://github.com/SeaQL/sea-query/pull/476 - Deprecated
SimpleExpr::equals,SimpleExpr::not_equalshttps://github.com/SeaQL/sea-query/pull/528 - Deprecated
Expr::tbl, please useExpr::colwith a tuple https://github.com/SeaQL/sea-query/pull/540
House keeping
- Replace
impl Defaultwith#[derive(Default)]https://github.com/SeaQL/sea-query/pull/535 - Exclude
sqlxdefault features https://github.com/SeaQL/sea-query/pull/543 - Use
dtolnay/rust-toolchaininstead ofactions-rs/toolchaininCIhttps://github.com/SeaQL/sea-query/pull/544
0.27.2 - 2022-11-14
- Made
value::with_arraymodule public and therefore makingNotU8trait public https://github.com/SeaQL/sea-query/pull/511
sea-query-binder 0.2.2
- Enable SQLx features only if SQLx optional dependency is enabled https://github.com/SeaQL/sea-query/pull/517
0.27.1 - 2022-10-18
- Fix consecutive spacing on schema statements https://github.com/SeaQL/sea-query/pull/481
- SQLite bind
rust_decimal&bigdecimalas f64 https://github.com/SeaQL/sea-query/pull/480
0.27.0 - 2022-10-16
New Features
- Support
CROSS JOINhttps://github.com/SeaQL/sea-query/pull/376 - We are going through series of changes to how database drivers work
(https://github.com/SeaQL/sea-query/pull/416, https://github.com/SeaQL/sea-query/pull/423):
sea-query-binderis now the recommended way (trait based) of working with SQLx, replacingsea-query-driver(macro based) https://github.com/SeaQL/sea-query/pull/434sea-query-binderis now a separate dependency, instead of integrated withsea-queryhttps://github.com/SeaQL/sea-query/pull/432rusqlitesupport is moved tosea-query-rusqlitehttps://github.com/SeaQL/sea-query/pull/422postgressupport is moved tosea-query-postgreshttps://github.com/SeaQL/sea-query/pull/433
- Added sub-query operators:
EXISTS,ALL,ANY,SOMEhttps://github.com/SeaQL/sea-query/pull/379 - Added support to
ON CONFLICT WHEREhttps://github.com/SeaQL/sea-query/pull/447 - Added support
DROP COLUMNfor SQLite https://github.com/SeaQL/sea-query/pull/455 - Added
YEAR,BITandVARBITtypes https://github.com/SeaQL/sea-query/pull/466 - Added support one dimension Postgres array for SQLx https://github.com/SeaQL/sea-query/pull/467
Enhancements
- Handle Postgres schema name for schema statements https://github.com/SeaQL/sea-query/pull/385
- Added
%,<<and>>binary operators https://github.com/SeaQL/sea-query/pull/419 - Added
RANDfunction https://github.com/SeaQL/sea-query/pull/430 - Implements
DisplayforValuehttps://github.com/SeaQL/sea-query/pull/425 - Added
INTERSECTandEXCEPTtoUnionTypehttps://github.com/SeaQL/sea-query/pull/438 - Added
OnConflict::valueandOnConflict::valueshttps://github.com/SeaQL/sea-query/issues/451 ColumnDef::defaultnow accepts bothValueandSimpleExprhttps://github.com/SeaQL/sea-query/pull/436OrderedStatement::order_by_customs,OrderedStatement::order_by_columns,OverStatement::partition_by_customs,OverStatement::partition_by_columnsnow acceptsIntoIterator<Item = T>instead ofVec<T>https://github.com/SeaQL/sea-query/pull/448Expr::case,CaseStatement::caseandCaseStatement::finallynow acceptsInto<SimpleExpr>instead ofInto<Expr>https://github.com/SeaQL/sea-query/pull/460UpdateStatement::valuenow acceptInto<SimpleExpr>instead ofInto<Value>https://github.com/SeaQL/sea-query/pull/460TableAlterStatement::rename_column,TableAlterStatement::drop_column,ColumnDef::new,ColumnDef::new_with_typenow acceptsIntoIdeninstead ofIdenhttps://github.com/SeaQL/sea-query/pull/472
Bug Fixes
distinct_onproperly handlesColumnRefhttps://github.com/SeaQL/sea-query/pull/450- Removed
ONforDROP INDEXfor SQLite https://github.com/SeaQL/sea-query/pull/462 - Change datetime string format to include microseconds https://github.com/SeaQL/sea-query/pull/468
ALTER TABLEfor PosgreSQL withUNIQUEconstraint https://github.com/SeaQL/sea-query/pull/472
Breaking changes
- Changed
in_tuplesinterface to acceptIntoValueTuplehttps://github.com/SeaQL/sea-query/pull/386 - Removed deprecated methods (
or_where,or_having,table_columnetc) https://github.com/SeaQL/sea-query/pull/380 - Changed
cond_wherechaining semantics https://github.com/SeaQL/sea-query/pull/417
// Before: will extend current Condition
assert_eq!(
Query::select()
.cond_where(any![Expr::col(Glyph::Id).eq(1), Expr::col(Glyph::Id).eq(2)])
.cond_where(Expr::col(Glyph::Id).eq(3))
.to_owned()
.to_string(PostgresQueryBuilder),
r#"SELECT WHERE "id" = 1 OR "id" = 2 OR "id" = 3"#
);
// Before: confusing, since it depends on the order of invocation:
assert_eq!(
Query::select()
.cond_where(Expr::col(Glyph::Id).eq(3))
.cond_where(any![Expr::col(Glyph::Id).eq(1), Expr::col(Glyph::Id).eq(2)])
.to_owned()
.to_string(PostgresQueryBuilder),
r#"SELECT WHERE "id" = 3 AND ("id" = 1 OR "id" = 2)"#
);
// Now: will always conjoin with `AND`
assert_eq!(
Query::select()
.cond_where(Expr::col(Glyph::Id).eq(1))
.cond_where(any![Expr::col(Glyph::Id).eq(2), Expr::col(Glyph::Id).eq(3)])
.to_owned()
.to_string(PostgresQueryBuilder),
r#"SELECT WHERE "id" = 1 AND ("id" = 2 OR "id" = 3)"#
);
// Now: so they are now equivalent
assert_eq!(
Query::select()
.cond_where(any![Expr::col(Glyph::Id).eq(2), Expr::col(Glyph::Id).eq(3)])
.cond_where(Expr::col(Glyph::Id).eq(1))
.to_owned()
.to_string(PostgresQueryBuilder),
r#"SELECT WHERE ("id" = 2 OR "id" = 3) AND "id" = 1"#
);
CURRENT_TIMESTAMPchanged from being a function to keyword https://github.com/SeaQL/sea-query/pull/441- Update SQLite
booleantype fromintegertobooleanhttps://github.com/SeaQL/sea-query/pull/400 - Changed type of
ColumnType::Enumfrom(String, Vec<String>)to: https://github.com/SeaQL/sea-query/pull/435
Enum {
name: DynIden,
variants: Vec<DynIden>,
}
- Deprecated
InsertStatement::exprs,InsertStatement::exprs_panic,OnConflict::update_value,OnConflict::update_values,OnConflict::update_expr,OnConflict::update_exprs,UpdateStatement::col_expr,UpdateStatement::value_expr,UpdateStatement::exprshttps://github.com/SeaQL/sea-query/pull/460 InsertStatement::values,UpdateStatement::valuesnow acceptsIntoIterator<Item = SimpleExpr>instead ofIntoIterator<Item = Value>https://github.com/SeaQL/sea-query/pull/460- Use native api from SQLx for SQLite to work with
timehttps://github.com/SeaQL/sea-query/pull/412
House keeping
- Cleanup
IndexBuildertrait methods https://github.com/SeaQL/sea-query/pull/426 - Introduce
SqlWritertrait https://github.com/SeaQL/sea-query/pull/436 - Remove unneeded
vec!from examples https://github.com/SeaQL/sea-query/pull/448
Upgrades
- Upgrade
sqlxdriver to 0.6.1
0.26.4 - 2022-10-13
New Features
- Added support
DROP COLUMNfor SQLite https://github.com/SeaQL/sea-query/pull/455
Bug Fixes
- Removed
ONforDROP INDEXfor SQLite https://github.com/SeaQL/sea-query/pull/462 - Changed datetime display format to include microseconds https://github.com/SeaQL/sea-query/pull/468
0.26.3 - 2022-08-18
Bug Fixes
DROP NOT NULLfor PostgresALTER COLUMNhttps://github.com/SeaQL/sea-query/pull/394
House keeping
- Exclude
chronodefault-features https://github.com/SeaQL/sea-query/pull/410 - Fix clippy warnings https://github.com/SeaQL/sea-query/pull/415
0.26.2 - 2022-07-21
Bug Fixes
- Rename
postgres-*features towith-*onpostgresdriver https://github.com/SeaQL/sea-query/pull/377
0.26.0 - 2022-07-02
New Features
- Add support for
VALUESlists https://github.com/SeaQL/sea-query/pull/351 - Introduce
sea-query-binderhttps://github.com/SeaQL/sea-query/pull/275 - Convert from
IpNetworkandMacAddresstoValuehttps://github.com/SeaQL/sea-query/pull/364
Enhancements
- Move
escapeandunescapestring to backend https://github.com/SeaQL/sea-query/pull/306 LIKE ESCAPEsupport https://github.com/SeaQL/sea-query/pull/352 #353)clear_order_byforOrderedStatement- Add method to make a column nullable https://github.com/SeaQL/sea-query/pull/365
- Add
is&is_notto Expr https://github.com/SeaQL/sea-query/pull/348 - Add
CURRENT_TIMESTAMPfunction https://github.com/SeaQL/sea-query/pull/349 - Add
in_tuplesmethod to Expr https://github.com/SeaQL/sea-query/pull/345
Upgrades
- Upgrade
uuidto 1.0 - Upgrade
timeto 0.3 - Upgrade
ipnetworkto 0.19 - Upgrade
bigdecimalto 0.3 - Upgrade
sqlxdriver to 0.6
Breaking changes
- As part of #306, the standalone functions
escape_stringandunescape_stringare removed, and becomes backend specific. So now, you have to:
use sea_query::EscapeBuilder;
let string: String = MySqlQueryBuilder.escape_string(r#" "abc" "#);
let string: String = MysqlQueryBuilder.unescape_string(r#" \"abc\" "#);
-
Replace
Value::Ipv4NetworkandValue::Ipv6NetworktoValue::IpNetworkhttps://github.com/SeaQL/sea-query/pull/364 -
Remove some redundant feature flags
postgres-chrono,postgres-json,postgres-uuid,postgres-time. Use thewith-*equivalence
Full Changelog: https://github.com/SeaQL/sea-query/compare/0.25.0...0.26.0
0.25.2 - 2022-07-01
New features
- Introduce
sea-query-binderhttps://github.com/SeaQL/sea-query/pull/275
Enhancements
- Add method to make a column nullable https://github.com/SeaQL/sea-query/pull/365
- Add
is&is_notto Expr https://github.com/SeaQL/sea-query/pull/348 - Add
CURRENT_TIMESTAMPfunction https://github.com/SeaQL/sea-query/pull/349
0.25.1 - 2022-06-26
Enhancements
clear_order_byforOrderedStatement
0.25.0 - 2022-05-28
New Features
- CASE WHEN statement support https://github.com/SeaQL/sea-query/pull/304
- Add support for Ip(4,6)Network and MacAddress https://github.com/SeaQL/sea-query/pull/309
- [sea-query-attr] macro for deriving
Idenenum from struct https://github.com/SeaQL/sea-query/pull/300 - Add ability to alter foreign keys https://github.com/SeaQL/sea-query/pull/299
- Select
DISTINCT ONhttps://github.com/SeaQL/sea-query/pull/313
Enhancements
- Insert Default https://github.com/SeaQL/sea-query/pull/266
- Make
sea-query-driveran optional dependency https://github.com/SeaQL/sea-query/pull/324 - Add
ABSfunction https://github.com/SeaQL/sea-query/pull/334 - Support
IF NOT EXISTSwhen create index https://github.com/SeaQL/sea-query/pull/332 - Support different
blobtypes in MySQL https://github.com/SeaQL/sea-query/pull/314 - Add
VarBinarycolumn type https://github.com/SeaQL/sea-query/pull/331 - Returning expression supporting
SimpleExprhttps://github.com/SeaQL/sea-query/pull/335
Bug fixes
- Fix arguments when nesting custom expressions https://github.com/SeaQL/sea-query/pull/333
- Fix clippy warnings for manual map https://github.com/SeaQL/sea-query/pull/337
Breaking Changes
- Introducing a dedicated
ReturningClauseinstead of reusingSelectonreturning: https://github.com/SeaQL/sea-query/pull/317
.returning(Query::select().column(Glyph::Id).take()) // before
.returning(Query::returning().columns([Glyph::Id])) // now
- In #333, the custom expression API changed for Postgres, users should change their placeholder from
?to Postgres's$N
let query = Query::select()
.columns([Char::Character, Char::SizeW, Char::SizeH])
.from(Char::Table)
.and_where(Expr::col(Char::Id).eq(1))
.and_where(Expr::cust_with_values("6 = $2 * $1", vec![3, 2]).into())
.to_owned();
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE "id" = 1 AND 6 = 2 * 3"#
);
As a side effect, ?? is no longer needed for escaping ?
let query = Query::select()
.expr(Expr::cust_with_values(
"data @? ($1::JSONPATH)",
vec!["hello"],
))
.to_owned();
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT data @? ('hello'::JSONPATH)"#
);
- In #314,
ColumnType'sBinary(Option<u32>)changed toBinary(BlobSize), so if you usedBinary(None)before, you should change toBinary(BlobSize::Blob(None))
Full Changelog: https://github.com/SeaQL/sea-query/compare/0.24.0...0.25.0
0.24.6 - 2022-05-12
- Make
sea-query-driveran optional dependency https://github.com/SeaQL/sea-query/pull/324
0.24.5 - 2022-05-09
- Insert
or_default_valueshttps://github.com/SeaQL/sea-query/pull/266
0.24.4 - 2022-04-26
- update sea-query-driver
0.24.3 - 2022-04-26
Bug fixes
- Fix MySQL index create statement https://github.com/SeaQL/sea-query/pull/308
Enhancements
- Add length check on condition array https://github.com/SeaQL/sea-query/pull/307
0.24.2 - 2022-04-18
Bug fixes
- Fixed https://github.com/SeaQL/sea-query/issues/303 driver breakage in 0.24.0
Notes: 0.24.0 & 0.24.1 were yanked
0.24.1 - 2022-04-15
Enhancements
- #295 Add parameter for SQLx path to proc-macro https://github.com/SeaQL/sea-query/pull/297
Bug fixes
- CTE optional columns https://github.com/SeaQL/sea-query/pull/301
0.24.0 - 2022-04-05
New Features
- Add
LOWERandUPPERfunc https://github.com/SeaQL/sea-query/pull/276 - Insert
ON CONFLICTsupport https://github.com/SeaQL/sea-query/pull/279 - #174 Add support for
WINDOWSstatement https://github.com/SeaQL/sea-query/pull/271 - #142 full support lock in select https://github.com/SeaQL/sea-query/pull/289
- #269 add support for postgres
ANY,SOME,ALLhttps://github.com/SeaQL/sea-query/pull/283
Enhancements
- Add support for multiple
ALTERoperations https://github.com/SeaQL/sea-query/pull/277 - #229 add column if not exists https://github.com/SeaQL/sea-query/pull/278
- #255 Add support to CommonTableExpression columns method https://github.com/SeaQL/sea-query/pull/284
- #280 Rewrite drivers using proc-macro https://github.com/SeaQL/sea-query/pull/292
Bug fixes
- #285 Fix timestamp_with_time_zone_len https://github.com/SeaQL/sea-query/pull/286
Breaking changes
- The enum variants for
LockTypewere renamed:Exclusive->UpdateandShared->Share - As part of #283, the drivers are split to the
sea-query-drivercrate- Remove methods
Value::is_jsonandValue::as_ref_jsonwhen feature: with-json is disabled - Remove methods
Value::is_time_*andValue::as_ref_time_*when feature: with-time is disabled - Remove methods
Value::is_chrono_*andValue::as_ref_chrono*when feature: with-chrono is disabled - Remove methods
Value::is_decimal,Value::as_ref_decimalandValue::decimal_to_f64when feature: with-rust_decimal is disabled - Remove methods
Value::is_big_decimal,Value::as_ref_big_decimalandValue::big_decimal_to_f64when feature: with-bigdecimal is disabled - Remove methods
Value::is_uuidandValue::as_ref_uuidwhen feature: with-uuid is disabled - Remove methods
Value::is_arrayandValue::as_ref_arraywhen feature: postgres-array is disabled
- Remove methods
Full Changelog: https://github.com/SeaQL/sea-query/compare/0.23.0...0.24.0
0.23.0 - 2022-03-15
New Features
- Supports
timein addition tochronohttps://github.com/SeaQL/sea-query/pull/267
Enhancements
- Allow for trailing commas in any and all macros https://github.com/SeaQL/sea-query/pull/270
Bug fixes
- Fix UNIQUE table index expression syntax for sqlite https://github.com/SeaQL/sea-query/pull/227
Breaking changes
In order to co-exist with the time crate, Date, Time, DateTime etc are renamed to ChronoDate, ChronoTime, ChronoDateTime. In addition, new variants TimeDate, TimeTime, TimeDateTime and so on are introduced to Value.
0.22.0 - 2022-02-26
New Features
- Support multiple tables in the select from by @Sytten in https://github.com/SeaQL/sea-query/pull/261
- Add support for replace insert by @Sytten in https://github.com/SeaQL/sea-query/pull/262
- Add
ColumnTypeunsigned integer types by @billy1624 in https://github.com/SeaQL/sea-query/pull/211
Full Changelog: https://github.com/SeaQL/sea-query/compare/0.21.0...0.22.0
0.21.0 - 2022-02-01
Breaking Changes
- Use double quotes for quoting identifiers for SQLite by @SpyrosRoum in https://github.com/SeaQL/sea-query/pull/221
New Features
- Implement
RETURNINGfor SQLite by @SpyrosRoum in https://github.com/SeaQL/sea-query/pull/194 - Support 'NULLS LAST' and 'NULLS FIRST' by @qyihua in https://github.com/SeaQL/sea-query/pull/210
- [join-lateral] by @rex-remind101 in https://github.com/SeaQL/sea-query/pull/224
- Insert from select by @05storm26 in https://github.com/SeaQL/sea-query/pull/238
- Add Expr::asterisk() and Expr::tbl_asterisk(table: DynIden) methods - Fix #217 by @RomainMazB in https://github.com/SeaQL/sea-query/pull/219
Enhancements
- Implement ToTokens for IntervalField by @autarch in https://github.com/SeaQL/sea-query/pull/195
- Implemented 'Array' type for Postgres. by @kev0960 in https://github.com/SeaQL/sea-query/pull/205
- Add
Value::DateTimeLocalby @billy1624 in https://github.com/SeaQL/sea-query/pull/249 - Add
ColumnRef::SchemaTableColumnby @billy1624 in https://github.com/SeaQL/sea-query/pull/206 - Datetime utc by @tyt2y3 in https://github.com/SeaQL/sea-query/pull/241
- Support the use of chrono::DateTime using the type alias DateTim… by @charleschege in https://github.com/SeaQL/sea-query/pull/222
Bug Fixes
- Fix Postgres
ColumnType::TinyIntegermapping by @billy1624 in https://github.com/SeaQL/sea-query/pull/207 - PR without clippy warmings in file changed tab by @billy1624 in https://github.com/SeaQL/sea-query/pull/212
Full Changelog: https://github.com/SeaQL/sea-query/compare/0.20.0...0.21.0
0.20.0 - 2021-12-11
Merged PRs
- Add
TableRef::DatabaseSchemaTableby @billy1624 in https://github.com/SeaQL/sea-query/pull/193
Full Changelog: https://github.com/SeaQL/sea-query/compare/0.19.4...0.20.0
0.19.4 - 2021-12-11
Merged PRs
- Binding
DateTime<FixedOffset>for SQLx MySQL & SQLite by @billy1624 in https://github.com/SeaQL/sea-query/pull/197
Full Changelog: https://github.com/SeaQL/sea-query/compare/0.19.2...0.19.4
0.19.2 - 2021-12-04
Merged PRs
- Impl
ValueTupleUp to Six by @billy1624 in https://github.com/SeaQL/sea-query/pull/200 - Basic Benchmark by @tyt2y3 in https://github.com/SeaQL/sea-query/pull/192
Full Changelog: https://github.com/SeaQL/sea-query/compare/0.19.1...0.19.2
0.19.1 - 2021-11-25
Merged PRs
driver/postgreshandle non-exhaustiveValueby @billy1624 in https://github.com/SeaQL/sea-query/pull/191
Full Changelog: https://github.com/SeaQL/sea-query/compare/0.19.0...0.19.1
0.19.0 - 2021-11-19
Merged PRs
TableCreateStatementandTableDropStatementtakes anyIntoTableReftable name. by @josh-codes in https://github.com/SeaQL/sea-query/pull/186- Add
ColumnType::Enumby @billy1624 in https://github.com/SeaQL/sea-query/pull/188 - Update to Rust Edition 2021 by @billy1624 in https://github.com/SeaQL/sea-query/pull/189
Full Changelog: https://github.com/SeaQL/sea-query/compare/0.18.2...0.19.0
0.18.2 - 2021-11-04
Merged PRs
- Rename "where" keywords in
SelectStatementto suppress IDEA warnings by @baoyachi in https://github.com/SeaQL/sea-query/pull/166 - Add binary method to expr by @Progdrasil in https://github.com/SeaQL/sea-query/pull/173
- Cast expression as custom type by @billy1624 in https://github.com/SeaQL/sea-query/pull/170
- Support tuple expression by @shuoli84 in https://github.com/SeaQL/sea-query/pull/178
Full Changelog: https://github.com/SeaQL/sea-query/compare/0.18.1...0.18.2
0.18.1 - 2021-10-26
- [#169] Add support for Postgres interval type
- [#171] Fix bug in
Condition::addwhere Condition negation is ignored
0.18.0 - 2021-10-15
0.17.3 - 2021-10-26
- [#171] Fix bug in
Condition::addwhere Condition negation is ignored
0.17.2 - 2021-10-15
- [#164] Revert "Fix SQLite
chrono::NaiveTimebinding"
0.17.1 - 2021-10-12 (yanked)
0.17.0 - 2021-10-06
- [#157] Fix binding nullable custom types on db drivers
The as_ref_* methods on Value are changed:
pub fn as_ref_json(&self) -> &Json;
Is now
pub fn as_ref_json(&self) -> Option<&Json>;
0.16.6 - 2021-10-26
- [#171] Fix bug in
Condition::addwhere Condition negation is ignored
0.16.5 - 2021-09-30
0.16.4 - 2021-09-26
- Fix table drop options for SQLite
- Add
IndexCreateStatement::is_unique_key()
0.16.3 - 2021-09-17
- [#131]
CAST ASexpression - [#131]
InsertStatementacceptsSimpleExpr - [#137] SQLx Postgres driver bind
DateTime<FixedOffset>
0.16.2 - 2021-09-15
0.16.1 - 2021-09-10
- [#129] MySql
ColumnType::Binary(None)maps to "blob"
0.16.0 - 2021-09-02
-
[#112] Introduce
Nullabletrait to permit customOption<T> -
[#113]
ValueTypetrait should have a non-panic-ing method -
[#114]
ValueTyperevamp- Remove
ValueTypeDefault - Change
type_nameto returnString
- Remove
-
[#115] Postgres concatenate operator (
||) -
[#117] Lock support (
FOR SHARE,FOR UPDATE) for SELECT statement
0.15.0 - 2021-08-21
- [#107] Revamp
Valueto typed null value - Added
BigDecimalsupport
The Value::Null variant is removed. You have to use a specific variant with a None.
Before:
Query::insert()
.values_panic(vec![
Value::Null,
2.1345.into(),
])
After:
Query::insert()
.values_panic(vec![
Value::String(None),
2.1345.into(),
])
Since we cannot handle the generic Null value on JSON, we removed the json method on InsertStatement and UpdateStatement. The following NO LONGER WORKS:
let query = Query::insert()
.into_table(Glyph::Table)
.json(json!({
"aspect": 2.1345,
"image": "24B",
}));
let query = Query::update()
.table(Glyph::Table)
.json(json!({
"aspect": 2.1345,
"image": "235m",
}));
In addition, if you constructed Value manually before (instead of using into() which is unaffected), you have to wrap them in an Option:
Before:
let (sql, values) = query.build(PostgresQueryBuilder);
assert_eq!(
values,
Values(vec![Value::String(Box::new("A".to_owned())), Value::Int(1), Value::Int(2), Value::Int(3)]))
);
After:
let (sql, values) = query.build(PostgresQueryBuilder);
assert_eq!(
values,
Values(vec![Value::String(Some(Box::new("A".to_owned()))), Value::Int(Some(1)), Value::Int(Some(2)), Value::Int(Some(3))]))
);
0.14.1 - 2021-08-15
- [#87] Fix inconsistent Ownership of self in Builder APIs
- [#105] Use Arc for SeaRc with feature flag thread-safe
0.12.12 - 2021-08-14
- [#98] Support Postgres full text search
0.12.11 - 2021-08-13
- Support SeaORM
0.12.10 - 2021-08-11
- [#89] flattening iden enums in derive macro
0.12.9 - 2021-08-08
- [#77] Postgres
binarytype - [#81] example for CockroachDB
- [#84] Fix Postgres constraint keywords
- [#75]
DateTimeWithTimeZonevalue type andTimestampWithTimeZonecolumn type
0.12.8 - 2021-07-24
- Fix Postgres
datetimecolumn type mapping Uuidin schema builder
0.12.7 - 2021-07-13
cust_with_valuesallow escape?using??
0.12.6 - 2021-07-07
- Fixed build error for
sqlx-sqlite
0.12.5 - 2021-07-07
- Support
Decimalfrom rust_decimal
0.12.4 - 2021-06-23
- Added
returningfor update statement
0.12.3 - 2021-06-19
- Added
type_namefor ValueType ValuesderiveClone- Added
Update::col_expr - Type def Rc as
SeaRc - getters for schema statements
0.12.2 - 2021-06-04
- Fixed
and_where_option - Added
Condition::add_option
0.12.1 - 2021-06-03
- Added
not_in_subquery
0.12.0 - 2021-05-31
- Unify
cond_whereandand_where. Note: will panic if callingor_whereafterand_where.
0.11.1 - 2021-05-22
- Updated Readme
0.11.0 - 2021-05-19
- Added APIs to support ORM
- Backend and internal refactoring
- Introduced
QueryStatementBuilderandSchemaStatementBuildertraits - Introduced
ConditionalStatementandOrderedStatementtraits - Introduced any/all style conditions for
cond_whereandcond_having
0.10.6 - 2021-05-04
- Postgres
ALTER TYPEstatements forENUM
0.10.5 - 2021-05-02
- Updated documentation
0.10.4 - 2021-05-02
returning()expression for Postgres insert statements- Remove redundant index name in foreign key expression of MySQL
0.10.3 - 2021-04-30
- custom
Errortype - Empty value list for IN
- Index prefix and
IndexOrder
0.10.2 - 2021-04-27
- Foreign key API
fromandto - Fix foreign key bug in
ON UPDATE
0.10.1 - 2021-04-25
- Added
index_type()(FullTextandHash) - Added
unique()toIndex - Support composite primary key
0.10.0 - 2021-04-23
- Use
IntoIteratortrait instead ofVecon most APIs - UUID support in
Value - Rusqlite support
0.9.6 - 2021-04-18
- Rename
create_if_not_existstoif_not_exists - Remove
partition_optionfromTableAlterStatement - Added
ColumnDef::extra()
0.9.5 - 2021-04-17
- Added
SchemaStatement
0.9.4 - 2021-04-13
- Fixed
DateTimequoting bugs
0.9.3 - 2021-04-08
- Update sea-query-derive to 0.1.2
0.9.2 - 2021-04-05
- derive supporting enum tuple variant and custom method
0.9.1 - 2021-03-30
- updated docs
0.9.0 - 2021-03-29
- Introduced
IntoColumnReftrait to consolidatecolumnandtable.column - Introduced
IntoTableReftrait to consolidatetableandschema.table - Introduced
IntoIdentrait to remove*_dynmethods
0.8.5 - 2021-03-29
- added
into_simple_expr()
0.8.4 - 2021-03-24
- Fixing
IS NULL
0.8.3 - 2021-03-23
- derive
Debugon most structs
0.8.2 - 2021-03-23
- Added
unescape_string
0.8.1 - 2021-03-23
- Improve documentation
0.8.0 - 2021-03-14
jsonsupport behind features- backend as features (
backend-mysql,backend-postgres,backend-sqlite) - added
from_schema(),from_schema_as()
0.7.0 - 2021-03-06
- Revamp
Value build()API changepostgresdriver supportjsonandchronosupport
0.6.1 - 2021-03-05
- Added
join_as - Deprecated
expr_alias,from_alias
0.6.0 - 2021-02-20
- Custom expression with parameters
Expr::cust_with_values() - Custom function call
Func::cust() - Postgres enum
Type::create().as_enum()
0.5.0 - 2021-02-09
- derive macro
#[derive(Iden)]
0.4.0 - 2021-02-02
- Added JSON binary column type
ColumnDef::json_binary() - Custom column type
ColumnDef::custom()
0.3.0 - 2020-12-29
0.2.0 - 2020-12-26
0.1.0 - 2020-12-16
Publish to crate.io