Skip to content

ArrayType throws a malformed array literal error when values contain brackets {} #3037

@sylv

Description

@sylv

Describe the bug

When using ArrayType for text arrays with postgresql, inserting an array with an element that contains a bracket will throw an error about a malformed array.

Stack trace

/demo/node_modules/.pnpm/@mikro-orm+core@5.1.2_d55acb51b3d624ca716f3ead5a1a6eac/node_modules/@mikro-orm/core/platforms/ExceptionConverter.js:8
        return new exceptions_1.DriverException(exception);
               ^
DriverException: insert into "owner" ("id", "tags") values (1, '{test {test}}') returning "id" - malformed array literal: "{test {test}}"
    at PostgreSqlExceptionConverter.convertException (/demo/node_modules/.pnpm/@mikro-orm+core@5.1.2_d55acb51b3d624ca716f3ead5a1a6eac/node_modules/@mikro-orm/core/platforms/ExceptionConverter.js:8:16)
    at PostgreSqlExceptionConverter.convertException (/demo/node_modules/.pnpm/@mikro-orm+postgresql@5.1.2_755b0c50a47b2e0e2c828f14e7a81037/node_modules/@mikro-orm/postgresql/PostgreSqlExceptionConverter.js:42:22)
    at PostgreSqlDriver.convertException (/demo/node_modules/.pnpm/@mikro-orm+core@5.1.2_d55acb51b3d624ca716f3ead5a1a6eac/node_modules/@mikro-orm/core/drivers/DatabaseDriver.js:173:54)
    at /demo/node_modules/.pnpm/@mikro-orm+core@5.1.2_d55acb51b3d624ca716f3ead5a1a6eac/node_modules/@mikro-orm/core/drivers/DatabaseDriver.js:177:24
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async PostgreSqlDriver.nativeInsert (/demo/node_modules/.pnpm/@mikro-orm+knex@5.1.2_504e3b747281b68637e5c979c82a6e0f/node_modules/@mikro-orm/knex/AbstractSqlDriver.js:161:21)
    at async ChangeSetPersister.persistNewEntity (/demo/node_modules/.pnpm/@mikro-orm+core@5.1.2_d55acb51b3d624ca716f3ead5a1a6eac/node_modules/@mikro-orm/core/unit-of-work/ChangeSetPersister.js:85:21)
    at async ChangeSetPersister.executeInserts (/demo/node_modules/.pnpm/@mikro-orm+core@5.1.2_d55acb51b3d624ca716f3ead5a1a6eac/node_modules/@mikro-orm/core/unit-of-work/ChangeSetPersister.js:29:13)
    at async ChangeSetPersister.runForEachSchema (/demo/node_modules/.pnpm/@mikro-orm+core@5.1.2_d55acb51b3d624ca716f3ead5a1a6eac/node_modules/@mikro-orm/core/unit-of-work/ChangeSetPersister.js:68:13)
    at async UnitOfWork.commitCreateChangeSets (/demo/node_modules/.pnpm/@mikro-orm+core@5.1.2_d55acb51b3d624ca716f3ead5a1a6eac/node_modules/@mikro-orm/core/unit-of-work/UnitOfWork.js:657:9)

previous error: insert into "owner" ("id", "tags") values (1, '{test {test}}') returning "id" - malformed array literal: "{test {test}}"

To Reproduce

Reproduction here but it's probably overkill

  1. Create a property using ArrayType
  2. Try to persist a value like ["test {test}"]

Expected behavior

The brackets would be escaped and the array would be persisted as-is, without throwing an error.

Versions

Dependency Version
node 16.14.0
typescript 4.6.3
mikro-orm 5.1.2
@mikro-orm/postgresql 5.1.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions