fix: allow hstore type to use transformers in driver postgres (#8823)

The HSTORE type is the only type bypassing the transformer
column options.
This fix makes the option available to this column type as well.

Co-authored-by: Samuel Roy <sam@pricemetry.com>
This commit is contained in:
Samuel 2022-03-30 17:28:31 +02:00 committed by GitHub
parent ed06f4c1f1
commit b1a01074c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 69 additions and 3 deletions

View File

@ -723,9 +723,7 @@ export class PostgresDriver implements Driver {
return ""
},
)
return object
} else {
return value
value = object
}
} else if (columnMetadata.type === "simple-array") {
value = DateUtils.stringToSimpleArray(value)

View File

@ -0,0 +1,13 @@
import { Entity } from "../../../../src/decorator/entity/Entity"
import { Column } from "../../../../src/decorator/columns/Column"
import { PrimaryGeneratedColumn } from "../../../../src/decorator/columns/PrimaryGeneratedColumn"
import { testTransformer } from "../test-transformer"
@Entity()
export class DummyHSTOREEntity {
@PrimaryGeneratedColumn()
id: number
@Column({ type: "hstore", transformer: testTransformer })
translation: object
}

View File

@ -0,0 +1,47 @@
import "../../utils/test-setup"
import {
createTestingConnections,
closeTestingConnections,
reloadTestingDatabases,
} from "../../utils/test-utils"
import { DataSource } from "../../../src"
import { expect } from "chai"
import { DummyHSTOREEntity } from "./entity/hstore-entity"
describe("other issues > allow HSTORE column type to use transformers", () => {
let connections: DataSource[]
before(
async () =>
(connections = await createTestingConnections({
entities: [__dirname + "/entity/*{.js,.ts}"],
schemaCreate: true,
dropSchema: true,
enabledDrivers: ["postgres"],
})),
)
beforeEach(() => reloadTestingDatabases(connections))
after(() => closeTestingConnections(connections))
it("should use the transformer set in the column options", () =>
Promise.all(
connections.map(async (connection) => {
const repository = connection.getRepository(DummyHSTOREEntity)
const translation = {
en_US: "hello",
fr_FR: "salut",
}
const dummy = repository.create({
translation,
})
await repository.save(dummy)
const dummyEntity = await repository.findOneByOrFail({
id: dummy.id,
})
expect(dummyEntity.translation).to.equal("hello")
}),
))
})

View File

@ -0,0 +1,8 @@
export const testTransformer = {
to(data: any) {
return data
},
from(data: any) {
return data.en_US
},
}