-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
125315c
commit 0bd4540
Showing
1 changed file
with
169 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |