imsg/Sources/IMsgCore/MessageStoreSchema.swift
2026-05-05 03:38:10 +01:00

68 lines
3.3 KiB
Swift

import SQLite
struct MessageStoreSchema: Sendable {
let hasAttributedBody: Bool
let hasReactionColumns: Bool
let hasThreadOriginatorGUIDColumn: Bool
let hasDestinationCallerID: Bool
let hasAudioMessageColumn: Bool
let hasAttachmentUserInfo: Bool
let hasBalloonBundleIDColumn: Bool
let hasChatMessageJoinMessageDateColumn: Bool
let hasChatAccountIDColumn: Bool
let hasChatAccountLoginColumn: Bool
let hasChatLastAddressedHandleColumn: Bool
init(connection: Connection) {
let messageColumns = MessageStore.tableColumns(connection: connection, table: "message")
let attachmentColumns = MessageStore.tableColumns(connection: connection, table: "attachment")
let chatMessageJoinColumns = MessageStore.tableColumns(
connection: connection,
table: "chat_message_join"
)
let chatColumns = MessageStore.tableColumns(connection: connection, table: "chat")
self.hasAttributedBody = messageColumns.contains("attributedbody")
self.hasReactionColumns = MessageStore.reactionColumnsPresent(in: messageColumns)
self.hasThreadOriginatorGUIDColumn = messageColumns.contains("thread_originator_guid")
self.hasDestinationCallerID = messageColumns.contains("destination_caller_id")
self.hasAudioMessageColumn = messageColumns.contains("is_audio_message")
self.hasAttachmentUserInfo = attachmentColumns.contains("user_info")
self.hasBalloonBundleIDColumn = messageColumns.contains("balloon_bundle_id")
self.hasChatMessageJoinMessageDateColumn = chatMessageJoinColumns.contains("message_date")
self.hasChatAccountIDColumn = chatColumns.contains("account_id")
self.hasChatAccountLoginColumn = chatColumns.contains("account_login")
self.hasChatLastAddressedHandleColumn = chatColumns.contains("last_addressed_handle")
}
init(
base: MessageStoreSchema,
hasAttributedBody: Bool? = nil,
hasReactionColumns: Bool? = nil,
hasThreadOriginatorGUIDColumn: Bool? = nil,
hasDestinationCallerID: Bool? = nil,
hasAudioMessageColumn: Bool? = nil,
hasAttachmentUserInfo: Bool? = nil,
hasBalloonBundleIDColumn: Bool? = nil,
hasChatMessageJoinMessageDateColumn: Bool? = nil,
hasChatAccountIDColumn: Bool? = nil,
hasChatAccountLoginColumn: Bool? = nil,
hasChatLastAddressedHandleColumn: Bool? = nil
) {
self.hasAttributedBody = hasAttributedBody ?? base.hasAttributedBody
self.hasReactionColumns = hasReactionColumns ?? base.hasReactionColumns
self.hasThreadOriginatorGUIDColumn =
hasThreadOriginatorGUIDColumn ?? base.hasThreadOriginatorGUIDColumn
self.hasDestinationCallerID = hasDestinationCallerID ?? base.hasDestinationCallerID
self.hasAudioMessageColumn = hasAudioMessageColumn ?? base.hasAudioMessageColumn
self.hasAttachmentUserInfo = hasAttachmentUserInfo ?? base.hasAttachmentUserInfo
self.hasBalloonBundleIDColumn = hasBalloonBundleIDColumn ?? base.hasBalloonBundleIDColumn
self.hasChatMessageJoinMessageDateColumn =
hasChatMessageJoinMessageDateColumn ?? base.hasChatMessageJoinMessageDateColumn
self.hasChatAccountIDColumn = hasChatAccountIDColumn ?? base.hasChatAccountIDColumn
self.hasChatAccountLoginColumn = hasChatAccountLoginColumn ?? base.hasChatAccountLoginColumn
self.hasChatLastAddressedHandleColumn =
hasChatLastAddressedHandleColumn ?? base.hasChatLastAddressedHandleColumn
}
}