From aa90271a59b4bf8890e21d387e6dc7ec65f1798f Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Wed, 20 Aug 2025 20:18:14 +0300 Subject: [PATCH] fix(db-postgres): camelCase point fields (#13519) Fixes https://github.com/payloadcms/payload/issues/13394 --- packages/drizzle/src/find/traverseFields.ts | 7 ++++++- test/fields/collections/Point/index.ts | 4 ++++ test/fields/int.spec.ts | 12 ++++++++++++ test/fields/payload-types.ts | 6 ++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/drizzle/src/find/traverseFields.ts b/packages/drizzle/src/find/traverseFields.ts index 208bd93c87..d71f0df3bd 100644 --- a/packages/drizzle/src/find/traverseFields.ts +++ b/packages/drizzle/src/find/traverseFields.ts @@ -791,9 +791,14 @@ export const traverseFields = ({ } else { shouldSelect = true } + const tableName = fieldShouldBeLocalized({ field, parentIsLocalized }) + ? `${currentTableName}${adapter.localesSuffix}` + : currentTableName if (shouldSelect) { - args.extras[name] = sql.raw(`ST_AsGeoJSON(${toSnakeCase(name)})::jsonb`).as(name) + args.extras[name] = sql + .raw(`ST_AsGeoJSON("${adapter.tables[tableName][name].name}")::jsonb`) + .as(name) } break } diff --git a/test/fields/collections/Point/index.ts b/test/fields/collections/Point/index.ts index cbc0b56dc3..6f6e69e0b2 100644 --- a/test/fields/collections/Point/index.ts +++ b/test/fields/collections/Point/index.ts @@ -15,6 +15,10 @@ const PointFields: CollectionConfig = { label: 'Location', required: true, }, + { + name: 'camelCasePoint', + type: 'point', + }, { name: 'localized', type: 'point', diff --git a/test/fields/int.spec.ts b/test/fields/int.spec.ts index 3c16024f51..1822c524a7 100644 --- a/test/fields/int.spec.ts +++ b/test/fields/int.spec.ts @@ -1448,6 +1448,18 @@ describe('Fields', () => { expect(updatedDoc.localized).toEqual(undefined) }) + + it('should not error with camel case name point field', async () => { + if (payload.db.name === 'sqlite') { + return + } + + const res = await payload.create({ + collection: 'point-fields', + data: { point, camelCasePoint: [7, -7] }, + }) + expect(res.camelCasePoint).toEqual([7, -7]) + }) }) describe('checkbox', () => { diff --git a/test/fields/payload-types.ts b/test/fields/payload-types.ts index d00c6c3497..ea9f013b6e 100644 --- a/test/fields/payload-types.ts +++ b/test/fields/payload-types.ts @@ -1294,6 +1294,11 @@ export interface PointField { * @maxItems 2 */ point: [number, number]; + /** + * @minItems 2 + * @maxItems 2 + */ + camelCasePoint?: [number, number] | null; /** * @minItems 2 * @maxItems 2 @@ -2895,6 +2900,7 @@ export interface NumberFieldsSelect { */ export interface PointFieldsSelect { point?: T; + camelCasePoint?: T; localized?: T; group?: | T