Skip to content

Latest commit

 

History

History
1116 lines (752 loc) · 41.4 KB

CHANGELOG.md

File metadata and controls

1116 lines (752 loc) · 41.4 KB

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.

0.30.1 - 2023-08-25

Versions

New Features

  • Added Func::round and Func::round_with_precision #671

Enhancements

  • Added some getters to FunctionCall #677

Bug Fixes

  • Fixed bytea literal syntax for Postgres #666
  • Fix issues with semantics of parenthesis removal #675

0.30.0 - 2023-07-20

This is a small (but major) upgrade, the only changes are:

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

New Features

  • Added ValueTuple::Many for tuple with length up to 12 #564
  • Added CREATE TABLE CHECK constraints #567
  • Added support generated column spec #581
  • Added BIT_AND, BIT_OR functions #582
  • Added implementation SqlxBinder, RusqliteBinder and PostgresBinder for WithQuery #580
  • Added new type Asteriks #596
  • Added IF NOT EXISTS for DROP INDEX in Postgres and Sqlite #610
  • Added -> and ->> operators for Postgres #617
  • Added TableCreateStatement::set_extra and TableCreateStatement::get_extra #611
  • Added TableCreateStatement::comment and ColumnDef::comment for MySQL comments #622
  • Added PgExpr::get_json_field and PgExpr::cast_json_field methods for constructing Postgres JSON expressions #630
  • Added PgBinOper::Regex and PgBinOper::RegexCaseInsensitive for Postgres Regex operators
  • Added BinOper::Custom for defining custom binary operators
  • Added GLOB operator for Sqlite #651
  • Added CREATE or DROP EXTENSION statements for Postgres #616
  • Added a feature flag hashable-value, which will impl Hash for Value; when enabled, Value::Float(NaN) == Value::Float(NaN) would be true #598
  • Added PgBinOper::Overlap for Postgres operators #653

Enhancements

  • Implemented PartialEq for DynIden, SimpleExpr and related types #620

Breaking changes

  • Removed variants Four, Five, Six from enum ValueTuple as part of #564
  • Removed Expr::tbl, Expr::greater_than, Expr::greater_or_equal, Expr::less_than, Expr::less_or_equal, Expr::into_simple_expr #551
  • Removed SimpleExpr::equals and SimpleExpr::not_equals #551
  • Removed InsertStatement::exprs, InsertStatement::exprs_panic #551
  • Removed OnConflict::update_value, OnConflict::update_values, OnConflict::update_expr, OnConflict::update_exprs #551
  • Removed UpdateStatement::exprs, UpdateStatement::col_expr, UpdateStatement::value_expr #551
  • BigInteger now maps to bigint instead of integer on SQLite #556
  • Table::truncate now panic for Sqlite #590
  • Deprecated Expr::asteriks and Expr::table_asteriks #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::str now accept T: Into<String> #594
  • OnConflict::values and OnConflict::update_columns will append the new values keeping the old values intact instead of erasing them #609
  • As part of #620, SeaRc now becomes a wrapper type. If you used SeaRc for something other than dyn Iden, you now have to use RcOrArc. 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 Quote and changed the Iden trait:
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 #552
  • Changed all version = "^x.y.z" into version = "x.y.z" in all Cargo.toml #547
  • Disabled default features and enable only the needed ones #547
  • tests_cfg module is available only if you enabled tests-cfg feature #584
  • Removed hard coded quotes #613
  • Enabled required syn v1 features #624
  • Fix macro hygiene (any! / all!) #639 #640

Bug fixes

  • ALTER TABLE now panic if has multiple column for Sqlite #595
  • Fixed alter primary key column statements for Postgres #646

0.28.5 - 2023-05-11

  • Added implementation SqlxBinder, RusqliteBinder and PostgresBinder for WithQuery #580
    • sea-query-binder 0.3.1
    • sea-query-postgres 0.2.1
    • sea-query-rusqlite 0.2.1

0.28.4 - 2023-04-11

Bug fixes

  • Fix quoted string bug while inserting array of strings to Postgres #576
  • Added comma if multiple names are passed to TypeDropStatement #623

0.28.3 - 2023-01-18

Enhancements

  • Added getter for the UpdateStatement::values field #578
  • Implements PartialEq for ColumnType #579
  • Added helper function to construct ColumnType::Custom #579

0.28.2 - 2023-01-04

Enhancements

  • Added Cow<str> conversion to Value #550
  • Added convert various UUID defined in uuid::fmt module into sea_query::Value::Uuid #563

0.28.1 - 2022-12-29

Bug fixes

  • Fixes Postgres GEN_RANDOM_UUID #568

0.28.0 - 2022-12-09

New Features

  • New struct FunctionCall which hold function and arguments #475
  • New trait IdenStatic with method fn as_str(&self) -> &'static str #508
  • New traits PgExpr and SqliteExpr for custom expressions #519
  • Support BigDecimal, IpNetwork and MacAddress for sea-query-postgres #503

API Additions

  • Added SelectStatement::from_function #475
  • Added binary operators from the Postgres pg_trgm extension #486
  • Added ILIKE and NOT ILIKE operators #473
  • Added the mul and div methods for SimpleExpr #510
  • Added the MATCH, -> and ->> operators for SQLite #513
  • Added the FULL OUTER JOIN #497
  • Added PgFunc::get_random_uuid #530
  • Added SimpleExpr::eq, SimpleExpr::ne, Expr::not_equals #528
  • Added PgFunc::starts_with #529
  • Added Expr::custom_keyword and SimpleExpr::not #535
  • Added SimpleExpr::like, SimpleExpr::not_like and Expr::cast_as #539
  • Added support for NULLS NOT DISTINCT clause for Postgres #532
  • Added Expr::cust_with_expr and Expr::cust_with_exprs #531
  • Added support for converting &String to Value #537

Enhancements

  • Made value::with_array module public and therefore making NotU8 trait public #511
  • Drop the Sized requirement on implementers of SchemaBuilders #524

Bug fixes

  • Wrap unions into parenthesis #498
  • Syntax error on empty condition #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 #535
  • ColumnType::Array definition changed from Array(SeaRc<Box<ColumnType>>) to Array(SeaRc<ColumnType>) #492
  • Func::* now returns FunctionCall instead of SimpleExpr #475
  • Func::coalesce now accepts IntoIterator<Item = SimpleExpr> instead of IntoIterator<Item = Into<SimpleExpr> #475
  • Removed Expr::arg and Expr::args - these functions are no longer needed #475
  • Moved all Postgres specific operators to PgBinOper #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_null now accepts Into<SimpleExpr> instead of Into<Value> #476
  • Expr::is_in, Expr::is_not_in now accepts Into<SimpleExpr> instead of Into<Value> and convert it to SimpleExpr::Tuple instead of SimpleExpr::Values #476
  • Expr::expr now accepts Into<SimpleExpr> instead of SimpleExpr #475
  • Moved Expr::ilike, Expr::not_ilike, Expr::matches, Expr::contains, Expr::contained, Expr::concatenate, Expr::concat, SimpleExpr::concatenate and SimpleExpr::concat to new trait PgExpr #519
  • Expr::equals now accepts C: IntoColumnRef instead of T: IntoIden, C: IntoIden #528
  • Removed integer and date time column types' display length / precision option #525

Deprecations

  • Deprecated Expr::greater_than, Expr::greater_or_equal, Expr::less_than and Expr::less_or_equal #476
  • Deprecated SimpleExpr::equals, SimpleExpr::not_equals #528
  • Deprecated Expr::tbl, please use Expr::col with a tuple #540

House keeping

  • Replace impl Default with #[derive(Default)] #535
  • Exclude sqlx default features #543
  • Use dtolnay/rust-toolchain instead of actions-rs/toolchain in CI #544

0.27.2 - 2022-11-14

  • Made value::with_array module public and therefore making NotU8 trait public #511

sea-query-binder 0.2.2

  • Enable SQLx features only if SQLx optional dependency is enabled #517

0.27.1 - 2022-10-18

  • Fix consecutive spacing on schema statements #481
  • SQLite bind rust_decimal & bigdecimal as f64 #480

0.27.0 - 2022-10-16

New Features

  • Support CROSS JOIN #376
  • We are going through series of changes to how database drivers work (#416, #423):
    1. sea-query-binder is now the recommended way (trait based) of working with SQLx, replacing sea-query-driver (macro based) #434
    2. sea-query-binder is now a separate dependency, instead of integrated with sea-query #432
    3. rusqlite support is moved to sea-query-rusqlite #422
    4. postgres support is moved to sea-query-postgres #433
  • Added sub-query operators: EXISTS, ALL, ANY, SOME #379
  • Added support to ON CONFLICT WHERE #447
  • Added support DROP COLUMN for SQLite #455
  • Added YEAR, BIT and VARBIT types #466
  • Added support one dimension Postgres array for SQLx #467

Enhancements

  • Handle Postgres schema name for schema statements #385
  • Added %, << and >> binary operators #419
  • Added RAND function #430
  • Implements Display for Value #425
  • Added INTERSECT and EXCEPT to UnionType #438
  • Added OnConflict::value and OnConflict::values #451
  • ColumnDef::default now accepts both Value and SimpleExpr #436
  • OrderedStatement::order_by_customs, OrderedStatement::order_by_columns, OverStatement::partition_by_customs, OverStatement::partition_by_columns now accepts IntoIterator<Item = T> instead of Vec<T> #448
  • Expr::case, CaseStatement::case and CaseStatement::finally now accepts Into<SimpleExpr> instead of Into<Expr> #460
  • UpdateStatement::value now accept Into<SimpleExpr> instead of Into<Value> #460
  • TableAlterStatement::rename_column, TableAlterStatement::drop_column, ColumnDef::new, ColumnDef::new_with_type now accepts IntoIden instead of Iden #472

Bug Fixes

  • distinct_on properly handles ColumnRef #450
  • Removed ON for DROP INDEX for SQLite #462
  • Change datetime string format to include microseconds #468
  • ALTER TABLE for PosgreSQL with UNIQUE constraint #472

Breaking changes

  • Changed in_tuples interface to accept IntoValueTuple #386
  • Removed deprecated methods (or_where, or_having, table_column etc) #380
  • Changed cond_where chaining semantics #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_TIMESTAMP changed from being a function to keyword #441
  • Update SQLite boolean type from integer to boolean #400
  • Changed type of ColumnType::Enum from (String, Vec<String>) to: #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::exprs #460
  • InsertStatement::values, UpdateStatement::values now accepts IntoIterator<Item = SimpleExpr> instead of IntoIterator<Item = Value> #460
  • Use native api from SQLx for SQLite to work with time #412

House keeping

  • Cleanup IndexBuilder trait methods #426
  • Introduce SqlWriter trait #436
  • Remove unneeded vec! from examples #448

Upgrades

  • Upgrade sqlx driver to 0.6.1

0.26.4 - 2022-10-13

New Features

  • Added support DROP COLUMN for SQLite #455

Bug Fixes

  • Removed ON for DROP INDEX for SQLite #462
  • Changed datetime display format to include microseconds #468

0.26.3 - 2022-08-18

Bug Fixes

  • DROP NOT NULL for Postgres ALTER COLUMN #394

House keeping

  • Exclude chrono default-features #410
  • Fix clippy warnings #415

0.26.2 - 2022-07-21

Bug Fixes

  • Rename postgres-* features to with-* on postgres driver #377

0.26.0 - 2022-07-02

New Features

  • Add support for VALUES lists #351
  • Introduce sea-query-binder #275
  • Convert from IpNetwork and MacAddress to Value #364

Enhancements

  • Move escape and unescape string to backend #306
  • LIKE ESCAPE support #352 #353)
  • clear_order_by for OrderedStatement
  • Add method to make a column nullable #365
  • Add is & is_not to Expr #348
  • Add CURRENT_TIMESTAMP function #349
  • Add in_tuples method to Expr #345

Upgrades

  • Upgrade uuid to 1.0
  • Upgrade time to 0.3
  • Upgrade ipnetwork to 0.19
  • Upgrade bigdecimal to 0.3
  • Upgrade sqlx driver to 0.6

Breaking changes

  • As part of #306, the standalone functions escape_string and unescape_string are 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::Ipv4Network and Value::Ipv6Network to Value::IpNetwork #364

  • Remove some redundant feature flags postgres-chrono, postgres-json, postgres-uuid, postgres-time. Use the with-* 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-binder #275

Enhancements

  • Add method to make a column nullable #365
  • Add is & is_not to Expr #348
  • Add CURRENT_TIMESTAMP function #349

0.25.1 - 2022-06-26

Enhancements

  • clear_order_by for OrderedStatement

0.25.0 - 2022-05-28

New Features

  • CASE WHEN statement support #304
  • Add support for Ip(4,6)Network and MacAddress #309
  • [sea-query-attr] macro for deriving Iden enum from struct #300
  • Add ability to alter foreign keys #299
  • Select DISTINCT ON #313

Enhancements

  • Insert Default #266
  • Make sea-query-driver an optional dependency #324
  • Add ABS function #334
  • Support IF NOT EXISTS when create index #332
  • Support different blob types in MySQL #314
  • Add VarBinary column type #331
  • Returning expression supporting SimpleExpr #335

Bug fixes

  • Fix arguments when nesting custom expressions #333
  • Fix clippy warnings for manual map #337

Breaking Changes

  • Introducing a dedicated ReturningClause instead of reusing Select on returning: #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's Binary(Option<u32>) changed to Binary(BlobSize), so if you used Binary(None) before, you should change to Binary(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-driver an optional dependency #324

0.24.5 - 2022-05-09

  • Insert or_default_values #266

0.24.4 - 2022-04-26

  • update sea-query-driver

0.24.3 - 2022-04-26

Bug fixes

  • Fix MySQL index create statement #308

Enhancements

  • Add length check on condition array #307

0.24.2 - 2022-04-18

Bug fixes

  • Fixed #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 #297

Bug fixes

  • CTE optional columns #301

0.24.0 - 2022-04-05

New Features

  • Add LOWER and UPPER func #276
  • Insert ON CONFLICT support #279
  • #174 Add support for WINDOWS statement #271
  • #142 full support lock in select #289
  • #269 add support for postgres ANY, SOME, ALL #283

Enhancements

  • Add support for multiple ALTER operations #277
  • #229 add column if not exists #278
  • #255 Add support to CommonTableExpression columns method #284
  • #280 Rewrite drivers using proc-macro #292

Bug fixes

  • #285 Fix timestamp_with_time_zone_len #286

Breaking changes

  • The enum variants for LockType were renamed: Exclusive -> Update and Shared -> Share
  • As part of #283, the drivers are split to the sea-query-driver crate
    1. Remove methods Value::is_json and Value::as_ref_json when feature: with-json is disabled
    2. Remove methods Value::is_time_* and Value::as_ref_time_* when feature: with-time is disabled
    3. Remove methods Value::is_chrono_* and Value::as_ref_chrono* when feature: with-chrono is disabled
    4. Remove methods Value::is_decimal, Value::as_ref_decimal and Value::decimal_to_f64 when feature: with-rust_decimal is disabled
    5. Remove methods Value::is_big_decimal, Value::as_ref_big_decimal and Value::big_decimal_to_f64 when feature: with-bigdecimal is disabled
    6. Remove methods Value::is_uuid and Value::as_ref_uuid when feature: with-uuid is disabled
    7. Remove methods Value::is_array and Value::as_ref_array when feature: postgres-array is disabled

Full Changelog: https://github.com/SeaQL/sea-query/compare/0.23.0...0.24.0

0.23.0 - 2022-03-15

New Features

  • Supports time in addition to chrono #267

Enhancements

  • Allow for trailing commas in any and all macros #270

Bug fixes

  • Fix UNIQUE table index expression syntax for sqlite #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 #261
  • Add support for replace insert by @Sytten in #262
  • Add ColumnType unsigned integer types by @billy1624 in #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 #221

New Features

  • Implement RETURNING for SQLite by @SpyrosRoum in #194
  • Support 'NULLS LAST' and 'NULLS FIRST' by @qyihua in #210
  • [join-lateral] by @rex-remind101 in #224
  • Insert from select by @05storm26 in #238
  • Add Expr::asterisk() and Expr::tbl_asterisk(table: DynIden) methods - Fix #217 by @RomainMazB in #219

Enhancements

  • Implement ToTokens for IntervalField by @autarch in #195
  • Implemented 'Array' type for Postgres. by @kev0960 in #205
  • Add Value::DateTimeLocal by @billy1624 in #249
  • Add ColumnRef::SchemaTableColumn by @billy1624 in #206
  • Datetime utc by @tyt2y3 in #241
  • Support the use of chrono::DateTime using the type alias DateTim… by @charleschege in #222

Bug Fixes

  • Fix Postgres ColumnType::TinyInteger mapping by @billy1624 in #207
  • PR without clippy warmings in file changed tab by @billy1624 in #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::DatabaseSchemaTable by @billy1624 in #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 #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 ValueTuple Up to Six by @billy1624 in #200
  • Basic Benchmark by @tyt2y3 in #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/postgres handle non-exhaustive Value by @billy1624 in #191

Full Changelog: https://github.com/SeaQL/sea-query/compare/0.19.0...0.19.1

0.19.0 - 2021-11-19

Merged PRs

  • TableCreateStatement and TableDropStatement takes any IntoTableRef table name. by @josh-codes in #186
  • Add ColumnType::Enum by @billy1624 in #188
  • Update to Rust Edition 2021 by @billy1624 in #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 SelectStatement to suppress IDEA warnings by @baoyachi in #166
  • Add binary method to expr by @Progdrasil in #173
  • Cast expression as custom type by @billy1624 in #170
  • Support tuple expression by @shuoli84 in #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::add where Condition negation is ignored

0.18.0 - 2021-10-15

  • [#159] Add ValueType::column_type
  • [#160] Add FromValueTuple trait

0.17.3 - 2021-10-26

  • [#171] Fix bug in Condition::add where Condition negation is ignored

0.17.2 - 2021-10-15

  • [#164] Revert "Fix SQLite chrono::NaiveTime binding"

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::add where Condition negation is ignored

0.16.5 - 2021-09-30

  • [#145] Add Condition::not
  • [#149] Fix SQLite chrono::NaiveTime binding

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 AS expression
  • [#131] InsertStatement accepts SimpleExpr
  • [#137] SQLx Postgres driver bind DateTime<FixedOffset>

0.16.2 - 2021-09-15

  • [#120] Support RETURNING for DeleteStatement
  • [#128] Support UNION clause for SelectStatement

0.16.1 - 2021-09-10

  • [#129] MySql ColumnType::Binary(None) maps to "blob"

0.16.0 - 2021-09-02

  • [#112] Introduce Nullable trait to permit custom Option<T>

  • [#113] ValueType trait should have a non-panic-ing method

  • [#114] ValueType revamp

    1. Remove ValueTypeDefault
    2. Change type_name to return String
  • [#115] Postgres concatenate operator (||)

  • [#117] Lock support (FOR SHARE, FOR UPDATE) for SELECT statement

0.15.0 - 2021-08-21

  • [#107] Revamp Value to typed null value
  • Added BigDecimal support

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 binary type
  • [#81] example for CockroachDB
  • [#84] Fix Postgres constraint keywords
  • [#75] DateTimeWithTimeZone value type and TimestampWithTimeZone column type

0.12.8 - 2021-07-24

  • Fix Postgres datetime column type mapping
  • Uuid in schema builder

0.12.7 - 2021-07-13

  • cust_with_values allow escape ? using ??

0.12.6 - 2021-07-07

  • Fixed build error for sqlx-sqlite

0.12.5 - 2021-07-07

  • Support Decimal from rust_decimal

0.12.4 - 2021-06-23

  • Added returning for update statement

0.12.3 - 2021-06-19

  • Added type_name for ValueType
  • Values derive Clone
  • 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_where and and_where. Note: will panic if calling or_where after and_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 QueryStatementBuilder and SchemaStatementBuilder traits
  • Introduced ConditionalStatement and OrderedStatement traits
  • Introduced any/all style conditions for cond_where and cond_having

0.10.6 - 2021-05-04

  • Postgres ALTER TYPE statements for ENUM

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 Error type
  • Empty value list for IN
  • Index prefix and IndexOrder

0.10.2 - 2021-04-27

  • Foreign key API from and to
  • Fix foreign key bug in ON UPDATE

0.10.1 - 2021-04-25

  • Added index_type() (FullText and Hash)
  • Added unique() to Index
  • Support composite primary key

0.10.0 - 2021-04-23

  • Use IntoIterator trait instead of Vec on most APIs
  • UUID support in Value
  • Rusqlite support

0.9.6 - 2021-04-18

  • Rename create_if_not_exists to if_not_exists
  • Remove partition_option from TableAlterStatement
  • Added ColumnDef::extra()

0.9.5 - 2021-04-17

  • Added SchemaStatement

0.9.4 - 2021-04-13

  • Fixed DateTime quoting 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 IntoColumnRef trait to consolidate column and table.column
  • Introduced IntoTableRef trait to consolidate table and schema.table
  • Introduced IntoIden trait to remove *_dyn methods

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 Debug on 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

  • json support 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 change
  • postgres driver support
  • json and chrono support

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