diff --git a/drizzle-orm/src/pg-core/columns/postgis_extension/geometry.ts b/drizzle-orm/src/pg-core/columns/postgis_extension/geometry.ts index 5dc2b8955..1c125033c 100644 --- a/drizzle-orm/src/pg-core/columns/postgis_extension/geometry.ts +++ b/drizzle-orm/src/pg-core/columns/postgis_extension/geometry.ts @@ -17,11 +17,12 @@ export type PgGeometryBuilderInitial = PgGeometryBuilder<{ generated: undefined; }>; -export class PgGeometryBuilder> extends PgColumnBuilder { +export class PgGeometryBuilder> extends PgColumnBuilder { static readonly [entityKind]: string = 'PgGeometryBuilder'; - constructor(name: T['name']) { + constructor(name: T['name'], config: PgGeometryConfig = {}) { super(name, 'array', 'PgGeometry'); + this.config.srid = config.srid; } /** @internal */ @@ -35,11 +36,12 @@ export class PgGeometryBuilder> extends PgColumn { +export class PgGeometry> extends PgColumn { static readonly [entityKind]: string = 'PgGeometry'; getSQLType(): string { - return 'geometry(point)'; + const { srid } = this.config; + return `geometry(point${srid ? `,${srid}` : ''})`; } override mapFromDriverValue(value: string): [number, number] { @@ -62,12 +64,13 @@ export type PgGeometryObjectBuilderInitial = PgGeometryObj }>; export class PgGeometryObjectBuilder> - extends PgColumnBuilder + extends PgColumnBuilder { static readonly [entityKind]: string = 'PgGeometryObjectBuilder'; - constructor(name: T['name']) { + constructor(name: T['name'], config: PgGeometryConfig = {}) { super(name, 'json', 'PgGeometryObject'); + this.config.srid = config.srid; } /** @internal */ @@ -81,11 +84,12 @@ export class PgGeometryObjectBuilder> extends PgColumn { +export class PgGeometryObject> extends PgColumn { static readonly [entityKind]: string = 'PgGeometryObject'; getSQLType(): string { - return 'geometry(point)'; + const { srid } = this.config; + return `geometry(point${srid ? `,${srid}` : ''})`; } override mapFromDriverValue(value: string): { x: number; y: number } { @@ -111,7 +115,7 @@ export function geometry; export function geometry(name: string, config?: PgGeometryConfig) { if (!config?.mode || config.mode === 'tuple') { - return new PgGeometryBuilder(name); + return new PgGeometryBuilder(name, config); } - return new PgGeometryObjectBuilder(name); + return new PgGeometryObjectBuilder(name, config); } diff --git a/integration-tests/tests/extensions/postgis/pg.test.ts b/integration-tests/tests/extensions/postgis/pg.test.ts index e832adc99..d53e374b7 100644 --- a/integration-tests/tests/extensions/postgis/pg.test.ts +++ b/integration-tests/tests/extensions/postgis/pg.test.ts @@ -87,7 +87,7 @@ const items = pgTable('items', { lineObj: line('line_abc', { mode: 'abc' }), geometry: geometry('geometry', { type: 'point' }), geometryObj: geometry('geometry_obj', { type: 'point', mode: 'xy' }), - geometrySrid: geometry('geometry_options', { type: 'point', mode: 'xy', srid: 4000 }), + geometrySrid: geometry('geometry_options', { type: 'point', mode: 'xy', srid: 4326 }), geography: geometry('geography', { type: 'point' }), geographyObj: geography('geography_obj', { type: 'point', mode: 'json' }), }); @@ -103,7 +103,7 @@ beforeEach(async () => { "line_abc" line, "geometry" geometry(point), "geometry_obj" geometry(point), - "geometry_options" geometry(point,4000), + "geometry_options" geometry(point,4326), "geography" geography(point), "geography_obj" geography(point) ); diff --git a/integration-tests/tests/extensions/postgis/postgres.test.ts b/integration-tests/tests/extensions/postgis/postgres.test.ts index 9fe27bbdd..6079985ac 100644 --- a/integration-tests/tests/extensions/postgis/postgres.test.ts +++ b/integration-tests/tests/extensions/postgis/postgres.test.ts @@ -89,7 +89,7 @@ const items = pgTable('items', { lineObj: line('line_abc', { mode: 'abc' }), geometry: geometry('geometry', { type: 'point' }), geometryObj: geometry('geometry_obj', { type: 'point', mode: 'xy' }), - geometrySrid: geometry('geometry_options', { type: 'point', mode: 'xy', srid: 4000 }), + geometrySrid: geometry('geometry_options', { type: 'point', mode: 'xy', srid: 4326 }), geography: geometry('geography', { type: 'point' }), geographyObj: geography('geography_obj', { type: 'point', mode: 'json' }), }); @@ -105,7 +105,7 @@ beforeEach(async () => { "line_abc" line, "geometry" geometry(point), "geometry_obj" geometry(point), - "geometry_options" geometry(point,4000), + "geometry_options" geometry(point,4326), "geography" geography(point), "geography_obj" geography(point) );