Summary
@proofkit/fmodata quotes lowercase id, but not uppercase ID.
Against FileMaker OData, FILES?$select=ID fails with:
{"error":{"code":"-1002","message":"Error: parse failure in URL at: 'ID'"}}
But FILES?$select=%22ID%22 works.
Repro
Schema field name is literally ID.
await db
.from(FILES)
.list()
.where(eq(FILES.s3key, someKey))
.select({ ID: FILES.ID })
.top(1)
.execute({ useEntityIds: false });
Generated query string:
/FILES?$filter=s3key eq '...jpg'&$top=1&$select=ID
Live FM response:
{"error":{"code":"-1002","message":"Error: parse failure in URL at: 'ID'"}}
Quoted version works:
/FILES?$top=1&$select=%22ID%22
Response:
{"@context":"...#FILES(\"ID\")","value":[]}
Likely cause
needsFieldQuoting() only special-cases lowercase id:
packages/fmodata/src/client/builders/select-utils.ts
- comment says quote
"id" as reserved word
That same helper is also used in filters via:
packages/fmodata/src/orm/operators.ts
Expected
Treat ID case-insensitively, at least for reserved-word quoting.
Likely fix:
- change
fieldName === "id" to fieldName.toLowerCase() === "id"
Workaround
Use entity IDs, or avoid explicit $select=ID on FileMaker layouts with a field named ID.
Summary
@proofkit/fmodataquotes lowercaseid, but not uppercaseID.Against FileMaker OData,
FILES?$select=IDfails with:{"error":{"code":"-1002","message":"Error: parse failure in URL at: 'ID'"}}But
FILES?$select=%22ID%22works.Repro
Schema field name is literally
ID.Generated query string:
Live FM response:
{"error":{"code":"-1002","message":"Error: parse failure in URL at: 'ID'"}}Quoted version works:
Response:
{"@context":"...#FILES(\"ID\")","value":[]}Likely cause
needsFieldQuoting()only special-cases lowercaseid:packages/fmodata/src/client/builders/select-utils.ts"id"as reserved wordThat same helper is also used in filters via:
packages/fmodata/src/orm/operators.tsExpected
Treat
IDcase-insensitively, at least for reserved-word quoting.Likely fix:
fieldName === "id"tofieldName.toLowerCase() === "id"Workaround
Use entity IDs, or avoid explicit
$select=IDon FileMaker layouts with a field namedID.