Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[sqflite] Update sqflite to 2.3.0 #614

Merged
merged 11 commits into from
Sep 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion packages/sqflite/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
## NEXT
## 0.1.3

* Update sqflite to 2.3.0.
* Increase the minimum Flutter version to 3.3.
* Increase the minimum SDK version to 3.0.0.

## 0.1.2

Expand Down
4 changes: 2 additions & 2 deletions packages/sqflite/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ This package is not an _endorsed_ implementation of `sqflite`. Therefore, you ha

```yaml
dependencies:
sqflite: ^2.2.8
sqflite_tizen: ^0.1.2
sqflite: ^2.3.0
sqflite_tizen: ^0.1.3
```

Then you can import `sqflite` in your Dart code:
Expand Down
4 changes: 4 additions & 0 deletions packages/sqflite/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ include: package:flutter_lints/flutter.yaml
# https://github.com/flutter/flutter/blob/master/analysis_options.yaml

analyzer:
language:
strict-casts: true
strict-inference: true

errors:
# treat missing required parameters as a warning (not a hint)
missing_required_param: warning
Expand Down
102 changes: 102 additions & 0 deletions packages/sqflite/example/analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
include: package:flutter_lints/flutter.yaml

# Until there are meta linter rules, each desired lint must be explicitly enabled.
# See: https://github.com/dart-lang/linter/issues/288
#
# For a list of lints, see: http://dart-lang.github.io/linter/lints/
# See the configuration guide for more
# https://github.com/dart-lang/sdk/tree/master/pkg/analyzer#configuring-the-analyzer
#
# NOTE: Please keep this file in sync with
# https://github.com/flutter/flutter/blob/master/analysis_options.yaml

analyzer:
language:
strict-casts: true
strict-inference: true

errors:
# treat missing required parameters as a warning (not a hint)
missing_required_param: warning
# treat missing returns as a warning (not a hint)
missing_return: warning
# allow having TODOs in the code
todo: ignore
# Ignore errors like
# 'super_goes_last' is a deprecated lint rule and should not be used • included_file_warning
included_file_warning: ignore

linter:
rules:
- always_declare_return_types
- avoid_dynamic_calls
- avoid_empty_else
- avoid_relative_lib_imports
- avoid_shadowing_type_parameters
- avoid_slow_async_io
- avoid_types_as_parameter_names
- await_only_futures
- camel_case_extensions
- camel_case_types
- cancel_subscriptions
- curly_braces_in_flow_control_structures
- directives_ordering
- empty_catches
- hash_and_equals
- collection_methods_unrelated_type
- no_adjacent_strings_in_list
- no_duplicate_case_values
- non_constant_identifier_names
- omit_local_variable_types
- package_api_docs
- package_prefixed_library_names
- prefer_generic_function_type_aliases
- prefer_is_empty
- prefer_is_not_empty
- prefer_iterable_whereType
- prefer_single_quotes
- prefer_typing_uninitialized_variables
- sort_child_properties_last
- test_types_in_equals
- throw_in_finally
- unawaited_futures
- unnecessary_null_aware_assignments
- unnecessary_statements
- unrelated_type_equality_checks
- unsafe_html
- valid_regexps

- constant_identifier_names
- control_flow_in_finally
- empty_statements
- implementation_imports
- overridden_fields
- package_names
- prefer_const_constructors
- prefer_initializing_formals
- prefer_void_to_null
#
- always_require_non_null_named_parameters
- annotate_overrides
- avoid_init_to_null
- avoid_null_checks_in_equality_operators
- avoid_return_types_on_setters
- empty_constructor_bodies
- library_names
- library_prefixes
- prefer_adjacent_string_concatenation
- prefer_collection_literals
- prefer_contains
- slash_for_doc_comments
- type_init_formals
- unnecessary_const
- unnecessary_new
- unnecessary_null_in_if_null_operators
- use_rethrow_when_possible
# === doc rules ===
- public_member_api_docs
#
# - prefer_final_locals
- sort_constructors_first
- sort_unnamed_constructors_first

49 changes: 45 additions & 4 deletions packages/sqflite/example/lib/batch_test_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class BatchTestPage extends TestPage {
BatchTestPage({Key? key}) : super('Batch tests', key: key) {
test('BatchQuery', () async {
// await Sqflite.devSetDebugModeOn();
final path = await initDeleteDb('batch.db');
final path = await initDeleteDb('batch_query.db');
final db = await openDatabase(path);

// empty batch
Expand Down Expand Up @@ -42,15 +42,15 @@ class BatchTestPage extends TestPage {
await db.close();
});
test('Batch', () async {
// await Sqflite.devSetDebugModeOn();
// await databaseFactory.devSetDebugModeOn();
final path = await initDeleteDb('batch.db');
final db = await openDatabase(path);

// empty batch
var batch = db.batch();
var results = await batch.commit();
expect(results.length, 0);
expect(results, []);
expect(results, isEmpty);

// one create table
batch = db.batch();
Expand Down Expand Up @@ -112,7 +112,7 @@ class BatchTestPage extends TestPage {
where: 'name = ?', whereArgs: <String>['item']);
batch.delete('Test', where: 'name = ?', whereArgs: ['item']);
results = await batch.commit(noResult: true);
expect(results, []);
expect(results, isEmpty);

await db.close();
});
Expand All @@ -139,6 +139,47 @@ class BatchTestPage extends TestPage {
await db.close();
});

test('Apply in database', () async {
// await Sqflite.devSetDebugModeOn();
final path = await initDeleteDb('apply_in_database.db');
final db = await openDatabase(path);

late List<Object?> results;

final batch1 = db.batch();
batch1.execute('CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT)');
final batch2 = db.batch();
batch2.rawInsert('INSERT INTO Test (name) VALUES (?)', ['item1']);
results = await batch1.apply();
expect(results, [null]);

results = await batch2.apply();
expect(results, [1]);
await db.close();
});

test('Apply in transaction', () async {
// await Sqflite.devSetDebugModeOn();
final path = await initDeleteDb('apply_in_transaction.db');
final db = await openDatabase(path);

late List<Object?> results;

await db.transaction((txn) async {
final batch1 = txn.batch();
batch1.execute('CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT)');
final batch2 = txn.batch();
batch2.rawInsert('INSERT INTO Test (name) VALUES (?)', ['item1']);
results = await batch1.apply();
expect(results, [null]);

results = await batch2.apply();
expect(results, [1]);
});

await db.close();
});

test('Batch continue on error', () async {
// await Sqflite.devSetDebugModeOn();
final path = await initDeleteDb('batch_continue_on_error.db');
Expand Down
27 changes: 2 additions & 25 deletions packages/sqflite/example/lib/database/database.dart
Original file line number Diff line number Diff line change
@@ -1,25 +1,2 @@
import 'dart:async';
import 'dart:io';

import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';

/// delete the db, create the folder and returns its path
Future<String> initDeleteDb(String dbName) async {
final databasePath = await getDatabasesPath();
final path = join(databasePath, dbName);

// make sure the folder exists
// ignore: avoid_slow_async_io
if (await Directory(dirname(path)).exists()) {
await deleteDatabase(path);
} else {
try {
await Directory(dirname(path)).create(recursive: true);
} catch (e) {
// ignore: avoid_print
print(e);
}
}
return path;
}
export 'database_impl.dart';
export 'database_io.dart' if (dart.library.html) 'database_web.dart';
90 changes: 90 additions & 0 deletions packages/sqflite/example/lib/database/database_impl.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import 'dart:typed_data';

import 'package:sqflite/sqflite.dart';

import 'database.dart';

/// Custom platform Handler, need to handle Web or IO differently or from a
/// custom app
abstract class PlatformHandler {
/// delete the db, create the folder and returns its path
Future<String> initDeleteDb(String dbName) async {
if (await databaseExists(dbName)) {
await deleteDatabase(dbName);
}
return dbName;
}

/// Write the db file directly to the file system
Future<void> writeFileAsBytes(String path, List<int> bytes,
{bool flush = false});

/// Read a file as bytes
Future<Uint8List> readFileAsBytes(String path);

/// Write a file as a string
Future<void> writeFileAsString(String path, String text,
{bool flush = false});

/// Read a file as a string
Future<String> readFileAsString(String path);

/// Check if a path exists.
Future<bool> pathExists(String path);

/// Recursively create a directory
Future<void> createDirectory(String path);

/// Recursively delete a directory
Future<void> deleteDirectory(String path);

/// Check if a directory exists
Future<bool> existsDirectory(String path);
}

// ---
// Compat, to keep the example page as is
// ---

/// delete the db, create the folder and returnes its path
Future<String> initDeleteDb(String dbName) =>
platformHandler.initDeleteDb(dbName);

/// Write the db file directly to the file system
Future<void> writeFileAsBytes(String path, List<int> bytes,
{bool flush = false}) =>
platformHandler.writeFileAsBytes(path, bytes, flush: flush);

/// Read a file as bytes
Future<Uint8List> readFileAsBytes(String path) =>
platformHandler.readFileAsBytes(path);

/// Write a file as a string
Future<void> writeFileAsString(String path, String text,
{bool flush = false}) =>
platformHandler.writeFileAsString(path, text, flush: flush);

/// Read a file as a string
Future<String> readFileAsString(String path) =>
platformHandler.readFileAsString(path);

/// Check if a path exists.
Future<bool> pathExists(String path) => platformHandler.pathExists(path);

/// Recursively create a directory
Future<void> createDirectory(String path) =>
platformHandler.createDirectory(path);

/// Recursively delete a directory
Future<void> deleteDirectory(String path) =>
platformHandler.deleteDirectory(path);

/// Check if a directory exists
Future<bool> existsDirectory(String path) =>
platformHandler.existsDirectory(path);

PlatformHandler? _platformHandler;

/// Platform handler (can be overriden, needed for the web test app)
PlatformHandler get platformHandler => _platformHandler ??= platformHandlerIo;
set platformHandler(PlatformHandler handler) => _platformHandler = handler;
Loading
Loading