open method
Opens the repository, or just returns true if the repo is already open.
Implementation
@override
Future<bool> open() async {
if (!shouldOpenOnNewConnection()) {
return openCompleter!.future;
}
final path = await _getPath();
await File(path).parent.create(recursive: true);
db = await openDatabase(path, version: 3,
onCreate: (Database db, int version) async {
await db.execute('''
create table $_tableCacheObject (
${CacheObject.columnId} integer primary key,
${CacheObject.columnUrl} text,
${CacheObject.columnKey} text,
${CacheObject.columnPath} text,
${CacheObject.columnETag} text,
${CacheObject.columnValidTill} integer,
${CacheObject.columnTouched} integer,
${CacheObject.columnLength} integer
);
create unique index $_tableCacheObject${CacheObject.columnKey}
ON $_tableCacheObject (${CacheObject.columnKey});
''');
}, onUpgrade: (Database db, int oldVersion, int newVersion) async {
// Migration for adding the optional key, does the following:
// Adds the new column
// Creates a unique index for the column
// Migrates over any existing URLs to keys
if (oldVersion <= 1) {
var alreadyHasKeyColumn = false;
try {
await db.execute('''
alter table $_tableCacheObject
add ${CacheObject.columnKey} text;
''');
} on DatabaseException catch (e) {
if (!e.isDuplicateColumnError(CacheObject.columnKey)) rethrow;
alreadyHasKeyColumn = true;
}
await db.execute('''
update $_tableCacheObject
set ${CacheObject.columnKey} = ${CacheObject.columnUrl}
where ${CacheObject.columnKey} is null;
''');
if (!alreadyHasKeyColumn) {
await db.execute('''
create index $_tableCacheObject${CacheObject.columnKey}
on $_tableCacheObject (${CacheObject.columnKey});
''');
}
}
if (oldVersion <= 2) {
try {
await db.execute('''
alter table $_tableCacheObject
add ${CacheObject.columnLength} integer;
''');
} on DatabaseException catch (e) {
if (!e.isDuplicateColumnError(CacheObject.columnLength)) rethrow;
}
}
});
return opened();
}