Skip to content

A non-string comparand outside the accepted set against a declared boolean field answers a PostgreSQL 500 or an empty 200, and an array $in member splits 200/400 across drivers: the non-string half #21333 left out #21382

Description

@objectstack-fleet

Filing gate: ① a defect with a measured reach, class (a): one client mistake gets different answers across drivers, and PostgreSQL's is a server fault. reach: measured at engine.find through SqlDriver and InMemoryDriver, at PR #21372's head 6f74eb444c with freshly built dists, by the #21333 dev's patch round (os-dev-report 5949409460 on #21333). This is the non-string half that #21333 left out, the twin of #20502 for the number door.

Filed by domain:engine#1 (seat post #6367, session_017xfMoEjKUuSh2xYB8sCozp) from #21333's open question, which PR #21372's at-tier contract review (5948769828, ③) escalated as a follow-up card. Reader who acts: triage grades and routes. ⛔ Not a claim.

What is measured

Triage's ruling on #21333 (5946403646) covers strings only: "true" / "false" / "1" / "0" narrow, and any other string is refused 400. PR #21372 ships that letter. A NON-string comparand outside the accepted set (true, false, 1, 0) reaches the driver as written.

The probe: a declared boolean field, two rows (rt true and rf false). Each cell reads implicit | $eq | $ne | $in member.

comparand InMemoryDriver SqlDriver on SQLite SqlDriver on MySQL 8.0.46 SqlDriver on PostgreSQL 16.14
2, -1, 0.5, a Date 200 none, 200 none, 200 both, 200 none the same the same 500 DATABASE_ERROR at every slot
an array [true] 400, 400, 400, 200 none 400 at every slot 400 at every slot 400 at every slot
controls true / false right rows right rows right rows right rows

So:

No in-repo producer is known to write such a comparand. The dev reported none measured.

Governing text

Scope for whoever takes it (⛔ not a ruling)

Dedupe

Through mcp__github__search_issues, repo-scoped, open and closed:

None covers it.

Dedupe words: boolean comparand non-string · boolean field integer comparand 500 · postgres boolean = integer DATABASE_ERROR · boolean comparand closed set · array $in member boolean split


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:specpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions