This commit is contained in:
problematicconsumer
2023-12-01 12:56:24 +03:30
parent 9c165e178b
commit ed614988a2
181 changed files with 3092 additions and 2341 deletions

View File

@@ -0,0 +1,24 @@
// GENERATED CODE, DO NOT EDIT BY HAND.
// ignore_for_file: type=lint
//@dart=2.12
import 'package:drift/drift.dart';
import 'package:drift/internal/migrations.dart';
import 'schema_v1.dart' as v1;
import 'schema_v2.dart' as v2;
import 'schema_v3.dart' as v3;
class GeneratedHelper implements SchemaInstantiationHelper {
@override
GeneratedDatabase databaseForVersion(QueryExecutor db, int version) {
switch (version) {
case 1:
return v1.DatabaseAtV1(db);
case 2:
return v2.DatabaseAtV2(db);
case 3:
return v3.DatabaseAtV3(db);
default:
throw MissingSchemaException(version, const {1, 2, 3});
}
}
}

View File

@@ -0,0 +1,100 @@
// GENERATED CODE, DO NOT EDIT BY HAND.
// ignore_for_file: type=lint
//@dart=2.12
import 'package:drift/drift.dart';
class ProfileEntries extends Table with TableInfo {
@override
final GeneratedDatabase attachedDatabase;
final String? _alias;
ProfileEntries(this.attachedDatabase, [this._alias]);
late final GeneratedColumn<String> id = GeneratedColumn<String>(
'id', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
late final GeneratedColumn<bool> active = GeneratedColumn<bool>(
'active', aliasedName, false,
type: DriftSqlType.bool,
requiredDuringInsert: true,
defaultConstraints:
GeneratedColumn.constraintIsAlways('CHECK ("active" IN (0, 1))'));
late final GeneratedColumn<String> name =
GeneratedColumn<String>('name', aliasedName, false,
additionalChecks: GeneratedColumn.checkTextLength(
minTextLength: 1,
),
type: DriftSqlType.string,
requiredDuringInsert: true);
late final GeneratedColumn<String> url = GeneratedColumn<String>(
'url', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
late final GeneratedColumn<DateTime> lastUpdate = GeneratedColumn<DateTime>(
'last_update', aliasedName, false,
type: DriftSqlType.dateTime, requiredDuringInsert: true);
late final GeneratedColumn<int> updateInterval = GeneratedColumn<int>(
'update_interval', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<int> upload = GeneratedColumn<int>(
'upload', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<int> download = GeneratedColumn<int>(
'download', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<int> total = GeneratedColumn<int>(
'total', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<DateTime> expire = GeneratedColumn<DateTime>(
'expire', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
late final GeneratedColumn<String> webPageUrl = GeneratedColumn<String>(
'web_page_url', aliasedName, true,
type: DriftSqlType.string, requiredDuringInsert: false);
late final GeneratedColumn<String> supportUrl = GeneratedColumn<String>(
'support_url', aliasedName, true,
type: DriftSqlType.string, requiredDuringInsert: false);
@override
List<GeneratedColumn> get $columns => [
id,
active,
name,
url,
lastUpdate,
updateInterval,
upload,
download,
total,
expire,
webPageUrl,
supportUrl
];
@override
String get aliasedName => _alias ?? actualTableName;
@override
String get actualTableName => $name;
static const String $name = 'profile_entries';
@override
Set<GeneratedColumn> get $primaryKey => {id};
@override
Never map(Map<String, dynamic> data, {String? tablePrefix}) {
throw UnsupportedError('TableInfo.map in schema verification code');
}
@override
ProfileEntries createAlias(String alias) {
return ProfileEntries(attachedDatabase, alias);
}
}
class DatabaseAtV1 extends GeneratedDatabase {
DatabaseAtV1(QueryExecutor e) : super(e);
late final ProfileEntries profileEntries = ProfileEntries(this);
@override
Iterable<TableInfo<Table, Object?>> get allTables =>
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
@override
List<DatabaseSchemaEntity> get allSchemaEntities => [profileEntries];
@override
int get schemaVersion => 1;
@override
DriftDatabaseOptions get options =>
const DriftDatabaseOptions(storeDateTimeAsText: true);
}

View File

@@ -0,0 +1,104 @@
// GENERATED CODE, DO NOT EDIT BY HAND.
// ignore_for_file: type=lint
//@dart=2.12
import 'package:drift/drift.dart';
class ProfileEntries extends Table with TableInfo {
@override
final GeneratedDatabase attachedDatabase;
final String? _alias;
ProfileEntries(this.attachedDatabase, [this._alias]);
late final GeneratedColumn<String> id = GeneratedColumn<String>(
'id', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
late final GeneratedColumn<String> type = GeneratedColumn<String>(
'type', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
late final GeneratedColumn<bool> active = GeneratedColumn<bool>(
'active', aliasedName, false,
type: DriftSqlType.bool,
requiredDuringInsert: true,
defaultConstraints:
GeneratedColumn.constraintIsAlways('CHECK ("active" IN (0, 1))'));
late final GeneratedColumn<String> name =
GeneratedColumn<String>('name', aliasedName, false,
additionalChecks: GeneratedColumn.checkTextLength(
minTextLength: 1,
),
type: DriftSqlType.string,
requiredDuringInsert: true);
late final GeneratedColumn<String> url = GeneratedColumn<String>(
'url', aliasedName, true,
type: DriftSqlType.string, requiredDuringInsert: false);
late final GeneratedColumn<DateTime> lastUpdate = GeneratedColumn<DateTime>(
'last_update', aliasedName, false,
type: DriftSqlType.dateTime, requiredDuringInsert: true);
late final GeneratedColumn<int> updateInterval = GeneratedColumn<int>(
'update_interval', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<int> upload = GeneratedColumn<int>(
'upload', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<int> download = GeneratedColumn<int>(
'download', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<int> total = GeneratedColumn<int>(
'total', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<DateTime> expire = GeneratedColumn<DateTime>(
'expire', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
late final GeneratedColumn<String> webPageUrl = GeneratedColumn<String>(
'web_page_url', aliasedName, true,
type: DriftSqlType.string, requiredDuringInsert: false);
late final GeneratedColumn<String> supportUrl = GeneratedColumn<String>(
'support_url', aliasedName, true,
type: DriftSqlType.string, requiredDuringInsert: false);
@override
List<GeneratedColumn> get $columns => [
id,
type,
active,
name,
url,
lastUpdate,
updateInterval,
upload,
download,
total,
expire,
webPageUrl,
supportUrl
];
@override
String get aliasedName => _alias ?? actualTableName;
@override
String get actualTableName => $name;
static const String $name = 'profile_entries';
@override
Set<GeneratedColumn> get $primaryKey => {id};
@override
Never map(Map<String, dynamic> data, {String? tablePrefix}) {
throw UnsupportedError('TableInfo.map in schema verification code');
}
@override
ProfileEntries createAlias(String alias) {
return ProfileEntries(attachedDatabase, alias);
}
}
class DatabaseAtV2 extends GeneratedDatabase {
DatabaseAtV2(QueryExecutor e) : super(e);
late final ProfileEntries profileEntries = ProfileEntries(this);
@override
Iterable<TableInfo<Table, Object?>> get allTables =>
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
@override
List<DatabaseSchemaEntity> get allSchemaEntities => [profileEntries];
@override
int get schemaVersion => 2;
@override
DriftDatabaseOptions get options =>
const DriftDatabaseOptions(storeDateTimeAsText: true);
}

View File

@@ -0,0 +1,168 @@
// GENERATED CODE, DO NOT EDIT BY HAND.
// ignore_for_file: type=lint
//@dart=2.12
import 'package:drift/drift.dart';
class ProfileEntries extends Table with TableInfo {
@override
final GeneratedDatabase attachedDatabase;
final String? _alias;
ProfileEntries(this.attachedDatabase, [this._alias]);
late final GeneratedColumn<String> id = GeneratedColumn<String>(
'id', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
late final GeneratedColumn<String> type = GeneratedColumn<String>(
'type', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
late final GeneratedColumn<bool> active = GeneratedColumn<bool>(
'active', aliasedName, false,
type: DriftSqlType.bool,
requiredDuringInsert: true,
defaultConstraints:
GeneratedColumn.constraintIsAlways('CHECK ("active" IN (0, 1))'));
late final GeneratedColumn<String> name =
GeneratedColumn<String>('name', aliasedName, false,
additionalChecks: GeneratedColumn.checkTextLength(
minTextLength: 1,
),
type: DriftSqlType.string,
requiredDuringInsert: true);
late final GeneratedColumn<String> url = GeneratedColumn<String>(
'url', aliasedName, true,
type: DriftSqlType.string, requiredDuringInsert: false);
late final GeneratedColumn<DateTime> lastUpdate = GeneratedColumn<DateTime>(
'last_update', aliasedName, false,
type: DriftSqlType.dateTime, requiredDuringInsert: true);
late final GeneratedColumn<int> updateInterval = GeneratedColumn<int>(
'update_interval', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<int> upload = GeneratedColumn<int>(
'upload', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<int> download = GeneratedColumn<int>(
'download', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<int> total = GeneratedColumn<int>(
'total', aliasedName, true,
type: DriftSqlType.int, requiredDuringInsert: false);
late final GeneratedColumn<DateTime> expire = GeneratedColumn<DateTime>(
'expire', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
late final GeneratedColumn<String> webPageUrl = GeneratedColumn<String>(
'web_page_url', aliasedName, true,
type: DriftSqlType.string, requiredDuringInsert: false);
late final GeneratedColumn<String> supportUrl = GeneratedColumn<String>(
'support_url', aliasedName, true,
type: DriftSqlType.string, requiredDuringInsert: false);
@override
List<GeneratedColumn> get $columns => [
id,
type,
active,
name,
url,
lastUpdate,
updateInterval,
upload,
download,
total,
expire,
webPageUrl,
supportUrl
];
@override
String get aliasedName => _alias ?? actualTableName;
@override
String get actualTableName => $name;
static const String $name = 'profile_entries';
@override
Set<GeneratedColumn> get $primaryKey => {id};
@override
Never map(Map<String, dynamic> data, {String? tablePrefix}) {
throw UnsupportedError('TableInfo.map in schema verification code');
}
@override
ProfileEntries createAlias(String alias) {
return ProfileEntries(attachedDatabase, alias);
}
}
class GeoAssetEntries extends Table with TableInfo {
@override
final GeneratedDatabase attachedDatabase;
final String? _alias;
GeoAssetEntries(this.attachedDatabase, [this._alias]);
late final GeneratedColumn<String> id = GeneratedColumn<String>(
'id', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
late final GeneratedColumn<String> type = GeneratedColumn<String>(
'type', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
late final GeneratedColumn<bool> active = GeneratedColumn<bool>(
'active', aliasedName, false,
type: DriftSqlType.bool,
requiredDuringInsert: true,
defaultConstraints:
GeneratedColumn.constraintIsAlways('CHECK ("active" IN (0, 1))'));
late final GeneratedColumn<String> name =
GeneratedColumn<String>('name', aliasedName, false,
additionalChecks: GeneratedColumn.checkTextLength(
minTextLength: 1,
),
type: DriftSqlType.string,
requiredDuringInsert: true);
late final GeneratedColumn<String> providerName =
GeneratedColumn<String>('provider_name', aliasedName, false,
additionalChecks: GeneratedColumn.checkTextLength(
minTextLength: 1,
),
type: DriftSqlType.string,
requiredDuringInsert: true);
late final GeneratedColumn<String> version = GeneratedColumn<String>(
'version', aliasedName, true,
type: DriftSqlType.string, requiredDuringInsert: false);
late final GeneratedColumn<DateTime> lastCheck = GeneratedColumn<DateTime>(
'last_check', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
@override
List<GeneratedColumn> get $columns =>
[id, type, active, name, providerName, version, lastCheck];
@override
String get aliasedName => _alias ?? actualTableName;
@override
String get actualTableName => $name;
static const String $name = 'geo_asset_entries';
@override
Set<GeneratedColumn> get $primaryKey => {id};
@override
List<Set<GeneratedColumn>> get uniqueKeys => [
{name, providerName},
];
@override
Never map(Map<String, dynamic> data, {String? tablePrefix}) {
throw UnsupportedError('TableInfo.map in schema verification code');
}
@override
GeoAssetEntries createAlias(String alias) {
return GeoAssetEntries(attachedDatabase, alias);
}
}
class DatabaseAtV3 extends GeneratedDatabase {
DatabaseAtV3(QueryExecutor e) : super(e);
late final ProfileEntries profileEntries = ProfileEntries(this);
late final GeoAssetEntries geoAssetEntries = GeoAssetEntries(this);
@override
Iterable<TableInfo<Table, Object?>> get allTables =>
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
@override
List<DatabaseSchemaEntity> get allSchemaEntities =>
[profileEntries, geoAssetEntries];
@override
int get schemaVersion => 3;
@override
DriftDatabaseOptions get options =>
const DriftDatabaseOptions(storeDateTimeAsText: true);
}

View File

@@ -0,0 +1,42 @@
import 'package:drift_dev/api/migrations.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:hiddify/core/database/app_database.dart';
import 'generated_migrations/schema.dart';
void main() {
late SchemaVerifier verifier;
setUpAll(() {
verifier = SchemaVerifier(GeneratedHelper());
});
test('upgrade from v1 to v2', () async {
final connection = await verifier.startAt(1);
final db = AppDatabase(connection: connection);
await verifier.migrateAndValidate(db, 2);
await db.close();
});
test('upgrade from v2 to v3', () async {
final connection = await verifier.startAt(2);
final db = AppDatabase(connection: connection);
await verifier.migrateAndValidate(db, 3);
final prePopulated = await db.select(db.geoAssetEntries).get();
await db.close();
expect(prePopulated.length, equals(2));
});
test('upgrade from v1 to v3 with pre-population', () async {
final connection = await verifier.startAt(1);
final db = AppDatabase(connection: connection);
await verifier.migrateAndValidate(db, 3);
final prePopulated = await db.select(db.geoAssetEntries).get();
await db.close();
expect(prePopulated.length, equals(2));
});
}