Skip to content

0.27.0

Compare
Choose a tag to compare
@tyt2y3 tyt2y3 released this 16 Oct 14:09

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

Contributors

Full Changelog: 0.26.0...0.27.0