implement user bangs

This commit is contained in:
Fabian Freund
2025-11-21 05:27:44 +01:00
parent d764149759
commit 23b758e729
32 changed files with 3428 additions and 67 deletions
@@ -48,6 +48,10 @@ class BangDao extends DatabaseAccessor<BangDatabase> with $BangDaoMixin {
);
}
Future<int> upsertBang(Bang bang) {
return db.bang.insertOne(bang, mode: InsertMode.insertOrReplace);
}
SingleOrNullSelectable<BangData> getBangData(
BangGroup group,
String trigger,
@@ -18,6 +18,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import 'package:drift/drift.dart';
import 'package:drift/internal/versioned_schema.dart';
import 'package:drift_dev/api/migrations_native.dart';
import 'package:flutter/foundation.dart';
import 'package:weblibre/features/bangs/data/database/daos/bang.dart';
import 'package:weblibre/features/bangs/data/database/daos/sync.dart';
import 'package:weblibre/features/bangs/data/database/database.drift.dart';
@@ -27,7 +30,7 @@ import 'package:weblibre/features/search/domain/fts_tokenizer.dart';
@DriftDatabase(include: {'definitions.drift'}, daos: [BangDao, SyncDao])
class BangDatabase extends $BangDatabase with PrefixQueryBuilderMixin {
@override
final int schemaVersion = 2;
final int schemaVersion = 3;
@override
final int ftsTokenLimit = 6;
@@ -36,15 +39,57 @@ class BangDatabase extends $BangDatabase with PrefixQueryBuilderMixin {
@override
MigrationStrategy get migration => MigrationStrategy(
beforeOpen: (details) async {
await customStatement('PRAGMA foreign_keys = ON;');
onUpgrade: (m, from, to) async {
// Following the advice from https://drift.simonbinder.eu/Migrations/api/#general-tips
await customStatement('PRAGMA foreign_keys = OFF');
await transaction(
() => VersionedSchema.runMigrationSteps(
migrator: m,
from: from,
to: to,
steps: _upgrade,
),
);
if (kDebugMode) {
final wrongForeignKeys = await customSelect(
'PRAGMA foreign_key_check',
).get();
assert(
wrongForeignKeys.isEmpty,
'${wrongForeignKeys.map((e) => e.data)}',
);
}
await customStatement('PRAGMA foreign_keys = ON');
},
beforeOpen: (details) async {
if (kDebugMode) {
// This check pulls in a fair amount of code that's not needed
// anywhere else, so we recommend only doing it in debug builds.
await validateDatabaseSchema();
}
await customStatement('PRAGMA foreign_keys = ON');
if (details.hadUpgrade && details.versionBefore != null) {
if (details.versionBefore! < 3) {
await bang.deleteWhere((t) => t.group.equals(3));
}
}
},
onUpgrade: stepByStep(
from1To2: (m, schema) async {
//Too many changes, we switch to a new database
},
),
);
BangDatabase(super.e);
static final _upgrade = migrationSteps(
from1To2: (m, schema) async {
//Too many changes, we switch to a new database
},
from2To3: (m, schema) async {
final bangAtV3 = schema.bang;
await m.addColumn(bangAtV3, bangAtV3.searxngApi);
},
);
}
@@ -408,8 +408,308 @@ i1.GeneratedColumn<DateTime> _column_25(String aliasedName) =>
true,
type: i1.DriftSqlType.dateTime,
);
final class Schema3 extends i0.VersionedSchema {
Schema3({required super.database}) : super(version: 3);
@override
late final List<i1.DatabaseSchemaEntity> entities = [
bang,
bangTriggers,
idxBangTriggersLookup,
bangTriggersAfterInsert,
bangTriggersAfterUpdate,
bangSync,
bangFrequency,
bangHistory,
bangFts,
bangTriggersFts,
bangDataView,
bangAfterInsert,
bangAfterDelete,
bangAfterUpdate,
bangTriggersAfterInsertFts,
bangTriggersAfterDeleteFts,
bangTriggersAfterUpdateFts,
];
late final Shape6 bang = Shape6(
source: i0.VersionedTable(
entityName: 'bang',
withoutRowId: false,
isStrict: false,
tableConstraints: ['PRIMARY KEY("trigger", "group")'],
columns: [
_column_0,
_column_1,
_column_2,
_column_3,
_column_4,
_column_5,
_column_6,
_column_7,
_column_26,
_column_27,
],
attachedDatabase: database,
),
alias: null,
);
late final Shape7 bangTriggers = Shape7(
source: i0.VersionedTable(
entityName: 'bang_triggers',
withoutRowId: false,
isStrict: false,
tableConstraints: [
'PRIMARY KEY("trigger", "group", additional_trigger)',
'FOREIGN KEY("trigger", "group")REFERENCES bang("trigger", "group")ON DELETE CASCADE',
],
columns: [_column_0, _column_1, _column_28],
attachedDatabase: database,
),
alias: null,
);
final i1.Index idxBangTriggersLookup = i1.Index(
'idx_bang_triggers_lookup',
'CREATE INDEX idx_bang_triggers_lookup ON bang_triggers (additional_trigger, "group")',
);
final i1.Trigger bangTriggersAfterInsert = i1.Trigger(
'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',
'bang_triggers_after_insert',
);
final i1.Trigger bangTriggersAfterUpdate = i1.Trigger(
'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',
'bang_triggers_after_update',
);
late final Shape1 bangSync = Shape1(
source: i0.VersionedTable(
entityName: 'bang_sync',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_8, _column_9],
attachedDatabase: database,
),
alias: null,
);
late final Shape2 bangFrequency = Shape2(
source: i0.VersionedTable(
entityName: 'bang_frequency',
withoutRowId: false,
isStrict: false,
tableConstraints: [
'PRIMARY KEY("trigger", "group")',
'FOREIGN KEY("trigger", "group")REFERENCES bang("trigger", "group")ON DELETE CASCADE',
],
columns: [_column_0, _column_1, _column_10, _column_11],
attachedDatabase: database,
),
alias: null,
);
late final Shape3 bangHistory = Shape3(
source: i0.VersionedTable(
entityName: 'bang_history',
withoutRowId: false,
isStrict: false,
tableConstraints: [
'FOREIGN KEY("trigger", "group")REFERENCES bang("trigger", "group")',
],
columns: [_column_12, _column_0, _column_1, _column_13],
attachedDatabase: database,
),
alias: null,
);
late final Shape4 bangFts = Shape4(
source: i0.VersionedVirtualTable(
entityName: 'bang_fts',
moduleAndArgs:
'fts5(trigger, website_name, content=bang, prefix=\'2 3\')',
columns: [_column_14, _column_15],
attachedDatabase: database,
),
alias: null,
);
late final Shape8 bangTriggersFts = Shape8(
source: i0.VersionedVirtualTable(
entityName: 'bang_triggers_fts',
moduleAndArgs:
'fts5(additional_trigger, content=bang_triggers, prefix=\'2 3\')',
columns: [_column_29],
attachedDatabase: database,
),
alias: null,
);
late final Shape9 bangDataView = Shape9(
source: i0.VersionedView(
entityName: 'bang_data_view',
createViewStmt:
'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";',
columns: [
_column_16,
_column_17,
_column_18,
_column_19,
_column_20,
_column_21,
_column_22,
_column_23,
_column_30,
_column_31,
_column_24,
_column_25,
],
attachedDatabase: database,
),
alias: null,
);
final i1.Trigger bangAfterInsert = i1.Trigger(
'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',
'bang_after_insert',
);
final i1.Trigger bangAfterDelete = i1.Trigger(
'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',
'bang_after_delete',
);
final i1.Trigger bangAfterUpdate = i1.Trigger(
'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',
'bang_after_update',
);
final i1.Trigger bangTriggersAfterInsertFts = i1.Trigger(
'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',
'bang_triggers_after_insert_fts',
);
final i1.Trigger bangTriggersAfterDeleteFts = i1.Trigger(
'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',
'bang_triggers_after_delete_fts',
);
final i1.Trigger bangTriggersAfterUpdateFts = i1.Trigger(
'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',
'bang_triggers_after_update_fts',
);
}
class Shape6 extends i0.VersionedTable {
Shape6({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<String> get trigger =>
columnsByName['trigger']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get group =>
columnsByName['group']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get websiteName =>
columnsByName['website_name']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get domain =>
columnsByName['domain']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get urlTemplate =>
columnsByName['url_template']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get category =>
columnsByName['category']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get subCategory =>
columnsByName['sub_category']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get format =>
columnsByName['format']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get additionalTriggers =>
columnsByName['additional_triggers']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<bool> get searxngApi =>
columnsByName['searxng_api']! as i1.GeneratedColumn<bool>;
}
i1.GeneratedColumn<String> _column_26(String aliasedName) =>
i1.GeneratedColumn<String>(
'additional_triggers',
aliasedName,
true,
type: i1.DriftSqlType.string,
$customConstraints: '',
);
i1.GeneratedColumn<bool> _column_27(String aliasedName) =>
i1.GeneratedColumn<bool>(
'searxng_api',
aliasedName,
false,
type: i1.DriftSqlType.bool,
$customConstraints: 'NOT NULL DEFAULT FALSE',
defaultValue: const CustomExpression('FALSE'),
);
class Shape7 extends i0.VersionedTable {
Shape7({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<String> get trigger =>
columnsByName['trigger']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get group =>
columnsByName['group']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get additionalTrigger =>
columnsByName['additional_trigger']! as i1.GeneratedColumn<String>;
}
i1.GeneratedColumn<String> _column_28(String aliasedName) =>
i1.GeneratedColumn<String>(
'additional_trigger',
aliasedName,
false,
type: i1.DriftSqlType.string,
$customConstraints: 'NOT NULL',
);
class Shape8 extends i0.VersionedVirtualTable {
Shape8({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<String> get additionalTrigger =>
columnsByName['additional_trigger']! as i1.GeneratedColumn<String>;
}
i1.GeneratedColumn<String> _column_29(String aliasedName) =>
i1.GeneratedColumn<String>(
'additional_trigger',
aliasedName,
false,
type: i1.DriftSqlType.string,
$customConstraints: '',
);
class Shape9 extends i0.VersionedView {
Shape9({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<String> get trigger =>
columnsByName['trigger']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get group =>
columnsByName['group']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get websiteName =>
columnsByName['website_name']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get domain =>
columnsByName['domain']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get urlTemplate =>
columnsByName['url_template']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get category =>
columnsByName['category']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get subCategory =>
columnsByName['sub_category']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get format =>
columnsByName['format']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get additionalTriggers =>
columnsByName['additional_triggers']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<bool> get searxngApi =>
columnsByName['searxng_api']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<int> get frequency =>
columnsByName['frequency']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<DateTime> get lastUsed =>
columnsByName['last_used']! as i1.GeneratedColumn<DateTime>;
}
i1.GeneratedColumn<String> _column_30(String aliasedName) =>
i1.GeneratedColumn<String>(
'additional_triggers',
aliasedName,
true,
type: i1.DriftSqlType.string,
);
i1.GeneratedColumn<bool> _column_31(String aliasedName) =>
i1.GeneratedColumn<bool>(
'searxng_api',
aliasedName,
false,
type: i1.DriftSqlType.bool,
defaultConstraints: i1.GeneratedColumn.constraintIsAlways(
'CHECK ("searxng_api" IN (0, 1))',
),
);
i0.MigrationStepWithVersion migrationSteps({
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
}) {
return (currentVersion, database) async {
switch (currentVersion) {
@@ -418,6 +718,11 @@ i0.MigrationStepWithVersion migrationSteps({
final migrator = i1.Migrator(database, schema);
await from1To2(migrator, schema);
return 2;
case 2:
final schema = Schema3(database: database);
final migrator = i1.Migrator(database, schema);
await from2To3(migrator, schema);
return 3;
default:
throw ArgumentError.value('Unknown migration from $currentVersion');
}
@@ -426,6 +731,7 @@ i0.MigrationStepWithVersion migrationSteps({
i1.OnUpgrade stepByStep({
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
}) => i0.VersionedSchema.stepByStepHelper(
step: migrationSteps(from1To2: from1To2),
step: migrationSteps(from1To2: from1To2, from2To3: from2To3),
);
@@ -15,6 +15,7 @@ CREATE TABLE bang (
sub_category TEXT,
format TEXT MAPPED BY `const BangFormatConverter()`,
additional_triggers TEXT MAPPED BY `const TriggerListConverter()`,
searxng_api BOOL NOT NULL DEFAULT FALSE,
PRIMARY KEY ("trigger", "group")
) WITH Bang;
@@ -25,6 +25,7 @@ typedef $BangTableCreateCompanionBuilder =
i0.Value<String?> subCategory,
i0.Value<Set<i1.BangFormat>?> format,
i0.Value<Set<String>?> additionalTriggers,
i0.Value<bool> searxngApi,
i0.Value<int> rowid,
});
typedef $BangTableUpdateCompanionBuilder =
@@ -38,6 +39,7 @@ typedef $BangTableUpdateCompanionBuilder =
i0.Value<String?> subCategory,
i0.Value<Set<i1.BangFormat>?> format,
i0.Value<Set<String>?> additionalTriggers,
i0.Value<bool> searxngApi,
i0.Value<int> rowid,
});
@@ -101,6 +103,11 @@ class $BangTableFilterComposer
column: $table.additionalTriggers,
builder: (column) => i0.ColumnWithTypeConverterFilters(column),
);
i0.ColumnFilters<bool> get searxngApi => $composableBuilder(
column: $table.searxngApi,
builder: (column) => i0.ColumnFilters(column),
);
}
class $BangTableOrderingComposer
@@ -156,6 +163,11 @@ class $BangTableOrderingComposer
column: $table.additionalTriggers,
builder: (column) => i0.ColumnOrderings(column),
);
i0.ColumnOrderings<bool> get searxngApi => $composableBuilder(
column: $table.searxngApi,
builder: (column) => i0.ColumnOrderings(column),
);
}
class $BangTableAnnotationComposer
@@ -202,6 +214,11 @@ class $BangTableAnnotationComposer
column: $table.additionalTriggers,
builder: (column) => column,
);
i0.GeneratedColumn<bool> get searxngApi => $composableBuilder(
column: $table.searxngApi,
builder: (column) => column,
);
}
class $BangTableTableManager
@@ -245,6 +262,7 @@ class $BangTableTableManager
i0.Value<Set<i1.BangFormat>?> format = const i0.Value.absent(),
i0.Value<Set<String>?> additionalTriggers =
const i0.Value.absent(),
i0.Value<bool> searxngApi = const i0.Value.absent(),
i0.Value<int> rowid = const i0.Value.absent(),
}) => i3.BangCompanion(
trigger: trigger,
@@ -256,6 +274,7 @@ class $BangTableTableManager
subCategory: subCategory,
format: format,
additionalTriggers: additionalTriggers,
searxngApi: searxngApi,
rowid: rowid,
),
createCompanionCallback:
@@ -270,6 +289,7 @@ class $BangTableTableManager
i0.Value<Set<i1.BangFormat>?> format = const i0.Value.absent(),
i0.Value<Set<String>?> additionalTriggers =
const i0.Value.absent(),
i0.Value<bool> searxngApi = const i0.Value.absent(),
i0.Value<int> rowid = const i0.Value.absent(),
}) => i3.BangCompanion.insert(
trigger: trigger,
@@ -281,6 +301,7 @@ class $BangTableTableManager
subCategory: subCategory,
format: format,
additionalTriggers: additionalTriggers,
searxngApi: searxngApi,
rowid: rowid,
),
withReferenceMapper: (p0) => p0
@@ -1364,6 +1385,15 @@ class BangTable extends i0.Table with i0.TableInfo<BangTable, i1.Bang> {
requiredDuringInsert: false,
$customConstraints: '',
).withConverter<Set<String>?>(i3.BangTable.$converteradditionalTriggers);
late final i0.GeneratedColumn<bool> searxngApi = i0.GeneratedColumn<bool>(
'searxng_api',
aliasedName,
false,
type: i0.DriftSqlType.bool,
requiredDuringInsert: false,
$customConstraints: 'NOT NULL DEFAULT FALSE',
defaultValue: const i0.CustomExpression('FALSE'),
);
@override
List<i0.GeneratedColumn> get $columns => [
trigger,
@@ -1375,6 +1405,7 @@ class BangTable extends i0.Table with i0.TableInfo<BangTable, i1.Bang> {
subCategory,
format,
additionalTriggers,
searxngApi,
];
@override
String get aliasedName => _alias ?? actualTableName;
@@ -1403,6 +1434,10 @@ class BangTable extends i0.Table with i0.TableInfo<BangTable, i1.Bang> {
i0.DriftSqlType.string,
data['${effectivePrefix}url_template'],
)!,
searxngApi: attachedDatabase.typeMapping.read(
i0.DriftSqlType.bool,
data['${effectivePrefix}searxng_api'],
)!,
group: i3.BangTable.$convertergroup.fromSql(
attachedDatabase.typeMapping.read(
i0.DriftSqlType.int,
@@ -1461,6 +1496,7 @@ class BangCompanion extends i0.UpdateCompanion<i1.Bang> {
final i0.Value<String?> subCategory;
final i0.Value<Set<i1.BangFormat>?> format;
final i0.Value<Set<String>?> additionalTriggers;
final i0.Value<bool> searxngApi;
final i0.Value<int> rowid;
const BangCompanion({
this.trigger = const i0.Value.absent(),
@@ -1472,6 +1508,7 @@ class BangCompanion extends i0.UpdateCompanion<i1.Bang> {
this.subCategory = const i0.Value.absent(),
this.format = const i0.Value.absent(),
this.additionalTriggers = const i0.Value.absent(),
this.searxngApi = const i0.Value.absent(),
this.rowid = const i0.Value.absent(),
});
BangCompanion.insert({
@@ -1484,6 +1521,7 @@ class BangCompanion extends i0.UpdateCompanion<i1.Bang> {
this.subCategory = const i0.Value.absent(),
this.format = const i0.Value.absent(),
this.additionalTriggers = const i0.Value.absent(),
this.searxngApi = const i0.Value.absent(),
this.rowid = const i0.Value.absent(),
}) : trigger = i0.Value(trigger),
group = i0.Value(group),
@@ -1500,6 +1538,7 @@ class BangCompanion extends i0.UpdateCompanion<i1.Bang> {
i0.Expression<String>? subCategory,
i0.Expression<String>? format,
i0.Expression<String>? additionalTriggers,
i0.Expression<bool>? searxngApi,
i0.Expression<int>? rowid,
}) {
return i0.RawValuesInsertable({
@@ -1512,6 +1551,7 @@ class BangCompanion extends i0.UpdateCompanion<i1.Bang> {
if (subCategory != null) 'sub_category': subCategory,
if (format != null) 'format': format,
if (additionalTriggers != null) 'additional_triggers': additionalTriggers,
if (searxngApi != null) 'searxng_api': searxngApi,
if (rowid != null) 'rowid': rowid,
});
}
@@ -1526,6 +1566,7 @@ class BangCompanion extends i0.UpdateCompanion<i1.Bang> {
i0.Value<String?>? subCategory,
i0.Value<Set<i1.BangFormat>?>? format,
i0.Value<Set<String>?>? additionalTriggers,
i0.Value<bool>? searxngApi,
i0.Value<int>? rowid,
}) {
return i3.BangCompanion(
@@ -1538,6 +1579,7 @@ class BangCompanion extends i0.UpdateCompanion<i1.Bang> {
subCategory: subCategory ?? this.subCategory,
format: format ?? this.format,
additionalTriggers: additionalTriggers ?? this.additionalTriggers,
searxngApi: searxngApi ?? this.searxngApi,
rowid: rowid ?? this.rowid,
);
}
@@ -1580,6 +1622,9 @@ class BangCompanion extends i0.UpdateCompanion<i1.Bang> {
),
);
}
if (searxngApi.present) {
map['searxng_api'] = i0.Variable<bool>(searxngApi.value);
}
if (rowid.present) {
map['rowid'] = i0.Variable<int>(rowid.value);
}
@@ -1598,6 +1643,7 @@ class BangCompanion extends i0.UpdateCompanion<i1.Bang> {
..write('subCategory: $subCategory, ')
..write('format: $format, ')
..write('additionalTriggers: $additionalTriggers, ')
..write('searxngApi: $searxngApi, ')
..write('rowid: $rowid')
..write(')'))
.toString();
@@ -2986,6 +3032,7 @@ class BangDataView extends i0.ViewInfo<i3.BangDataView, i6.BangData>
subCategory,
format,
additionalTriggers,
searxngApi,
frequency,
lastUsed,
];
@@ -3026,6 +3073,10 @@ class BangDataView extends i0.ViewInfo<i3.BangDataView, i6.BangData>
data['${effectivePrefix}group'],
)!,
),
searxngApi: attachedDatabase.typeMapping.read(
i0.DriftSqlType.bool,
data['${effectivePrefix}searxng_api'],
)!,
category: attachedDatabase.typeMapping.read(
i0.DriftSqlType.string,
data['${effectivePrefix}category'],
@@ -3117,6 +3168,15 @@ class BangDataView extends i0.ViewInfo<i3.BangDataView, i6.BangData>
true,
type: i0.DriftSqlType.string,
).withConverter<Set<String>?>(i3.BangTable.$converteradditionalTriggers);
late final i0.GeneratedColumn<bool> searxngApi = i0.GeneratedColumn<bool>(
'searxng_api',
aliasedName,
false,
type: i0.DriftSqlType.bool,
defaultConstraints: i0.GeneratedColumn.constraintIsAlways(
'CHECK ("searxng_api" IN (0, 1))',
),
);
late final i0.GeneratedColumn<int> frequency = i0.GeneratedColumn<int>(
'frequency',
aliasedName,
@@ -3196,6 +3256,7 @@ class DefinitionsDrift extends i7.ModularAccessor {
trigger: row.read<String>('trigger'),
urlTemplate: row.read<String>('url_template'),
group: i3.BangTable.$convertergroup.fromSql(row.read<int>('group')),
searxngApi: row.read<bool>('searxng_api'),
category: row.readNullable<String>('category'),
subCategory: row.readNullable<String>('sub_category'),
format: i3.BangTable.$converterformat.fromSql(
@@ -3222,6 +3283,7 @@ class DefinitionsDrift extends i7.ModularAccessor {
trigger: row.read<String>('trigger'),
urlTemplate: row.read<String>('url_template'),
group: i3.BangTable.$convertergroup.fromSql(row.read<int>('group')),
searxngApi: row.read<bool>('searxng_api'),
category: row.readNullable<String>('category'),
subCategory: row.readNullable<String>('sub_category'),
format: i3.BangTable.$converterformat.fromSql(