diff --git a/drift_schemas/app_database/drift_schema_v7.json b/drift_schemas/app_database/drift_schema_v7.json new file mode 100644 index 00000000..d5047ba0 --- /dev/null +++ b/drift_schemas/app_database/drift_schema_v7.json @@ -0,0 +1 @@ +{"_meta":{"description":"This file contains a serialized version of schema entities for drift.","version":"1.2.0"},"options":{"store_date_time_values_as_text":false},"entities":[{"id":0,"references":[],"type":"table","data":{"name":"chat_rooms","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"name","getter_name":"name","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"description","getter_name":"description","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"is_public","getter_name":"isPublic","moor_type":"bool","nullable":true,"customConstraints":null,"defaultConstraints":"CHECK (\"is_public\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"is_public\" IN (0, 1))"},"default_dart":"const CustomExpression('0')","default_client_dart":null,"dsl_features":[]},{"name":"is_community","getter_name":"isCommunity","moor_type":"bool","nullable":true,"customConstraints":null,"defaultConstraints":"CHECK (\"is_community\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"is_community\" IN (0, 1))"},"default_dart":"const CustomExpression('0')","default_client_dart":null,"dsl_features":[]},{"name":"picture","getter_name":"picture","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const MapConverter()","dart_type_name":"Map"}},{"name":"background","getter_name":"background","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const MapConverter()","dart_type_name":"Map"}},{"name":"realm_id","getter_name":"realmId","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["id"]}},{"id":1,"references":[0],"type":"table","data":{"name":"chat_members","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"chat_room_id","getter_name":"chatRoomId","moor_type":"string","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES chat_rooms (id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES chat_rooms (id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"chat_rooms","column":"id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]},{"name":"account_id","getter_name":"accountId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"account","getter_name":"account","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const MapConverter()","dart_type_name":"Map"}},{"name":"nick","getter_name":"nick","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"role","getter_name":"role","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"notify","getter_name":"notify","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"joined_at","getter_name":"joinedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"break_until","getter_name":"breakUntil","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"timeout_until","getter_name":"timeoutUntil","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"is_bot","getter_name":"isBot","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"is_bot\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"is_bot\" IN (0, 1))"},"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"status","getter_name":"status","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_typed","getter_name":"lastTyped","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["id"]}},{"id":2,"references":[0,1],"type":"table","data":{"name":"chat_messages","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"room_id","getter_name":"roomId","moor_type":"string","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES chat_rooms (id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES chat_rooms (id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"chat_rooms","column":"id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]},{"name":"sender_id","getter_name":"senderId","moor_type":"string","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES chat_members (id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES chat_members (id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"chat_members","column":"id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]},{"name":"content","getter_name":"content","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"nonce","getter_name":"nonce","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"data","getter_name":"data","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"status","getter_name":"status","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumIndexConverter(MessageStatus.values)","dart_type_name":"MessageStatus"}},{"name":"is_deleted","getter_name":"isDeleted","moor_type":"bool","nullable":true,"customConstraints":null,"defaultConstraints":"CHECK (\"is_deleted\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"is_deleted\" IN (0, 1))"},"default_dart":"const CustomExpression('0')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'text\\'')","default_client_dart":null,"dsl_features":[]},{"name":"meta","getter_name":"meta","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'{}\\'')","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const MapConverter()","dart_type_name":"Map"}},{"name":"members_mentioned","getter_name":"membersMentioned","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'[]\\'')","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const ListStringConverter()","dart_type_name":"List"}},{"name":"edited_at","getter_name":"editedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"attachments","getter_name":"attachments","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'[]\\'')","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const ListMapConverter()","dart_type_name":"List>"}},{"name":"reactions","getter_name":"reactions","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'[]\\'')","default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const ListMapConverter()","dart_type_name":"List>"}},{"name":"replied_message_id","getter_name":"repliedMessageId","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"forwarded_message_id","getter_name":"forwardedMessageId","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["id"]}},{"id":3,"references":[],"type":"table","data":{"name":"post_drafts","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"title","getter_name":"title","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"description","getter_name":"description","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"content","getter_name":"content","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"visibility","getter_name":"visibility","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('0')","default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('0')","default_client_dart":null,"dsl_features":[]},{"name":"last_modified","getter_name":"lastModified","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"post_data","getter_name":"postData","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["id"]}}]} \ No newline at end of file diff --git a/lib/database/drift_db.dart b/lib/database/drift_db.dart index 63e14448..b569206a 100644 --- a/lib/database/drift_db.dart +++ b/lib/database/drift_db.dart @@ -2,17 +2,19 @@ import 'dart:convert'; import 'package:drift/drift.dart'; import 'package:island/database/message.dart'; import 'package:island/database/draft.dart'; +import 'package:island/models/account.dart'; +import 'package:island/models/chat.dart'; import 'package:island/models/post.dart'; part 'drift_db.g.dart'; // Define the database -@DriftDatabase(tables: [ChatMessages, PostDrafts]) +@DriftDatabase(tables: [ChatRooms, ChatMembers, ChatMessages, PostDrafts]) class AppDatabase extends _$AppDatabase { AppDatabase(super.e); @override - int get schemaVersion => 7; + int get schemaVersion => 8; @override MigrationStrategy get migration => MigrationStrategy( @@ -55,6 +57,11 @@ class AppDatabase extends _$AppDatabase { } } } + if (from < 8) { + // Add new tables for separate sender and room data + await m.createTable(chatRooms); + await m.createTable(chatMembers); + } }, ); @@ -178,7 +185,9 @@ class AppDatabase extends _$AppDatabase { await (selectStatement ..orderBy([(m) => OrderingTerm.desc(m.createdAt)])) .get(); - return messages.map((msg) => companionToMessage(msg)).toList(); + final messageFutures = + messages.map((msg) => companionToMessage(msg)).toList(); + return await Future.wait(messageFutures); } // Convert between Drift and model objects @@ -206,12 +215,45 @@ class AppDatabase extends _$AppDatabase { ); } - LocalChatMessage companionToMessage(ChatMessage dbMessage) { + Future companionToMessage(ChatMessage dbMessage) async { final data = jsonDecode(dbMessage.data); + SnChatMember? sender; + try { + final senderRow = + await (select(chatMembers) + ..where((m) => m.id.equals(dbMessage.senderId))).getSingle(); + final senderAccount = SnAccount.fromJson(senderRow.account); + SnAccountStatus? senderStatus; + if (senderRow.status != null) { + senderStatus = SnAccountStatus.fromJson(jsonDecode(senderRow.status!)); + } + sender = SnChatMember( + id: senderRow.id, + chatRoomId: senderRow.chatRoomId, + accountId: senderRow.accountId, + account: senderAccount, + nick: senderRow.nick, + role: senderRow.role, + notify: senderRow.notify, + joinedAt: senderRow.joinedAt, + breakUntil: senderRow.breakUntil, + timeoutUntil: senderRow.timeoutUntil, + isBot: senderRow.isBot, + status: senderStatus, + lastTyped: senderRow.lastTyped, + createdAt: senderRow.createdAt, + updatedAt: senderRow.updatedAt, + deletedAt: senderRow.deletedAt, + chatRoom: null, + ); + } catch (_) { + sender = null; + } return LocalChatMessage( id: dbMessage.id, roomId: dbMessage.roomId, senderId: dbMessage.senderId, + sender: sender, data: data, createdAt: dbMessage.createdAt, status: dbMessage.status, diff --git a/lib/database/drift_db.g.dart b/lib/database/drift_db.g.dart index 7069ddad..1e7b60ff 100644 --- a/lib/database/drift_db.g.dart +++ b/lib/database/drift_db.g.dart @@ -3,6 +3,1668 @@ part of 'drift_db.dart'; // ignore_for_file: type=lint +class $ChatRoomsTable extends ChatRooms + with TableInfo<$ChatRoomsTable, ChatRoom> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ChatRoomsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _nameMeta = const VerificationMeta('name'); + @override + late final GeneratedColumn name = GeneratedColumn( + 'name', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _descriptionMeta = const VerificationMeta( + 'description', + ); + @override + late final GeneratedColumn description = GeneratedColumn( + 'description', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _typeMeta = const VerificationMeta('type'); + @override + late final GeneratedColumn type = GeneratedColumn( + 'type', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _isPublicMeta = const VerificationMeta( + 'isPublic', + ); + @override + late final GeneratedColumn isPublic = GeneratedColumn( + 'is_public', + aliasedName, + true, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_public" IN (0, 1))', + ), + defaultValue: const Constant(false), + ); + static const VerificationMeta _isCommunityMeta = const VerificationMeta( + 'isCommunity', + ); + @override + late final GeneratedColumn isCommunity = GeneratedColumn( + 'is_community', + aliasedName, + true, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_community" IN (0, 1))', + ), + defaultValue: const Constant(false), + ); + @override + late final GeneratedColumnWithTypeConverter?, String> + picture = GeneratedColumn( + 'picture', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ).withConverter?>($ChatRoomsTable.$converterpicturen); + @override + late final GeneratedColumnWithTypeConverter?, String> + background = GeneratedColumn( + 'background', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ).withConverter?>($ChatRoomsTable.$converterbackgroundn); + static const VerificationMeta _realmIdMeta = const VerificationMeta( + 'realmId', + ); + @override + late final GeneratedColumn realmId = GeneratedColumn( + 'realm_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _createdAtMeta = const VerificationMeta( + 'createdAt', + ); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _updatedAtMeta = const VerificationMeta( + 'updatedAt', + ); + @override + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _deletedAtMeta = const VerificationMeta( + 'deletedAt', + ); + @override + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + name, + description, + type, + isPublic, + isCommunity, + picture, + background, + realmId, + createdAt, + updatedAt, + deletedAt, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'chat_rooms'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } else if (isInserting) { + context.missing(_idMeta); + } + if (data.containsKey('name')) { + context.handle( + _nameMeta, + name.isAcceptableOrUnknown(data['name']!, _nameMeta), + ); + } + if (data.containsKey('description')) { + context.handle( + _descriptionMeta, + description.isAcceptableOrUnknown( + data['description']!, + _descriptionMeta, + ), + ); + } + if (data.containsKey('type')) { + context.handle( + _typeMeta, + type.isAcceptableOrUnknown(data['type']!, _typeMeta), + ); + } else if (isInserting) { + context.missing(_typeMeta); + } + if (data.containsKey('is_public')) { + context.handle( + _isPublicMeta, + isPublic.isAcceptableOrUnknown(data['is_public']!, _isPublicMeta), + ); + } + if (data.containsKey('is_community')) { + context.handle( + _isCommunityMeta, + isCommunity.isAcceptableOrUnknown( + data['is_community']!, + _isCommunityMeta, + ), + ); + } + if (data.containsKey('realm_id')) { + context.handle( + _realmIdMeta, + realmId.isAcceptableOrUnknown(data['realm_id']!, _realmIdMeta), + ); + } + if (data.containsKey('created_at')) { + context.handle( + _createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta), + ); + } else if (isInserting) { + context.missing(_createdAtMeta); + } + if (data.containsKey('updated_at')) { + context.handle( + _updatedAtMeta, + updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta), + ); + } else if (isInserting) { + context.missing(_updatedAtMeta); + } + if (data.containsKey('deleted_at')) { + context.handle( + _deletedAtMeta, + deletedAt.isAcceptableOrUnknown(data['deleted_at']!, _deletedAtMeta), + ); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + ChatRoom map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ChatRoom( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + name: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}name'], + ), + description: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}description'], + ), + type: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}type'], + )!, + isPublic: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}is_public'], + ), + isCommunity: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}is_community'], + ), + picture: $ChatRoomsTable.$converterpicturen.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}picture'], + ), + ), + background: $ChatRoomsTable.$converterbackgroundn.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}background'], + ), + ), + realmId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}realm_id'], + ), + createdAt: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_at'], + )!, + updatedAt: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + )!, + deletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}deleted_at'], + ), + ); + } + + @override + $ChatRoomsTable createAlias(String alias) { + return $ChatRoomsTable(attachedDatabase, alias); + } + + static TypeConverter, String> $converterpicture = + const MapConverter(); + static TypeConverter?, String?> $converterpicturen = + NullAwareTypeConverter.wrap($converterpicture); + static TypeConverter, String> $converterbackground = + const MapConverter(); + static TypeConverter?, String?> $converterbackgroundn = + NullAwareTypeConverter.wrap($converterbackground); +} + +class ChatRoom extends DataClass implements Insertable { + final String id; + final String? name; + final String? description; + final int type; + final bool? isPublic; + final bool? isCommunity; + final Map? picture; + final Map? background; + final String? realmId; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + const ChatRoom({ + required this.id, + this.name, + this.description, + required this.type, + this.isPublic, + this.isCommunity, + this.picture, + this.background, + this.realmId, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + if (!nullToAbsent || name != null) { + map['name'] = Variable(name); + } + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + map['type'] = Variable(type); + if (!nullToAbsent || isPublic != null) { + map['is_public'] = Variable(isPublic); + } + if (!nullToAbsent || isCommunity != null) { + map['is_community'] = Variable(isCommunity); + } + if (!nullToAbsent || picture != null) { + map['picture'] = Variable( + $ChatRoomsTable.$converterpicturen.toSql(picture), + ); + } + if (!nullToAbsent || background != null) { + map['background'] = Variable( + $ChatRoomsTable.$converterbackgroundn.toSql(background), + ); + } + if (!nullToAbsent || realmId != null) { + map['realm_id'] = Variable(realmId); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + return map; + } + + ChatRoomsCompanion toCompanion(bool nullToAbsent) { + return ChatRoomsCompanion( + id: Value(id), + name: name == null && nullToAbsent ? const Value.absent() : Value(name), + description: + description == null && nullToAbsent + ? const Value.absent() + : Value(description), + type: Value(type), + isPublic: + isPublic == null && nullToAbsent + ? const Value.absent() + : Value(isPublic), + isCommunity: + isCommunity == null && nullToAbsent + ? const Value.absent() + : Value(isCommunity), + picture: + picture == null && nullToAbsent + ? const Value.absent() + : Value(picture), + background: + background == null && nullToAbsent + ? const Value.absent() + : Value(background), + realmId: + realmId == null && nullToAbsent + ? const Value.absent() + : Value(realmId), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: + deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + ); + } + + factory ChatRoom.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ChatRoom( + id: serializer.fromJson(json['id']), + name: serializer.fromJson(json['name']), + description: serializer.fromJson(json['description']), + type: serializer.fromJson(json['type']), + isPublic: serializer.fromJson(json['isPublic']), + isCommunity: serializer.fromJson(json['isCommunity']), + picture: serializer.fromJson?>(json['picture']), + background: serializer.fromJson?>( + json['background'], + ), + realmId: serializer.fromJson(json['realmId']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'name': serializer.toJson(name), + 'description': serializer.toJson(description), + 'type': serializer.toJson(type), + 'isPublic': serializer.toJson(isPublic), + 'isCommunity': serializer.toJson(isCommunity), + 'picture': serializer.toJson?>(picture), + 'background': serializer.toJson?>(background), + 'realmId': serializer.toJson(realmId), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + }; + } + + ChatRoom copyWith({ + String? id, + Value name = const Value.absent(), + Value description = const Value.absent(), + int? type, + Value isPublic = const Value.absent(), + Value isCommunity = const Value.absent(), + Value?> picture = const Value.absent(), + Value?> background = const Value.absent(), + Value realmId = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + }) => ChatRoom( + id: id ?? this.id, + name: name.present ? name.value : this.name, + description: description.present ? description.value : this.description, + type: type ?? this.type, + isPublic: isPublic.present ? isPublic.value : this.isPublic, + isCommunity: isCommunity.present ? isCommunity.value : this.isCommunity, + picture: picture.present ? picture.value : this.picture, + background: background.present ? background.value : this.background, + realmId: realmId.present ? realmId.value : this.realmId, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + ); + ChatRoom copyWithCompanion(ChatRoomsCompanion data) { + return ChatRoom( + id: data.id.present ? data.id.value : this.id, + name: data.name.present ? data.name.value : this.name, + description: + data.description.present ? data.description.value : this.description, + type: data.type.present ? data.type.value : this.type, + isPublic: data.isPublic.present ? data.isPublic.value : this.isPublic, + isCommunity: + data.isCommunity.present ? data.isCommunity.value : this.isCommunity, + picture: data.picture.present ? data.picture.value : this.picture, + background: + data.background.present ? data.background.value : this.background, + realmId: data.realmId.present ? data.realmId.value : this.realmId, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + ); + } + + @override + String toString() { + return (StringBuffer('ChatRoom(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('description: $description, ') + ..write('type: $type, ') + ..write('isPublic: $isPublic, ') + ..write('isCommunity: $isCommunity, ') + ..write('picture: $picture, ') + ..write('background: $background, ') + ..write('realmId: $realmId, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + name, + description, + type, + isPublic, + isCommunity, + picture, + background, + realmId, + createdAt, + updatedAt, + deletedAt, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ChatRoom && + other.id == this.id && + other.name == this.name && + other.description == this.description && + other.type == this.type && + other.isPublic == this.isPublic && + other.isCommunity == this.isCommunity && + other.picture == this.picture && + other.background == this.background && + other.realmId == this.realmId && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt); +} + +class ChatRoomsCompanion extends UpdateCompanion { + final Value id; + final Value name; + final Value description; + final Value type; + final Value isPublic; + final Value isCommunity; + final Value?> picture; + final Value?> background; + final Value realmId; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value rowid; + const ChatRoomsCompanion({ + this.id = const Value.absent(), + this.name = const Value.absent(), + this.description = const Value.absent(), + this.type = const Value.absent(), + this.isPublic = const Value.absent(), + this.isCommunity = const Value.absent(), + this.picture = const Value.absent(), + this.background = const Value.absent(), + this.realmId = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + ChatRoomsCompanion.insert({ + required String id, + this.name = const Value.absent(), + this.description = const Value.absent(), + required int type, + this.isPublic = const Value.absent(), + this.isCommunity = const Value.absent(), + this.picture = const Value.absent(), + this.background = const Value.absent(), + this.realmId = const Value.absent(), + required DateTime createdAt, + required DateTime updatedAt, + this.deletedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + type = Value(type), + createdAt = Value(createdAt), + updatedAt = Value(updatedAt); + static Insertable custom({ + Expression? id, + Expression? name, + Expression? description, + Expression? type, + Expression? isPublic, + Expression? isCommunity, + Expression? picture, + Expression? background, + Expression? realmId, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (name != null) 'name': name, + if (description != null) 'description': description, + if (type != null) 'type': type, + if (isPublic != null) 'is_public': isPublic, + if (isCommunity != null) 'is_community': isCommunity, + if (picture != null) 'picture': picture, + if (background != null) 'background': background, + if (realmId != null) 'realm_id': realmId, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + ChatRoomsCompanion copyWith({ + Value? id, + Value? name, + Value? description, + Value? type, + Value? isPublic, + Value? isCommunity, + Value?>? picture, + Value?>? background, + Value? realmId, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? rowid, + }) { + return ChatRoomsCompanion( + id: id ?? this.id, + name: name ?? this.name, + description: description ?? this.description, + type: type ?? this.type, + isPublic: isPublic ?? this.isPublic, + isCommunity: isCommunity ?? this.isCommunity, + picture: picture ?? this.picture, + background: background ?? this.background, + realmId: realmId ?? this.realmId, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (isPublic.present) { + map['is_public'] = Variable(isPublic.value); + } + if (isCommunity.present) { + map['is_community'] = Variable(isCommunity.value); + } + if (picture.present) { + map['picture'] = Variable( + $ChatRoomsTable.$converterpicturen.toSql(picture.value), + ); + } + if (background.present) { + map['background'] = Variable( + $ChatRoomsTable.$converterbackgroundn.toSql(background.value), + ); + } + if (realmId.present) { + map['realm_id'] = Variable(realmId.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ChatRoomsCompanion(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('description: $description, ') + ..write('type: $type, ') + ..write('isPublic: $isPublic, ') + ..write('isCommunity: $isCommunity, ') + ..write('picture: $picture, ') + ..write('background: $background, ') + ..write('realmId: $realmId, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $ChatMembersTable extends ChatMembers + with TableInfo<$ChatMembersTable, ChatMember> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ChatMembersTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _chatRoomIdMeta = const VerificationMeta( + 'chatRoomId', + ); + @override + late final GeneratedColumn chatRoomId = GeneratedColumn( + 'chat_room_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES chat_rooms (id)', + ), + ); + static const VerificationMeta _accountIdMeta = const VerificationMeta( + 'accountId', + ); + @override + late final GeneratedColumn accountId = GeneratedColumn( + 'account_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + @override + late final GeneratedColumnWithTypeConverter, String> + account = GeneratedColumn( + 'account', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ).withConverter>($ChatMembersTable.$converteraccount); + static const VerificationMeta _nickMeta = const VerificationMeta('nick'); + @override + late final GeneratedColumn nick = GeneratedColumn( + 'nick', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _roleMeta = const VerificationMeta('role'); + @override + late final GeneratedColumn role = GeneratedColumn( + 'role', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _notifyMeta = const VerificationMeta('notify'); + @override + late final GeneratedColumn notify = GeneratedColumn( + 'notify', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _joinedAtMeta = const VerificationMeta( + 'joinedAt', + ); + @override + late final GeneratedColumn joinedAt = GeneratedColumn( + 'joined_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _breakUntilMeta = const VerificationMeta( + 'breakUntil', + ); + @override + late final GeneratedColumn breakUntil = GeneratedColumn( + 'break_until', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _timeoutUntilMeta = const VerificationMeta( + 'timeoutUntil', + ); + @override + late final GeneratedColumn timeoutUntil = GeneratedColumn( + 'timeout_until', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _isBotMeta = const VerificationMeta('isBot'); + @override + late final GeneratedColumn isBot = GeneratedColumn( + 'is_bot', + aliasedName, + false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_bot" IN (0, 1))', + ), + ); + static const VerificationMeta _statusMeta = const VerificationMeta('status'); + @override + late final GeneratedColumn status = GeneratedColumn( + 'status', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _lastTypedMeta = const VerificationMeta( + 'lastTyped', + ); + @override + late final GeneratedColumn lastTyped = GeneratedColumn( + 'last_typed', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _createdAtMeta = const VerificationMeta( + 'createdAt', + ); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _updatedAtMeta = const VerificationMeta( + 'updatedAt', + ); + @override + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _deletedAtMeta = const VerificationMeta( + 'deletedAt', + ); + @override + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + chatRoomId, + accountId, + account, + nick, + role, + notify, + joinedAt, + breakUntil, + timeoutUntil, + isBot, + status, + lastTyped, + createdAt, + updatedAt, + deletedAt, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'chat_members'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } else if (isInserting) { + context.missing(_idMeta); + } + if (data.containsKey('chat_room_id')) { + context.handle( + _chatRoomIdMeta, + chatRoomId.isAcceptableOrUnknown( + data['chat_room_id']!, + _chatRoomIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_chatRoomIdMeta); + } + if (data.containsKey('account_id')) { + context.handle( + _accountIdMeta, + accountId.isAcceptableOrUnknown(data['account_id']!, _accountIdMeta), + ); + } else if (isInserting) { + context.missing(_accountIdMeta); + } + if (data.containsKey('nick')) { + context.handle( + _nickMeta, + nick.isAcceptableOrUnknown(data['nick']!, _nickMeta), + ); + } + if (data.containsKey('role')) { + context.handle( + _roleMeta, + role.isAcceptableOrUnknown(data['role']!, _roleMeta), + ); + } else if (isInserting) { + context.missing(_roleMeta); + } + if (data.containsKey('notify')) { + context.handle( + _notifyMeta, + notify.isAcceptableOrUnknown(data['notify']!, _notifyMeta), + ); + } else if (isInserting) { + context.missing(_notifyMeta); + } + if (data.containsKey('joined_at')) { + context.handle( + _joinedAtMeta, + joinedAt.isAcceptableOrUnknown(data['joined_at']!, _joinedAtMeta), + ); + } + if (data.containsKey('break_until')) { + context.handle( + _breakUntilMeta, + breakUntil.isAcceptableOrUnknown(data['break_until']!, _breakUntilMeta), + ); + } + if (data.containsKey('timeout_until')) { + context.handle( + _timeoutUntilMeta, + timeoutUntil.isAcceptableOrUnknown( + data['timeout_until']!, + _timeoutUntilMeta, + ), + ); + } + if (data.containsKey('is_bot')) { + context.handle( + _isBotMeta, + isBot.isAcceptableOrUnknown(data['is_bot']!, _isBotMeta), + ); + } else if (isInserting) { + context.missing(_isBotMeta); + } + if (data.containsKey('status')) { + context.handle( + _statusMeta, + status.isAcceptableOrUnknown(data['status']!, _statusMeta), + ); + } + if (data.containsKey('last_typed')) { + context.handle( + _lastTypedMeta, + lastTyped.isAcceptableOrUnknown(data['last_typed']!, _lastTypedMeta), + ); + } + if (data.containsKey('created_at')) { + context.handle( + _createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta), + ); + } else if (isInserting) { + context.missing(_createdAtMeta); + } + if (data.containsKey('updated_at')) { + context.handle( + _updatedAtMeta, + updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta), + ); + } else if (isInserting) { + context.missing(_updatedAtMeta); + } + if (data.containsKey('deleted_at')) { + context.handle( + _deletedAtMeta, + deletedAt.isAcceptableOrUnknown(data['deleted_at']!, _deletedAtMeta), + ); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + ChatMember map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ChatMember( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + chatRoomId: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}chat_room_id'], + )!, + accountId: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}account_id'], + )!, + account: $ChatMembersTable.$converteraccount.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}account'], + )!, + ), + nick: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}nick'], + ), + role: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}role'], + )!, + notify: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}notify'], + )!, + joinedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}joined_at'], + ), + breakUntil: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}break_until'], + ), + timeoutUntil: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}timeout_until'], + ), + isBot: + attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}is_bot'], + )!, + status: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}status'], + ), + lastTyped: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_typed'], + ), + createdAt: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_at'], + )!, + updatedAt: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + )!, + deletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}deleted_at'], + ), + ); + } + + @override + $ChatMembersTable createAlias(String alias) { + return $ChatMembersTable(attachedDatabase, alias); + } + + static TypeConverter, String> $converteraccount = + const MapConverter(); +} + +class ChatMember extends DataClass implements Insertable { + final String id; + final String chatRoomId; + final String accountId; + final Map account; + final String? nick; + final int role; + final int notify; + final DateTime? joinedAt; + final DateTime? breakUntil; + final DateTime? timeoutUntil; + final bool isBot; + final String? status; + final DateTime? lastTyped; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + const ChatMember({ + required this.id, + required this.chatRoomId, + required this.accountId, + required this.account, + this.nick, + required this.role, + required this.notify, + this.joinedAt, + this.breakUntil, + this.timeoutUntil, + required this.isBot, + this.status, + this.lastTyped, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['chat_room_id'] = Variable(chatRoomId); + map['account_id'] = Variable(accountId); + { + map['account'] = Variable( + $ChatMembersTable.$converteraccount.toSql(account), + ); + } + if (!nullToAbsent || nick != null) { + map['nick'] = Variable(nick); + } + map['role'] = Variable(role); + map['notify'] = Variable(notify); + if (!nullToAbsent || joinedAt != null) { + map['joined_at'] = Variable(joinedAt); + } + if (!nullToAbsent || breakUntil != null) { + map['break_until'] = Variable(breakUntil); + } + if (!nullToAbsent || timeoutUntil != null) { + map['timeout_until'] = Variable(timeoutUntil); + } + map['is_bot'] = Variable(isBot); + if (!nullToAbsent || status != null) { + map['status'] = Variable(status); + } + if (!nullToAbsent || lastTyped != null) { + map['last_typed'] = Variable(lastTyped); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + return map; + } + + ChatMembersCompanion toCompanion(bool nullToAbsent) { + return ChatMembersCompanion( + id: Value(id), + chatRoomId: Value(chatRoomId), + accountId: Value(accountId), + account: Value(account), + nick: nick == null && nullToAbsent ? const Value.absent() : Value(nick), + role: Value(role), + notify: Value(notify), + joinedAt: + joinedAt == null && nullToAbsent + ? const Value.absent() + : Value(joinedAt), + breakUntil: + breakUntil == null && nullToAbsent + ? const Value.absent() + : Value(breakUntil), + timeoutUntil: + timeoutUntil == null && nullToAbsent + ? const Value.absent() + : Value(timeoutUntil), + isBot: Value(isBot), + status: + status == null && nullToAbsent ? const Value.absent() : Value(status), + lastTyped: + lastTyped == null && nullToAbsent + ? const Value.absent() + : Value(lastTyped), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: + deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + ); + } + + factory ChatMember.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ChatMember( + id: serializer.fromJson(json['id']), + chatRoomId: serializer.fromJson(json['chatRoomId']), + accountId: serializer.fromJson(json['accountId']), + account: serializer.fromJson>(json['account']), + nick: serializer.fromJson(json['nick']), + role: serializer.fromJson(json['role']), + notify: serializer.fromJson(json['notify']), + joinedAt: serializer.fromJson(json['joinedAt']), + breakUntil: serializer.fromJson(json['breakUntil']), + timeoutUntil: serializer.fromJson(json['timeoutUntil']), + isBot: serializer.fromJson(json['isBot']), + status: serializer.fromJson(json['status']), + lastTyped: serializer.fromJson(json['lastTyped']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'chatRoomId': serializer.toJson(chatRoomId), + 'accountId': serializer.toJson(accountId), + 'account': serializer.toJson>(account), + 'nick': serializer.toJson(nick), + 'role': serializer.toJson(role), + 'notify': serializer.toJson(notify), + 'joinedAt': serializer.toJson(joinedAt), + 'breakUntil': serializer.toJson(breakUntil), + 'timeoutUntil': serializer.toJson(timeoutUntil), + 'isBot': serializer.toJson(isBot), + 'status': serializer.toJson(status), + 'lastTyped': serializer.toJson(lastTyped), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + }; + } + + ChatMember copyWith({ + String? id, + String? chatRoomId, + String? accountId, + Map? account, + Value nick = const Value.absent(), + int? role, + int? notify, + Value joinedAt = const Value.absent(), + Value breakUntil = const Value.absent(), + Value timeoutUntil = const Value.absent(), + bool? isBot, + Value status = const Value.absent(), + Value lastTyped = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + }) => ChatMember( + id: id ?? this.id, + chatRoomId: chatRoomId ?? this.chatRoomId, + accountId: accountId ?? this.accountId, + account: account ?? this.account, + nick: nick.present ? nick.value : this.nick, + role: role ?? this.role, + notify: notify ?? this.notify, + joinedAt: joinedAt.present ? joinedAt.value : this.joinedAt, + breakUntil: breakUntil.present ? breakUntil.value : this.breakUntil, + timeoutUntil: timeoutUntil.present ? timeoutUntil.value : this.timeoutUntil, + isBot: isBot ?? this.isBot, + status: status.present ? status.value : this.status, + lastTyped: lastTyped.present ? lastTyped.value : this.lastTyped, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + ); + ChatMember copyWithCompanion(ChatMembersCompanion data) { + return ChatMember( + id: data.id.present ? data.id.value : this.id, + chatRoomId: + data.chatRoomId.present ? data.chatRoomId.value : this.chatRoomId, + accountId: data.accountId.present ? data.accountId.value : this.accountId, + account: data.account.present ? data.account.value : this.account, + nick: data.nick.present ? data.nick.value : this.nick, + role: data.role.present ? data.role.value : this.role, + notify: data.notify.present ? data.notify.value : this.notify, + joinedAt: data.joinedAt.present ? data.joinedAt.value : this.joinedAt, + breakUntil: + data.breakUntil.present ? data.breakUntil.value : this.breakUntil, + timeoutUntil: + data.timeoutUntil.present + ? data.timeoutUntil.value + : this.timeoutUntil, + isBot: data.isBot.present ? data.isBot.value : this.isBot, + status: data.status.present ? data.status.value : this.status, + lastTyped: data.lastTyped.present ? data.lastTyped.value : this.lastTyped, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + ); + } + + @override + String toString() { + return (StringBuffer('ChatMember(') + ..write('id: $id, ') + ..write('chatRoomId: $chatRoomId, ') + ..write('accountId: $accountId, ') + ..write('account: $account, ') + ..write('nick: $nick, ') + ..write('role: $role, ') + ..write('notify: $notify, ') + ..write('joinedAt: $joinedAt, ') + ..write('breakUntil: $breakUntil, ') + ..write('timeoutUntil: $timeoutUntil, ') + ..write('isBot: $isBot, ') + ..write('status: $status, ') + ..write('lastTyped: $lastTyped, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + chatRoomId, + accountId, + account, + nick, + role, + notify, + joinedAt, + breakUntil, + timeoutUntil, + isBot, + status, + lastTyped, + createdAt, + updatedAt, + deletedAt, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ChatMember && + other.id == this.id && + other.chatRoomId == this.chatRoomId && + other.accountId == this.accountId && + other.account == this.account && + other.nick == this.nick && + other.role == this.role && + other.notify == this.notify && + other.joinedAt == this.joinedAt && + other.breakUntil == this.breakUntil && + other.timeoutUntil == this.timeoutUntil && + other.isBot == this.isBot && + other.status == this.status && + other.lastTyped == this.lastTyped && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt); +} + +class ChatMembersCompanion extends UpdateCompanion { + final Value id; + final Value chatRoomId; + final Value accountId; + final Value> account; + final Value nick; + final Value role; + final Value notify; + final Value joinedAt; + final Value breakUntil; + final Value timeoutUntil; + final Value isBot; + final Value status; + final Value lastTyped; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value rowid; + const ChatMembersCompanion({ + this.id = const Value.absent(), + this.chatRoomId = const Value.absent(), + this.accountId = const Value.absent(), + this.account = const Value.absent(), + this.nick = const Value.absent(), + this.role = const Value.absent(), + this.notify = const Value.absent(), + this.joinedAt = const Value.absent(), + this.breakUntil = const Value.absent(), + this.timeoutUntil = const Value.absent(), + this.isBot = const Value.absent(), + this.status = const Value.absent(), + this.lastTyped = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + ChatMembersCompanion.insert({ + required String id, + required String chatRoomId, + required String accountId, + required Map account, + this.nick = const Value.absent(), + required int role, + required int notify, + this.joinedAt = const Value.absent(), + this.breakUntil = const Value.absent(), + this.timeoutUntil = const Value.absent(), + required bool isBot, + this.status = const Value.absent(), + this.lastTyped = const Value.absent(), + required DateTime createdAt, + required DateTime updatedAt, + this.deletedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + chatRoomId = Value(chatRoomId), + accountId = Value(accountId), + account = Value(account), + role = Value(role), + notify = Value(notify), + isBot = Value(isBot), + createdAt = Value(createdAt), + updatedAt = Value(updatedAt); + static Insertable custom({ + Expression? id, + Expression? chatRoomId, + Expression? accountId, + Expression? account, + Expression? nick, + Expression? role, + Expression? notify, + Expression? joinedAt, + Expression? breakUntil, + Expression? timeoutUntil, + Expression? isBot, + Expression? status, + Expression? lastTyped, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (chatRoomId != null) 'chat_room_id': chatRoomId, + if (accountId != null) 'account_id': accountId, + if (account != null) 'account': account, + if (nick != null) 'nick': nick, + if (role != null) 'role': role, + if (notify != null) 'notify': notify, + if (joinedAt != null) 'joined_at': joinedAt, + if (breakUntil != null) 'break_until': breakUntil, + if (timeoutUntil != null) 'timeout_until': timeoutUntil, + if (isBot != null) 'is_bot': isBot, + if (status != null) 'status': status, + if (lastTyped != null) 'last_typed': lastTyped, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + ChatMembersCompanion copyWith({ + Value? id, + Value? chatRoomId, + Value? accountId, + Value>? account, + Value? nick, + Value? role, + Value? notify, + Value? joinedAt, + Value? breakUntil, + Value? timeoutUntil, + Value? isBot, + Value? status, + Value? lastTyped, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? rowid, + }) { + return ChatMembersCompanion( + id: id ?? this.id, + chatRoomId: chatRoomId ?? this.chatRoomId, + accountId: accountId ?? this.accountId, + account: account ?? this.account, + nick: nick ?? this.nick, + role: role ?? this.role, + notify: notify ?? this.notify, + joinedAt: joinedAt ?? this.joinedAt, + breakUntil: breakUntil ?? this.breakUntil, + timeoutUntil: timeoutUntil ?? this.timeoutUntil, + isBot: isBot ?? this.isBot, + status: status ?? this.status, + lastTyped: lastTyped ?? this.lastTyped, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (chatRoomId.present) { + map['chat_room_id'] = Variable(chatRoomId.value); + } + if (accountId.present) { + map['account_id'] = Variable(accountId.value); + } + if (account.present) { + map['account'] = Variable( + $ChatMembersTable.$converteraccount.toSql(account.value), + ); + } + if (nick.present) { + map['nick'] = Variable(nick.value); + } + if (role.present) { + map['role'] = Variable(role.value); + } + if (notify.present) { + map['notify'] = Variable(notify.value); + } + if (joinedAt.present) { + map['joined_at'] = Variable(joinedAt.value); + } + if (breakUntil.present) { + map['break_until'] = Variable(breakUntil.value); + } + if (timeoutUntil.present) { + map['timeout_until'] = Variable(timeoutUntil.value); + } + if (isBot.present) { + map['is_bot'] = Variable(isBot.value); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (lastTyped.present) { + map['last_typed'] = Variable(lastTyped.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ChatMembersCompanion(') + ..write('id: $id, ') + ..write('chatRoomId: $chatRoomId, ') + ..write('accountId: $accountId, ') + ..write('account: $account, ') + ..write('nick: $nick, ') + ..write('role: $role, ') + ..write('notify: $notify, ') + ..write('joinedAt: $joinedAt, ') + ..write('breakUntil: $breakUntil, ') + ..write('timeoutUntil: $timeoutUntil, ') + ..write('isBot: $isBot, ') + ..write('status: $status, ') + ..write('lastTyped: $lastTyped, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + class $ChatMessagesTable extends ChatMessages with TableInfo<$ChatMessagesTable, ChatMessage> { @override @@ -26,6 +1688,9 @@ class $ChatMessagesTable extends ChatMessages false, type: DriftSqlType.string, requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES chat_rooms (id)', + ), ); static const VerificationMeta _senderIdMeta = const VerificationMeta( 'senderId', @@ -37,6 +1702,9 @@ class $ChatMessagesTable extends ChatMessages false, type: DriftSqlType.string, requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES chat_members (id)', + ), ); static const VerificationMeta _contentMeta = const VerificationMeta( 'content', @@ -1632,6 +3300,8 @@ class PostDraftsCompanion extends UpdateCompanion { abstract class _$AppDatabase extends GeneratedDatabase { _$AppDatabase(QueryExecutor e) : super(e); $AppDatabaseManager get managers => $AppDatabaseManager(this); + late final $ChatRoomsTable chatRooms = $ChatRoomsTable(this); + late final $ChatMembersTable chatMembers = $ChatMembersTable(this); late final $ChatMessagesTable chatMessages = $ChatMessagesTable(this); late final $PostDraftsTable postDrafts = $PostDraftsTable(this); @override @@ -1639,11 +3309,1201 @@ abstract class _$AppDatabase extends GeneratedDatabase { allSchemaEntities.whereType>(); @override List get allSchemaEntities => [ + chatRooms, + chatMembers, chatMessages, postDrafts, ]; } +typedef $$ChatRoomsTableCreateCompanionBuilder = + ChatRoomsCompanion Function({ + required String id, + Value name, + Value description, + required int type, + Value isPublic, + Value isCommunity, + Value?> picture, + Value?> background, + Value realmId, + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt, + Value rowid, + }); +typedef $$ChatRoomsTableUpdateCompanionBuilder = + ChatRoomsCompanion Function({ + Value id, + Value name, + Value description, + Value type, + Value isPublic, + Value isCommunity, + Value?> picture, + Value?> background, + Value realmId, + Value createdAt, + Value updatedAt, + Value deletedAt, + Value rowid, + }); + +final class $$ChatRoomsTableReferences + extends BaseReferences<_$AppDatabase, $ChatRoomsTable, ChatRoom> { + $$ChatRoomsTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static MultiTypedResultKey<$ChatMembersTable, List> + _chatMembersRefsTable(_$AppDatabase db) => MultiTypedResultKey.fromTable( + db.chatMembers, + aliasName: $_aliasNameGenerator(db.chatRooms.id, db.chatMembers.chatRoomId), + ); + + $$ChatMembersTableProcessedTableManager get chatMembersRefs { + final manager = $$ChatMembersTableTableManager( + $_db, + $_db.chatMembers, + ).filter((f) => f.chatRoomId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_chatMembersRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + + static MultiTypedResultKey<$ChatMessagesTable, List> + _chatMessagesRefsTable(_$AppDatabase db) => MultiTypedResultKey.fromTable( + db.chatMessages, + aliasName: $_aliasNameGenerator(db.chatRooms.id, db.chatMessages.roomId), + ); + + $$ChatMessagesTableProcessedTableManager get chatMessagesRefs { + final manager = $$ChatMessagesTableTableManager( + $_db, + $_db.chatMessages, + ).filter((f) => f.roomId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_chatMessagesRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } +} + +class $$ChatRoomsTableFilterComposer + extends Composer<_$AppDatabase, $ChatRoomsTable> { + $$ChatRoomsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get description => $composableBuilder( + column: $table.description, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get type => $composableBuilder( + column: $table.type, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get isPublic => $composableBuilder( + column: $table.isPublic, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get isCommunity => $composableBuilder( + column: $table.isCommunity, + builder: (column) => ColumnFilters(column), + ); + + ColumnWithTypeConverterFilters< + Map?, + Map, + String + > + get picture => $composableBuilder( + column: $table.picture, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); + + ColumnWithTypeConverterFilters< + Map?, + Map, + String + > + get background => $composableBuilder( + column: $table.background, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); + + ColumnFilters get realmId => $composableBuilder( + column: $table.realmId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnFilters(column), + ); + + Expression chatMembersRefs( + Expression Function($$ChatMembersTableFilterComposer f) f, + ) { + final $$ChatMembersTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.chatMembers, + getReferencedColumn: (t) => t.chatRoomId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatMembersTableFilterComposer( + $db: $db, + $table: $db.chatMembers, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression chatMessagesRefs( + Expression Function($$ChatMessagesTableFilterComposer f) f, + ) { + final $$ChatMessagesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.chatMessages, + getReferencedColumn: (t) => t.roomId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatMessagesTableFilterComposer( + $db: $db, + $table: $db.chatMessages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$ChatRoomsTableOrderingComposer + extends Composer<_$AppDatabase, $ChatRoomsTable> { + $$ChatRoomsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get name => $composableBuilder( + column: $table.name, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get description => $composableBuilder( + column: $table.description, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get type => $composableBuilder( + column: $table.type, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get isPublic => $composableBuilder( + column: $table.isPublic, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get isCommunity => $composableBuilder( + column: $table.isCommunity, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get picture => $composableBuilder( + column: $table.picture, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get background => $composableBuilder( + column: $table.background, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get realmId => $composableBuilder( + column: $table.realmId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnOrderings(column), + ); +} + +class $$ChatRoomsTableAnnotationComposer + extends Composer<_$AppDatabase, $ChatRoomsTable> { + $$ChatRoomsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get name => + $composableBuilder(column: $table.name, builder: (column) => column); + + GeneratedColumn get description => $composableBuilder( + column: $table.description, + builder: (column) => column, + ); + + GeneratedColumn get type => + $composableBuilder(column: $table.type, builder: (column) => column); + + GeneratedColumn get isPublic => + $composableBuilder(column: $table.isPublic, builder: (column) => column); + + GeneratedColumn get isCommunity => $composableBuilder( + column: $table.isCommunity, + builder: (column) => column, + ); + + GeneratedColumnWithTypeConverter?, String> get picture => + $composableBuilder(column: $table.picture, builder: (column) => column); + + GeneratedColumnWithTypeConverter?, String> + get background => $composableBuilder( + column: $table.background, + builder: (column) => column, + ); + + GeneratedColumn get realmId => + $composableBuilder(column: $table.realmId, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + GeneratedColumn get updatedAt => + $composableBuilder(column: $table.updatedAt, builder: (column) => column); + + GeneratedColumn get deletedAt => + $composableBuilder(column: $table.deletedAt, builder: (column) => column); + + Expression chatMembersRefs( + Expression Function($$ChatMembersTableAnnotationComposer a) f, + ) { + final $$ChatMembersTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.chatMembers, + getReferencedColumn: (t) => t.chatRoomId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatMembersTableAnnotationComposer( + $db: $db, + $table: $db.chatMembers, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression chatMessagesRefs( + Expression Function($$ChatMessagesTableAnnotationComposer a) f, + ) { + final $$ChatMessagesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.chatMessages, + getReferencedColumn: (t) => t.roomId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatMessagesTableAnnotationComposer( + $db: $db, + $table: $db.chatMessages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$ChatRoomsTableTableManager + extends + RootTableManager< + _$AppDatabase, + $ChatRoomsTable, + ChatRoom, + $$ChatRoomsTableFilterComposer, + $$ChatRoomsTableOrderingComposer, + $$ChatRoomsTableAnnotationComposer, + $$ChatRoomsTableCreateCompanionBuilder, + $$ChatRoomsTableUpdateCompanionBuilder, + (ChatRoom, $$ChatRoomsTableReferences), + ChatRoom, + PrefetchHooks Function({bool chatMembersRefs, bool chatMessagesRefs}) + > { + $$ChatRoomsTableTableManager(_$AppDatabase db, $ChatRoomsTable table) + : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$ChatRoomsTableFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $$ChatRoomsTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $$ChatRoomsTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value name = const Value.absent(), + Value description = const Value.absent(), + Value type = const Value.absent(), + Value isPublic = const Value.absent(), + Value isCommunity = const Value.absent(), + Value?> picture = const Value.absent(), + Value?> background = const Value.absent(), + Value realmId = const Value.absent(), + Value createdAt = const Value.absent(), + Value updatedAt = const Value.absent(), + Value deletedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => ChatRoomsCompanion( + id: id, + name: name, + description: description, + type: type, + isPublic: isPublic, + isCommunity: isCommunity, + picture: picture, + background: background, + realmId: realmId, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String id, + Value name = const Value.absent(), + Value description = const Value.absent(), + required int type, + Value isPublic = const Value.absent(), + Value isCommunity = const Value.absent(), + Value?> picture = const Value.absent(), + Value?> background = const Value.absent(), + Value realmId = const Value.absent(), + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => ChatRoomsCompanion.insert( + id: id, + name: name, + description: description, + type: type, + isPublic: isPublic, + isCommunity: isCommunity, + picture: picture, + background: background, + realmId: realmId, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$ChatRoomsTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({ + chatMembersRefs = false, + chatMessagesRefs = false, + }) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [ + if (chatMembersRefs) db.chatMembers, + if (chatMessagesRefs) db.chatMessages, + ], + addJoins: null, + getPrefetchedDataCallback: (items) async { + return [ + if (chatMembersRefs) + await $_getPrefetchedData< + ChatRoom, + $ChatRoomsTable, + ChatMember + >( + currentTable: table, + referencedTable: $$ChatRoomsTableReferences + ._chatMembersRefsTable(db), + managerFromTypedResult: + (p0) => + $$ChatRoomsTableReferences( + db, + table, + p0, + ).chatMembersRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.chatRoomId == item.id, + ), + typedResults: items, + ), + if (chatMessagesRefs) + await $_getPrefetchedData< + ChatRoom, + $ChatRoomsTable, + ChatMessage + >( + currentTable: table, + referencedTable: $$ChatRoomsTableReferences + ._chatMessagesRefsTable(db), + managerFromTypedResult: + (p0) => + $$ChatRoomsTableReferences( + db, + table, + p0, + ).chatMessagesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => + referencedItems.where((e) => e.roomId == item.id), + typedResults: items, + ), + ]; + }, + ); + }, + ), + ); +} + +typedef $$ChatRoomsTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $ChatRoomsTable, + ChatRoom, + $$ChatRoomsTableFilterComposer, + $$ChatRoomsTableOrderingComposer, + $$ChatRoomsTableAnnotationComposer, + $$ChatRoomsTableCreateCompanionBuilder, + $$ChatRoomsTableUpdateCompanionBuilder, + (ChatRoom, $$ChatRoomsTableReferences), + ChatRoom, + PrefetchHooks Function({bool chatMembersRefs, bool chatMessagesRefs}) + >; +typedef $$ChatMembersTableCreateCompanionBuilder = + ChatMembersCompanion Function({ + required String id, + required String chatRoomId, + required String accountId, + required Map account, + Value nick, + required int role, + required int notify, + Value joinedAt, + Value breakUntil, + Value timeoutUntil, + required bool isBot, + Value status, + Value lastTyped, + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt, + Value rowid, + }); +typedef $$ChatMembersTableUpdateCompanionBuilder = + ChatMembersCompanion Function({ + Value id, + Value chatRoomId, + Value accountId, + Value> account, + Value nick, + Value role, + Value notify, + Value joinedAt, + Value breakUntil, + Value timeoutUntil, + Value isBot, + Value status, + Value lastTyped, + Value createdAt, + Value updatedAt, + Value deletedAt, + Value rowid, + }); + +final class $$ChatMembersTableReferences + extends BaseReferences<_$AppDatabase, $ChatMembersTable, ChatMember> { + $$ChatMembersTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $ChatRoomsTable _chatRoomIdTable(_$AppDatabase db) => + db.chatRooms.createAlias( + $_aliasNameGenerator(db.chatMembers.chatRoomId, db.chatRooms.id), + ); + + $$ChatRoomsTableProcessedTableManager get chatRoomId { + final $_column = $_itemColumn('chat_room_id')!; + + final manager = $$ChatRoomsTableTableManager( + $_db, + $_db.chatRooms, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_chatRoomIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static MultiTypedResultKey<$ChatMessagesTable, List> + _chatMessagesRefsTable(_$AppDatabase db) => MultiTypedResultKey.fromTable( + db.chatMessages, + aliasName: $_aliasNameGenerator( + db.chatMembers.id, + db.chatMessages.senderId, + ), + ); + + $$ChatMessagesTableProcessedTableManager get chatMessagesRefs { + final manager = $$ChatMessagesTableTableManager( + $_db, + $_db.chatMessages, + ).filter((f) => f.senderId.id.sqlEquals($_itemColumn('id')!)); + + final cache = $_typedResult.readTableOrNull(_chatMessagesRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } +} + +class $$ChatMembersTableFilterComposer + extends Composer<_$AppDatabase, $ChatMembersTable> { + $$ChatMembersTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get accountId => $composableBuilder( + column: $table.accountId, + builder: (column) => ColumnFilters(column), + ); + + ColumnWithTypeConverterFilters< + Map, + Map, + String + > + get account => $composableBuilder( + column: $table.account, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); + + ColumnFilters get nick => $composableBuilder( + column: $table.nick, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get role => $composableBuilder( + column: $table.role, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get notify => $composableBuilder( + column: $table.notify, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get joinedAt => $composableBuilder( + column: $table.joinedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get breakUntil => $composableBuilder( + column: $table.breakUntil, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get timeoutUntil => $composableBuilder( + column: $table.timeoutUntil, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get isBot => $composableBuilder( + column: $table.isBot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get status => $composableBuilder( + column: $table.status, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get lastTyped => $composableBuilder( + column: $table.lastTyped, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnFilters(column), + ); + + $$ChatRoomsTableFilterComposer get chatRoomId { + final $$ChatRoomsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.chatRoomId, + referencedTable: $db.chatRooms, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatRoomsTableFilterComposer( + $db: $db, + $table: $db.chatRooms, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + Expression chatMessagesRefs( + Expression Function($$ChatMessagesTableFilterComposer f) f, + ) { + final $$ChatMessagesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.chatMessages, + getReferencedColumn: (t) => t.senderId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatMessagesTableFilterComposer( + $db: $db, + $table: $db.chatMessages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$ChatMembersTableOrderingComposer + extends Composer<_$AppDatabase, $ChatMembersTable> { + $$ChatMembersTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get accountId => $composableBuilder( + column: $table.accountId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get account => $composableBuilder( + column: $table.account, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get nick => $composableBuilder( + column: $table.nick, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get role => $composableBuilder( + column: $table.role, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get notify => $composableBuilder( + column: $table.notify, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get joinedAt => $composableBuilder( + column: $table.joinedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get breakUntil => $composableBuilder( + column: $table.breakUntil, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get timeoutUntil => $composableBuilder( + column: $table.timeoutUntil, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get isBot => $composableBuilder( + column: $table.isBot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get status => $composableBuilder( + column: $table.status, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get lastTyped => $composableBuilder( + column: $table.lastTyped, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnOrderings(column), + ); + + $$ChatRoomsTableOrderingComposer get chatRoomId { + final $$ChatRoomsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.chatRoomId, + referencedTable: $db.chatRooms, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatRoomsTableOrderingComposer( + $db: $db, + $table: $db.chatRooms, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$ChatMembersTableAnnotationComposer + extends Composer<_$AppDatabase, $ChatMembersTable> { + $$ChatMembersTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get accountId => + $composableBuilder(column: $table.accountId, builder: (column) => column); + + GeneratedColumnWithTypeConverter, String> get account => + $composableBuilder(column: $table.account, builder: (column) => column); + + GeneratedColumn get nick => + $composableBuilder(column: $table.nick, builder: (column) => column); + + GeneratedColumn get role => + $composableBuilder(column: $table.role, builder: (column) => column); + + GeneratedColumn get notify => + $composableBuilder(column: $table.notify, builder: (column) => column); + + GeneratedColumn get joinedAt => + $composableBuilder(column: $table.joinedAt, builder: (column) => column); + + GeneratedColumn get breakUntil => $composableBuilder( + column: $table.breakUntil, + builder: (column) => column, + ); + + GeneratedColumn get timeoutUntil => $composableBuilder( + column: $table.timeoutUntil, + builder: (column) => column, + ); + + GeneratedColumn get isBot => + $composableBuilder(column: $table.isBot, builder: (column) => column); + + GeneratedColumn get status => + $composableBuilder(column: $table.status, builder: (column) => column); + + GeneratedColumn get lastTyped => + $composableBuilder(column: $table.lastTyped, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + GeneratedColumn get updatedAt => + $composableBuilder(column: $table.updatedAt, builder: (column) => column); + + GeneratedColumn get deletedAt => + $composableBuilder(column: $table.deletedAt, builder: (column) => column); + + $$ChatRoomsTableAnnotationComposer get chatRoomId { + final $$ChatRoomsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.chatRoomId, + referencedTable: $db.chatRooms, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatRoomsTableAnnotationComposer( + $db: $db, + $table: $db.chatRooms, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + Expression chatMessagesRefs( + Expression Function($$ChatMessagesTableAnnotationComposer a) f, + ) { + final $$ChatMessagesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.chatMessages, + getReferencedColumn: (t) => t.senderId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatMessagesTableAnnotationComposer( + $db: $db, + $table: $db.chatMessages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } +} + +class $$ChatMembersTableTableManager + extends + RootTableManager< + _$AppDatabase, + $ChatMembersTable, + ChatMember, + $$ChatMembersTableFilterComposer, + $$ChatMembersTableOrderingComposer, + $$ChatMembersTableAnnotationComposer, + $$ChatMembersTableCreateCompanionBuilder, + $$ChatMembersTableUpdateCompanionBuilder, + (ChatMember, $$ChatMembersTableReferences), + ChatMember, + PrefetchHooks Function({bool chatRoomId, bool chatMessagesRefs}) + > { + $$ChatMembersTableTableManager(_$AppDatabase db, $ChatMembersTable table) + : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: + () => $$ChatMembersTableFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $$ChatMembersTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => + $$ChatMembersTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value chatRoomId = const Value.absent(), + Value accountId = const Value.absent(), + Value> account = const Value.absent(), + Value nick = const Value.absent(), + Value role = const Value.absent(), + Value notify = const Value.absent(), + Value joinedAt = const Value.absent(), + Value breakUntil = const Value.absent(), + Value timeoutUntil = const Value.absent(), + Value isBot = const Value.absent(), + Value status = const Value.absent(), + Value lastTyped = const Value.absent(), + Value createdAt = const Value.absent(), + Value updatedAt = const Value.absent(), + Value deletedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => ChatMembersCompanion( + id: id, + chatRoomId: chatRoomId, + accountId: accountId, + account: account, + nick: nick, + role: role, + notify: notify, + joinedAt: joinedAt, + breakUntil: breakUntil, + timeoutUntil: timeoutUntil, + isBot: isBot, + status: status, + lastTyped: lastTyped, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String id, + required String chatRoomId, + required String accountId, + required Map account, + Value nick = const Value.absent(), + required int role, + required int notify, + Value joinedAt = const Value.absent(), + Value breakUntil = const Value.absent(), + Value timeoutUntil = const Value.absent(), + required bool isBot, + Value status = const Value.absent(), + Value lastTyped = const Value.absent(), + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => ChatMembersCompanion.insert( + id: id, + chatRoomId: chatRoomId, + accountId: accountId, + account: account, + nick: nick, + role: role, + notify: notify, + joinedAt: joinedAt, + breakUntil: breakUntil, + timeoutUntil: timeoutUntil, + isBot: isBot, + status: status, + lastTyped: lastTyped, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $$ChatMembersTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({ + chatRoomId = false, + chatMessagesRefs = false, + }) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [if (chatMessagesRefs) db.chatMessages], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (chatRoomId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.chatRoomId, + referencedTable: $$ChatMembersTableReferences + ._chatRoomIdTable(db), + referencedColumn: + $$ChatMembersTableReferences + ._chatRoomIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return [ + if (chatMessagesRefs) + await $_getPrefetchedData< + ChatMember, + $ChatMembersTable, + ChatMessage + >( + currentTable: table, + referencedTable: $$ChatMembersTableReferences + ._chatMessagesRefsTable(db), + managerFromTypedResult: + (p0) => + $$ChatMembersTableReferences( + db, + table, + p0, + ).chatMessagesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.senderId == item.id, + ), + typedResults: items, + ), + ]; + }, + ); + }, + ), + ); +} + +typedef $$ChatMembersTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $ChatMembersTable, + ChatMember, + $$ChatMembersTableFilterComposer, + $$ChatMembersTableOrderingComposer, + $$ChatMembersTableAnnotationComposer, + $$ChatMembersTableCreateCompanionBuilder, + $$ChatMembersTableUpdateCompanionBuilder, + (ChatMember, $$ChatMembersTableReferences), + ChatMember, + PrefetchHooks Function({bool chatRoomId, bool chatMessagesRefs}) + >; typedef $$ChatMessagesTableCreateCompanionBuilder = ChatMessagesCompanion Function({ required String id, @@ -1691,6 +4551,49 @@ typedef $$ChatMessagesTableUpdateCompanionBuilder = Value rowid, }); +final class $$ChatMessagesTableReferences + extends BaseReferences<_$AppDatabase, $ChatMessagesTable, ChatMessage> { + $$ChatMessagesTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $ChatRoomsTable _roomIdTable(_$AppDatabase db) => + db.chatRooms.createAlias( + $_aliasNameGenerator(db.chatMessages.roomId, db.chatRooms.id), + ); + + $$ChatRoomsTableProcessedTableManager get roomId { + final $_column = $_itemColumn('room_id')!; + + final manager = $$ChatRoomsTableTableManager( + $_db, + $_db.chatRooms, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_roomIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } + + static $ChatMembersTable _senderIdTable(_$AppDatabase db) => + db.chatMembers.createAlias( + $_aliasNameGenerator(db.chatMessages.senderId, db.chatMembers.id), + ); + + $$ChatMembersTableProcessedTableManager get senderId { + final $_column = $_itemColumn('sender_id')!; + + final manager = $$ChatMembersTableTableManager( + $_db, + $_db.chatMembers, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_senderIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } +} + class $$ChatMessagesTableFilterComposer extends Composer<_$AppDatabase, $ChatMessagesTable> { $$ChatMessagesTableFilterComposer({ @@ -1705,16 +4608,6 @@ class $$ChatMessagesTableFilterComposer builder: (column) => ColumnFilters(column), ); - ColumnFilters get roomId => $composableBuilder( - column: $table.roomId, - builder: (column) => ColumnFilters(column), - ); - - ColumnFilters get senderId => $composableBuilder( - column: $table.senderId, - builder: (column) => ColumnFilters(column), - ); - ColumnFilters get content => $composableBuilder( column: $table.content, builder: (column) => ColumnFilters(column), @@ -1811,6 +4704,52 @@ class $$ChatMessagesTableFilterComposer column: $table.forwardedMessageId, builder: (column) => ColumnFilters(column), ); + + $$ChatRoomsTableFilterComposer get roomId { + final $$ChatRoomsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.roomId, + referencedTable: $db.chatRooms, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatRoomsTableFilterComposer( + $db: $db, + $table: $db.chatRooms, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$ChatMembersTableFilterComposer get senderId { + final $$ChatMembersTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.senderId, + referencedTable: $db.chatMembers, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatMembersTableFilterComposer( + $db: $db, + $table: $db.chatMembers, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } } class $$ChatMessagesTableOrderingComposer @@ -1827,16 +4766,6 @@ class $$ChatMessagesTableOrderingComposer builder: (column) => ColumnOrderings(column), ); - ColumnOrderings get roomId => $composableBuilder( - column: $table.roomId, - builder: (column) => ColumnOrderings(column), - ); - - ColumnOrderings get senderId => $composableBuilder( - column: $table.senderId, - builder: (column) => ColumnOrderings(column), - ); - ColumnOrderings get content => $composableBuilder( column: $table.content, builder: (column) => ColumnOrderings(column), @@ -1916,6 +4845,52 @@ class $$ChatMessagesTableOrderingComposer column: $table.forwardedMessageId, builder: (column) => ColumnOrderings(column), ); + + $$ChatRoomsTableOrderingComposer get roomId { + final $$ChatRoomsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.roomId, + referencedTable: $db.chatRooms, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatRoomsTableOrderingComposer( + $db: $db, + $table: $db.chatRooms, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$ChatMembersTableOrderingComposer get senderId { + final $$ChatMembersTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.senderId, + referencedTable: $db.chatMembers, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatMembersTableOrderingComposer( + $db: $db, + $table: $db.chatMembers, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } } class $$ChatMessagesTableAnnotationComposer @@ -1930,12 +4905,6 @@ class $$ChatMessagesTableAnnotationComposer GeneratedColumn get id => $composableBuilder(column: $table.id, builder: (column) => column); - GeneratedColumn get roomId => - $composableBuilder(column: $table.roomId, builder: (column) => column); - - GeneratedColumn get senderId => - $composableBuilder(column: $table.senderId, builder: (column) => column); - GeneratedColumn get content => $composableBuilder(column: $table.content, builder: (column) => column); @@ -1994,6 +4963,52 @@ class $$ChatMessagesTableAnnotationComposer column: $table.forwardedMessageId, builder: (column) => column, ); + + $$ChatRoomsTableAnnotationComposer get roomId { + final $$ChatRoomsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.roomId, + referencedTable: $db.chatRooms, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatRoomsTableAnnotationComposer( + $db: $db, + $table: $db.chatRooms, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } + + $$ChatMembersTableAnnotationComposer get senderId { + final $$ChatMembersTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.senderId, + referencedTable: $db.chatMembers, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ChatMembersTableAnnotationComposer( + $db: $db, + $table: $db.chatMembers, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } } class $$ChatMessagesTableTableManager @@ -2007,12 +5022,9 @@ class $$ChatMessagesTableTableManager $$ChatMessagesTableAnnotationComposer, $$ChatMessagesTableCreateCompanionBuilder, $$ChatMessagesTableUpdateCompanionBuilder, - ( - ChatMessage, - BaseReferences<_$AppDatabase, $ChatMessagesTable, ChatMessage>, - ), + (ChatMessage, $$ChatMessagesTableReferences), ChatMessage, - PrefetchHooks Function() + PrefetchHooks Function({bool roomId, bool senderId}) > { $$ChatMessagesTableTableManager(_$AppDatabase db, $ChatMessagesTable table) : super( @@ -2124,11 +5136,65 @@ class $$ChatMessagesTableTableManager .map( (e) => ( e.readTable(table), - BaseReferences(db, table, e), + $$ChatMessagesTableReferences(db, table, e), ), ) .toList(), - prefetchHooksCallback: null, + prefetchHooksCallback: ({roomId = false, senderId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (roomId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.roomId, + referencedTable: $$ChatMessagesTableReferences + ._roomIdTable(db), + referencedColumn: + $$ChatMessagesTableReferences + ._roomIdTable(db) + .id, + ) + as T; + } + if (senderId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.senderId, + referencedTable: $$ChatMessagesTableReferences + ._senderIdTable(db), + referencedColumn: + $$ChatMessagesTableReferences + ._senderIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, ), ); } @@ -2143,12 +5209,9 @@ typedef $$ChatMessagesTableProcessedTableManager = $$ChatMessagesTableAnnotationComposer, $$ChatMessagesTableCreateCompanionBuilder, $$ChatMessagesTableUpdateCompanionBuilder, - ( - ChatMessage, - BaseReferences<_$AppDatabase, $ChatMessagesTable, ChatMessage>, - ), + (ChatMessage, $$ChatMessagesTableReferences), ChatMessage, - PrefetchHooks Function() + PrefetchHooks Function({bool roomId, bool senderId}) >; typedef $$PostDraftsTableCreateCompanionBuilder = PostDraftsCompanion Function({ @@ -2421,6 +5484,10 @@ typedef $$PostDraftsTableProcessedTableManager = class $AppDatabaseManager { final _$AppDatabase _db; $AppDatabaseManager(this._db); + $$ChatRoomsTableTableManager get chatRooms => + $$ChatRoomsTableTableManager(_db, _db.chatRooms); + $$ChatMembersTableTableManager get chatMembers => + $$ChatMembersTableTableManager(_db, _db.chatMembers); $$ChatMessagesTableTableManager get chatMessages => $$ChatMessagesTableTableManager(_db, _db.chatMessages); $$PostDraftsTableTableManager get postDrafts => diff --git a/lib/database/drift_db.steps.dart b/lib/database/drift_db.steps.dart new file mode 100644 index 00000000..da0e4a2f --- /dev/null +++ b/lib/database/drift_db.steps.dart @@ -0,0 +1,616 @@ +// dart format width=80 +import 'package:drift/internal/versioned_schema.dart' as i0; +import 'package:drift/drift.dart' as i1; +import 'package:drift/drift.dart'; // ignore_for_file: type=lint,unused_import + +// GENERATED BY drift_dev, DO NOT MODIFY. +final class Schema7 extends i0.VersionedSchema { + Schema7({required super.database}) : super(version: 7); + @override + late final List entities = [ + chatRooms, + chatMembers, + chatMessages, + postDrafts, + ]; + late final Shape0 chatRooms = Shape0( + source: i0.VersionedTable( + entityName: 'chat_rooms', + withoutRowId: false, + isStrict: false, + tableConstraints: ['PRIMARY KEY(id)'], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_8, + _column_9, + _column_10, + _column_11, + ], + attachedDatabase: database, + ), + alias: null, + ); + late final Shape1 chatMembers = Shape1( + source: i0.VersionedTable( + entityName: 'chat_members', + withoutRowId: false, + isStrict: false, + tableConstraints: ['PRIMARY KEY(id)'], + columns: [ + _column_0, + _column_12, + _column_13, + _column_14, + _column_15, + _column_16, + _column_17, + _column_18, + _column_19, + _column_20, + _column_21, + _column_22, + _column_23, + _column_9, + _column_10, + _column_11, + ], + attachedDatabase: database, + ), + alias: null, + ); + late final Shape2 chatMessages = Shape2( + source: i0.VersionedTable( + entityName: 'chat_messages', + withoutRowId: false, + isStrict: false, + tableConstraints: ['PRIMARY KEY(id)'], + columns: [ + _column_0, + _column_24, + _column_25, + _column_26, + _column_27, + _column_28, + _column_9, + _column_29, + _column_30, + _column_31, + _column_11, + _column_32, + _column_33, + _column_34, + _column_35, + _column_36, + _column_37, + _column_38, + _column_39, + ], + attachedDatabase: database, + ), + alias: null, + ); + late final Shape3 postDrafts = Shape3( + source: i0.VersionedTable( + entityName: 'post_drafts', + withoutRowId: false, + isStrict: false, + tableConstraints: ['PRIMARY KEY(id)'], + columns: [ + _column_0, + _column_40, + _column_2, + _column_26, + _column_41, + _column_42, + _column_43, + _column_44, + ], + attachedDatabase: database, + ), + alias: null, + ); +} + +class Shape0 extends i0.VersionedTable { + Shape0({required super.source, required super.alias}) : super.aliased(); + i1.GeneratedColumn get id => + columnsByName['id']! as i1.GeneratedColumn; + i1.GeneratedColumn get name => + columnsByName['name']! as i1.GeneratedColumn; + i1.GeneratedColumn get description => + columnsByName['description']! as i1.GeneratedColumn; + i1.GeneratedColumn get type => + columnsByName['type']! as i1.GeneratedColumn; + i1.GeneratedColumn get isPublic => + columnsByName['is_public']! as i1.GeneratedColumn; + i1.GeneratedColumn get isCommunity => + columnsByName['is_community']! as i1.GeneratedColumn; + i1.GeneratedColumn get picture => + columnsByName['picture']! as i1.GeneratedColumn; + i1.GeneratedColumn get background => + columnsByName['background']! as i1.GeneratedColumn; + i1.GeneratedColumn get realmId => + columnsByName['realm_id']! as i1.GeneratedColumn; + i1.GeneratedColumn get createdAt => + columnsByName['created_at']! as i1.GeneratedColumn; + i1.GeneratedColumn get updatedAt => + columnsByName['updated_at']! as i1.GeneratedColumn; + i1.GeneratedColumn get deletedAt => + columnsByName['deleted_at']! as i1.GeneratedColumn; +} + +i1.GeneratedColumn _column_0(String aliasedName) => + i1.GeneratedColumn( + 'id', + aliasedName, + false, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_1(String aliasedName) => + i1.GeneratedColumn( + 'name', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_2(String aliasedName) => + i1.GeneratedColumn( + 'description', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_3(String aliasedName) => + i1.GeneratedColumn( + 'type', + aliasedName, + false, + type: i1.DriftSqlType.int, + ); +i1.GeneratedColumn _column_4(String aliasedName) => + i1.GeneratedColumn( + 'is_public', + aliasedName, + true, + type: i1.DriftSqlType.bool, + defaultConstraints: i1.GeneratedColumn.constraintIsAlways( + 'CHECK ("is_public" IN (0, 1))', + ), + defaultValue: const CustomExpression('0'), + ); +i1.GeneratedColumn _column_5(String aliasedName) => + i1.GeneratedColumn( + 'is_community', + aliasedName, + true, + type: i1.DriftSqlType.bool, + defaultConstraints: i1.GeneratedColumn.constraintIsAlways( + 'CHECK ("is_community" IN (0, 1))', + ), + defaultValue: const CustomExpression('0'), + ); +i1.GeneratedColumn _column_6(String aliasedName) => + i1.GeneratedColumn( + 'picture', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_7(String aliasedName) => + i1.GeneratedColumn( + 'background', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_8(String aliasedName) => + i1.GeneratedColumn( + 'realm_id', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_9(String aliasedName) => + i1.GeneratedColumn( + 'created_at', + aliasedName, + false, + type: i1.DriftSqlType.dateTime, + ); +i1.GeneratedColumn _column_10(String aliasedName) => + i1.GeneratedColumn( + 'updated_at', + aliasedName, + false, + type: i1.DriftSqlType.dateTime, + ); +i1.GeneratedColumn _column_11(String aliasedName) => + i1.GeneratedColumn( + 'deleted_at', + aliasedName, + true, + type: i1.DriftSqlType.dateTime, + ); + +class Shape1 extends i0.VersionedTable { + Shape1({required super.source, required super.alias}) : super.aliased(); + i1.GeneratedColumn get id => + columnsByName['id']! as i1.GeneratedColumn; + i1.GeneratedColumn get chatRoomId => + columnsByName['chat_room_id']! as i1.GeneratedColumn; + i1.GeneratedColumn get accountId => + columnsByName['account_id']! as i1.GeneratedColumn; + i1.GeneratedColumn get account => + columnsByName['account']! as i1.GeneratedColumn; + i1.GeneratedColumn get nick => + columnsByName['nick']! as i1.GeneratedColumn; + i1.GeneratedColumn get role => + columnsByName['role']! as i1.GeneratedColumn; + i1.GeneratedColumn get notify => + columnsByName['notify']! as i1.GeneratedColumn; + i1.GeneratedColumn get joinedAt => + columnsByName['joined_at']! as i1.GeneratedColumn; + i1.GeneratedColumn get breakUntil => + columnsByName['break_until']! as i1.GeneratedColumn; + i1.GeneratedColumn get timeoutUntil => + columnsByName['timeout_until']! as i1.GeneratedColumn; + i1.GeneratedColumn get isBot => + columnsByName['is_bot']! as i1.GeneratedColumn; + i1.GeneratedColumn get status => + columnsByName['status']! as i1.GeneratedColumn; + i1.GeneratedColumn get lastTyped => + columnsByName['last_typed']! as i1.GeneratedColumn; + i1.GeneratedColumn get createdAt => + columnsByName['created_at']! as i1.GeneratedColumn; + i1.GeneratedColumn get updatedAt => + columnsByName['updated_at']! as i1.GeneratedColumn; + i1.GeneratedColumn get deletedAt => + columnsByName['deleted_at']! as i1.GeneratedColumn; +} + +i1.GeneratedColumn _column_12(String aliasedName) => + i1.GeneratedColumn( + 'chat_room_id', + aliasedName, + false, + type: i1.DriftSqlType.string, + defaultConstraints: i1.GeneratedColumn.constraintIsAlways( + 'REFERENCES chat_rooms (id)', + ), + ); +i1.GeneratedColumn _column_13(String aliasedName) => + i1.GeneratedColumn( + 'account_id', + aliasedName, + false, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_14(String aliasedName) => + i1.GeneratedColumn( + 'account', + aliasedName, + false, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_15(String aliasedName) => + i1.GeneratedColumn( + 'nick', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_16(String aliasedName) => + i1.GeneratedColumn( + 'role', + aliasedName, + false, + type: i1.DriftSqlType.int, + ); +i1.GeneratedColumn _column_17(String aliasedName) => + i1.GeneratedColumn( + 'notify', + aliasedName, + false, + type: i1.DriftSqlType.int, + ); +i1.GeneratedColumn _column_18(String aliasedName) => + i1.GeneratedColumn( + 'joined_at', + aliasedName, + true, + type: i1.DriftSqlType.dateTime, + ); +i1.GeneratedColumn _column_19(String aliasedName) => + i1.GeneratedColumn( + 'break_until', + aliasedName, + true, + type: i1.DriftSqlType.dateTime, + ); +i1.GeneratedColumn _column_20(String aliasedName) => + i1.GeneratedColumn( + 'timeout_until', + aliasedName, + true, + type: i1.DriftSqlType.dateTime, + ); +i1.GeneratedColumn _column_21(String aliasedName) => + i1.GeneratedColumn( + 'is_bot', + aliasedName, + false, + type: i1.DriftSqlType.bool, + defaultConstraints: i1.GeneratedColumn.constraintIsAlways( + 'CHECK ("is_bot" IN (0, 1))', + ), + ); +i1.GeneratedColumn _column_22(String aliasedName) => + i1.GeneratedColumn( + 'status', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_23(String aliasedName) => + i1.GeneratedColumn( + 'last_typed', + aliasedName, + true, + type: i1.DriftSqlType.dateTime, + ); + +class Shape2 extends i0.VersionedTable { + Shape2({required super.source, required super.alias}) : super.aliased(); + i1.GeneratedColumn get id => + columnsByName['id']! as i1.GeneratedColumn; + i1.GeneratedColumn get roomId => + columnsByName['room_id']! as i1.GeneratedColumn; + i1.GeneratedColumn get senderId => + columnsByName['sender_id']! as i1.GeneratedColumn; + i1.GeneratedColumn get content => + columnsByName['content']! as i1.GeneratedColumn; + i1.GeneratedColumn get nonce => + columnsByName['nonce']! as i1.GeneratedColumn; + i1.GeneratedColumn get data => + columnsByName['data']! as i1.GeneratedColumn; + i1.GeneratedColumn get createdAt => + columnsByName['created_at']! as i1.GeneratedColumn; + i1.GeneratedColumn get status => + columnsByName['status']! as i1.GeneratedColumn; + i1.GeneratedColumn get isDeleted => + columnsByName['is_deleted']! as i1.GeneratedColumn; + i1.GeneratedColumn get updatedAt => + columnsByName['updated_at']! as i1.GeneratedColumn; + i1.GeneratedColumn get deletedAt => + columnsByName['deleted_at']! as i1.GeneratedColumn; + i1.GeneratedColumn get type => + columnsByName['type']! as i1.GeneratedColumn; + i1.GeneratedColumn get meta => + columnsByName['meta']! as i1.GeneratedColumn; + i1.GeneratedColumn get membersMentioned => + columnsByName['members_mentioned']! as i1.GeneratedColumn; + i1.GeneratedColumn get editedAt => + columnsByName['edited_at']! as i1.GeneratedColumn; + i1.GeneratedColumn get attachments => + columnsByName['attachments']! as i1.GeneratedColumn; + i1.GeneratedColumn get reactions => + columnsByName['reactions']! as i1.GeneratedColumn; + i1.GeneratedColumn get repliedMessageId => + columnsByName['replied_message_id']! as i1.GeneratedColumn; + i1.GeneratedColumn get forwardedMessageId => + columnsByName['forwarded_message_id']! as i1.GeneratedColumn; +} + +i1.GeneratedColumn _column_24(String aliasedName) => + i1.GeneratedColumn( + 'room_id', + aliasedName, + false, + type: i1.DriftSqlType.string, + defaultConstraints: i1.GeneratedColumn.constraintIsAlways( + 'REFERENCES chat_rooms (id)', + ), + ); +i1.GeneratedColumn _column_25(String aliasedName) => + i1.GeneratedColumn( + 'sender_id', + aliasedName, + false, + type: i1.DriftSqlType.string, + defaultConstraints: i1.GeneratedColumn.constraintIsAlways( + 'REFERENCES chat_members (id)', + ), + ); +i1.GeneratedColumn _column_26(String aliasedName) => + i1.GeneratedColumn( + 'content', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_27(String aliasedName) => + i1.GeneratedColumn( + 'nonce', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_28(String aliasedName) => + i1.GeneratedColumn( + 'data', + aliasedName, + false, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_29(String aliasedName) => + i1.GeneratedColumn( + 'status', + aliasedName, + false, + type: i1.DriftSqlType.int, + ); +i1.GeneratedColumn _column_30(String aliasedName) => + i1.GeneratedColumn( + 'is_deleted', + aliasedName, + true, + type: i1.DriftSqlType.bool, + defaultConstraints: i1.GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), + defaultValue: const CustomExpression('0'), + ); +i1.GeneratedColumn _column_31(String aliasedName) => + i1.GeneratedColumn( + 'updated_at', + aliasedName, + true, + type: i1.DriftSqlType.dateTime, + ); +i1.GeneratedColumn _column_32(String aliasedName) => + i1.GeneratedColumn( + 'type', + aliasedName, + false, + type: i1.DriftSqlType.string, + defaultValue: const CustomExpression('\'text\''), + ); +i1.GeneratedColumn _column_33(String aliasedName) => + i1.GeneratedColumn( + 'meta', + aliasedName, + false, + type: i1.DriftSqlType.string, + defaultValue: const CustomExpression('\'{}\''), + ); +i1.GeneratedColumn _column_34(String aliasedName) => + i1.GeneratedColumn( + 'members_mentioned', + aliasedName, + false, + type: i1.DriftSqlType.string, + defaultValue: const CustomExpression('\'[]\''), + ); +i1.GeneratedColumn _column_35(String aliasedName) => + i1.GeneratedColumn( + 'edited_at', + aliasedName, + true, + type: i1.DriftSqlType.dateTime, + ); +i1.GeneratedColumn _column_36(String aliasedName) => + i1.GeneratedColumn( + 'attachments', + aliasedName, + false, + type: i1.DriftSqlType.string, + defaultValue: const CustomExpression('\'[]\''), + ); +i1.GeneratedColumn _column_37(String aliasedName) => + i1.GeneratedColumn( + 'reactions', + aliasedName, + false, + type: i1.DriftSqlType.string, + defaultValue: const CustomExpression('\'[]\''), + ); +i1.GeneratedColumn _column_38(String aliasedName) => + i1.GeneratedColumn( + 'replied_message_id', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_39(String aliasedName) => + i1.GeneratedColumn( + 'forwarded_message_id', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); + +class Shape3 extends i0.VersionedTable { + Shape3({required super.source, required super.alias}) : super.aliased(); + i1.GeneratedColumn get id => + columnsByName['id']! as i1.GeneratedColumn; + i1.GeneratedColumn get title => + columnsByName['title']! as i1.GeneratedColumn; + i1.GeneratedColumn get description => + columnsByName['description']! as i1.GeneratedColumn; + i1.GeneratedColumn get content => + columnsByName['content']! as i1.GeneratedColumn; + i1.GeneratedColumn get visibility => + columnsByName['visibility']! as i1.GeneratedColumn; + i1.GeneratedColumn get type => + columnsByName['type']! as i1.GeneratedColumn; + i1.GeneratedColumn get lastModified => + columnsByName['last_modified']! as i1.GeneratedColumn; + i1.GeneratedColumn get postData => + columnsByName['post_data']! as i1.GeneratedColumn; +} + +i1.GeneratedColumn _column_40(String aliasedName) => + i1.GeneratedColumn( + 'title', + aliasedName, + true, + type: i1.DriftSqlType.string, + ); +i1.GeneratedColumn _column_41(String aliasedName) => + i1.GeneratedColumn( + 'visibility', + aliasedName, + false, + type: i1.DriftSqlType.int, + defaultValue: const CustomExpression('0'), + ); +i1.GeneratedColumn _column_42(String aliasedName) => + i1.GeneratedColumn( + 'type', + aliasedName, + false, + type: i1.DriftSqlType.int, + defaultValue: const CustomExpression('0'), + ); +i1.GeneratedColumn _column_43(String aliasedName) => + i1.GeneratedColumn( + 'last_modified', + aliasedName, + false, + type: i1.DriftSqlType.dateTime, + ); +i1.GeneratedColumn _column_44(String aliasedName) => + i1.GeneratedColumn( + 'post_data', + aliasedName, + false, + type: i1.DriftSqlType.string, + ); +i0.MigrationStepWithVersion migrationSteps({ + required Future Function(i1.Migrator m, Schema7 schema) from6To7, +}) { + return (currentVersion, database) async { + switch (currentVersion) { + case 6: + final schema = Schema7(database: database); + final migrator = i1.Migrator(database, schema); + await from6To7(migrator, schema); + return 7; + default: + throw ArgumentError.value('Unknown migration from $currentVersion'); + } + }; +} + +i1.OnUpgrade stepByStep({ + required Future Function(i1.Migrator m, Schema7 schema) from6To7, +}) => i0.VersionedSchema.stepByStepHelper( + step: migrationSteps(from6To7: from6To7), +); diff --git a/lib/database/message.dart b/lib/database/message.dart index b3fa5efa..7bb99ea9 100644 --- a/lib/database/message.dart +++ b/lib/database/message.dart @@ -36,10 +36,52 @@ class ListMapConverter String toSql(List> value) => json.encode(value); } +class ChatRooms extends Table { + TextColumn get id => text()(); + TextColumn get name => text().nullable()(); + TextColumn get description => text().nullable()(); + IntColumn get type => integer()(); + BoolColumn get isPublic => + boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get isCommunity => + boolean().nullable().withDefault(const Constant(false))(); + TextColumn get picture => text().map(const MapConverter()).nullable()(); + TextColumn get background => text().map(const MapConverter()).nullable()(); + TextColumn get realmId => text().nullable()(); + DateTimeColumn get createdAt => dateTime()(); + DateTimeColumn get updatedAt => dateTime()(); + DateTimeColumn get deletedAt => dateTime().nullable()(); + + @override + Set get primaryKey => {id}; +} + +class ChatMembers extends Table { + TextColumn get id => text()(); + TextColumn get chatRoomId => text().references(ChatRooms, #id)(); + TextColumn get accountId => text()(); + TextColumn get account => text().map(const MapConverter())(); + TextColumn get nick => text().nullable()(); + IntColumn get role => integer()(); + IntColumn get notify => integer()(); + DateTimeColumn get joinedAt => dateTime().nullable()(); + DateTimeColumn get breakUntil => dateTime().nullable()(); + DateTimeColumn get timeoutUntil => dateTime().nullable()(); + BoolColumn get isBot => boolean()(); + TextColumn get status => text().nullable()(); + DateTimeColumn get lastTyped => dateTime().nullable()(); + DateTimeColumn get createdAt => dateTime()(); + DateTimeColumn get updatedAt => dateTime()(); + DateTimeColumn get deletedAt => dateTime().nullable()(); + + @override + Set get primaryKey => {id}; +} + class ChatMessages extends Table { TextColumn get id => text()(); - TextColumn get roomId => text()(); - TextColumn get senderId => text()(); + TextColumn get roomId => text().references(ChatRooms, #id)(); + TextColumn get senderId => text().references(ChatMembers, #id)(); TextColumn get content => text().nullable()(); TextColumn get nonce => text().nullable()(); TextColumn get data => text()(); @@ -72,6 +114,7 @@ class LocalChatMessage { final String id; final String roomId; final String senderId; + final SnChatMember? sender; final Map data; final DateTime createdAt; MessageStatus status; @@ -94,6 +137,7 @@ class LocalChatMessage { required this.id, required this.roomId, required this.senderId, + required this.sender, required this.data, required this.createdAt, required this.nonce, @@ -114,7 +158,11 @@ class LocalChatMessage { }); SnChatMessage toRemoteMessage() { - return SnChatMessage.fromJson(data); + final msgData = Map.from(data); + if (sender != null) { + msgData['sender'] = sender!.toJson(); + } + return SnChatMessage.fromJson(msgData); } static LocalChatMessage fromRemoteMessage( @@ -122,11 +170,14 @@ class LocalChatMessage { MessageStatus status, { String? nonce, }) { + final msgData = Map.from(message.toJson()) + ..remove('sender'); return LocalChatMessage( id: message.id, roomId: message.chatRoomId, senderId: message.senderId, - data: message.toJson(), + sender: message.sender, + data: msgData, createdAt: message.createdAt, status: status, nonce: nonce ?? message.nonce, diff --git a/lib/pods/chat/messages_notifier.dart b/lib/pods/chat/messages_notifier.dart index e404bca2..2cfc7e1c 100644 --- a/lib/pods/chat/messages_notifier.dart +++ b/lib/pods/chat/messages_notifier.dart @@ -140,8 +140,11 @@ class MessagesNotifier extends _$MessagesNotifier { offset: offset, limit: take, ); - dbMessages = - chatMessagesFromDb.map(_database.companionToMessage).toList(); + dbMessages = await Future.wait( + chatMessagesFromDb + .map((msg) => _database.companionToMessage(msg)) + .toList(), + ); } List filteredMessages = dbMessages; @@ -202,8 +205,11 @@ class MessagesNotifier extends _$MessagesNotifier { offset: offset, limit: take, ); - final dbMessages = - chatMessagesFromDb.map(_database.companionToMessage).toList(); + final dbMessages = await Future.wait( + chatMessagesFromDb + .map((msg) => _database.companionToMessage(msg)) + .toList(), + ); // Always ensure unique messages to prevent duplicate keys final uniqueMessages = []; @@ -300,7 +306,7 @@ class MessagesNotifier extends _$MessagesNotifier { final lastMessage = dbMessages.isEmpty ? null - : _database.companionToMessage(dbMessages.first); + : await _database.companionToMessage(dbMessages.first); if (lastMessage == null) { talker.log('No local messages, fetching from network'); diff --git a/lib/pods/file_references.dart b/lib/pods/file_references.dart index 74fc887a..480dbc0a 100644 --- a/lib/pods/file_references.dart +++ b/lib/pods/file_references.dart @@ -1,3 +1,4 @@ +import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:island/models/reference.dart'; import 'package:island/pods/network.dart'; @@ -5,10 +6,7 @@ import 'package:island/pods/network.dart'; part 'file_references.g.dart'; @riverpod -Future> fileReferences( - FileReferencesRef ref, - String fileId, -) async { +Future> fileReferences(Ref ref, String fileId) async { final client = ref.read(apiClientProvider); final response = await client.get('/drive/files/$fileId/references'); final list = response.data as List; diff --git a/test/drift/app_database/generated/schema.dart b/test/drift/app_database/generated/schema.dart new file mode 100644 index 00000000..614d6efe --- /dev/null +++ b/test/drift/app_database/generated/schema.dart @@ -0,0 +1,23 @@ +// dart format width=80 +// GENERATED CODE, DO NOT EDIT BY HAND. +// ignore_for_file: type=lint +import 'package:drift/drift.dart'; +import 'package:drift/internal/migrations.dart'; +import 'schema_v6.dart' as v6; +import 'schema_v7.dart' as v7; + +class GeneratedHelper implements SchemaInstantiationHelper { + @override + GeneratedDatabase databaseForVersion(QueryExecutor db, int version) { + switch (version) { + case 6: + return v6.DatabaseAtV6(db); + case 7: + return v7.DatabaseAtV7(db); + default: + throw MissingSchemaException(version, versions); + } + } + + static const versions = const [6, 7]; +} diff --git a/test/drift/app_database/generated/schema_v6.dart b/test/drift/app_database/generated/schema_v6.dart new file mode 100644 index 00000000..76fc8176 --- /dev/null +++ b/test/drift/app_database/generated/schema_v6.dart @@ -0,0 +1,1316 @@ +// dart format width=80 +// GENERATED CODE, DO NOT EDIT BY HAND. +// ignore_for_file: type=lint +import 'package:drift/drift.dart'; + +class ChatMessages extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + ChatMessages(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn roomId = GeneratedColumn( + 'room_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn senderId = GeneratedColumn( + 'sender_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn content = GeneratedColumn( + 'content', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn nonce = GeneratedColumn( + 'nonce', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn data = GeneratedColumn( + 'data', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + late final GeneratedColumn status = GeneratedColumn( + 'status', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + late final GeneratedColumn isDeleted = GeneratedColumn( + 'is_deleted', + aliasedName, + false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), + defaultValue: const CustomExpression('0'), + ); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + late final GeneratedColumn type = GeneratedColumn( + 'type', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'text\''), + ); + late final GeneratedColumn meta = GeneratedColumn( + 'meta', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'{}\''), + ); + late final GeneratedColumn membersMentioned = GeneratedColumn( + 'members_mentioned', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'[]\''), + ); + late final GeneratedColumn editedAt = GeneratedColumn( + 'edited_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + late final GeneratedColumn attachments = GeneratedColumn( + 'attachments', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'[]\''), + ); + late final GeneratedColumn reactions = GeneratedColumn( + 'reactions', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'[]\''), + ); + late final GeneratedColumn repliedMessageId = GeneratedColumn( + 'replied_message_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn forwardedMessageId = + GeneratedColumn( + 'forwarded_message_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + roomId, + senderId, + content, + nonce, + data, + createdAt, + status, + isDeleted, + updatedAt, + deletedAt, + type, + meta, + membersMentioned, + editedAt, + attachments, + reactions, + repliedMessageId, + forwardedMessageId, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'chat_messages'; + @override + Set get $primaryKey => {id}; + @override + ChatMessagesData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ChatMessagesData( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + roomId: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}room_id'], + )!, + senderId: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}sender_id'], + )!, + content: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}content'], + ), + nonce: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}nonce'], + ), + data: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}data'], + )!, + createdAt: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_at'], + )!, + status: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}status'], + )!, + isDeleted: + attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}is_deleted'], + )!, + updatedAt: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + )!, + deletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}deleted_at'], + ), + type: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}type'], + )!, + meta: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}meta'], + )!, + membersMentioned: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}members_mentioned'], + )!, + editedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}edited_at'], + ), + attachments: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}attachments'], + )!, + reactions: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}reactions'], + )!, + repliedMessageId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}replied_message_id'], + ), + forwardedMessageId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}forwarded_message_id'], + ), + ); + } + + @override + ChatMessages createAlias(String alias) { + return ChatMessages(attachedDatabase, alias); + } +} + +class ChatMessagesData extends DataClass + implements Insertable { + final String id; + final String roomId; + final String senderId; + final String? content; + final String? nonce; + final String data; + final DateTime createdAt; + final int status; + final bool isDeleted; + final DateTime updatedAt; + final DateTime? deletedAt; + final String type; + final String meta; + final String membersMentioned; + final DateTime? editedAt; + final String attachments; + final String reactions; + final String? repliedMessageId; + final String? forwardedMessageId; + const ChatMessagesData({ + required this.id, + required this.roomId, + required this.senderId, + this.content, + this.nonce, + required this.data, + required this.createdAt, + required this.status, + required this.isDeleted, + required this.updatedAt, + this.deletedAt, + required this.type, + required this.meta, + required this.membersMentioned, + this.editedAt, + required this.attachments, + required this.reactions, + this.repliedMessageId, + this.forwardedMessageId, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['room_id'] = Variable(roomId); + map['sender_id'] = Variable(senderId); + if (!nullToAbsent || content != null) { + map['content'] = Variable(content); + } + if (!nullToAbsent || nonce != null) { + map['nonce'] = Variable(nonce); + } + map['data'] = Variable(data); + map['created_at'] = Variable(createdAt); + map['status'] = Variable(status); + map['is_deleted'] = Variable(isDeleted); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + map['type'] = Variable(type); + map['meta'] = Variable(meta); + map['members_mentioned'] = Variable(membersMentioned); + if (!nullToAbsent || editedAt != null) { + map['edited_at'] = Variable(editedAt); + } + map['attachments'] = Variable(attachments); + map['reactions'] = Variable(reactions); + if (!nullToAbsent || repliedMessageId != null) { + map['replied_message_id'] = Variable(repliedMessageId); + } + if (!nullToAbsent || forwardedMessageId != null) { + map['forwarded_message_id'] = Variable(forwardedMessageId); + } + return map; + } + + ChatMessagesCompanion toCompanion(bool nullToAbsent) { + return ChatMessagesCompanion( + id: Value(id), + roomId: Value(roomId), + senderId: Value(senderId), + content: + content == null && nullToAbsent + ? const Value.absent() + : Value(content), + nonce: + nonce == null && nullToAbsent ? const Value.absent() : Value(nonce), + data: Value(data), + createdAt: Value(createdAt), + status: Value(status), + isDeleted: Value(isDeleted), + updatedAt: Value(updatedAt), + deletedAt: + deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + type: Value(type), + meta: Value(meta), + membersMentioned: Value(membersMentioned), + editedAt: + editedAt == null && nullToAbsent + ? const Value.absent() + : Value(editedAt), + attachments: Value(attachments), + reactions: Value(reactions), + repliedMessageId: + repliedMessageId == null && nullToAbsent + ? const Value.absent() + : Value(repliedMessageId), + forwardedMessageId: + forwardedMessageId == null && nullToAbsent + ? const Value.absent() + : Value(forwardedMessageId), + ); + } + + factory ChatMessagesData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ChatMessagesData( + id: serializer.fromJson(json['id']), + roomId: serializer.fromJson(json['roomId']), + senderId: serializer.fromJson(json['senderId']), + content: serializer.fromJson(json['content']), + nonce: serializer.fromJson(json['nonce']), + data: serializer.fromJson(json['data']), + createdAt: serializer.fromJson(json['createdAt']), + status: serializer.fromJson(json['status']), + isDeleted: serializer.fromJson(json['isDeleted']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + type: serializer.fromJson(json['type']), + meta: serializer.fromJson(json['meta']), + membersMentioned: serializer.fromJson(json['membersMentioned']), + editedAt: serializer.fromJson(json['editedAt']), + attachments: serializer.fromJson(json['attachments']), + reactions: serializer.fromJson(json['reactions']), + repliedMessageId: serializer.fromJson(json['repliedMessageId']), + forwardedMessageId: serializer.fromJson( + json['forwardedMessageId'], + ), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'roomId': serializer.toJson(roomId), + 'senderId': serializer.toJson(senderId), + 'content': serializer.toJson(content), + 'nonce': serializer.toJson(nonce), + 'data': serializer.toJson(data), + 'createdAt': serializer.toJson(createdAt), + 'status': serializer.toJson(status), + 'isDeleted': serializer.toJson(isDeleted), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'type': serializer.toJson(type), + 'meta': serializer.toJson(meta), + 'membersMentioned': serializer.toJson(membersMentioned), + 'editedAt': serializer.toJson(editedAt), + 'attachments': serializer.toJson(attachments), + 'reactions': serializer.toJson(reactions), + 'repliedMessageId': serializer.toJson(repliedMessageId), + 'forwardedMessageId': serializer.toJson(forwardedMessageId), + }; + } + + ChatMessagesData copyWith({ + String? id, + String? roomId, + String? senderId, + Value content = const Value.absent(), + Value nonce = const Value.absent(), + String? data, + DateTime? createdAt, + int? status, + bool? isDeleted, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + String? type, + String? meta, + String? membersMentioned, + Value editedAt = const Value.absent(), + String? attachments, + String? reactions, + Value repliedMessageId = const Value.absent(), + Value forwardedMessageId = const Value.absent(), + }) => ChatMessagesData( + id: id ?? this.id, + roomId: roomId ?? this.roomId, + senderId: senderId ?? this.senderId, + content: content.present ? content.value : this.content, + nonce: nonce.present ? nonce.value : this.nonce, + data: data ?? this.data, + createdAt: createdAt ?? this.createdAt, + status: status ?? this.status, + isDeleted: isDeleted ?? this.isDeleted, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + type: type ?? this.type, + meta: meta ?? this.meta, + membersMentioned: membersMentioned ?? this.membersMentioned, + editedAt: editedAt.present ? editedAt.value : this.editedAt, + attachments: attachments ?? this.attachments, + reactions: reactions ?? this.reactions, + repliedMessageId: + repliedMessageId.present + ? repliedMessageId.value + : this.repliedMessageId, + forwardedMessageId: + forwardedMessageId.present + ? forwardedMessageId.value + : this.forwardedMessageId, + ); + ChatMessagesData copyWithCompanion(ChatMessagesCompanion data) { + return ChatMessagesData( + id: data.id.present ? data.id.value : this.id, + roomId: data.roomId.present ? data.roomId.value : this.roomId, + senderId: data.senderId.present ? data.senderId.value : this.senderId, + content: data.content.present ? data.content.value : this.content, + nonce: data.nonce.present ? data.nonce.value : this.nonce, + data: data.data.present ? data.data.value : this.data, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + status: data.status.present ? data.status.value : this.status, + isDeleted: data.isDeleted.present ? data.isDeleted.value : this.isDeleted, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + type: data.type.present ? data.type.value : this.type, + meta: data.meta.present ? data.meta.value : this.meta, + membersMentioned: + data.membersMentioned.present + ? data.membersMentioned.value + : this.membersMentioned, + editedAt: data.editedAt.present ? data.editedAt.value : this.editedAt, + attachments: + data.attachments.present ? data.attachments.value : this.attachments, + reactions: data.reactions.present ? data.reactions.value : this.reactions, + repliedMessageId: + data.repliedMessageId.present + ? data.repliedMessageId.value + : this.repliedMessageId, + forwardedMessageId: + data.forwardedMessageId.present + ? data.forwardedMessageId.value + : this.forwardedMessageId, + ); + } + + @override + String toString() { + return (StringBuffer('ChatMessagesData(') + ..write('id: $id, ') + ..write('roomId: $roomId, ') + ..write('senderId: $senderId, ') + ..write('content: $content, ') + ..write('nonce: $nonce, ') + ..write('data: $data, ') + ..write('createdAt: $createdAt, ') + ..write('status: $status, ') + ..write('isDeleted: $isDeleted, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('type: $type, ') + ..write('meta: $meta, ') + ..write('membersMentioned: $membersMentioned, ') + ..write('editedAt: $editedAt, ') + ..write('attachments: $attachments, ') + ..write('reactions: $reactions, ') + ..write('repliedMessageId: $repliedMessageId, ') + ..write('forwardedMessageId: $forwardedMessageId') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + roomId, + senderId, + content, + nonce, + data, + createdAt, + status, + isDeleted, + updatedAt, + deletedAt, + type, + meta, + membersMentioned, + editedAt, + attachments, + reactions, + repliedMessageId, + forwardedMessageId, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ChatMessagesData && + other.id == this.id && + other.roomId == this.roomId && + other.senderId == this.senderId && + other.content == this.content && + other.nonce == this.nonce && + other.data == this.data && + other.createdAt == this.createdAt && + other.status == this.status && + other.isDeleted == this.isDeleted && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.type == this.type && + other.meta == this.meta && + other.membersMentioned == this.membersMentioned && + other.editedAt == this.editedAt && + other.attachments == this.attachments && + other.reactions == this.reactions && + other.repliedMessageId == this.repliedMessageId && + other.forwardedMessageId == this.forwardedMessageId); +} + +class ChatMessagesCompanion extends UpdateCompanion { + final Value id; + final Value roomId; + final Value senderId; + final Value content; + final Value nonce; + final Value data; + final Value createdAt; + final Value status; + final Value isDeleted; + final Value updatedAt; + final Value deletedAt; + final Value type; + final Value meta; + final Value membersMentioned; + final Value editedAt; + final Value attachments; + final Value reactions; + final Value repliedMessageId; + final Value forwardedMessageId; + final Value rowid; + const ChatMessagesCompanion({ + this.id = const Value.absent(), + this.roomId = const Value.absent(), + this.senderId = const Value.absent(), + this.content = const Value.absent(), + this.nonce = const Value.absent(), + this.data = const Value.absent(), + this.createdAt = const Value.absent(), + this.status = const Value.absent(), + this.isDeleted = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.type = const Value.absent(), + this.meta = const Value.absent(), + this.membersMentioned = const Value.absent(), + this.editedAt = const Value.absent(), + this.attachments = const Value.absent(), + this.reactions = const Value.absent(), + this.repliedMessageId = const Value.absent(), + this.forwardedMessageId = const Value.absent(), + this.rowid = const Value.absent(), + }); + ChatMessagesCompanion.insert({ + required String id, + required String roomId, + required String senderId, + this.content = const Value.absent(), + this.nonce = const Value.absent(), + required String data, + required DateTime createdAt, + required int status, + this.isDeleted = const Value.absent(), + required DateTime updatedAt, + this.deletedAt = const Value.absent(), + this.type = const Value.absent(), + this.meta = const Value.absent(), + this.membersMentioned = const Value.absent(), + this.editedAt = const Value.absent(), + this.attachments = const Value.absent(), + this.reactions = const Value.absent(), + this.repliedMessageId = const Value.absent(), + this.forwardedMessageId = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + roomId = Value(roomId), + senderId = Value(senderId), + data = Value(data), + createdAt = Value(createdAt), + status = Value(status), + updatedAt = Value(updatedAt); + static Insertable custom({ + Expression? id, + Expression? roomId, + Expression? senderId, + Expression? content, + Expression? nonce, + Expression? data, + Expression? createdAt, + Expression? status, + Expression? isDeleted, + Expression? updatedAt, + Expression? deletedAt, + Expression? type, + Expression? meta, + Expression? membersMentioned, + Expression? editedAt, + Expression? attachments, + Expression? reactions, + Expression? repliedMessageId, + Expression? forwardedMessageId, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (roomId != null) 'room_id': roomId, + if (senderId != null) 'sender_id': senderId, + if (content != null) 'content': content, + if (nonce != null) 'nonce': nonce, + if (data != null) 'data': data, + if (createdAt != null) 'created_at': createdAt, + if (status != null) 'status': status, + if (isDeleted != null) 'is_deleted': isDeleted, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (type != null) 'type': type, + if (meta != null) 'meta': meta, + if (membersMentioned != null) 'members_mentioned': membersMentioned, + if (editedAt != null) 'edited_at': editedAt, + if (attachments != null) 'attachments': attachments, + if (reactions != null) 'reactions': reactions, + if (repliedMessageId != null) 'replied_message_id': repliedMessageId, + if (forwardedMessageId != null) + 'forwarded_message_id': forwardedMessageId, + if (rowid != null) 'rowid': rowid, + }); + } + + ChatMessagesCompanion copyWith({ + Value? id, + Value? roomId, + Value? senderId, + Value? content, + Value? nonce, + Value? data, + Value? createdAt, + Value? status, + Value? isDeleted, + Value? updatedAt, + Value? deletedAt, + Value? type, + Value? meta, + Value? membersMentioned, + Value? editedAt, + Value? attachments, + Value? reactions, + Value? repliedMessageId, + Value? forwardedMessageId, + Value? rowid, + }) { + return ChatMessagesCompanion( + id: id ?? this.id, + roomId: roomId ?? this.roomId, + senderId: senderId ?? this.senderId, + content: content ?? this.content, + nonce: nonce ?? this.nonce, + data: data ?? this.data, + createdAt: createdAt ?? this.createdAt, + status: status ?? this.status, + isDeleted: isDeleted ?? this.isDeleted, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + type: type ?? this.type, + meta: meta ?? this.meta, + membersMentioned: membersMentioned ?? this.membersMentioned, + editedAt: editedAt ?? this.editedAt, + attachments: attachments ?? this.attachments, + reactions: reactions ?? this.reactions, + repliedMessageId: repliedMessageId ?? this.repliedMessageId, + forwardedMessageId: forwardedMessageId ?? this.forwardedMessageId, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (roomId.present) { + map['room_id'] = Variable(roomId.value); + } + if (senderId.present) { + map['sender_id'] = Variable(senderId.value); + } + if (content.present) { + map['content'] = Variable(content.value); + } + if (nonce.present) { + map['nonce'] = Variable(nonce.value); + } + if (data.present) { + map['data'] = Variable(data.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (isDeleted.present) { + map['is_deleted'] = Variable(isDeleted.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (meta.present) { + map['meta'] = Variable(meta.value); + } + if (membersMentioned.present) { + map['members_mentioned'] = Variable(membersMentioned.value); + } + if (editedAt.present) { + map['edited_at'] = Variable(editedAt.value); + } + if (attachments.present) { + map['attachments'] = Variable(attachments.value); + } + if (reactions.present) { + map['reactions'] = Variable(reactions.value); + } + if (repliedMessageId.present) { + map['replied_message_id'] = Variable(repliedMessageId.value); + } + if (forwardedMessageId.present) { + map['forwarded_message_id'] = Variable(forwardedMessageId.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ChatMessagesCompanion(') + ..write('id: $id, ') + ..write('roomId: $roomId, ') + ..write('senderId: $senderId, ') + ..write('content: $content, ') + ..write('nonce: $nonce, ') + ..write('data: $data, ') + ..write('createdAt: $createdAt, ') + ..write('status: $status, ') + ..write('isDeleted: $isDeleted, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('type: $type, ') + ..write('meta: $meta, ') + ..write('membersMentioned: $membersMentioned, ') + ..write('editedAt: $editedAt, ') + ..write('attachments: $attachments, ') + ..write('reactions: $reactions, ') + ..write('repliedMessageId: $repliedMessageId, ') + ..write('forwardedMessageId: $forwardedMessageId, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class PostDrafts extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + PostDrafts(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn title = GeneratedColumn( + 'title', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn description = GeneratedColumn( + 'description', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn content = GeneratedColumn( + 'content', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn visibility = GeneratedColumn( + 'visibility', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0'), + ); + late final GeneratedColumn type = GeneratedColumn( + 'type', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0'), + ); + late final GeneratedColumn lastModified = GeneratedColumn( + 'last_modified', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + late final GeneratedColumn postData = GeneratedColumn( + 'post_data', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + @override + List get $columns => [ + id, + title, + description, + content, + visibility, + type, + lastModified, + postData, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'post_drafts'; + @override + Set get $primaryKey => {id}; + @override + PostDraftsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return PostDraftsData( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + title: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}title'], + ), + description: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}description'], + ), + content: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}content'], + ), + visibility: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}visibility'], + )!, + type: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}type'], + )!, + lastModified: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_modified'], + )!, + postData: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}post_data'], + )!, + ); + } + + @override + PostDrafts createAlias(String alias) { + return PostDrafts(attachedDatabase, alias); + } +} + +class PostDraftsData extends DataClass implements Insertable { + final String id; + final String? title; + final String? description; + final String? content; + final int visibility; + final int type; + final DateTime lastModified; + final String postData; + const PostDraftsData({ + required this.id, + this.title, + this.description, + this.content, + required this.visibility, + required this.type, + required this.lastModified, + required this.postData, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + if (!nullToAbsent || title != null) { + map['title'] = Variable(title); + } + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + if (!nullToAbsent || content != null) { + map['content'] = Variable(content); + } + map['visibility'] = Variable(visibility); + map['type'] = Variable(type); + map['last_modified'] = Variable(lastModified); + map['post_data'] = Variable(postData); + return map; + } + + PostDraftsCompanion toCompanion(bool nullToAbsent) { + return PostDraftsCompanion( + id: Value(id), + title: + title == null && nullToAbsent ? const Value.absent() : Value(title), + description: + description == null && nullToAbsent + ? const Value.absent() + : Value(description), + content: + content == null && nullToAbsent + ? const Value.absent() + : Value(content), + visibility: Value(visibility), + type: Value(type), + lastModified: Value(lastModified), + postData: Value(postData), + ); + } + + factory PostDraftsData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return PostDraftsData( + id: serializer.fromJson(json['id']), + title: serializer.fromJson(json['title']), + description: serializer.fromJson(json['description']), + content: serializer.fromJson(json['content']), + visibility: serializer.fromJson(json['visibility']), + type: serializer.fromJson(json['type']), + lastModified: serializer.fromJson(json['lastModified']), + postData: serializer.fromJson(json['postData']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'title': serializer.toJson(title), + 'description': serializer.toJson(description), + 'content': serializer.toJson(content), + 'visibility': serializer.toJson(visibility), + 'type': serializer.toJson(type), + 'lastModified': serializer.toJson(lastModified), + 'postData': serializer.toJson(postData), + }; + } + + PostDraftsData copyWith({ + String? id, + Value title = const Value.absent(), + Value description = const Value.absent(), + Value content = const Value.absent(), + int? visibility, + int? type, + DateTime? lastModified, + String? postData, + }) => PostDraftsData( + id: id ?? this.id, + title: title.present ? title.value : this.title, + description: description.present ? description.value : this.description, + content: content.present ? content.value : this.content, + visibility: visibility ?? this.visibility, + type: type ?? this.type, + lastModified: lastModified ?? this.lastModified, + postData: postData ?? this.postData, + ); + PostDraftsData copyWithCompanion(PostDraftsCompanion data) { + return PostDraftsData( + id: data.id.present ? data.id.value : this.id, + title: data.title.present ? data.title.value : this.title, + description: + data.description.present ? data.description.value : this.description, + content: data.content.present ? data.content.value : this.content, + visibility: + data.visibility.present ? data.visibility.value : this.visibility, + type: data.type.present ? data.type.value : this.type, + lastModified: + data.lastModified.present + ? data.lastModified.value + : this.lastModified, + postData: data.postData.present ? data.postData.value : this.postData, + ); + } + + @override + String toString() { + return (StringBuffer('PostDraftsData(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('content: $content, ') + ..write('visibility: $visibility, ') + ..write('type: $type, ') + ..write('lastModified: $lastModified, ') + ..write('postData: $postData') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + title, + description, + content, + visibility, + type, + lastModified, + postData, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is PostDraftsData && + other.id == this.id && + other.title == this.title && + other.description == this.description && + other.content == this.content && + other.visibility == this.visibility && + other.type == this.type && + other.lastModified == this.lastModified && + other.postData == this.postData); +} + +class PostDraftsCompanion extends UpdateCompanion { + final Value id; + final Value title; + final Value description; + final Value content; + final Value visibility; + final Value type; + final Value lastModified; + final Value postData; + final Value rowid; + const PostDraftsCompanion({ + this.id = const Value.absent(), + this.title = const Value.absent(), + this.description = const Value.absent(), + this.content = const Value.absent(), + this.visibility = const Value.absent(), + this.type = const Value.absent(), + this.lastModified = const Value.absent(), + this.postData = const Value.absent(), + this.rowid = const Value.absent(), + }); + PostDraftsCompanion.insert({ + required String id, + this.title = const Value.absent(), + this.description = const Value.absent(), + this.content = const Value.absent(), + this.visibility = const Value.absent(), + this.type = const Value.absent(), + required DateTime lastModified, + required String postData, + this.rowid = const Value.absent(), + }) : id = Value(id), + lastModified = Value(lastModified), + postData = Value(postData); + static Insertable custom({ + Expression? id, + Expression? title, + Expression? description, + Expression? content, + Expression? visibility, + Expression? type, + Expression? lastModified, + Expression? postData, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (title != null) 'title': title, + if (description != null) 'description': description, + if (content != null) 'content': content, + if (visibility != null) 'visibility': visibility, + if (type != null) 'type': type, + if (lastModified != null) 'last_modified': lastModified, + if (postData != null) 'post_data': postData, + if (rowid != null) 'rowid': rowid, + }); + } + + PostDraftsCompanion copyWith({ + Value? id, + Value? title, + Value? description, + Value? content, + Value? visibility, + Value? type, + Value? lastModified, + Value? postData, + Value? rowid, + }) { + return PostDraftsCompanion( + id: id ?? this.id, + title: title ?? this.title, + description: description ?? this.description, + content: content ?? this.content, + visibility: visibility ?? this.visibility, + type: type ?? this.type, + lastModified: lastModified ?? this.lastModified, + postData: postData ?? this.postData, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (title.present) { + map['title'] = Variable(title.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (content.present) { + map['content'] = Variable(content.value); + } + if (visibility.present) { + map['visibility'] = Variable(visibility.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (lastModified.present) { + map['last_modified'] = Variable(lastModified.value); + } + if (postData.present) { + map['post_data'] = Variable(postData.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('PostDraftsCompanion(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('content: $content, ') + ..write('visibility: $visibility, ') + ..write('type: $type, ') + ..write('lastModified: $lastModified, ') + ..write('postData: $postData, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class DatabaseAtV6 extends GeneratedDatabase { + DatabaseAtV6(QueryExecutor e) : super(e); + late final ChatMessages chatMessages = ChatMessages(this); + late final PostDrafts postDrafts = PostDrafts(this); + @override + Iterable> get allTables => + allSchemaEntities.whereType>(); + @override + List get allSchemaEntities => [ + chatMessages, + postDrafts, + ]; + @override + int get schemaVersion => 6; +} diff --git a/test/drift/app_database/generated/schema_v7.dart b/test/drift/app_database/generated/schema_v7.dart new file mode 100644 index 00000000..1d4fba3d --- /dev/null +++ b/test/drift/app_database/generated/schema_v7.dart @@ -0,0 +1,2672 @@ +// dart format width=80 +// GENERATED CODE, DO NOT EDIT BY HAND. +// ignore_for_file: type=lint +import 'package:drift/drift.dart'; + +class ChatRooms extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + ChatRooms(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn name = GeneratedColumn( + 'name', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn description = GeneratedColumn( + 'description', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn type = GeneratedColumn( + 'type', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + late final GeneratedColumn isPublic = GeneratedColumn( + 'is_public', + aliasedName, + true, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_public" IN (0, 1))', + ), + defaultValue: const CustomExpression('0'), + ); + late final GeneratedColumn isCommunity = GeneratedColumn( + 'is_community', + aliasedName, + true, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_community" IN (0, 1))', + ), + defaultValue: const CustomExpression('0'), + ); + late final GeneratedColumn picture = GeneratedColumn( + 'picture', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn background = GeneratedColumn( + 'background', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn realmId = GeneratedColumn( + 'realm_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + name, + description, + type, + isPublic, + isCommunity, + picture, + background, + realmId, + createdAt, + updatedAt, + deletedAt, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'chat_rooms'; + @override + Set get $primaryKey => {id}; + @override + ChatRoomsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ChatRoomsData( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + name: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}name'], + ), + description: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}description'], + ), + type: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}type'], + )!, + isPublic: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}is_public'], + ), + isCommunity: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}is_community'], + ), + picture: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}picture'], + ), + background: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}background'], + ), + realmId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}realm_id'], + ), + createdAt: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_at'], + )!, + updatedAt: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + )!, + deletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}deleted_at'], + ), + ); + } + + @override + ChatRooms createAlias(String alias) { + return ChatRooms(attachedDatabase, alias); + } +} + +class ChatRoomsData extends DataClass implements Insertable { + final String id; + final String? name; + final String? description; + final int type; + final bool? isPublic; + final bool? isCommunity; + final String? picture; + final String? background; + final String? realmId; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + const ChatRoomsData({ + required this.id, + this.name, + this.description, + required this.type, + this.isPublic, + this.isCommunity, + this.picture, + this.background, + this.realmId, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + if (!nullToAbsent || name != null) { + map['name'] = Variable(name); + } + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + map['type'] = Variable(type); + if (!nullToAbsent || isPublic != null) { + map['is_public'] = Variable(isPublic); + } + if (!nullToAbsent || isCommunity != null) { + map['is_community'] = Variable(isCommunity); + } + if (!nullToAbsent || picture != null) { + map['picture'] = Variable(picture); + } + if (!nullToAbsent || background != null) { + map['background'] = Variable(background); + } + if (!nullToAbsent || realmId != null) { + map['realm_id'] = Variable(realmId); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + return map; + } + + ChatRoomsCompanion toCompanion(bool nullToAbsent) { + return ChatRoomsCompanion( + id: Value(id), + name: name == null && nullToAbsent ? const Value.absent() : Value(name), + description: + description == null && nullToAbsent + ? const Value.absent() + : Value(description), + type: Value(type), + isPublic: + isPublic == null && nullToAbsent + ? const Value.absent() + : Value(isPublic), + isCommunity: + isCommunity == null && nullToAbsent + ? const Value.absent() + : Value(isCommunity), + picture: + picture == null && nullToAbsent + ? const Value.absent() + : Value(picture), + background: + background == null && nullToAbsent + ? const Value.absent() + : Value(background), + realmId: + realmId == null && nullToAbsent + ? const Value.absent() + : Value(realmId), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: + deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + ); + } + + factory ChatRoomsData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ChatRoomsData( + id: serializer.fromJson(json['id']), + name: serializer.fromJson(json['name']), + description: serializer.fromJson(json['description']), + type: serializer.fromJson(json['type']), + isPublic: serializer.fromJson(json['isPublic']), + isCommunity: serializer.fromJson(json['isCommunity']), + picture: serializer.fromJson(json['picture']), + background: serializer.fromJson(json['background']), + realmId: serializer.fromJson(json['realmId']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'name': serializer.toJson(name), + 'description': serializer.toJson(description), + 'type': serializer.toJson(type), + 'isPublic': serializer.toJson(isPublic), + 'isCommunity': serializer.toJson(isCommunity), + 'picture': serializer.toJson(picture), + 'background': serializer.toJson(background), + 'realmId': serializer.toJson(realmId), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + }; + } + + ChatRoomsData copyWith({ + String? id, + Value name = const Value.absent(), + Value description = const Value.absent(), + int? type, + Value isPublic = const Value.absent(), + Value isCommunity = const Value.absent(), + Value picture = const Value.absent(), + Value background = const Value.absent(), + Value realmId = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + }) => ChatRoomsData( + id: id ?? this.id, + name: name.present ? name.value : this.name, + description: description.present ? description.value : this.description, + type: type ?? this.type, + isPublic: isPublic.present ? isPublic.value : this.isPublic, + isCommunity: isCommunity.present ? isCommunity.value : this.isCommunity, + picture: picture.present ? picture.value : this.picture, + background: background.present ? background.value : this.background, + realmId: realmId.present ? realmId.value : this.realmId, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + ); + ChatRoomsData copyWithCompanion(ChatRoomsCompanion data) { + return ChatRoomsData( + id: data.id.present ? data.id.value : this.id, + name: data.name.present ? data.name.value : this.name, + description: + data.description.present ? data.description.value : this.description, + type: data.type.present ? data.type.value : this.type, + isPublic: data.isPublic.present ? data.isPublic.value : this.isPublic, + isCommunity: + data.isCommunity.present ? data.isCommunity.value : this.isCommunity, + picture: data.picture.present ? data.picture.value : this.picture, + background: + data.background.present ? data.background.value : this.background, + realmId: data.realmId.present ? data.realmId.value : this.realmId, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + ); + } + + @override + String toString() { + return (StringBuffer('ChatRoomsData(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('description: $description, ') + ..write('type: $type, ') + ..write('isPublic: $isPublic, ') + ..write('isCommunity: $isCommunity, ') + ..write('picture: $picture, ') + ..write('background: $background, ') + ..write('realmId: $realmId, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + name, + description, + type, + isPublic, + isCommunity, + picture, + background, + realmId, + createdAt, + updatedAt, + deletedAt, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ChatRoomsData && + other.id == this.id && + other.name == this.name && + other.description == this.description && + other.type == this.type && + other.isPublic == this.isPublic && + other.isCommunity == this.isCommunity && + other.picture == this.picture && + other.background == this.background && + other.realmId == this.realmId && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt); +} + +class ChatRoomsCompanion extends UpdateCompanion { + final Value id; + final Value name; + final Value description; + final Value type; + final Value isPublic; + final Value isCommunity; + final Value picture; + final Value background; + final Value realmId; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value rowid; + const ChatRoomsCompanion({ + this.id = const Value.absent(), + this.name = const Value.absent(), + this.description = const Value.absent(), + this.type = const Value.absent(), + this.isPublic = const Value.absent(), + this.isCommunity = const Value.absent(), + this.picture = const Value.absent(), + this.background = const Value.absent(), + this.realmId = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + ChatRoomsCompanion.insert({ + required String id, + this.name = const Value.absent(), + this.description = const Value.absent(), + required int type, + this.isPublic = const Value.absent(), + this.isCommunity = const Value.absent(), + this.picture = const Value.absent(), + this.background = const Value.absent(), + this.realmId = const Value.absent(), + required DateTime createdAt, + required DateTime updatedAt, + this.deletedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + type = Value(type), + createdAt = Value(createdAt), + updatedAt = Value(updatedAt); + static Insertable custom({ + Expression? id, + Expression? name, + Expression? description, + Expression? type, + Expression? isPublic, + Expression? isCommunity, + Expression? picture, + Expression? background, + Expression? realmId, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (name != null) 'name': name, + if (description != null) 'description': description, + if (type != null) 'type': type, + if (isPublic != null) 'is_public': isPublic, + if (isCommunity != null) 'is_community': isCommunity, + if (picture != null) 'picture': picture, + if (background != null) 'background': background, + if (realmId != null) 'realm_id': realmId, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + ChatRoomsCompanion copyWith({ + Value? id, + Value? name, + Value? description, + Value? type, + Value? isPublic, + Value? isCommunity, + Value? picture, + Value? background, + Value? realmId, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? rowid, + }) { + return ChatRoomsCompanion( + id: id ?? this.id, + name: name ?? this.name, + description: description ?? this.description, + type: type ?? this.type, + isPublic: isPublic ?? this.isPublic, + isCommunity: isCommunity ?? this.isCommunity, + picture: picture ?? this.picture, + background: background ?? this.background, + realmId: realmId ?? this.realmId, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (isPublic.present) { + map['is_public'] = Variable(isPublic.value); + } + if (isCommunity.present) { + map['is_community'] = Variable(isCommunity.value); + } + if (picture.present) { + map['picture'] = Variable(picture.value); + } + if (background.present) { + map['background'] = Variable(background.value); + } + if (realmId.present) { + map['realm_id'] = Variable(realmId.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ChatRoomsCompanion(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('description: $description, ') + ..write('type: $type, ') + ..write('isPublic: $isPublic, ') + ..write('isCommunity: $isCommunity, ') + ..write('picture: $picture, ') + ..write('background: $background, ') + ..write('realmId: $realmId, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class ChatMembers extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + ChatMembers(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn chatRoomId = GeneratedColumn( + 'chat_room_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES chat_rooms (id)', + ), + ); + late final GeneratedColumn accountId = GeneratedColumn( + 'account_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn account = GeneratedColumn( + 'account', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn nick = GeneratedColumn( + 'nick', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn role = GeneratedColumn( + 'role', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + late final GeneratedColumn notify = GeneratedColumn( + 'notify', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + late final GeneratedColumn joinedAt = GeneratedColumn( + 'joined_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + late final GeneratedColumn breakUntil = GeneratedColumn( + 'break_until', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + late final GeneratedColumn timeoutUntil = GeneratedColumn( + 'timeout_until', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + late final GeneratedColumn isBot = GeneratedColumn( + 'is_bot', + aliasedName, + false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_bot" IN (0, 1))', + ), + ); + late final GeneratedColumn status = GeneratedColumn( + 'status', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn lastTyped = GeneratedColumn( + 'last_typed', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + chatRoomId, + accountId, + account, + nick, + role, + notify, + joinedAt, + breakUntil, + timeoutUntil, + isBot, + status, + lastTyped, + createdAt, + updatedAt, + deletedAt, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'chat_members'; + @override + Set get $primaryKey => {id}; + @override + ChatMembersData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ChatMembersData( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + chatRoomId: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}chat_room_id'], + )!, + accountId: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}account_id'], + )!, + account: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}account'], + )!, + nick: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}nick'], + ), + role: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}role'], + )!, + notify: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}notify'], + )!, + joinedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}joined_at'], + ), + breakUntil: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}break_until'], + ), + timeoutUntil: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}timeout_until'], + ), + isBot: + attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}is_bot'], + )!, + status: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}status'], + ), + lastTyped: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_typed'], + ), + createdAt: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_at'], + )!, + updatedAt: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + )!, + deletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}deleted_at'], + ), + ); + } + + @override + ChatMembers createAlias(String alias) { + return ChatMembers(attachedDatabase, alias); + } +} + +class ChatMembersData extends DataClass implements Insertable { + final String id; + final String chatRoomId; + final String accountId; + final String account; + final String? nick; + final int role; + final int notify; + final DateTime? joinedAt; + final DateTime? breakUntil; + final DateTime? timeoutUntil; + final bool isBot; + final String? status; + final DateTime? lastTyped; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + const ChatMembersData({ + required this.id, + required this.chatRoomId, + required this.accountId, + required this.account, + this.nick, + required this.role, + required this.notify, + this.joinedAt, + this.breakUntil, + this.timeoutUntil, + required this.isBot, + this.status, + this.lastTyped, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['chat_room_id'] = Variable(chatRoomId); + map['account_id'] = Variable(accountId); + map['account'] = Variable(account); + if (!nullToAbsent || nick != null) { + map['nick'] = Variable(nick); + } + map['role'] = Variable(role); + map['notify'] = Variable(notify); + if (!nullToAbsent || joinedAt != null) { + map['joined_at'] = Variable(joinedAt); + } + if (!nullToAbsent || breakUntil != null) { + map['break_until'] = Variable(breakUntil); + } + if (!nullToAbsent || timeoutUntil != null) { + map['timeout_until'] = Variable(timeoutUntil); + } + map['is_bot'] = Variable(isBot); + if (!nullToAbsent || status != null) { + map['status'] = Variable(status); + } + if (!nullToAbsent || lastTyped != null) { + map['last_typed'] = Variable(lastTyped); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + return map; + } + + ChatMembersCompanion toCompanion(bool nullToAbsent) { + return ChatMembersCompanion( + id: Value(id), + chatRoomId: Value(chatRoomId), + accountId: Value(accountId), + account: Value(account), + nick: nick == null && nullToAbsent ? const Value.absent() : Value(nick), + role: Value(role), + notify: Value(notify), + joinedAt: + joinedAt == null && nullToAbsent + ? const Value.absent() + : Value(joinedAt), + breakUntil: + breakUntil == null && nullToAbsent + ? const Value.absent() + : Value(breakUntil), + timeoutUntil: + timeoutUntil == null && nullToAbsent + ? const Value.absent() + : Value(timeoutUntil), + isBot: Value(isBot), + status: + status == null && nullToAbsent ? const Value.absent() : Value(status), + lastTyped: + lastTyped == null && nullToAbsent + ? const Value.absent() + : Value(lastTyped), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: + deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + ); + } + + factory ChatMembersData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ChatMembersData( + id: serializer.fromJson(json['id']), + chatRoomId: serializer.fromJson(json['chatRoomId']), + accountId: serializer.fromJson(json['accountId']), + account: serializer.fromJson(json['account']), + nick: serializer.fromJson(json['nick']), + role: serializer.fromJson(json['role']), + notify: serializer.fromJson(json['notify']), + joinedAt: serializer.fromJson(json['joinedAt']), + breakUntil: serializer.fromJson(json['breakUntil']), + timeoutUntil: serializer.fromJson(json['timeoutUntil']), + isBot: serializer.fromJson(json['isBot']), + status: serializer.fromJson(json['status']), + lastTyped: serializer.fromJson(json['lastTyped']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'chatRoomId': serializer.toJson(chatRoomId), + 'accountId': serializer.toJson(accountId), + 'account': serializer.toJson(account), + 'nick': serializer.toJson(nick), + 'role': serializer.toJson(role), + 'notify': serializer.toJson(notify), + 'joinedAt': serializer.toJson(joinedAt), + 'breakUntil': serializer.toJson(breakUntil), + 'timeoutUntil': serializer.toJson(timeoutUntil), + 'isBot': serializer.toJson(isBot), + 'status': serializer.toJson(status), + 'lastTyped': serializer.toJson(lastTyped), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + }; + } + + ChatMembersData copyWith({ + String? id, + String? chatRoomId, + String? accountId, + String? account, + Value nick = const Value.absent(), + int? role, + int? notify, + Value joinedAt = const Value.absent(), + Value breakUntil = const Value.absent(), + Value timeoutUntil = const Value.absent(), + bool? isBot, + Value status = const Value.absent(), + Value lastTyped = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + }) => ChatMembersData( + id: id ?? this.id, + chatRoomId: chatRoomId ?? this.chatRoomId, + accountId: accountId ?? this.accountId, + account: account ?? this.account, + nick: nick.present ? nick.value : this.nick, + role: role ?? this.role, + notify: notify ?? this.notify, + joinedAt: joinedAt.present ? joinedAt.value : this.joinedAt, + breakUntil: breakUntil.present ? breakUntil.value : this.breakUntil, + timeoutUntil: timeoutUntil.present ? timeoutUntil.value : this.timeoutUntil, + isBot: isBot ?? this.isBot, + status: status.present ? status.value : this.status, + lastTyped: lastTyped.present ? lastTyped.value : this.lastTyped, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + ); + ChatMembersData copyWithCompanion(ChatMembersCompanion data) { + return ChatMembersData( + id: data.id.present ? data.id.value : this.id, + chatRoomId: + data.chatRoomId.present ? data.chatRoomId.value : this.chatRoomId, + accountId: data.accountId.present ? data.accountId.value : this.accountId, + account: data.account.present ? data.account.value : this.account, + nick: data.nick.present ? data.nick.value : this.nick, + role: data.role.present ? data.role.value : this.role, + notify: data.notify.present ? data.notify.value : this.notify, + joinedAt: data.joinedAt.present ? data.joinedAt.value : this.joinedAt, + breakUntil: + data.breakUntil.present ? data.breakUntil.value : this.breakUntil, + timeoutUntil: + data.timeoutUntil.present + ? data.timeoutUntil.value + : this.timeoutUntil, + isBot: data.isBot.present ? data.isBot.value : this.isBot, + status: data.status.present ? data.status.value : this.status, + lastTyped: data.lastTyped.present ? data.lastTyped.value : this.lastTyped, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + ); + } + + @override + String toString() { + return (StringBuffer('ChatMembersData(') + ..write('id: $id, ') + ..write('chatRoomId: $chatRoomId, ') + ..write('accountId: $accountId, ') + ..write('account: $account, ') + ..write('nick: $nick, ') + ..write('role: $role, ') + ..write('notify: $notify, ') + ..write('joinedAt: $joinedAt, ') + ..write('breakUntil: $breakUntil, ') + ..write('timeoutUntil: $timeoutUntil, ') + ..write('isBot: $isBot, ') + ..write('status: $status, ') + ..write('lastTyped: $lastTyped, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + chatRoomId, + accountId, + account, + nick, + role, + notify, + joinedAt, + breakUntil, + timeoutUntil, + isBot, + status, + lastTyped, + createdAt, + updatedAt, + deletedAt, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ChatMembersData && + other.id == this.id && + other.chatRoomId == this.chatRoomId && + other.accountId == this.accountId && + other.account == this.account && + other.nick == this.nick && + other.role == this.role && + other.notify == this.notify && + other.joinedAt == this.joinedAt && + other.breakUntil == this.breakUntil && + other.timeoutUntil == this.timeoutUntil && + other.isBot == this.isBot && + other.status == this.status && + other.lastTyped == this.lastTyped && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt); +} + +class ChatMembersCompanion extends UpdateCompanion { + final Value id; + final Value chatRoomId; + final Value accountId; + final Value account; + final Value nick; + final Value role; + final Value notify; + final Value joinedAt; + final Value breakUntil; + final Value timeoutUntil; + final Value isBot; + final Value status; + final Value lastTyped; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value rowid; + const ChatMembersCompanion({ + this.id = const Value.absent(), + this.chatRoomId = const Value.absent(), + this.accountId = const Value.absent(), + this.account = const Value.absent(), + this.nick = const Value.absent(), + this.role = const Value.absent(), + this.notify = const Value.absent(), + this.joinedAt = const Value.absent(), + this.breakUntil = const Value.absent(), + this.timeoutUntil = const Value.absent(), + this.isBot = const Value.absent(), + this.status = const Value.absent(), + this.lastTyped = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + ChatMembersCompanion.insert({ + required String id, + required String chatRoomId, + required String accountId, + required String account, + this.nick = const Value.absent(), + required int role, + required int notify, + this.joinedAt = const Value.absent(), + this.breakUntil = const Value.absent(), + this.timeoutUntil = const Value.absent(), + required bool isBot, + this.status = const Value.absent(), + this.lastTyped = const Value.absent(), + required DateTime createdAt, + required DateTime updatedAt, + this.deletedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + chatRoomId = Value(chatRoomId), + accountId = Value(accountId), + account = Value(account), + role = Value(role), + notify = Value(notify), + isBot = Value(isBot), + createdAt = Value(createdAt), + updatedAt = Value(updatedAt); + static Insertable custom({ + Expression? id, + Expression? chatRoomId, + Expression? accountId, + Expression? account, + Expression? nick, + Expression? role, + Expression? notify, + Expression? joinedAt, + Expression? breakUntil, + Expression? timeoutUntil, + Expression? isBot, + Expression? status, + Expression? lastTyped, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (chatRoomId != null) 'chat_room_id': chatRoomId, + if (accountId != null) 'account_id': accountId, + if (account != null) 'account': account, + if (nick != null) 'nick': nick, + if (role != null) 'role': role, + if (notify != null) 'notify': notify, + if (joinedAt != null) 'joined_at': joinedAt, + if (breakUntil != null) 'break_until': breakUntil, + if (timeoutUntil != null) 'timeout_until': timeoutUntil, + if (isBot != null) 'is_bot': isBot, + if (status != null) 'status': status, + if (lastTyped != null) 'last_typed': lastTyped, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + ChatMembersCompanion copyWith({ + Value? id, + Value? chatRoomId, + Value? accountId, + Value? account, + Value? nick, + Value? role, + Value? notify, + Value? joinedAt, + Value? breakUntil, + Value? timeoutUntil, + Value? isBot, + Value? status, + Value? lastTyped, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? rowid, + }) { + return ChatMembersCompanion( + id: id ?? this.id, + chatRoomId: chatRoomId ?? this.chatRoomId, + accountId: accountId ?? this.accountId, + account: account ?? this.account, + nick: nick ?? this.nick, + role: role ?? this.role, + notify: notify ?? this.notify, + joinedAt: joinedAt ?? this.joinedAt, + breakUntil: breakUntil ?? this.breakUntil, + timeoutUntil: timeoutUntil ?? this.timeoutUntil, + isBot: isBot ?? this.isBot, + status: status ?? this.status, + lastTyped: lastTyped ?? this.lastTyped, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (chatRoomId.present) { + map['chat_room_id'] = Variable(chatRoomId.value); + } + if (accountId.present) { + map['account_id'] = Variable(accountId.value); + } + if (account.present) { + map['account'] = Variable(account.value); + } + if (nick.present) { + map['nick'] = Variable(nick.value); + } + if (role.present) { + map['role'] = Variable(role.value); + } + if (notify.present) { + map['notify'] = Variable(notify.value); + } + if (joinedAt.present) { + map['joined_at'] = Variable(joinedAt.value); + } + if (breakUntil.present) { + map['break_until'] = Variable(breakUntil.value); + } + if (timeoutUntil.present) { + map['timeout_until'] = Variable(timeoutUntil.value); + } + if (isBot.present) { + map['is_bot'] = Variable(isBot.value); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (lastTyped.present) { + map['last_typed'] = Variable(lastTyped.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ChatMembersCompanion(') + ..write('id: $id, ') + ..write('chatRoomId: $chatRoomId, ') + ..write('accountId: $accountId, ') + ..write('account: $account, ') + ..write('nick: $nick, ') + ..write('role: $role, ') + ..write('notify: $notify, ') + ..write('joinedAt: $joinedAt, ') + ..write('breakUntil: $breakUntil, ') + ..write('timeoutUntil: $timeoutUntil, ') + ..write('isBot: $isBot, ') + ..write('status: $status, ') + ..write('lastTyped: $lastTyped, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class ChatMessages extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + ChatMessages(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn roomId = GeneratedColumn( + 'room_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES chat_rooms (id)', + ), + ); + late final GeneratedColumn senderId = GeneratedColumn( + 'sender_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES chat_members (id)', + ), + ); + late final GeneratedColumn content = GeneratedColumn( + 'content', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn nonce = GeneratedColumn( + 'nonce', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn data = GeneratedColumn( + 'data', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + late final GeneratedColumn status = GeneratedColumn( + 'status', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + late final GeneratedColumn isDeleted = GeneratedColumn( + 'is_deleted', + aliasedName, + true, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), + defaultValue: const CustomExpression('0'), + ); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + late final GeneratedColumn type = GeneratedColumn( + 'type', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'text\''), + ); + late final GeneratedColumn meta = GeneratedColumn( + 'meta', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'{}\''), + ); + late final GeneratedColumn membersMentioned = GeneratedColumn( + 'members_mentioned', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'[]\''), + ); + late final GeneratedColumn editedAt = GeneratedColumn( + 'edited_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + late final GeneratedColumn attachments = GeneratedColumn( + 'attachments', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'[]\''), + ); + late final GeneratedColumn reactions = GeneratedColumn( + 'reactions', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'[]\''), + ); + late final GeneratedColumn repliedMessageId = GeneratedColumn( + 'replied_message_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn forwardedMessageId = + GeneratedColumn( + 'forwarded_message_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + roomId, + senderId, + content, + nonce, + data, + createdAt, + status, + isDeleted, + updatedAt, + deletedAt, + type, + meta, + membersMentioned, + editedAt, + attachments, + reactions, + repliedMessageId, + forwardedMessageId, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'chat_messages'; + @override + Set get $primaryKey => {id}; + @override + ChatMessagesData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ChatMessagesData( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + roomId: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}room_id'], + )!, + senderId: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}sender_id'], + )!, + content: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}content'], + ), + nonce: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}nonce'], + ), + data: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}data'], + )!, + createdAt: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_at'], + )!, + status: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}status'], + )!, + isDeleted: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}is_deleted'], + ), + updatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + ), + deletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}deleted_at'], + ), + type: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}type'], + )!, + meta: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}meta'], + )!, + membersMentioned: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}members_mentioned'], + )!, + editedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}edited_at'], + ), + attachments: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}attachments'], + )!, + reactions: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}reactions'], + )!, + repliedMessageId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}replied_message_id'], + ), + forwardedMessageId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}forwarded_message_id'], + ), + ); + } + + @override + ChatMessages createAlias(String alias) { + return ChatMessages(attachedDatabase, alias); + } +} + +class ChatMessagesData extends DataClass + implements Insertable { + final String id; + final String roomId; + final String senderId; + final String? content; + final String? nonce; + final String data; + final DateTime createdAt; + final int status; + final bool? isDeleted; + final DateTime? updatedAt; + final DateTime? deletedAt; + final String type; + final String meta; + final String membersMentioned; + final DateTime? editedAt; + final String attachments; + final String reactions; + final String? repliedMessageId; + final String? forwardedMessageId; + const ChatMessagesData({ + required this.id, + required this.roomId, + required this.senderId, + this.content, + this.nonce, + required this.data, + required this.createdAt, + required this.status, + this.isDeleted, + this.updatedAt, + this.deletedAt, + required this.type, + required this.meta, + required this.membersMentioned, + this.editedAt, + required this.attachments, + required this.reactions, + this.repliedMessageId, + this.forwardedMessageId, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['room_id'] = Variable(roomId); + map['sender_id'] = Variable(senderId); + if (!nullToAbsent || content != null) { + map['content'] = Variable(content); + } + if (!nullToAbsent || nonce != null) { + map['nonce'] = Variable(nonce); + } + map['data'] = Variable(data); + map['created_at'] = Variable(createdAt); + map['status'] = Variable(status); + if (!nullToAbsent || isDeleted != null) { + map['is_deleted'] = Variable(isDeleted); + } + if (!nullToAbsent || updatedAt != null) { + map['updated_at'] = Variable(updatedAt); + } + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + map['type'] = Variable(type); + map['meta'] = Variable(meta); + map['members_mentioned'] = Variable(membersMentioned); + if (!nullToAbsent || editedAt != null) { + map['edited_at'] = Variable(editedAt); + } + map['attachments'] = Variable(attachments); + map['reactions'] = Variable(reactions); + if (!nullToAbsent || repliedMessageId != null) { + map['replied_message_id'] = Variable(repliedMessageId); + } + if (!nullToAbsent || forwardedMessageId != null) { + map['forwarded_message_id'] = Variable(forwardedMessageId); + } + return map; + } + + ChatMessagesCompanion toCompanion(bool nullToAbsent) { + return ChatMessagesCompanion( + id: Value(id), + roomId: Value(roomId), + senderId: Value(senderId), + content: + content == null && nullToAbsent + ? const Value.absent() + : Value(content), + nonce: + nonce == null && nullToAbsent ? const Value.absent() : Value(nonce), + data: Value(data), + createdAt: Value(createdAt), + status: Value(status), + isDeleted: + isDeleted == null && nullToAbsent + ? const Value.absent() + : Value(isDeleted), + updatedAt: + updatedAt == null && nullToAbsent + ? const Value.absent() + : Value(updatedAt), + deletedAt: + deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + type: Value(type), + meta: Value(meta), + membersMentioned: Value(membersMentioned), + editedAt: + editedAt == null && nullToAbsent + ? const Value.absent() + : Value(editedAt), + attachments: Value(attachments), + reactions: Value(reactions), + repliedMessageId: + repliedMessageId == null && nullToAbsent + ? const Value.absent() + : Value(repliedMessageId), + forwardedMessageId: + forwardedMessageId == null && nullToAbsent + ? const Value.absent() + : Value(forwardedMessageId), + ); + } + + factory ChatMessagesData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ChatMessagesData( + id: serializer.fromJson(json['id']), + roomId: serializer.fromJson(json['roomId']), + senderId: serializer.fromJson(json['senderId']), + content: serializer.fromJson(json['content']), + nonce: serializer.fromJson(json['nonce']), + data: serializer.fromJson(json['data']), + createdAt: serializer.fromJson(json['createdAt']), + status: serializer.fromJson(json['status']), + isDeleted: serializer.fromJson(json['isDeleted']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + type: serializer.fromJson(json['type']), + meta: serializer.fromJson(json['meta']), + membersMentioned: serializer.fromJson(json['membersMentioned']), + editedAt: serializer.fromJson(json['editedAt']), + attachments: serializer.fromJson(json['attachments']), + reactions: serializer.fromJson(json['reactions']), + repliedMessageId: serializer.fromJson(json['repliedMessageId']), + forwardedMessageId: serializer.fromJson( + json['forwardedMessageId'], + ), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'roomId': serializer.toJson(roomId), + 'senderId': serializer.toJson(senderId), + 'content': serializer.toJson(content), + 'nonce': serializer.toJson(nonce), + 'data': serializer.toJson(data), + 'createdAt': serializer.toJson(createdAt), + 'status': serializer.toJson(status), + 'isDeleted': serializer.toJson(isDeleted), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'type': serializer.toJson(type), + 'meta': serializer.toJson(meta), + 'membersMentioned': serializer.toJson(membersMentioned), + 'editedAt': serializer.toJson(editedAt), + 'attachments': serializer.toJson(attachments), + 'reactions': serializer.toJson(reactions), + 'repliedMessageId': serializer.toJson(repliedMessageId), + 'forwardedMessageId': serializer.toJson(forwardedMessageId), + }; + } + + ChatMessagesData copyWith({ + String? id, + String? roomId, + String? senderId, + Value content = const Value.absent(), + Value nonce = const Value.absent(), + String? data, + DateTime? createdAt, + int? status, + Value isDeleted = const Value.absent(), + Value updatedAt = const Value.absent(), + Value deletedAt = const Value.absent(), + String? type, + String? meta, + String? membersMentioned, + Value editedAt = const Value.absent(), + String? attachments, + String? reactions, + Value repliedMessageId = const Value.absent(), + Value forwardedMessageId = const Value.absent(), + }) => ChatMessagesData( + id: id ?? this.id, + roomId: roomId ?? this.roomId, + senderId: senderId ?? this.senderId, + content: content.present ? content.value : this.content, + nonce: nonce.present ? nonce.value : this.nonce, + data: data ?? this.data, + createdAt: createdAt ?? this.createdAt, + status: status ?? this.status, + isDeleted: isDeleted.present ? isDeleted.value : this.isDeleted, + updatedAt: updatedAt.present ? updatedAt.value : this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + type: type ?? this.type, + meta: meta ?? this.meta, + membersMentioned: membersMentioned ?? this.membersMentioned, + editedAt: editedAt.present ? editedAt.value : this.editedAt, + attachments: attachments ?? this.attachments, + reactions: reactions ?? this.reactions, + repliedMessageId: + repliedMessageId.present + ? repliedMessageId.value + : this.repliedMessageId, + forwardedMessageId: + forwardedMessageId.present + ? forwardedMessageId.value + : this.forwardedMessageId, + ); + ChatMessagesData copyWithCompanion(ChatMessagesCompanion data) { + return ChatMessagesData( + id: data.id.present ? data.id.value : this.id, + roomId: data.roomId.present ? data.roomId.value : this.roomId, + senderId: data.senderId.present ? data.senderId.value : this.senderId, + content: data.content.present ? data.content.value : this.content, + nonce: data.nonce.present ? data.nonce.value : this.nonce, + data: data.data.present ? data.data.value : this.data, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + status: data.status.present ? data.status.value : this.status, + isDeleted: data.isDeleted.present ? data.isDeleted.value : this.isDeleted, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + type: data.type.present ? data.type.value : this.type, + meta: data.meta.present ? data.meta.value : this.meta, + membersMentioned: + data.membersMentioned.present + ? data.membersMentioned.value + : this.membersMentioned, + editedAt: data.editedAt.present ? data.editedAt.value : this.editedAt, + attachments: + data.attachments.present ? data.attachments.value : this.attachments, + reactions: data.reactions.present ? data.reactions.value : this.reactions, + repliedMessageId: + data.repliedMessageId.present + ? data.repliedMessageId.value + : this.repliedMessageId, + forwardedMessageId: + data.forwardedMessageId.present + ? data.forwardedMessageId.value + : this.forwardedMessageId, + ); + } + + @override + String toString() { + return (StringBuffer('ChatMessagesData(') + ..write('id: $id, ') + ..write('roomId: $roomId, ') + ..write('senderId: $senderId, ') + ..write('content: $content, ') + ..write('nonce: $nonce, ') + ..write('data: $data, ') + ..write('createdAt: $createdAt, ') + ..write('status: $status, ') + ..write('isDeleted: $isDeleted, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('type: $type, ') + ..write('meta: $meta, ') + ..write('membersMentioned: $membersMentioned, ') + ..write('editedAt: $editedAt, ') + ..write('attachments: $attachments, ') + ..write('reactions: $reactions, ') + ..write('repliedMessageId: $repliedMessageId, ') + ..write('forwardedMessageId: $forwardedMessageId') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + roomId, + senderId, + content, + nonce, + data, + createdAt, + status, + isDeleted, + updatedAt, + deletedAt, + type, + meta, + membersMentioned, + editedAt, + attachments, + reactions, + repliedMessageId, + forwardedMessageId, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ChatMessagesData && + other.id == this.id && + other.roomId == this.roomId && + other.senderId == this.senderId && + other.content == this.content && + other.nonce == this.nonce && + other.data == this.data && + other.createdAt == this.createdAt && + other.status == this.status && + other.isDeleted == this.isDeleted && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.type == this.type && + other.meta == this.meta && + other.membersMentioned == this.membersMentioned && + other.editedAt == this.editedAt && + other.attachments == this.attachments && + other.reactions == this.reactions && + other.repliedMessageId == this.repliedMessageId && + other.forwardedMessageId == this.forwardedMessageId); +} + +class ChatMessagesCompanion extends UpdateCompanion { + final Value id; + final Value roomId; + final Value senderId; + final Value content; + final Value nonce; + final Value data; + final Value createdAt; + final Value status; + final Value isDeleted; + final Value updatedAt; + final Value deletedAt; + final Value type; + final Value meta; + final Value membersMentioned; + final Value editedAt; + final Value attachments; + final Value reactions; + final Value repliedMessageId; + final Value forwardedMessageId; + final Value rowid; + const ChatMessagesCompanion({ + this.id = const Value.absent(), + this.roomId = const Value.absent(), + this.senderId = const Value.absent(), + this.content = const Value.absent(), + this.nonce = const Value.absent(), + this.data = const Value.absent(), + this.createdAt = const Value.absent(), + this.status = const Value.absent(), + this.isDeleted = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.type = const Value.absent(), + this.meta = const Value.absent(), + this.membersMentioned = const Value.absent(), + this.editedAt = const Value.absent(), + this.attachments = const Value.absent(), + this.reactions = const Value.absent(), + this.repliedMessageId = const Value.absent(), + this.forwardedMessageId = const Value.absent(), + this.rowid = const Value.absent(), + }); + ChatMessagesCompanion.insert({ + required String id, + required String roomId, + required String senderId, + this.content = const Value.absent(), + this.nonce = const Value.absent(), + required String data, + required DateTime createdAt, + required int status, + this.isDeleted = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.type = const Value.absent(), + this.meta = const Value.absent(), + this.membersMentioned = const Value.absent(), + this.editedAt = const Value.absent(), + this.attachments = const Value.absent(), + this.reactions = const Value.absent(), + this.repliedMessageId = const Value.absent(), + this.forwardedMessageId = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + roomId = Value(roomId), + senderId = Value(senderId), + data = Value(data), + createdAt = Value(createdAt), + status = Value(status); + static Insertable custom({ + Expression? id, + Expression? roomId, + Expression? senderId, + Expression? content, + Expression? nonce, + Expression? data, + Expression? createdAt, + Expression? status, + Expression? isDeleted, + Expression? updatedAt, + Expression? deletedAt, + Expression? type, + Expression? meta, + Expression? membersMentioned, + Expression? editedAt, + Expression? attachments, + Expression? reactions, + Expression? repliedMessageId, + Expression? forwardedMessageId, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (roomId != null) 'room_id': roomId, + if (senderId != null) 'sender_id': senderId, + if (content != null) 'content': content, + if (nonce != null) 'nonce': nonce, + if (data != null) 'data': data, + if (createdAt != null) 'created_at': createdAt, + if (status != null) 'status': status, + if (isDeleted != null) 'is_deleted': isDeleted, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (type != null) 'type': type, + if (meta != null) 'meta': meta, + if (membersMentioned != null) 'members_mentioned': membersMentioned, + if (editedAt != null) 'edited_at': editedAt, + if (attachments != null) 'attachments': attachments, + if (reactions != null) 'reactions': reactions, + if (repliedMessageId != null) 'replied_message_id': repliedMessageId, + if (forwardedMessageId != null) + 'forwarded_message_id': forwardedMessageId, + if (rowid != null) 'rowid': rowid, + }); + } + + ChatMessagesCompanion copyWith({ + Value? id, + Value? roomId, + Value? senderId, + Value? content, + Value? nonce, + Value? data, + Value? createdAt, + Value? status, + Value? isDeleted, + Value? updatedAt, + Value? deletedAt, + Value? type, + Value? meta, + Value? membersMentioned, + Value? editedAt, + Value? attachments, + Value? reactions, + Value? repliedMessageId, + Value? forwardedMessageId, + Value? rowid, + }) { + return ChatMessagesCompanion( + id: id ?? this.id, + roomId: roomId ?? this.roomId, + senderId: senderId ?? this.senderId, + content: content ?? this.content, + nonce: nonce ?? this.nonce, + data: data ?? this.data, + createdAt: createdAt ?? this.createdAt, + status: status ?? this.status, + isDeleted: isDeleted ?? this.isDeleted, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + type: type ?? this.type, + meta: meta ?? this.meta, + membersMentioned: membersMentioned ?? this.membersMentioned, + editedAt: editedAt ?? this.editedAt, + attachments: attachments ?? this.attachments, + reactions: reactions ?? this.reactions, + repliedMessageId: repliedMessageId ?? this.repliedMessageId, + forwardedMessageId: forwardedMessageId ?? this.forwardedMessageId, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (roomId.present) { + map['room_id'] = Variable(roomId.value); + } + if (senderId.present) { + map['sender_id'] = Variable(senderId.value); + } + if (content.present) { + map['content'] = Variable(content.value); + } + if (nonce.present) { + map['nonce'] = Variable(nonce.value); + } + if (data.present) { + map['data'] = Variable(data.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (isDeleted.present) { + map['is_deleted'] = Variable(isDeleted.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (meta.present) { + map['meta'] = Variable(meta.value); + } + if (membersMentioned.present) { + map['members_mentioned'] = Variable(membersMentioned.value); + } + if (editedAt.present) { + map['edited_at'] = Variable(editedAt.value); + } + if (attachments.present) { + map['attachments'] = Variable(attachments.value); + } + if (reactions.present) { + map['reactions'] = Variable(reactions.value); + } + if (repliedMessageId.present) { + map['replied_message_id'] = Variable(repliedMessageId.value); + } + if (forwardedMessageId.present) { + map['forwarded_message_id'] = Variable(forwardedMessageId.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ChatMessagesCompanion(') + ..write('id: $id, ') + ..write('roomId: $roomId, ') + ..write('senderId: $senderId, ') + ..write('content: $content, ') + ..write('nonce: $nonce, ') + ..write('data: $data, ') + ..write('createdAt: $createdAt, ') + ..write('status: $status, ') + ..write('isDeleted: $isDeleted, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('type: $type, ') + ..write('meta: $meta, ') + ..write('membersMentioned: $membersMentioned, ') + ..write('editedAt: $editedAt, ') + ..write('attachments: $attachments, ') + ..write('reactions: $reactions, ') + ..write('repliedMessageId: $repliedMessageId, ') + ..write('forwardedMessageId: $forwardedMessageId, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class PostDrafts extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + PostDrafts(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + late final GeneratedColumn title = GeneratedColumn( + 'title', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn description = GeneratedColumn( + 'description', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn content = GeneratedColumn( + 'content', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + late final GeneratedColumn visibility = GeneratedColumn( + 'visibility', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0'), + ); + late final GeneratedColumn type = GeneratedColumn( + 'type', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0'), + ); + late final GeneratedColumn lastModified = GeneratedColumn( + 'last_modified', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + late final GeneratedColumn postData = GeneratedColumn( + 'post_data', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + @override + List get $columns => [ + id, + title, + description, + content, + visibility, + type, + lastModified, + postData, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'post_drafts'; + @override + Set get $primaryKey => {id}; + @override + PostDraftsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return PostDraftsData( + id: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + title: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}title'], + ), + description: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}description'], + ), + content: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}content'], + ), + visibility: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}visibility'], + )!, + type: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}type'], + )!, + lastModified: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_modified'], + )!, + postData: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}post_data'], + )!, + ); + } + + @override + PostDrafts createAlias(String alias) { + return PostDrafts(attachedDatabase, alias); + } +} + +class PostDraftsData extends DataClass implements Insertable { + final String id; + final String? title; + final String? description; + final String? content; + final int visibility; + final int type; + final DateTime lastModified; + final String postData; + const PostDraftsData({ + required this.id, + this.title, + this.description, + this.content, + required this.visibility, + required this.type, + required this.lastModified, + required this.postData, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + if (!nullToAbsent || title != null) { + map['title'] = Variable(title); + } + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + if (!nullToAbsent || content != null) { + map['content'] = Variable(content); + } + map['visibility'] = Variable(visibility); + map['type'] = Variable(type); + map['last_modified'] = Variable(lastModified); + map['post_data'] = Variable(postData); + return map; + } + + PostDraftsCompanion toCompanion(bool nullToAbsent) { + return PostDraftsCompanion( + id: Value(id), + title: + title == null && nullToAbsent ? const Value.absent() : Value(title), + description: + description == null && nullToAbsent + ? const Value.absent() + : Value(description), + content: + content == null && nullToAbsent + ? const Value.absent() + : Value(content), + visibility: Value(visibility), + type: Value(type), + lastModified: Value(lastModified), + postData: Value(postData), + ); + } + + factory PostDraftsData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return PostDraftsData( + id: serializer.fromJson(json['id']), + title: serializer.fromJson(json['title']), + description: serializer.fromJson(json['description']), + content: serializer.fromJson(json['content']), + visibility: serializer.fromJson(json['visibility']), + type: serializer.fromJson(json['type']), + lastModified: serializer.fromJson(json['lastModified']), + postData: serializer.fromJson(json['postData']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'title': serializer.toJson(title), + 'description': serializer.toJson(description), + 'content': serializer.toJson(content), + 'visibility': serializer.toJson(visibility), + 'type': serializer.toJson(type), + 'lastModified': serializer.toJson(lastModified), + 'postData': serializer.toJson(postData), + }; + } + + PostDraftsData copyWith({ + String? id, + Value title = const Value.absent(), + Value description = const Value.absent(), + Value content = const Value.absent(), + int? visibility, + int? type, + DateTime? lastModified, + String? postData, + }) => PostDraftsData( + id: id ?? this.id, + title: title.present ? title.value : this.title, + description: description.present ? description.value : this.description, + content: content.present ? content.value : this.content, + visibility: visibility ?? this.visibility, + type: type ?? this.type, + lastModified: lastModified ?? this.lastModified, + postData: postData ?? this.postData, + ); + PostDraftsData copyWithCompanion(PostDraftsCompanion data) { + return PostDraftsData( + id: data.id.present ? data.id.value : this.id, + title: data.title.present ? data.title.value : this.title, + description: + data.description.present ? data.description.value : this.description, + content: data.content.present ? data.content.value : this.content, + visibility: + data.visibility.present ? data.visibility.value : this.visibility, + type: data.type.present ? data.type.value : this.type, + lastModified: + data.lastModified.present + ? data.lastModified.value + : this.lastModified, + postData: data.postData.present ? data.postData.value : this.postData, + ); + } + + @override + String toString() { + return (StringBuffer('PostDraftsData(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('content: $content, ') + ..write('visibility: $visibility, ') + ..write('type: $type, ') + ..write('lastModified: $lastModified, ') + ..write('postData: $postData') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + title, + description, + content, + visibility, + type, + lastModified, + postData, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is PostDraftsData && + other.id == this.id && + other.title == this.title && + other.description == this.description && + other.content == this.content && + other.visibility == this.visibility && + other.type == this.type && + other.lastModified == this.lastModified && + other.postData == this.postData); +} + +class PostDraftsCompanion extends UpdateCompanion { + final Value id; + final Value title; + final Value description; + final Value content; + final Value visibility; + final Value type; + final Value lastModified; + final Value postData; + final Value rowid; + const PostDraftsCompanion({ + this.id = const Value.absent(), + this.title = const Value.absent(), + this.description = const Value.absent(), + this.content = const Value.absent(), + this.visibility = const Value.absent(), + this.type = const Value.absent(), + this.lastModified = const Value.absent(), + this.postData = const Value.absent(), + this.rowid = const Value.absent(), + }); + PostDraftsCompanion.insert({ + required String id, + this.title = const Value.absent(), + this.description = const Value.absent(), + this.content = const Value.absent(), + this.visibility = const Value.absent(), + this.type = const Value.absent(), + required DateTime lastModified, + required String postData, + this.rowid = const Value.absent(), + }) : id = Value(id), + lastModified = Value(lastModified), + postData = Value(postData); + static Insertable custom({ + Expression? id, + Expression? title, + Expression? description, + Expression? content, + Expression? visibility, + Expression? type, + Expression? lastModified, + Expression? postData, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (title != null) 'title': title, + if (description != null) 'description': description, + if (content != null) 'content': content, + if (visibility != null) 'visibility': visibility, + if (type != null) 'type': type, + if (lastModified != null) 'last_modified': lastModified, + if (postData != null) 'post_data': postData, + if (rowid != null) 'rowid': rowid, + }); + } + + PostDraftsCompanion copyWith({ + Value? id, + Value? title, + Value? description, + Value? content, + Value? visibility, + Value? type, + Value? lastModified, + Value? postData, + Value? rowid, + }) { + return PostDraftsCompanion( + id: id ?? this.id, + title: title ?? this.title, + description: description ?? this.description, + content: content ?? this.content, + visibility: visibility ?? this.visibility, + type: type ?? this.type, + lastModified: lastModified ?? this.lastModified, + postData: postData ?? this.postData, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (title.present) { + map['title'] = Variable(title.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (content.present) { + map['content'] = Variable(content.value); + } + if (visibility.present) { + map['visibility'] = Variable(visibility.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (lastModified.present) { + map['last_modified'] = Variable(lastModified.value); + } + if (postData.present) { + map['post_data'] = Variable(postData.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('PostDraftsCompanion(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('content: $content, ') + ..write('visibility: $visibility, ') + ..write('type: $type, ') + ..write('lastModified: $lastModified, ') + ..write('postData: $postData, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class DatabaseAtV7 extends GeneratedDatabase { + DatabaseAtV7(QueryExecutor e) : super(e); + late final ChatRooms chatRooms = ChatRooms(this); + late final ChatMembers chatMembers = ChatMembers(this); + late final ChatMessages chatMessages = ChatMessages(this); + late final PostDrafts postDrafts = PostDrafts(this); + @override + Iterable> get allTables => + allSchemaEntities.whereType>(); + @override + List get allSchemaEntities => [ + chatRooms, + chatMembers, + chatMessages, + postDrafts, + ]; + @override + int get schemaVersion => 7; +} diff --git a/test/drift/app_database/migration_test.dart b/test/drift/app_database/migration_test.dart new file mode 100644 index 00000000..e69922a4 --- /dev/null +++ b/test/drift/app_database/migration_test.dart @@ -0,0 +1,79 @@ +// dart format width=80 +// ignore_for_file: unused_local_variable, unused_import +import 'package:drift/drift.dart'; +import 'package:drift_dev/api/migrations_native.dart'; +import 'package:island/database/drift_db.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'generated/schema.dart'; + +import 'generated/schema_v6.dart' as v6; +import 'generated/schema_v7.dart' as v7; + +void main() { + driftRuntimeOptions.dontWarnAboutMultipleDatabases = true; + late SchemaVerifier verifier; + + setUpAll(() { + verifier = SchemaVerifier(GeneratedHelper()); + }); + + group('simple database migrations', () { + // These simple tests verify all possible schema updates with a simple (no + // data) migration. This is a quick way to ensure that written database + // migrations properly alter the schema. + const versions = GeneratedHelper.versions; + for (final (i, fromVersion) in versions.indexed) { + group('from $fromVersion', () { + for (final toVersion in versions.skip(i + 1)) { + test('to $toVersion', () async { + final schema = await verifier.schemaAt(fromVersion); + final db = AppDatabase(schema.newConnection()); + await verifier.migrateAndValidate(db, toVersion); + await db.close(); + }); + } + }); + } + }); + + // The following template shows how to write tests ensuring your migrations + // preserve existing data. + // Testing this can be useful for migrations that change existing columns + // (e.g. by alterating their type or constraints). Migrations that only add + // tables or columns typically don't need these advanced tests. For more + // information, see https://drift.simonbinder.eu/migrations/tests/#verifying-data-integrity + // TODO: This generated template shows how these tests could be written. Adopt + // it to your own needs when testing migrations with data integrity. + test('migration from v6 to v7 does not corrupt data', () async { + // Add data to insert into the old database, and the expected rows after the + // migration. + // TODO: Fill these lists + final oldChatMessagesData = []; + final expectedNewChatMessagesData = []; + + final oldPostDraftsData = []; + final expectedNewPostDraftsData = []; + + await verifier.testWithDataIntegrity( + oldVersion: 6, + newVersion: 7, + createOld: v6.DatabaseAtV6.new, + createNew: v7.DatabaseAtV7.new, + openTestedDatabase: AppDatabase.new, + createItems: (batch, oldDb) { + batch.insertAll(oldDb.chatMessages, oldChatMessagesData); + batch.insertAll(oldDb.postDrafts, oldPostDraftsData); + }, + validateItems: (newDb) async { + expect( + expectedNewChatMessagesData, + await newDb.select(newDb.chatMessages).get(), + ); + expect( + expectedNewPostDraftsData, + await newDb.select(newDb.postDrafts).get(), + ); + }, + ); + }); +}