-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2a3e6a5
commit a51909d
Showing
6 changed files
with
179 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
import 'dart:core'; | ||
|
||
class RecordFieldJsonAdapter { | ||
|
||
static RecordFieldJsonAdapter create() { | ||
return new RecordFieldJsonAdapter(); | ||
} | ||
|
||
RecordFieldJsonAdapter() { | ||
} | ||
|
||
/* String toJson(Map<String, Object> fields) { | ||
checkNotNull(fields, "fields == null"); | ||
Buffer buffer = new Buffer(); | ||
JsonWriter jsonWriter = JsonWriter.of(buffer); | ||
jsonWriter.setSerializeNulls(true); | ||
try { | ||
jsonWriter.beginObject(); | ||
for (Map.Entry<String, Object> fieldEntry : fields.entrySet()) { | ||
String key = fieldEntry.getKey(); | ||
Object value = fieldEntry.getValue(); | ||
jsonWriter.name(key); | ||
writeJsonValue(value, jsonWriter); | ||
} | ||
jsonWriter.endObject(); | ||
jsonWriter.close(); | ||
return buffer.readUtf8(); | ||
} catch (IOException e) { | ||
// should never happen as we are working with mem buffer | ||
throw new RuntimeException(e); | ||
} | ||
} | ||
private Map<String, Object> fromBufferSource(BufferedSource bufferedFieldSource) throws IOException { | ||
final CacheJsonStreamReader cacheJsonStreamReader = | ||
cacheJsonStreamReader(bufferedSourceJsonReader(bufferedFieldSource)); | ||
return cacheJsonStreamReader.toMap(); | ||
} | ||
public Map<String, Object> from(String jsonFieldSource) throws IOException { | ||
final BufferedSource bufferSource | ||
= Okio.buffer(Okio.source(new ByteArrayInputStream(jsonFieldSource.getBytes(Charset.defaultCharset())))); | ||
return fromBufferSource(bufferSource); | ||
} | ||
private static void writeJsonValue(Object value, JsonWriter jsonWriter) throws IOException { | ||
if (value == null) { | ||
jsonWriter.nullValue(); | ||
} else if (value instanceof String) { | ||
jsonWriter.value((String) value); | ||
} else if (value instanceof Boolean) { | ||
jsonWriter.value((boolean) value); | ||
} else if (value instanceof Number) { | ||
jsonWriter.value((Number) value); | ||
} else if (value instanceof CacheReference) { | ||
jsonWriter.value(((CacheReference) value).serialize()); | ||
} else if (value instanceof List) { | ||
jsonWriter.beginArray(); | ||
for (Object item : (List) value) { | ||
writeJsonValue(item, jsonWriter); | ||
} | ||
jsonWriter.endArray(); | ||
} else if (value instanceof Map) { | ||
//noinspection unchecked | ||
Map<String, Object> fields = (Map) value; | ||
jsonWriter.beginObject(); | ||
for (Map.Entry<String, Object> fieldEntry : fields.entrySet()) { | ||
jsonWriter.name(fieldEntry.getKey()); | ||
writeJsonValue(fieldEntry.getValue(), jsonWriter); | ||
} | ||
jsonWriter.endObject(); | ||
} else { | ||
throw new RuntimeException("Unsupported record value type: " + value.getClass()); | ||
} | ||
} */ | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
import 'package:flutter_graphql/src/cache/cache.dart'; | ||
import 'package:flutter_graphql/src/cache/normalized/sql/sql_helper.dart'; | ||
import 'package:sqflite/sqflite.dart'; | ||
|
||
class SqlNormalizedCache implements Cache { | ||
|
||
static const String INSERT_STATEMENT = '''INSERT INTO ${SqlHelper.TABLE_RECORDS} (${SqlHelper.COLUMN_KEY},${SqlHelper.COLUMN_RECORD}) VALUES (?,?)'''; | ||
static const String UPDATE_STATEMENT = '''UPDATE ${SqlHelper.TABLE_RECORDS} SET ${SqlHelper.COLUMN_KEY}=?, ${SqlHelper.COLUMN_RECORD}=? WHERE ${SqlHelper.COLUMN_KEY}=?'''; | ||
|
||
static const String DELETE_STATEMENT = '''DELETE FROM ${SqlHelper.TABLE_RECORDS} WHERE ${SqlHelper.COLUMN_KEY}=?'''; | ||
static const String DELETE_ALL_RECORD_STATEMENT = '''DELETE FROM ${SqlHelper.TABLE_RECORDS}'''; | ||
|
||
Database database; | ||
final SqlHelper dbHelper; | ||
final allColumns = [ | ||
SqlHelper.COLUMN_ID, | ||
SqlHelper.COLUMN_KEY, | ||
SqlHelper.COLUMN_RECORD]; | ||
|
||
SqlNormalizedCache(this.dbHelper); | ||
|
||
/* | ||
private final SQLiteStatement insertStatement; | ||
private final SQLiteStatement updateStatement; | ||
private final SQLiteStatement deleteStatement; | ||
private final SQLiteStatement deleteAllRecordsStatement; | ||
private final RecordFieldJsonAdapter recordFieldAdapter;*/ | ||
|
||
@override | ||
Object read(String key) { | ||
// TODO: implement read | ||
return null; | ||
} | ||
|
||
@override | ||
void reset() { | ||
// TODO: implement reset | ||
} | ||
|
||
@override | ||
void restore() { | ||
// TODO: implement restore | ||
} | ||
|
||
@override | ||
void save() { | ||
// TODO: implement save | ||
} | ||
|
||
@override | ||
void write(String key, value) { | ||
// TODO: implement write | ||
} | ||
|
||
@override | ||
Future<bool> remove(String key, bool cascade) { | ||
// TODO: implement remove | ||
return null; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
import 'package:path/path.dart'; | ||
import 'package:sqflite/sqflite.dart'; | ||
|
||
class SqlHelper { | ||
|
||
static const String TABLE_RECORDS = 'records'; | ||
static const String COLUMN_ID = '_id'; | ||
static const String COLUMN_RECORD = 'record'; | ||
static const String COLUMN_KEY = 'key'; | ||
|
||
static const String DATABASE_NAME = 'graphql-flutter.db'; | ||
static const int DATABASE_VERSION = 1; | ||
|
||
static const String DATABASE_CREATE = '''CREATE TABLE $TABLE_RECORDS ($COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT, $COLUMN_KEY TEXT NOT NULL, $COLUMN_RECORD TEXT NOT NULL'''; | ||
static const String IDX_RECORDS_KEY = 'idx_records_key'; | ||
static const String CREATE_KEY_INDEX = '''CREATE INDEX $IDX_RECORDS_KEY ON $TABLE_RECORDS ($COLUMN_KEY)'''; | ||
|
||
Database db; | ||
|
||
Future open() async { | ||
final databasesPath = await getDatabasesPath(); | ||
String path = join(databasesPath, DATABASE_NAME); | ||
db = await openDatabase(path, version: DATABASE_VERSION, onCreate: (Database db, int version) async { | ||
await db.execute(DATABASE_CREATE); | ||
await db.execute(CREATE_KEY_INDEX); | ||
}); | ||
} | ||
|
||
Future close() async { | ||
await db.close(); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters