- Change
Field.__hash__again... fml. Use(model_cls, field name). - Fix
Metadata.remove_ref()removing the wrong foreign-key when a model has multiple foreign-keys to the same target, aslist.remove()matched the first entry via the overloadedField.__eq__. - Fix a scalar subquery nested inside a function,
CaseorCastcollapsing to its alias in anUPDATE ... SETvalue and inON CONFLICT DO UPDATE, asqualify_names()wrapped the value atSCOPE_COLUMN. - Fix
namedtuples()on a query-builder (Table) query raisingValueErrorwhen a column name is not a valid identifier. The plainNamedTupleCursorWrappernow passesrename=True, matching the model path. - Fix outer joins in a joined model graph not hydrating a missing related object as
None, so accessing the attribute raisedAttributeError. The outer-join test had regressed toendswith('OUTER')(never true). It now also recognizesFULL JOINandLEFT JOIN LATERAL. - Fix
ModelSelect.select_extend()mutating its receiver's default-projection flag, so a baseModel.select()reused as a subquery stopped collapsing to its primary key. It now flags the returned clone, matchingselect(). - Fix
distinct(True)anddistinct(False)not clearing a priordistinct(*columns), so the query kept renderingDISTINCT ON (...)instead of a plainDISTINCTor no distinct at all. - Fix Postgres
get_indexes()shredding an expression index whose key contains a comma, e.g.COALESCE(a, 0)split into two bogus columns. It joined the per-key definitions into a comma-delimited string and split on the comma. It now reads the key array directly. - Fix an empty insert (
Model.insert(),insert({})) emittingDEFAULT VALUESand dropping python-side field defaults, inconsistent with a partial insert which backfills them. A model with no python defaults still usesDEFAULT VALUES.
