Decode MessagePack, igbinary, Protobuf and Avro values with Display As

Ouverte
#3,607 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
25/100
Type d'issue
Fonctionnalité
Clarté
Clairement spécifiée
Activité
Active
Stack technique
kafka, mysql, postgresql, swift
Domaine
database, databases

Piste de recherche

Start with apple/TablePro/Core/Services/Formatting/ValueDisplayFormat.swift and ValueDisplayFormatter.swift, then review features/json-viewer.mdx and databases/kafka.mdx for existing viewer behavior. Identify how per-column formats and Kafka schema settings are represented before scoping the decoders. Done means reference-library fixtures decode for each format, invalid values fall back to hex with an explanation, and swapped-time UUIDs display as their original UUID.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

enhancement platform-macos
Problem

Display As has seven formats: Raw Value, Text, UUID, two Unix timestamps, JSON and PHP Serialized (features/json-viewer.mdx:14-22, apple/TablePro/Core/Services/Formatting/ValueDisplayFormat.swift:12-19). A binary column that holds a compact serialization shows only hex:

  • MessagePack, common for cache payloads and job queues.
  • igbinary, the binary form of PHP serialization, which the PHP Serialized viewer does not read.
  • Protobuf and Avro. On Kafka, a topic whose values are Avro or Protobuf shows the raw bytes, five-byte wire-format prefix included (databases/kafka.mdx:151-152).

The UUID format also renders the bytes in stored order (apple/TablePro/Core/Services/Formatting/ValueDisplayFormatter.swift:56-74). A MySQL column filled with UUID_TO_BIN(uuid, 1), which moves the time fields to the front, renders as a UUID that differs from the one the application wrote.

Proposed solution
  • MessagePack on binary columns: decoded into the JSON tree viewer, read-only, with badges for bin, ext and timestamp values.
  • igbinary on binary columns: decoded into the PHP serialized viewer's tree.
  • Protobuf on binary columns: with no schema, the wire format as field numbers and wire types. With a .proto file or descriptor set chosen for the column, field names and types.
  • Avro on binary columns: decoded with a writer schema file chosen for the column.
  • On Kafka, a value with the wire-format prefix reads its schema ID, and when the connection names a Schema Registry URL, the Avro or Protobuf schema is fetched from it.
  • UUID (Swapped Time) for UUID_TO_BIN(uuid, 1) columns, and an edit typed as a UUID is written back in the same byte order.
  • Each format behaves like the existing ones: set per column and scoped to the connection and table, rendering only, a single copied cell copies the decoded text, and filters and highlight rules still read the stored value (features/filtering.mdx:32).
  • A value that does not decode falls back to hex, and the viewer says why.

Done when: each format decodes a fixture written by its reference library, a broken value falls back to hex, and a UUID_TO_BIN(uuid, 1) value renders as the UUID passed in.

Alternatives considered

Copy the hex out and decode it with a script, or write a view that decodes on the server where the engine can.

Platform

macOS

Related database type

N/A / General

Langage dominant
Swift
Étoiles
6.2k
Forks
412
Merge moyen
3 h 56 min
PR mergées (30 j)
669

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de TableProApp/TablePro

Toutes les issues de TableProApp/TablePro

Issues similaires

Plus d'issues Swift

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.