drift 2.17.0 copy "drift: ^2.17.0" to clipboard
drift: ^2.17.0 copied to clipboard

Drift is a reactive library to store relational data in Dart and Flutter applications.

2.17.0 #

  • Adds companion entry to DataClassName to override the name of the generated companion class.
  • Add the TypeConverter.extensionType factory to create type converters for extension types.
  • Fix invalid SQL syntax being generated for BLOB literals on postgres.

2.16.0 #

  • When a migration throws, the database will now block subsequent operations instead of potentially allowing them to operate on a database in an inconsistent state.
  • Statements built through the Dart query builder will now run in the context active while they are running, instead of the context active at the time they were created. For instance, creating an UpdateStatement with database.update outside of a transaction and then calling UpdateStatement.write inside of a transaction will now perform the update inside of the transaction, instead of causing a deadlock.
  • Improve stack traces for errors happening on drift isolates (which includes usages of NativeDatabase.createInBackground).
  • Don't cache EXPLAIN statements, avoiding schema locks.
  • Deprecate Value.ofNullable in favor of Value.absentIfNull, which is more explicit about its behavior and allows nullable types too.
  • Migrate WasmDatabase to dart:js_interop and package:web.

2.15.0 #

  • Methods in the query builder API now respect custom types.
  • Support DialectAwareSqlType, custom types that depend on the dialect of the active database connection. This can be used to use native types not supported by drift (like UUIDs) on databases that support it while falling back to a text type on sqlite3.
  • Close wasm databases hosted in workers after the last client disconnects.
  • Add enableMigrations parameter to NativeDatabase which can be used to optionally disable database migrations when opening databases.
  • Support jsonb functions in the Dart query builder.

2.14.1 #

  • Fix WasmProbeResult.open ignoring the ìnitializeDatabase callback.

2.14.0 #

  • Add the QueryInterceptor API to easily monitor or transform all database calls made by drift.
  • Add the count() extension on tables to easily count rows in tables or views.

2.13.2 #

  • Fix a race condition causing query streams to not emit new data around some transaction setups.

2.13.1 #

  • Fix a bug when running batches over serialized communication channels.

2.13.0 #

  • Add APIs to setup Wasm databases with custom drift workers.
  • Add support for custom types, which are useful when extending drift to support other database engines.
  • Drift now provides a DevTools extension embedding the drift inspector written by Koen Van Looveren.
  • Add Expression.and and Expression.or to create disjunctions and conjunctions of sub-predicates.
  • Step-by-step migrations now save the intermediate schema version after each step.

2.12.1 #

  • Fix readWithConverter throwing an exception for null values in non- nullable columns.

2.12.0 #

  • Add support for table-valued functions in the Dart query builder.
  • Add the @TableIndex annotation for table classes to add an index to the table.
  • Support json_each and json_tree.
  • Add the TypeConverter.json method to define type converters storing JSON values more easily.
  • Add TypedResult.readWithConverter to read a column with a type converter from a join result row.

2.11.1 #

  • Allow using .read() for a column added to a join from the table, fixing a regression in drift 2.11.0.
  • Make step-by-step migrations easier to customize with Migrator.runMigrationSteps.

2.11.0 #

  • Add support for subqueries in the Dart query builder.
  • Add isInExp and isNotInExp to construct IS IN expressions with arbitrary expressions.
  • Add the substr extension on Expression<String> to call the sqlite3 function from the Dart API.
  • Add isolateSetup to NativeDatabase.createInBackground() to override native libraries or perform other database-unrelated setup work.
  • Add WasmDatabase.probe(), a method probing for available implementations and existing databases on the web without opening one directly.

2.10.0 #

  • Adds the schema steps command to drift_dev. It generates an API making it easier to write safe schema migrations (docs).
  • Fix drift WASM not being unusable after a previous database implementation becomes unavailable in the browser.

2.9.0 #

  • Forbid schemaVersion returning 0, as this causes issues in the migrator.
  • Drift web support is now stable! By using a WasmDatabase.open factory as described in https://drift.simonbinder.eu/web/, you can run a drift database in modern browsers!

2.8.2 #

  • Fix prepared statements leaking when the statement cache is disabled.
  • Disable prepared statement caching by default.

2.8.1 #

  • Performance improvement: Cache and re-use prepared statements - thanks to @davidmartos96
  • Fix a deadlock after rolling back a transaction in a remote isolate.
  • Remove unintended log messages when using connectToDriftWorker.

2.8.0 #

  • Don't keep databases in an unusable state if the setup callback throws an exception. Instead, drift will retry the next time the database is used.
  • Allow targeting partial indices in DoUpdate (#2394)
  • Fix deadlocks when computeWithDatabase is called inside a transaction().

2.7.0 #

  • Add support for CASE expressions without a base in the Dart API with the CaseWhenExpression class.
  • Add the new package:drift/web/workers.dart library which makes it easier to create web workers for drift.

2.6.0 #

  • Add insertReturningOrNull for potentially empty inserts.
  • Add insertFromSelect to InsertStatement to run INSERT INTO SELECT statements.
  • Add rowid parameter to companions for tables with rowids that don't have a visible alias for the rowid.
  • After opening a database with a higher schema version than the current one set in the database class, the schema version in the database will now be downgraded.
  • When using a drift isolate in the same engine group, errors on the remote end are reported directly instead of wrapping them in a DriftRemoteException.
  • Added support for DO NOTHING during upsert operations with constraint violations

2.5.0 #

  • Add isExp, isValue, isNotExp and isNotValue methods to Expression to generate the IS operator in SQL.
  • Add all() extension on tables and views to quickly query all rows.
  • Add serializableConnection() and computeWithDatabase() as extensions on databases. The methods allow sharing any drift database between isolates, regardless of how the database has been set up.
  • The DatabaseConnection class now implements QueryExecutor, meaning that you no longer need a special .connect() constructor to use it.

2.4.2 #

  • Fix an exception when a client disconnects from a drift remote server while processing a pending table update.

2.4.1 #

  • Fix DriftIsolate leaking resources for closed connections.

2.4.0 #

  • Add textEnum column builder and EnumNameConverter to be able to store enum values as string.
  • Add updates parameter to Batch.customStatement - it can be used to specify which tables are affected by the custom statement.
  • For STRICT tables in drift files declaring a ANY column, drift will now generate a mapping to the new DriftAny type.
  • Add likeExp to generate LIKE expression with any comparison expression.
  • Fix UNIQUE keys declared in drift files being written twice.
  • Fix customConstraints not appearing in dumped database schema files.
  • Lazily load columns in TypedResult.read, increasing performance for joins with lots of tables or columns.
  • Work-around an issue causing complex migrations via Migrator.alterTable not to work if a view referenced the altered table.

2.3.0 #

  • Add the JsonTypeConverter2 mixin. It behaves similar to the existing json type converters, but can use a different SQL and JSON type.
  • Add isInValues and isNotInValues methods to columns with type converters. They can be used to compare the column against a list of Dart expressions that will be mapped through a type converter.
  • Add TableStatements.insertAll to atomically insert multiple rows.
  • Add singleClientMode to remote() and DriftIsolate connections to make the common case with one client more efficient.
  • Fix a concurrency issue around transactions.
  • Add NativeDatabase.createInBackground as a drop-in replacement for NativeDatabase. It creates a drift isolate behind the scenes, avoiding all of the boilerplate usually involved with drift isolates.
  • Experimental: Add a modular generation mode in which drift will generate multiple smaller files instead of one very large one with all tables and generated queries.

2.2.0 #

  • Always escape column names, avoiding the costs of using a regular expression to check whether they need to be escaped.
  • Add extensions for binary methods on integer expressions: operator ~, bitwiseAnd and bitwiseOr.

2.1.0 #

  • Improve stack traces when using watchSingle() with a stream emitting a non- singleton list at some point.
  • Add OrderingTerm.nulls to control the NULLS FIRST or NULLS LAST clause in Dart.

2.0.2+1 #

  • Revert the breaking change around QueryRow.read only returning non-nullable values now - it was causing issues with type inference in some cases.

2.0.1 #

  • Fix an error when inserting a null value into a nullable column defined with additional checks in Dart.

2.0.0 #

💡: More information on how to migrate is available in the documentation.

  • Breaking: Type converters now return the types that they were defined to return (instead of the nullable variant of those types like before). It is an error to use a non-nullable type converter on a column that is nullable in SQL and vice-versa.
  • Breaking: Mapping methods on type converters are now called toSql and fromSql.
  • Breaking: Removed SqlTypeSystem and subtypes of SqlType:
    • To describe the type a column has, use the DriftSqlType enum
    • To map a value from Dart to SQL and vice-versa, use an instance of SqlTypes, reachable via database.options.types.
  • Breaking: Expressions (including Columns) always have a non-nullable type parameter now. They are implicitly nullable, so TypedResult.read now returns a nullable value.
  • Breaking: QueryRow.read can only read non-nullable values now. To read nullable values, use readNullable.
  • Breaking: Remove the includeJoinedTableColumns parameter on selectOnly(). The method now behaves as if that parameter was turned off. To use columns from a joined table, add them with addColumns.
  • Breaking: Remove the fromData factory on generated data classes. Use the map method on tables instead.
  • Add support for storing date times as (ISO-8601) strings. For details on how to use this, see the documentation.
  • Consistently handle transaction errors like a failing BEGIN or COMMIT across database implementations.
  • Add writeReturning to update statements; deleteReturning and goAndReturn to delete statatements.
  • Support nested transactions.
  • Support custom collations in the query builder API.
  • Custom row classes can now be constructed with static methods too. These static factories can also be asynchronous.

1.7.1 #

  • Fix the NativeDatabase not disposing statements if running them threw an exception #1917.

1.7.0 #

  • Add the int64() column builder to store large integers. These integers are still stored as 64-bit ints in the database, but represented as a BigInt in Dart. This enables better web support for integers larger than 2^52. More details are in the documentation.
  • Add filter and distinct support to groupConcat.
  • Fix a deadlock with the sqflite-based implementation if the first operation in a transaction is a future backed by a query stream.

1.6.0 #

  • Add the unique() method to columns and the uniqueKeys override for tables to define unique constraints in Dart tables.
  • Add the check() method to the Dart column builder to generate CHECK column constraints.
  • Also apply type converters for json serialization and deserialization if they mix in JsonTypeConverter.
  • Add the very experimental package:drift/wasm.dart library. It uses WebAssembly to access sqlite3 without any external JavaScript libraries, but requires you to add a WebAssembly module to the web/ folder. Please note that this specific library is not subject to semantic versioning until it leaves its experimental state. It also isn't suitable for production use at the moment.
  • Internally use package:js to wrap sql.js.

1.5.0 #

  • Add DataClassName.extending to control the superclass of generated row classes.
  • Add setup parameter to the constructors of WebDatabase too.
  • Don't write variables for expressions in CREATE VIEW statements.
  • Improve stack traces for errors on a remote isolate.
  • Add MultiExecutor.withReadPool constructor to load-balance between multiple reading executors. This can be used in a multi-isolate approach if some queries are expensive.

1.4.0 #

  • Most methods to compose statements are now available as an extension on tables. As an alternative to update(todos).replace(newEntry), you can now write todos.replaceOne(newEntry).
  • Deprecate the from(table) API introduced in 1.3.0. Having the methods on the table instances turned out to be even easier!
  • In drift files, you can now use LIST(SELECT ...) as a result column to get all results of the inner select as a List in the result set.

1.3.0 #

  • Add the from(table) method to generated databases. It can be used to write common queries more concisely.
  • Make groupConcat nullable in the Dart API.
  • Throw an exception in a NativeDatabase when multiple statements are run in a single call. In previous versions, parts of the SQL string would otherwise be ignored.
  • Close the underlying database when a drift isolate is shut down.

1.2.0 #

  • Properly support stream update queries on views.
  • Reading blobs from the database is more lenient now.
  • Provide a stack trace when getSingle() or watchSingle() is used on a query emitting more than one row.

1.1.1 #

  • Rollback transactions when a commit fails.
  • Revert a change from 1.1.0 to stop serializing messages over isolates. Instead, please set the serialize parameter to false on the DriftIsolate methods.

1.1.0 #

  • Add the references method to BuildColumn to reference a column declared in another Dart table.
  • Add the generateInsertable option to @UseRowClass. When enabled, the generator will emit an extension to use the row class as an Insertable. Thanks to @westito.
  • Allow the generator to emit correct SQL code when using arrays with the new_sql_code_generation option in specific scenarios.
  • Add support for strict tables in .drift files.
  • Add the generatedAs method to declare generated columns for Dart tables.
  • Add OrderingTerm.random to fetch rows in a random order.
  • Improved support for pausing query stream subscriptions. Instead of buffering events, query streams will suspend fetching data if all listeners are paused.
  • Drift isolates no longer serialize messages into a primitive format. This will reduce the overhead of using isolates with Drift.

1.0.1 #

  • Add DoUpdate.withExcluded to refer to the excluded row in an upsert clause.
  • Add optional where clause to DoUpdate constructors

This is the initial release of the drift package (formally known as moor). For an overview of old moor releases, see its changelog.

pub points


verified publishersimonbinder.eu

Drift is a reactive library to store relational data in Dart and Flutter applications.

Repository (GitHub)
View/report issues


API reference




async, collection, convert, js, meta, path, sqlite3, stack_trace, stream_channel, web


Packages that depend on drift