Fixing an issue with newlines between coalesce statements in Postgres - we were escaping newlines even if they were valid when given a list of JSON operations to perform.

This commit is contained in:
mike12345567 2024-10-03 18:10:58 +01:00
parent 6170b46513
commit 586dd8fea7
2 changed files with 30 additions and 1 deletions

View File

@ -28,6 +28,7 @@ describe.each(
const config = setup.getConfig() const config = setup.getConfig()
const isOracle = dbName === DatabaseName.ORACLE const isOracle = dbName === DatabaseName.ORACLE
const isMsSQL = dbName === DatabaseName.SQL_SERVER const isMsSQL = dbName === DatabaseName.SQL_SERVER
const isPostgres = dbName === DatabaseName.POSTGRES
let rawDatasource: Datasource let rawDatasource: Datasource
let datasource: Datasource let datasource: Datasource
@ -47,6 +48,9 @@ describe.each(
transformer: "return data", transformer: "return data",
readable: true, readable: true,
} }
if (query.fields?.sql && typeof query.fields.sql !== "string") {
throw new Error("Unable to create with knex structure in 'sql' field")
}
return await config.api.query.save( return await config.api.query.save(
{ ...defaultQuery, ...query }, { ...defaultQuery, ...query },
expectations expectations
@ -207,6 +211,31 @@ describe.each(
expect(prodQuery.parameters).toBeUndefined() expect(prodQuery.parameters).toBeUndefined()
expect(prodQuery.schema).toBeDefined() expect(prodQuery.schema).toBeDefined()
}) })
isPostgres &&
it("should be able to handle a JSON aggregate with newlines", async () => {
const jsonStatement = `COALESCE(json_build_object('name', name),'{"name":{}}'::json)`
const query = await createQuery({
fields: {
sql: client("test_table")
.select([
"*",
client.raw(
`${jsonStatement} as json,\n${jsonStatement} as json2`
),
])
.toString(),
},
})
const res = await config.api.query.execute(
query._id!,
{},
{
status: 200,
}
)
expect(res).toBeDefined()
})
}) })
}) })

View File

@ -41,7 +41,7 @@ if (types) {
types.setTypeParser(1184, (val: any) => val) // timestampz types.setTypeParser(1184, (val: any) => val) // timestampz
} }
const JSON_REGEX = /'{.*}'::json/s const JSON_REGEX = /'{\s*.*?\s*}'::json/gs
const Sql = sql.Sql const Sql = sql.Sql
interface PostgresConfig { interface PostgresConfig {