Skip to content

Commit e27eda6

Browse files
committed
update bangs
1 parent 7253470 commit e27eda6

16 files changed

Lines changed: 3670 additions & 23 deletions

File tree

app/drift_schemas/bangs/drift_schema_v5.json

Lines changed: 912 additions & 0 deletions
Large diffs are not rendered by default.

app/lib/features/bangs/data/database/database.dart

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@ import 'package:weblibre/features/bangs/data/database/daos/bang.dart';
2525
import 'package:weblibre/features/bangs/data/database/daos/sync.dart';
2626
import 'package:weblibre/features/bangs/data/database/database.drift.dart';
2727
import 'package:weblibre/features/bangs/data/database/database.steps.dart';
28+
import 'package:weblibre/features/bangs/data/database/definitions.drift.dart';
2829
import 'package:weblibre/features/search/domain/fts_tokenizer.dart';
2930

3031
@DriftDatabase(include: {'definitions.drift'}, daos: [BangDao, SyncDao])
3132
class BangDatabase extends $BangDatabase with PrefixQueryBuilderMixin {
3233
@override
33-
final int schemaVersion = 4;
34+
final int schemaVersion = 5;
3435

3536
@override
3637
final int ftsTokenLimit = 6;
@@ -71,13 +72,55 @@ class BangDatabase extends $BangDatabase with PrefixQueryBuilderMixin {
7172
await validateDatabaseSchema();
7273
}
7374

74-
await customStatement('PRAGMA foreign_keys = ON');
75-
7675
if (details.hadUpgrade && details.versionBefore != null) {
7776
if (details.versionBefore! < 3) {
7877
await bang.deleteWhere((t) => t.group.equals(3));
78+
await bangTriggers.deleteWhere((t) => t.group.equals(3));
79+
await bangSync.deleteWhere((t) => t.group.equals(3));
80+
await bangFrequency.deleteWhere((t) => t.group.equals(3));
81+
await bangHistory.deleteWhere((t) => t.group.equals(3));
82+
} else if (details.versionBefore! < 5) {
83+
await bang.deleteWhere((t) => t.group.equals(1));
84+
await bangTriggers.deleteWhere((t) => t.group.equals(1));
85+
await bangSync.deleteWhere((t) => t.group.equals(1));
86+
await bangFrequency.deleteWhere((t) => t.group.equals(1));
87+
await bangHistory.deleteWhere((t) => t.group.equals(1));
88+
89+
await (bang.update()..where((t) => t.group.isBiggerThanValue(0)))
90+
.write(
91+
BangCompanion.custom(group: bang.group - const Constant(1)),
92+
);
93+
await (bangTriggers.update()
94+
..where((t) => t.group.isBiggerThanValue(0)))
95+
.write(
96+
BangTriggersCompanion.custom(
97+
group: bangTriggers.group - const Constant(1),
98+
),
99+
);
100+
await (bangSync.update()..where((t) => t.group.isBiggerThanValue(0)))
101+
.write(
102+
BangSyncCompanion.custom(
103+
group: bangSync.group - const Constant(1),
104+
),
105+
);
106+
await (bangFrequency.update()
107+
..where((t) => t.group.isBiggerThanValue(0)))
108+
.write(
109+
BangFrequencyCompanion.custom(
110+
group: bangFrequency.group - const Constant(1),
111+
),
112+
);
113+
await (bangHistory.update()
114+
..where((t) => t.group.isBiggerThanValue(0)))
115+
.write(
116+
BangHistoryCompanion.custom(
117+
group: bangHistory.group - const Constant(1),
118+
),
119+
);
79120
}
80121
}
122+
123+
await customStatement('PRAGMA foreign_keys = ON');
81124
},
82125
);
83126

@@ -88,11 +131,13 @@ class BangDatabase extends $BangDatabase with PrefixQueryBuilderMixin {
88131
//Too many changes, we switch to a new database
89132
},
90133
from2To3: (m, schema) async {
91-
final bangAtV3 = schema.bang;
92-
await m.addColumn(bangAtV3, bangAtV3.searxngApi);
134+
await m.addColumn(schema.bang, schema.bang.searxngApi);
93135
},
94136
from3To4: (m, schema) async {
95137
await m.alterTable(TableMigration(schema.bangHistory));
96138
},
139+
from4To5: (m, schema) async {
140+
await m.addColumn(schema.bang, schema.bang.snapDomain);
141+
},
97142
);
98143
}

app/lib/features/bangs/data/database/database.steps.dart

Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,10 +1045,263 @@ i1.GeneratedColumn<int> _column_40(String aliasedName) =>
10451045
true,
10461046
type: i1.DriftSqlType.int,
10471047
);
1048+
1049+
final class Schema5 extends i0.VersionedSchema {
1050+
Schema5({required super.database}) : super(version: 5);
1051+
@override
1052+
late final List<i1.DatabaseSchemaEntity> entities = [
1053+
bang,
1054+
bangTriggers,
1055+
idxBangTriggersLookup,
1056+
bangTriggersAfterInsert,
1057+
bangTriggersAfterUpdate,
1058+
bangSync,
1059+
bangFrequency,
1060+
bangHistory,
1061+
bangFts,
1062+
bangTriggersFts,
1063+
bangDataView,
1064+
bangAfterInsert,
1065+
bangAfterDelete,
1066+
bangAfterUpdate,
1067+
bangTriggersAfterInsertFts,
1068+
bangTriggersAfterDeleteFts,
1069+
bangTriggersAfterUpdateFts,
1070+
];
1071+
late final Shape15 bang = Shape15(
1072+
source: i0.VersionedTable(
1073+
entityName: 'bang',
1074+
withoutRowId: false,
1075+
isStrict: false,
1076+
tableConstraints: ['PRIMARY KEY("trigger", "group")'],
1077+
columns: [
1078+
_column_0,
1079+
_column_1,
1080+
_column_2,
1081+
_column_3,
1082+
_column_4,
1083+
_column_5,
1084+
_column_6,
1085+
_column_7,
1086+
_column_26,
1087+
_column_32,
1088+
_column_41,
1089+
],
1090+
attachedDatabase: database,
1091+
),
1092+
alias: null,
1093+
);
1094+
late final Shape7 bangTriggers = Shape7(
1095+
source: i0.VersionedTable(
1096+
entityName: 'bang_triggers',
1097+
withoutRowId: false,
1098+
isStrict: false,
1099+
tableConstraints: [
1100+
'PRIMARY KEY("trigger", "group", additional_trigger)',
1101+
'FOREIGN KEY("trigger", "group")REFERENCES bang("trigger", "group")ON DELETE CASCADE',
1102+
],
1103+
columns: [_column_0, _column_1, _column_28],
1104+
attachedDatabase: database,
1105+
),
1106+
alias: null,
1107+
);
1108+
final i1.Index idxBangTriggersLookup = i1.Index(
1109+
'idx_bang_triggers_lookup',
1110+
'CREATE INDEX idx_bang_triggers_lookup ON bang_triggers (additional_trigger, "group")',
1111+
);
1112+
final i1.Trigger bangTriggersAfterInsert = i1.Trigger(
1113+
'CREATE TRIGGER bang_triggers_after_insert AFTER INSERT ON bang WHEN new.additional_triggers IS NOT NULL BEGIN INSERT INTO bang_triggers ("trigger", "group", additional_trigger) SELECT new."trigger", new."group", json_each.value FROM json_each(new.additional_triggers);END',
1114+
'bang_triggers_after_insert',
1115+
);
1116+
final i1.Trigger bangTriggersAfterUpdate = i1.Trigger(
1117+
'CREATE TRIGGER bang_triggers_after_update AFTER UPDATE ON bang BEGIN DELETE FROM bang_triggers WHERE "trigger" = old."trigger" AND "group" = old."group";INSERT INTO bang_triggers ("trigger", "group", additional_trigger) SELECT new."trigger", new."group", json_each.value FROM json_each(new.additional_triggers)WHERE new.additional_triggers IS NOT NULL;END',
1118+
'bang_triggers_after_update',
1119+
);
1120+
late final Shape11 bangSync = Shape11(
1121+
source: i0.VersionedTable(
1122+
entityName: 'bang_sync',
1123+
withoutRowId: false,
1124+
isStrict: false,
1125+
tableConstraints: [],
1126+
columns: [_column_8, _column_33],
1127+
attachedDatabase: database,
1128+
),
1129+
alias: null,
1130+
);
1131+
late final Shape12 bangFrequency = Shape12(
1132+
source: i0.VersionedTable(
1133+
entityName: 'bang_frequency',
1134+
withoutRowId: false,
1135+
isStrict: false,
1136+
tableConstraints: [
1137+
'PRIMARY KEY("trigger", "group")',
1138+
'FOREIGN KEY("trigger", "group")REFERENCES bang("trigger", "group")ON DELETE CASCADE',
1139+
],
1140+
columns: [_column_0, _column_1, _column_10, _column_34],
1141+
attachedDatabase: database,
1142+
),
1143+
alias: null,
1144+
);
1145+
late final Shape13 bangHistory = Shape13(
1146+
source: i0.VersionedTable(
1147+
entityName: 'bang_history',
1148+
withoutRowId: false,
1149+
isStrict: false,
1150+
tableConstraints: [
1151+
'FOREIGN KEY("trigger", "group")REFERENCES bang("trigger", "group")ON DELETE CASCADE',
1152+
],
1153+
columns: [_column_12, _column_0, _column_1, _column_35],
1154+
attachedDatabase: database,
1155+
),
1156+
alias: null,
1157+
);
1158+
late final Shape4 bangFts = Shape4(
1159+
source: i0.VersionedVirtualTable(
1160+
entityName: 'bang_fts',
1161+
moduleAndArgs:
1162+
'fts5(trigger, website_name, content=bang, prefix=\'2 3\')',
1163+
columns: [_column_36, _column_37],
1164+
attachedDatabase: database,
1165+
),
1166+
alias: null,
1167+
);
1168+
late final Shape8 bangTriggersFts = Shape8(
1169+
source: i0.VersionedVirtualTable(
1170+
entityName: 'bang_triggers_fts',
1171+
moduleAndArgs:
1172+
'fts5(additional_trigger, content=bang_triggers, prefix=\'2 3\')',
1173+
columns: [_column_38],
1174+
attachedDatabase: database,
1175+
),
1176+
alias: null,
1177+
);
1178+
late final Shape16 bangDataView = Shape16(
1179+
source: i0.VersionedView(
1180+
entityName: 'bang_data_view',
1181+
createViewStmt:
1182+
'CREATE VIEW bang_data_view AS SELECT b.*, bf.frequency, bf.last_used FROM bang AS b LEFT JOIN bang_frequency AS bf ON b."trigger" = bf."trigger" AND b."group" = bf."group";',
1183+
columns: [
1184+
_column_16,
1185+
_column_17,
1186+
_column_18,
1187+
_column_19,
1188+
_column_20,
1189+
_column_21,
1190+
_column_22,
1191+
_column_23,
1192+
_column_30,
1193+
_column_39,
1194+
_column_42,
1195+
_column_24,
1196+
_column_40,
1197+
],
1198+
attachedDatabase: database,
1199+
),
1200+
alias: null,
1201+
);
1202+
final i1.Trigger bangAfterInsert = i1.Trigger(
1203+
'CREATE TRIGGER bang_after_insert AFTER INSERT ON bang BEGIN INSERT INTO bang_fts ("rowid", "trigger", website_name) VALUES (new."rowid", new."trigger", new.website_name);END',
1204+
'bang_after_insert',
1205+
);
1206+
final i1.Trigger bangAfterDelete = i1.Trigger(
1207+
'CREATE TRIGGER bang_after_delete AFTER DELETE ON bang BEGIN INSERT INTO bang_fts (bang_fts, "rowid", "trigger", website_name) VALUES (\'delete\', old."rowid", old."trigger", old.website_name);END',
1208+
'bang_after_delete',
1209+
);
1210+
final i1.Trigger bangAfterUpdate = i1.Trigger(
1211+
'CREATE TRIGGER bang_after_update AFTER UPDATE ON bang BEGIN INSERT INTO bang_fts (bang_fts, "rowid", "trigger", website_name) VALUES (\'delete\', old."rowid", old."trigger", old.website_name);INSERT INTO bang_fts ("rowid", "trigger", website_name) VALUES (new."rowid", new."trigger", new.website_name);END',
1212+
'bang_after_update',
1213+
);
1214+
final i1.Trigger bangTriggersAfterInsertFts = i1.Trigger(
1215+
'CREATE TRIGGER bang_triggers_after_insert_fts AFTER INSERT ON bang_triggers BEGIN INSERT INTO bang_triggers_fts ("rowid", additional_trigger) VALUES (new."rowid", new.additional_trigger);END',
1216+
'bang_triggers_after_insert_fts',
1217+
);
1218+
final i1.Trigger bangTriggersAfterDeleteFts = i1.Trigger(
1219+
'CREATE TRIGGER bang_triggers_after_delete_fts AFTER DELETE ON bang_triggers BEGIN INSERT INTO bang_triggers_fts (bang_triggers_fts, "rowid", additional_trigger) VALUES (\'delete\', old."rowid", old.additional_trigger);END',
1220+
'bang_triggers_after_delete_fts',
1221+
);
1222+
final i1.Trigger bangTriggersAfterUpdateFts = i1.Trigger(
1223+
'CREATE TRIGGER bang_triggers_after_update_fts AFTER UPDATE ON bang_triggers BEGIN INSERT INTO bang_triggers_fts (bang_triggers_fts, "rowid", additional_trigger) VALUES (\'delete\', old."rowid", old.additional_trigger);INSERT INTO bang_triggers_fts ("rowid", additional_trigger) VALUES (new."rowid", new.additional_trigger);END',
1224+
'bang_triggers_after_update_fts',
1225+
);
1226+
}
1227+
1228+
class Shape15 extends i0.VersionedTable {
1229+
Shape15({required super.source, required super.alias}) : super.aliased();
1230+
i1.GeneratedColumn<String> get trigger =>
1231+
columnsByName['trigger']! as i1.GeneratedColumn<String>;
1232+
i1.GeneratedColumn<int> get group =>
1233+
columnsByName['group']! as i1.GeneratedColumn<int>;
1234+
i1.GeneratedColumn<String> get websiteName =>
1235+
columnsByName['website_name']! as i1.GeneratedColumn<String>;
1236+
i1.GeneratedColumn<String> get domain =>
1237+
columnsByName['domain']! as i1.GeneratedColumn<String>;
1238+
i1.GeneratedColumn<String> get urlTemplate =>
1239+
columnsByName['url_template']! as i1.GeneratedColumn<String>;
1240+
i1.GeneratedColumn<String> get category =>
1241+
columnsByName['category']! as i1.GeneratedColumn<String>;
1242+
i1.GeneratedColumn<String> get subCategory =>
1243+
columnsByName['sub_category']! as i1.GeneratedColumn<String>;
1244+
i1.GeneratedColumn<String> get format =>
1245+
columnsByName['format']! as i1.GeneratedColumn<String>;
1246+
i1.GeneratedColumn<String> get additionalTriggers =>
1247+
columnsByName['additional_triggers']! as i1.GeneratedColumn<String>;
1248+
i1.GeneratedColumn<int> get searxngApi =>
1249+
columnsByName['searxng_api']! as i1.GeneratedColumn<int>;
1250+
i1.GeneratedColumn<String> get snapDomain =>
1251+
columnsByName['snap_domain']! as i1.GeneratedColumn<String>;
1252+
}
1253+
1254+
i1.GeneratedColumn<String> _column_41(String aliasedName) =>
1255+
i1.GeneratedColumn<String>(
1256+
'snap_domain',
1257+
aliasedName,
1258+
true,
1259+
type: i1.DriftSqlType.string,
1260+
$customConstraints: '',
1261+
);
1262+
1263+
class Shape16 extends i0.VersionedView {
1264+
Shape16({required super.source, required super.alias}) : super.aliased();
1265+
i1.GeneratedColumn<String> get trigger =>
1266+
columnsByName['trigger']! as i1.GeneratedColumn<String>;
1267+
i1.GeneratedColumn<int> get group =>
1268+
columnsByName['group']! as i1.GeneratedColumn<int>;
1269+
i1.GeneratedColumn<String> get websiteName =>
1270+
columnsByName['website_name']! as i1.GeneratedColumn<String>;
1271+
i1.GeneratedColumn<String> get domain =>
1272+
columnsByName['domain']! as i1.GeneratedColumn<String>;
1273+
i1.GeneratedColumn<String> get urlTemplate =>
1274+
columnsByName['url_template']! as i1.GeneratedColumn<String>;
1275+
i1.GeneratedColumn<String> get category =>
1276+
columnsByName['category']! as i1.GeneratedColumn<String>;
1277+
i1.GeneratedColumn<String> get subCategory =>
1278+
columnsByName['sub_category']! as i1.GeneratedColumn<String>;
1279+
i1.GeneratedColumn<String> get format =>
1280+
columnsByName['format']! as i1.GeneratedColumn<String>;
1281+
i1.GeneratedColumn<String> get additionalTriggers =>
1282+
columnsByName['additional_triggers']! as i1.GeneratedColumn<String>;
1283+
i1.GeneratedColumn<int> get searxngApi =>
1284+
columnsByName['searxng_api']! as i1.GeneratedColumn<int>;
1285+
i1.GeneratedColumn<String> get snapDomain =>
1286+
columnsByName['snap_domain']! as i1.GeneratedColumn<String>;
1287+
i1.GeneratedColumn<int> get frequency =>
1288+
columnsByName['frequency']! as i1.GeneratedColumn<int>;
1289+
i1.GeneratedColumn<int> get lastUsed =>
1290+
columnsByName['last_used']! as i1.GeneratedColumn<int>;
1291+
}
1292+
1293+
i1.GeneratedColumn<String> _column_42(String aliasedName) =>
1294+
i1.GeneratedColumn<String>(
1295+
'snap_domain',
1296+
aliasedName,
1297+
true,
1298+
type: i1.DriftSqlType.string,
1299+
);
10481300
i0.MigrationStepWithVersion migrationSteps({
10491301
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
10501302
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
10511303
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
1304+
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
10521305
}) {
10531306
return (currentVersion, database) async {
10541307
switch (currentVersion) {
@@ -1067,6 +1320,11 @@ i0.MigrationStepWithVersion migrationSteps({
10671320
final migrator = i1.Migrator(database, schema);
10681321
await from3To4(migrator, schema);
10691322
return 4;
1323+
case 4:
1324+
final schema = Schema5(database: database);
1325+
final migrator = i1.Migrator(database, schema);
1326+
await from4To5(migrator, schema);
1327+
return 5;
10701328
default:
10711329
throw ArgumentError.value('Unknown migration from $currentVersion');
10721330
}
@@ -1077,10 +1335,12 @@ i1.OnUpgrade stepByStep({
10771335
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
10781336
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
10791337
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
1338+
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
10801339
}) => i0.VersionedSchema.stepByStepHelper(
10811340
step: migrationSteps(
10821341
from1To2: from1To2,
10831342
from2To3: from2To3,
10841343
from3To4: from3To4,
1344+
from4To5: from4To5,
10851345
),
10861346
);

app/lib/features/bangs/data/database/definitions.drift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ CREATE TABLE bang (
1616
format TEXT MAPPED BY `const BangFormatConverter()`,
1717
additional_triggers TEXT MAPPED BY `const TriggerListConverter()`,
1818
searxng_api BOOL NOT NULL DEFAULT FALSE,
19+
snap_domain TEXT,
1920
PRIMARY KEY ("trigger", "group")
2021
) WITH Bang;
2122

0 commit comments

Comments
 (0)