dart-sdk/samples/ffi/sqlite
Daco Harkes d37e833e23 [vm/ffi] Migrate samples(_2)/ffi to CallocAllocator
This CL does not yet roll `package:ffi` to use `Allocator`, because that
breaks the checked in Dart in Flutter in g3. Instead, this copies
`_CallocAllocator` from `package:ffi` into the samples.

New API landed in: https://dart-review.googlesource.com/c/sdk/+/177705

Issue: https://github.com/dart-lang/sdk/issues/44621
Issue: https://github.com/dart-lang/sdk/issues/38721

Change-Id: I83da349c2e52d7f079aa1569b4726318fee24c9d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/177706
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2021-01-14 13:57:03 +00:00
..
docs API doc issue: Update sqlite-tutorial CString section with correct ascii code 2020-11-04 10:31:47 +00:00
example [samples] Migrate ffi samples to NNBD 2020-11-24 18:50:28 +00:00
lib [vm/ffi] Migrate samples(_2)/ffi to CallocAllocator 2021-01-14 13:57:03 +00:00
test [vm/ffi] Migrate samples(_2)/ffi to CallocAllocator 2021-01-14 13:57:03 +00:00
.gitignore Revert "[samples/ffi] Generate sqlite3 bindings with package:ffigen" 2020-08-11 19:38:18 +00:00
pubspec.yaml [samples] Migrate ffi samples to NNBD 2020-11-24 18:50:28 +00:00
README.md Fixed #39679 make sqlite ffi sample run success 2019-12-12 09:04:11 +00:00

Sample code dart:ffi

This is an illustrative sample for how to use dart:ffi.

Prerequirement

For Windows, Linux, and MacOS, you should make sure, sqlite dev lib installed on your system.

Windows user can download dll from https://www.sqlite.org/download.html

If you do not have any sqlite3.dll or so file, you may found error message:

Unhandled exception:
Invalid argument(s): Failed to load dynamic library (126)
#0      _open (dart:ffi-patch/ffi_dynamic_library_patch.dart:13:55)
#1      new DynamicLibrary.open (dart:ffi-patch/ffi_dynamic_library_patch.dart:22:12)

Building and Running this Sample

Building and running this sample is done through pub. Running pub get and pub run example/main should produce the following output.

$ pub get
Resolving dependencies... (6.8s)
+ analyzer 0.35.4
...
+ yaml 2.1.15
Downloading analyzer 0.35.4...
Downloading kernel 0.3.14...
Downloading front_end 0.1.14...
Changed 47 dependencies!
Precompiling executables... (18.0s)
Precompiled test:test.

$ pub run example/main
1 Chocolade chip cookie Chocolade cookie foo
2 Ginger cookie null 42
3 Cinnamon roll null null
1 Chocolade chip cookie Chocolade cookie foo
2 Ginger cookie null 42
expected exception on accessing result data after close: The result has already been closed.
expected this query to fail: no such column: non_existing_column (Code 1: SQL logic error)

Tutorial

A tutorial walking through the code is available in docs/sqlite-tutorial.md. For information on how to use this package within a Flutter app, see docs/android.md. (Note: iOS is not yet supported).