Skip to content

Commit

Permalink
Implemented SQLiteCursor.
Browse files Browse the repository at this point in the history
  • Loading branch information
artob committed Nov 15, 2018
1 parent f659f7a commit 9983cf0
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 24 deletions.
62 changes: 39 additions & 23 deletions lib/src/cursor.dart
@@ -1,10 +1,10 @@
/* This is free and unencumbered software released into the public domain. */

import 'dart:async' show Future;
import 'dart:typed_data' show ByteBuffer;

import 'package:flutter/services.dart' show MethodChannel;
import 'package:flutter_android/android_database.dart' show Cursor;
import 'package:flutter_android/android_database.dart' show Cursor, CursorIndexOutOfBoundsException;
import 'package:meta/meta.dart' show experimental, required;

/// Exposes results from a query on a [SQLiteDatabase].
///
Expand All @@ -17,43 +17,59 @@ class SQLiteCursor extends Cursor {
static const MethodChannel _channel = MethodChannel('flutter_sqlcipher/SQLiteCursor');

bool _isClosed = false;
List<String> _columns = const <String>[];
List<List<dynamic>> _rows = const <List<dynamic>>[];
int _rowIndex = -1;

/// Constructs an empty cursor.
SQLiteCursor.empty();

/// Constructs a cursor from the provided column/row data.
@experimental
SQLiteCursor.from({@required List<String> columns, @required List<List<dynamic>> rows})
: assert(columns != null),
assert(rows != null),
_columns = List.unmodifiable(columns),
_rows = rows;

@override
Future<void> close() {
_isClosed = true;
_columns = null;
_rows = null;
_rowIndex = -1;
return Future.value();
}

@override
ByteBuffer getBlob(final int columnIndex) => null; // TODO

@override
List<String> getColumnNames() => <String>[]; // TODO

@override
int getCount() => 0; // TODO

@override
double getDouble(final int columnIndex) => null; // TODO

@override
int getInt(final int columnIndex) => null; // TODO

@override
int getPosition() => -1; // TODO
dynamic get(final int columnIndex) {
if (_rowIndex < 0 || _rowIndex >= _rows.length) {
throw CursorIndexOutOfBoundsException(_rowIndex, _rows.length);
}
if (columnIndex < 0 || columnIndex >= _columns.length) {
throw CursorIndexOutOfBoundsException(columnIndex, _columns.length);
}
return _rows[_rowIndex][columnIndex];
}

@override
String getString(final int columnIndex) => null; // TODO
List<String> getColumnNames() => _columns;

@override
int getType(final int columnIndex) => null; // TODO
int getCount() => _rows.length;

@override
bool get isClosed => _isClosed; // TODO
int getPosition() => _rowIndex;

@override
bool isNull(final int columnIndex) => null; // TODO
bool get isClosed => _isClosed;

@override
bool moveToPosition(final int position) => false; // TODO
bool moveToPosition(final int position) {
if (position >= -1 && position <= _rows.length) {
_rowIndex = position;
return true; // request accepted
}
return false; // request rejected
}
}
2 changes: 1 addition & 1 deletion pubspec.yaml
Expand Up @@ -9,7 +9,7 @@ documentation:
dependencies:
flutter:
sdk: flutter
flutter_android: ^0.1.6
flutter_android: ^0.1.7
meta: ^1.1.6
dev_dependencies:
flutter_test:
Expand Down
6 changes: 6 additions & 0 deletions test/sqlite_test.dart
Expand Up @@ -8,4 +8,10 @@ void main() {
group("sqlite", () {
// TODO
});
group("sqlite.SQLiteCursor", () {
// TODO
});
group("sqlite.SQLiteDatabase", () {
// TODO
});
}

0 comments on commit 9983cf0

Please sign in to comment.