Repository navigation
Conversation
igbinary decodes into the PHP serialized tree, numbered as serialize() numbers it. Avro decodes with a schema file chosen per column, stored by a hash of its text.
…formats readable by 0.83 Fixes the review of TableProApp#3962: igbinary r:/R: numbering, copies, caps and float text; Avro framing, decimal width, named logical types and zero-byte caps; a second storage key for formats 0.83 lacks; schema files instead of defaults.
… whose schema comes back
…inary Serializable payloads
…tore and an open viewer
…n, keep byte property names
…ema shows from the next load
This branch has not been deployed
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
serialize()byte for byte:r:for an object seen again,R:for a PHP reference, numbered by PHP's var-hash rules, arrays repeated by value written in full, integer member keys of__serializeobjects (ArrayObject), non-UTF-8 strings, property names andSerializablepayloads with their bytes and byte length, floats asserialize_precision-1 writes them.r:andR:parse as different values, and anO:withi:member keys parses instead of failing.AvroSchemas/<hash>.avscin Application Support and removed once no saved format names it. The menu shows the schema's root type name. Choosing a file this Mac had lost keeps it again (a copy that went bad is written over) and an open viewer decodes again; grids show it from their next load.decimal,uuid,date,time-*,timestamp-*,local-timestamp-*(millis, micros, nanos) anddurationread as values; a named fixed keeps its logical type where referenced by name; a redefined name is refused; size, precision and scale must be integers.C3 01) is read when its fingerprint is the schema's (CRC-64-AVRO of the Parsing Canonical Form) and refused otherwise; a Confluent prefix is tried once the plain datum fails, and abytesschema's body, decimal included, is taken as is. The viewer names the schema ID or fingerprint.<key>.added), so 0.83.1 still decodes the first. Keys are read entry by entry, an unknown name is kept, and the first key wins where both hold a column.ValueDisplayFormatis no longer a raw-value enum, so.avro(schemaID:)carries its schema through every per-column path. Existing stored names are unchanged; an Avro ID must be 32 hex digits.PhpSerializeParserSpecialTests.referenceLowerR(r:is.objectReference),ValueDisplayFormatTests(Avro IDs are 32 hex digits).Test plan
IgbinaryDecoderTests: 38 fixtures from igbinary 3.2.17RC1 on PHP 8.3, each checked againstserialize()text and its parsed tree, plus binary strings, expansion and depth limits, broken values.AvroDecoderTests: fastavro fixtures, Avro Java fingerprint vectors, single-object and Confluent framing, the budgeted framing decision, decimal width, named logical types, nanos, duration, zero-byte caps, the overflow value and nested zero-byte records.ValueDisplayFormatStorageTests: the first key decodes as 0.83.1's enum, a 0.83 write wins, unknown names survive, rename moves both keys, schema files follow the formats that name them.AvroSchemaStoreTests,BinaryDisplayFormatTests,ValueDisplayFormatTests,CellInteractionResolverBinaryTests,FieldEditorResolverTests,PhpSerializeParser*Tests,PhpTreeBuilderTests.Docs: TableProApp/docs#149 (draft, merges after this one).
Part of #3607