diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2Transformer.kt b/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2Transformer.kt index 2b95054051..03ccbfc08d 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2Transformer.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2Transformer.kt @@ -16,13 +16,13 @@ object GV2Transformer : ColumnTransformer { return columnName == GroupTable.V2_DECRYPTED_GROUP } - override fun transform(tableName: String?, columnName: String, cursor: Cursor): String { + override fun transform(tableName: String?, columnName: String, cursor: Cursor): String? { return if (columnName == GroupTable.V2_DECRYPTED_GROUP) { val groupBytes = cursor.requireBlob(GroupTable.V2_DECRYPTED_GROUP) val group = DecryptedGroup.parseFrom(groupBytes) group.formatAsHtml() } else { - "" + null } } } diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt b/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt index 532345a047..d820cef023 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt @@ -16,7 +16,7 @@ object GV2UpdateTransformer : ColumnTransformer { return columnName == MessageTable.BODY && (tableName == null || tableName == MessageTable.TABLE_NAME) } - override fun transform(tableName: String?, columnName: String, cursor: Cursor): String { + override fun transform(tableName: String?, columnName: String, cursor: Cursor): String? { val type: Long = cursor.getMessageType() if (type == -1L) { @@ -32,7 +32,7 @@ object GV2UpdateTransformer : ColumnTransformer { "${gv2ChangeDescription.spannable}

${decryptedGroupV2Context.change}" } else { - body ?: "" + body } } } diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/database/IsStoryTransformer.kt b/app/src/spinner/java/org/thoughtcrime/securesms/database/IsStoryTransformer.kt index 388a141b33..9778b4cf8b 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/database/IsStoryTransformer.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/database/IsStoryTransformer.kt @@ -10,7 +10,7 @@ object IsStoryTransformer : ColumnTransformer { return columnName == MessageTable.STORY_TYPE && (tableName == null || tableName == MessageTable.TABLE_NAME) } - override fun transform(tableName: String?, columnName: String, cursor: Cursor): String { + override fun transform(tableName: String?, columnName: String, cursor: Cursor): String? { val storyType = fromCode(cursor.requireInt(MessageTable.STORY_TYPE)) return "${cursor.requireInt(MessageTable.STORY_TYPE)}

$storyType" } diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/database/MessageBitmaskColumnTransformer.kt b/app/src/spinner/java/org/thoughtcrime/securesms/database/MessageBitmaskColumnTransformer.kt index 889c3640c3..ab617a26c4 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/database/MessageBitmaskColumnTransformer.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/database/MessageBitmaskColumnTransformer.kt @@ -66,7 +66,7 @@ object MessageBitmaskColumnTransformer : ColumnTransformer { return columnName == "type" || columnName == "msg_box" } - override fun transform(tableName: String?, columnName: String, cursor: Cursor): String { + override fun transform(tableName: String?, columnName: String, cursor: Cursor): String? { val type = cursor.requireLong(columnName) val describe = """ diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/database/ProfileKeyCredentialTransformer.kt b/app/src/spinner/java/org/thoughtcrime/securesms/database/ProfileKeyCredentialTransformer.kt index bce0ba2062..c39a1671b7 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/database/ProfileKeyCredentialTransformer.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/database/ProfileKeyCredentialTransformer.kt @@ -16,7 +16,7 @@ object ProfileKeyCredentialTransformer : ColumnTransformer { return columnName == RecipientTable.EXPIRING_PROFILE_KEY_CREDENTIAL && (tableName == null || tableName == RecipientTable.TABLE_NAME) } - override fun transform(tableName: String?, columnName: String, cursor: Cursor): String { + override fun transform(tableName: String?, columnName: String, cursor: Cursor): String? { val columnDataString = cursor.requireString(RecipientTable.EXPIRING_PROFILE_KEY_CREDENTIAL) ?: return DefaultColumnTransformer.transform(tableName, columnName, cursor) val columnDataBytes = Base64.decode(columnDataString) val columnData = ExpiringProfileKeyCredentialColumnData.parseFrom(columnDataBytes) diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/database/TimestampTransformer.kt b/app/src/spinner/java/org/thoughtcrime/securesms/database/TimestampTransformer.kt index 91ea68400f..fa484695f1 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/database/TimestampTransformer.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/database/TimestampTransformer.kt @@ -14,7 +14,7 @@ object TimestampTransformer : ColumnTransformer { columnName.contains("timestamp", true) } - override fun transform(tableName: String?, columnName: String, cursor: Cursor): String { + override fun transform(tableName: String?, columnName: String, cursor: Cursor): String? { val timestamp: Long = cursor.requireLong(columnName) return if (timestamp > LocalDateTime.of(2000, 1, 1, 0, 0, 0, 0).toMillis()) { diff --git a/spinner/lib/src/main/assets/browse.hbs b/spinner/lib/src/main/assets/browse.hbs index bfa8a2800a..6bb54a3a24 100644 --- a/spinner/lib/src/main/assets/browse.hbs +++ b/spinner/lib/src/main/assets/browse.hbs @@ -47,7 +47,7 @@ {{#each queryResult.rows}} {{#each this}} -
{{{this}}}
+
{{#if (eq this null)}} null {{else}} {{{this}}} {{/if}}
{{/each}} {{/each}} diff --git a/spinner/lib/src/main/assets/css/main.css b/spinner/lib/src/main/assets/css/main.css index 821ea68bb4..c82d5327e2 100644 --- a/spinner/lib/src/main/assets/css/main.css +++ b/spinner/lib/src/main/assets/css/main.css @@ -93,3 +93,6 @@ table.device-info, table.device-info tr, table.device-info td { font-style: italic; } +.null { + color: #666 +} diff --git a/spinner/lib/src/main/assets/query.hbs b/spinner/lib/src/main/assets/query.hbs index 889b3bf363..e2a78a07cf 100644 --- a/spinner/lib/src/main/assets/query.hbs +++ b/spinner/lib/src/main/assets/query.hbs @@ -35,7 +35,7 @@ {{#each queryResult.rows}} {{#each this}} -
{{{this}}}
+
{{#if (eq this null)}} null {{else}} {{{this}}} {{/if}}
{{/each}} {{/each}} diff --git a/spinner/lib/src/main/java/org/signal/spinner/ColumnTransformer.kt b/spinner/lib/src/main/java/org/signal/spinner/ColumnTransformer.kt index 95d45ac868..072ac73b8b 100644 --- a/spinner/lib/src/main/java/org/signal/spinner/ColumnTransformer.kt +++ b/spinner/lib/src/main/java/org/signal/spinner/ColumnTransformer.kt @@ -14,5 +14,5 @@ interface ColumnTransformer { /** * In certain circumstances (like some queries), the table name may not be guaranteed. */ - fun transform(tableName: String?, columnName: String, cursor: Cursor): String + fun transform(tableName: String?, columnName: String, cursor: Cursor): String? } diff --git a/spinner/lib/src/main/java/org/signal/spinner/DefaultColumnTransformer.kt b/spinner/lib/src/main/java/org/signal/spinner/DefaultColumnTransformer.kt index f2983eaabd..53267b0dac 100644 --- a/spinner/lib/src/main/java/org/signal/spinner/DefaultColumnTransformer.kt +++ b/spinner/lib/src/main/java/org/signal/spinner/DefaultColumnTransformer.kt @@ -8,13 +8,11 @@ object DefaultColumnTransformer : ColumnTransformer { return true } - override fun transform(tableName: String?, columnName: String, cursor: Cursor): String { + override fun transform(tableName: String?, columnName: String, cursor: Cursor): String? { val index = cursor.getColumnIndex(columnName) - val data: String? = when (cursor.getType(index)) { + return when (cursor.getType(index)) { Cursor.FIELD_TYPE_BLOB -> Base64.encodeToString(cursor.getBlob(index), 0) else -> cursor.getString(index) } - - return data ?: "null" } } diff --git a/spinner/lib/src/main/java/org/signal/spinner/SpinnerServer.kt b/spinner/lib/src/main/java/org/signal/spinner/SpinnerServer.kt index fd86b60190..1d11e91d33 100644 --- a/spinner/lib/src/main/java/org/signal/spinner/SpinnerServer.kt +++ b/spinner/lib/src/main/java/org/signal/spinner/SpinnerServer.kt @@ -283,13 +283,13 @@ internal class SpinnerServer( } var timeOfFirstRowNanos = 0L - val rows = mutableListOf>() + val rows = mutableListOf>() while (moveToNext()) { if (timeOfFirstRowNanos == 0L) { timeOfFirstRowNanos = System.nanoTime() } - val row = mutableListOf() + val row = mutableListOf() for (i in 0 until numColumns) { val columnName: String = getColumnName(i) try { @@ -460,7 +460,7 @@ internal class SpinnerServer( data class QueryResult( val columns: List, - val rows: List>, + val rows: List>, val rowCount: Int = rows.size, val timeToFirstRow: String, val timeToReadRows: String