Skip to content

v0.18.46

Choose a tag to compare

@derekmwright derekmwright released this 05 Sep 20:09

v0.18.46

  • Every numeric Go type the ingest API accepts is now stored as its own value.
    int8, int16, uint8, uint16 and uint32 into an INT32 column,
    uint64 into INT64, and integers into FLOAT32/FLOAT64 were previously
    written as 0.
  • A VECTOR(N) value must have exactly N components. A wrong width used to be
    written without error and shifted the components of every later row.
  • A missing value in a NOT NULL column is 23502 not_null_violation at the
    write. It previously corrupted the column's alignment - a required BOOL
    written as [NULL, true] read back as [true, false].
  • A typed slice or map ([]int64, map[string]int64, ...) written into an
    ARRAY, ROW or MAP column is now stored; it previously became NULL
    with no error. A value that is not a container at all is 42804.
  • An I/O failure while writing a parquet file is now permanent: every later
    write and Close return it, and the file is never finalized. A failure
    part-way through a row group previously produced a readable file with a
    column missing.
  • IPv6 and UUID values must be sixteen bytes (a zero-length value, the
    legacy absence form, is still accepted).
  • A table or column name that cannot be part of an object key - containing
    /, \ or a NUL byte, being . or .., or beginning with . - is
    refused at CREATE TABLE with 42602. On storage.type: file such a name
    previously wrote data outside the configured data directory.
  • A value that a column cannot hold now fails the WRITE instead of being
    stored as a different number. An integer with no INT32 - through the
    programmatic ingest API, the Go writer, or a PORT/PROTOCOL/DATE cast -
    raises 22003 integer out of range; previously it wrapped (3000000000
    was stored as -1294967296, and 3000000000::DATE answered
    -3543531-12-19).
  • The programmatic ingest API now refuses at the door exactly what the
    parquet writer refuses. A malformed IPv4/IPv6/MAC/UUID/DURATION
    literal, a bad TIMESTAMP, or an out-of-range DATE is rejected on the
    call that carried it; previously the door checked only the Go type, so the
    bad literal was admitted and the write failed later at flush, taking an
    entire buffer of otherwise-good rows down with it and reporting against a
    partition rather than the call that caused it.
  • Object keys and bucket names are validated on every operation, in every
    object store (MemStore, FileStore, and the S3-compatible store) - not
    only on write. List, BucketExists and MakeBucket also hold the bucket
    name to a single path component.
  • A relation or column name longer than 63 bytes is refused at
    CREATE TABLE with 42622 - PostgreSQL's own NAMEDATALEN - 1. PostgreSQL
    truncates an over-length name and emits a notice; wadjet refuses it instead
    (recorded in ADR-0012).
  • CI runs with a read-only GITHUB_TOKEN.