Skip to content

Commit

Permalink
db migration
Browse files Browse the repository at this point in the history
  • Loading branch information
MohamadJaara committed Jul 17, 2023
1 parent 125315c commit 0bd4540
Showing 1 changed file with 169 additions and 0 deletions.
169 changes: 169 additions & 0 deletions persistence/src/commonMain/db_user/migrations/49.sq
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
import com.wire.kalium.persistence.dao.QualifiedIDEntity;
import kotlin.Boolean;
import com.wire.kalium.persistence.dao.QualifiedIDEntity;
import com.wire.kalium.persistence.dao.message.MessageEntity.ContentType;
import com.wire.kalium.persistence.dao.message.MessageEntity.MemberChangeType;
import com.wire.kalium.persistence.dao.message.MessageEntity;
import com.wire.kalium.persistence.dao.message.MessageEntityContent;
import com.wire.kalium.persistence.dao.message.RecipientFailureTypeEntity;
import kotlin.Int;
import kotlin.collections.List;
import kotlinx.datetime.Instant;

CREATE TABLE ButtonContent (
message_id TEXT NOT NULL,
conversation_id TEXT AS QualifiedIDEntity NOT NULL,

id TEXT NOT NULL,
text TEXT NOT NULL,
is_pending INTEGER AS Boolean NOT NULL DEFAULT(0),
is_selected INTEGER AS Boolean NOT NULL DEFAULT(0),

FOREIGN KEY (conversation_id, message_id) REFERENCES Message(conversation_id, id) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY (conversation_id, message_id, id)
);

DROP VIEW IF EXISTS MessageDetailsView;

CREATE VIEW MessageDetailsView
AS SELECT
Message.id AS id,
Message.conversation_id AS conversationId,
Message.content_type AS contentType,
Message.creation_date AS date,
Message.sender_user_id AS senderUserId,
Message.sender_client_id AS senderClientId,
Message.status AS status,
Message.last_edit_date AS lastEditTimestamp,
Message.visibility AS visibility,
Message.expects_read_confirmation AS expectsReadConfirmation,
Message.expire_after_millis AS expireAfterMillis,
Message.self_deletion_start_date AS selfDeletionStartDate,
User.name AS senderName,
User.handle AS senderHandle,
User.email AS senderEmail,
User.phone AS senderPhone,
User.accent_id AS senderAccentId,
User.team AS senderTeamId,
User.connection_status AS senderConnectionStatus,
User.preview_asset_id AS senderPreviewAssetId,
User.complete_asset_id AS senderCompleteAssetId,
User.user_availability_status AS senderAvailabilityStatus,
User.user_type AS senderUserType,
User.bot_service AS senderBotService,
User.deleted AS senderIsDeleted,
(Message.sender_user_id == SelfUser.id) AS isSelfMessage,
TextContent.text_body AS text,
TextContent.is_quoting_self AS isQuotingSelfUser,
AssetContent.asset_size AS assetSize,
AssetContent.asset_name AS assetName,
AssetContent.asset_mime_type AS assetMimeType,
AssetContent.asset_upload_status AS assetUploadStatus,
AssetContent.asset_download_status AS assetDownloadStatus,
AssetContent.asset_otr_key AS assetOtrKey,
AssetContent.asset_sha256 AS assetSha256,
AssetContent.asset_id AS assetId,
AssetContent.asset_token AS assetToken,
AssetContent.asset_domain AS assetDomain,
AssetContent.asset_encryption_algorithm AS assetEncryptionAlgorithm,
AssetContent.asset_width AS assetWidth,
AssetContent.asset_height AS assetHeight,
AssetContent.asset_duration_ms AS assetDuration,
AssetContent.asset_normalized_loudness AS assetNormalizedLoudness,
MissedCallContent.caller_id AS callerId,
MemberChangeContent.member_change_list AS memberChangeList,
MemberChangeContent.member_change_type AS memberChangeType,
UnknownContent.unknown_type_name AS unknownContentTypeName,
UnknownContent.unknown_encoded_data AS unknownContentData,
RestrictedAssetContent.asset_mime_type AS restrictedAssetMimeType,
RestrictedAssetContent.asset_size AS restrictedAssetSize,
RestrictedAssetContent.asset_name AS restrictedAssetName,
FailedToDecryptContent.unknown_encoded_data AS failedToDecryptData,
FailedToDecryptContent.is_decryption_resolved AS isDecryptionResolved,
ConversationNameChangedContent.conversation_name AS conversationName,
'{' || IFNULL(
(SELECT GROUP_CONCAT('"' || emoji || '":' || count)
FROM (
SELECT COUNT(*) count, Reaction.emoji emoji
FROM Reaction
WHERE Reaction.message_id = Message.id
AND Reaction.conversation_id = Message.conversation_id
GROUP BY Reaction.emoji
)),
'')
|| '}' AS allReactionsJson,
IFNULL(
(SELECT '[' || GROUP_CONCAT('"' || Reaction.emoji || '"') || ']'
FROM Reaction
WHERE Reaction.message_id = Message.id
AND Reaction.conversation_id = Message.conversation_id
AND Reaction.sender_id = SelfUser.id
),
'[]'
) AS selfReactionsJson,
IFNULL(
(SELECT '[' || GROUP_CONCAT(
'{"start":' || start || ', "length":' || length ||
', "userId":{"value":"' || replace(substr(user_id, 0, instr(user_id, '@')), '@', '') || '"' ||
',"domain":"' || replace(substr(user_id, instr(user_id, '@')+1, length(user_id)), '@', '') || '"' ||
'}' || '}') || ']'
FROM MessageMention
WHERE MessageMention.message_id = Message.id
AND MessageMention.conversation_id = Message.conversation_id
),
'[]'
) AS mentions,
TextContent.quoted_message_id AS quotedMessageId,
QuotedMessage.sender_user_id AS quotedSenderId,
TextContent.is_quote_verified AS isQuoteVerified,
QuotedSender.name AS quotedSenderName,
QuotedMessage.creation_date AS quotedMessageDateTime,
QuotedMessage.last_edit_date AS quotedMessageEditTimestamp,
QuotedMessage.visibility AS quotedMessageVisibility,
QuotedMessage.content_type AS quotedMessageContentType,
QuotedTextContent.text_body AS quotedTextBody,
QuotedAssetContent.asset_mime_type AS quotedAssetMimeType,
QuotedAssetContent.asset_name AS quotedAssetName,

NewConversationReceiptMode.receipt_mode AS newConversationReceiptMode,

ConversationReceiptModeChanged.receipt_mode AS conversationReceiptModeChanged,
ConversationTimerChangedContent.message_timer AS messageTimerChanged,
FailedRecipientsWithNoClients.recipient_failure_list AS recipientsFailedWithNoClientsList,
FailedRecipientsDeliveryFailed.recipient_failure_list AS recipientsFailedDeliveryList,

IFNULL(
(SELECT '[' ||
GROUP_CONCAT('{"text":"' || text || '", "id":"' || id || '""is_selected":' || is_selected || '"is_pending":' || is_pending || '}')
|| ']'
FROM ButtonContent
WHERE ButtonContent.message_id = Message.id
AND ButtonContent.conversation_id = Message.conversation_id
),
'[]'
) AS buttonsJson

FROM Message
JOIN User ON Message.sender_user_id = User.qualified_id
LEFT JOIN MessageTextContent AS TextContent ON Message.id = TextContent.message_id AND Message.conversation_id = TextContent.conversation_id
LEFT JOIN MessageAssetContent AS AssetContent ON Message.id = AssetContent.message_id AND Message.conversation_id = AssetContent.conversation_id
LEFT JOIN MessageMissedCallContent AS MissedCallContent ON Message.id = MissedCallContent.message_id AND Message.conversation_id = MissedCallContent.conversation_id
LEFT JOIN MessageMemberChangeContent AS MemberChangeContent ON Message.id = MemberChangeContent.message_id AND Message.conversation_id = MemberChangeContent.conversation_id
LEFT JOIN MessageUnknownContent AS UnknownContent ON Message.id = UnknownContent.message_id AND Message.conversation_id = UnknownContent.conversation_id
LEFT JOIN MessageRestrictedAssetContent AS RestrictedAssetContent ON Message.id = RestrictedAssetContent.message_id AND RestrictedAssetContent.conversation_id = RestrictedAssetContent.conversation_id
LEFT JOIN MessageFailedToDecryptContent AS FailedToDecryptContent ON Message.id = FailedToDecryptContent.message_id AND Message.conversation_id = FailedToDecryptContent.conversation_id
LEFT JOIN MessageConversationChangedContent AS ConversationNameChangedContent ON Message.id = ConversationNameChangedContent.message_id AND Message.conversation_id = ConversationNameChangedContent.conversation_id
LEFT JOIN MessageRecipientFailure AS FailedRecipientsWithNoClients ON Message.id = FailedRecipientsWithNoClients.message_id AND Message.conversation_id = FailedRecipientsWithNoClients.conversation_id AND FailedRecipientsWithNoClients.recipient_failure_type = 'NO_CLIENTS_TO_DELIVER'
LEFT JOIN MessageRecipientFailure AS FailedRecipientsDeliveryFailed ON Message.id = FailedRecipientsDeliveryFailed.message_id AND Message.conversation_id = FailedRecipientsDeliveryFailed.conversation_id AND FailedRecipientsDeliveryFailed.recipient_failure_type = 'MESSAGE_DELIVERY_FAILED'

-- joins for quoted messages
LEFT JOIN Message AS QuotedMessage ON QuotedMessage.id = TextContent.quoted_message_id AND QuotedMessage.conversation_id = TextContent.conversation_id
LEFT JOIN User AS QuotedSender ON QuotedMessage.sender_user_id = QuotedSender.qualified_id
LEFT JOIN MessageTextContent AS QuotedTextContent ON QuotedTextContent.message_id = QuotedMessage.id AND QuotedMessage.conversation_id = TextContent.conversation_id
LEFT JOIN MessageAssetContent AS QuotedAssetContent ON QuotedAssetContent.message_id = QuotedMessage.id AND QuotedMessage.conversation_id = TextContent.conversation_id
-- end joins for quoted messages
LEFT JOIN MessageNewConversationReceiptModeContent AS NewConversationReceiptMode ON Message.id = NewConversationReceiptMode.message_id AND Message.conversation_id = NewConversationReceiptMode.conversation_id
LEFT JOIN MessageConversationReceiptModeChangedContent AS ConversationReceiptModeChanged ON Message.id = ConversationReceiptModeChanged.message_id AND Message.conversation_id = ConversationReceiptModeChanged.conversation_id
LEFT JOIN MessageConversationTimerChangedContent AS ConversationTimerChangedContent ON Message.id = ConversationTimerChangedContent.message_id AND Message.conversation_id = ConversationTimerChangedContent.conversation_id
LEFT JOIN SelfUser;
-- TODO: Remove IFNULL functions above if we can force SQLDelight to not unpack as notnull

0 comments on commit 0bd4540

Please sign in to comment.