Skip to content

Commit

Permalink
[vm/ffi] Add copyright headers to sqlite example and incorporate Mich…
Browse files Browse the repository at this point in the history
…ael's feedback.

Change-Id: I83555a81bb6394a8c2a740a5127175be85aabf3d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98007
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Michael Thomsen <mit@google.com>
Auto-Submit: Samir Jindel <sjindel@google.com>
  • Loading branch information
sjindel-google authored and commit-bot@chromium.org committed Mar 27, 2019
1 parent 7a15b02 commit 991c9da
Show file tree
Hide file tree
Showing 12 changed files with 126 additions and 4 deletions.
6 changes: 2 additions & 4 deletions samples/ffi/sqlite/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ This is an illustrative sample for how to use `dart:ffi`.
## Building and Running this Sample

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

```sh
$ pub get
Expand All @@ -24,16 +24,14 @@ Precompiled test:test.
```

```
$ pub run test
00:01 +0: test/sqlite_test.dart: sqlite integration 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)
00:02 +3: All tests passed!
```

## Tutorial
Expand Down
84 changes: 84 additions & 0 deletions samples/ffi/sqlite/example/main.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import "package:test/test.dart";

import "../lib/sqlite.dart";

void main() {
Database d = Database("test.db");
d.execute("drop table if exists Cookies;");
d.execute("""
create table Cookies (
id integer primary key,
name text not null,
alternative_name text
);""");
d.execute("""
insert into Cookies (id, name, alternative_name)
values
(1,'Chocolade chip cookie', 'Chocolade cookie'),
(2,'Ginger cookie', null),
(3,'Cinnamon roll', null)
;""");
Result result = d.query("""
select
id,
name,
alternative_name,
case
when id=1 then 'foo'
when id=2 then 42
when id=3 then null
end as multi_typed_column
from Cookies
;""");
for (Row r in result) {
int id = r.readColumnAsInt("id");
String name = r.readColumnByIndex(1);
String alternativeName = r.readColumn("alternative_name");
dynamic multiTypedValue = r.readColumn("multi_typed_column");
print("$id $name $alternativeName $multiTypedValue");
}
result = d.query("""
select
id,
name,
alternative_name,
case
when id=1 then 'foo'
when id=2 then 42
when id=3 then null
end as multi_typed_column
from Cookies
;""");
for (Row r in result) {
int id = r.readColumnAsInt("id");
String name = r.readColumnByIndex(1);
String alternativeName = r.readColumn("alternative_name");
dynamic multiTypedValue = r.readColumn("multi_typed_column");
print("$id $name $alternativeName $multiTypedValue");
if (id == 2) {
result.close();
break;
}
}
try {
result.iterator.moveNext();
} on SQLiteException catch (e) {
print("expected exception on accessing result data after close: $e");
}
try {
d.query("""
select
id,
non_existing_column
from Cookies
;""");
} on SQLiteException catch (e) {
print("expected this query to fail: $e");
}
d.execute("drop table Cookies;");
d.close();
}
4 changes: 4 additions & 0 deletions samples/ffi/sqlite/lib/sqlite.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// A synchronous SQLite wrapper.
///
/// Written using dart:ffi.
Expand Down
4 changes: 4 additions & 0 deletions samples/ffi/sqlite/lib/src/bindings/bindings.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import "dart:ffi";

import "../ffi/cstring.dart";
Expand Down
4 changes: 4 additions & 0 deletions samples/ffi/sqlite/lib/src/bindings/constants.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// Result Codes
///
/// Many SQLite functions return an integer result code from the set shown
Expand Down
4 changes: 4 additions & 0 deletions samples/ffi/sqlite/lib/src/bindings/signatures.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import "dart:ffi";

import "../ffi/cstring.dart";
Expand Down
4 changes: 4 additions & 0 deletions samples/ffi/sqlite/lib/src/bindings/types.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import "dart:ffi";

import "../ffi/cstring.dart";
Expand Down
4 changes: 4 additions & 0 deletions samples/ffi/sqlite/lib/src/collections/closable_iterator.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// This iterator should be [close]d after use.
///
/// [ClosableIterator]s often use resources which should be freed after use.
Expand Down
4 changes: 4 additions & 0 deletions samples/ffi/sqlite/lib/src/database.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import "dart:collection";
import "dart:ffi";

Expand Down
4 changes: 4 additions & 0 deletions samples/ffi/sqlite/lib/src/ffi/arena.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import "dart:async";
import "dart:ffi";

Expand Down
4 changes: 4 additions & 0 deletions samples/ffi/sqlite/lib/src/ffi/cstring.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import "dart:convert";
import "dart:ffi";

Expand Down
4 changes: 4 additions & 0 deletions samples/ffi/sqlite/test/sqlite_test.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// VMOptions=--optimization-counter-threshold=5

import "package:test/test.dart";
Expand Down

0 comments on commit 991c9da

Please sign in to comment.