Getting the result for each operation has a cost (id for insertion and number of changes for
update and delete), especially on Android where an extra SQL request is executed.
If you don't care about the result and worry about performance in big batches, you can use

await batch.commit(noResult: true);

Warning, during a transaction, the batch won't be commited until the transaction is commited

will be equivalent to manually adding double-quote around the table name (confusingly here named table)

db.rawQuery('SELECT * FROM "table"');

However in any other raw statement (including orderBy, where, groupBy), make sure to escape the name
properly using double quote. For example see below where the column name group is not escaped in the columns
argument, but is escaped in the where argument.

Supported SQLite types

No validity check is done on values yet so please avoid non supported types. DateTime is not
a supported SQL type (https://www.sqlite.org/datatype3.html). Personally I store them as
int (millisSinceEpoch) or string (iso8601)

INTEGER

Dart type: int

Supported values: from -2^63 to 2^63 - 1

REAL

Dart type: num

TEXT

Dart type: String

BLOB

Dart type: Uint8List

Dart type List<int> is supported but not recommended (slow conversion)

Current issues

Due to the way transaction works in SQLite (threads), concurrent read and write transaction are not supported.
All calls are currently synchronized and transactions block are exclusive. I thought that a basic way to support
concurrent access is to open a database multiple times but it only works on iOS as Android reuses the same database object.
I also thought a native thread could be a potential future solution however on android accessing the database in another
thread is blocked while in a transaction...

More

0.11.0

Warning: database are now single instance by default (based on path), to use the
old behavior use singleInstance = false when opening a database

dart2 stable support

0.10.0

Preparing for 1.0

Remove deprecated methods (re-entrant transactions)

Add Transaction.batch

Show developer warning to prevent deadlock

0.9.0

Support for in-memory database (:memory: path)

Support for single instance

new database factory for handling the new options

0.8.9

Upgrade to sdk 27

0.8.8

Allow testing for constraint exception

0.8.6

better sql error report

catch android native errors

no longer print an error when deleting a database fails

0.8.4

Add read-only support using openReadOnlyDatabase

0.8.3

Allow running a batch during a transaction using Transaction.applyBatch

Restore Batch.commit to use outside a transaction

0.8.2

Although already in a transaction, allow creating nested transactions during open

0.8.1

New Transaction mechanism not using Zone (old one still supported for now)

Start using Batch.apply instead of Batch.commit

Deprecate Database.inTransaction and Database.synchronized so that Zones are not used anymore

0.7.1

add Batch.query, Batch.rawQuery and Batch.execute

pack query result as colums/rows instead of List<Map>

0.7.0

Add support for --preview-dart-2

0.6.2+1

Add longer description to pubspec.yaml

0.6.2

Fix travis warning

0.6.1

Add Flutter SDK constraint to pubspec.yaml

0.6.0

add support for onConfigure to allow for database configuration

0.5.0

Escape table and column name when needed in insert/update/query/delete

Export ConflictAlgorithm, escapeName, unescapeName in new sql.dart

0.4.0

Add support for Batch (insert/update/delete)

0.3.1

Remove temp concurrency experiment

0.3.0

2018/01/04

Breaking change. Upgraded to Gradle 4.1 and Android Studio Gradle plugin
3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in
order to use this version of the plugin. Instructions can be found
here.

0.2.4

Dependency on synchronized updated to >=1.1.0

0.2.3

Make Android sends the reponse in the same thread then the caller to prevent unexpected behavior when an error occured