从无法访问的项目中派生。
db_manager.dart 4.11 KiB
import 'package:flutter/material.dart';
import 'package:jihu_gitlab_app/modules/issues/issue_draft_entity.dart';
import 'package:jihu_gitlab_app/modules/projects/group_details/group_and_project.dart';
import 'package:jihu_gitlab_app/modules/todo_list/widgets/member_entity.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
class DbManager {
static const int _version = 5;
static const String _name = "jihu.db";
static final DbManager _instance = DbManager._internal();
Database? _db;
DbManager._internal();
factory DbManager.instance() => _instance;
Future<Database> open() async {
var databasesPath = await getDatabasesPath();
return await openDatabase(join(databasesPath, _name), version: _version, onCreate: _onCreate, onUpgrade: _onUpgrade);
}
Future<Database> getDb() async {
_db ??= await open();
return Future.value(_db);
}
close() {
return _db?.close();
}
_onCreate(Database db, int version) {
debugPrint('version: $version');
_onUpgrade(db, 1, version);
}
_onUpgrade(Database db, int oldVersion, int newVersion) {
debugPrint('onUpgrade:oldVersion -> $oldVersion, newVersion -> $newVersion');
for (int i = oldVersion + 1; i <= newVersion; i++) {
switch (i) {
case 2:
db.execute(MemberEntity.createTableSql());
db.execute("DROP TABLE IF EXISTS assignees");
break;
case 3:
db.execute(IssueDraftEntity.createTableSql());
break;
case 4:
db.execute(GroupAndProjectEntity.createTableSql);
break;
case 5:
db.execute(GroupAndProjectEntity.addStarredColumn);
break;
default:
break;
}
}
}
Future<int> insert(String table, Map<String, Object?> values, {String? nullColumnHack, ConflictAlgorithm? conflictAlgorithm}) async {
var db = await getDb();
return db.insert(table, values, nullColumnHack: nullColumnHack, conflictAlgorithm: conflictAlgorithm);
}
Future<List<int>> batchInsert(String tableName, List<Map<String, dynamic>> values, {String? nullColumnHack, ConflictAlgorithm? conflictAlgorithm}) async {
var db = await getDb();
return db.transaction((txn) async {
List<int> result = [];
for (var element in values) {
int id = await txn.insert(tableName, element, nullColumnHack: nullColumnHack, conflictAlgorithm: conflictAlgorithm);