92 lines
3.0 KiB
TypeScript
92 lines
3.0 KiB
TypeScript
import { MssqlClient } from "@effect/sql-mssql"
|
|
import { describe, expect, it } from "@effect/vitest"
|
|
import { Effect } from "effect"
|
|
import * as Statement from "effect/unstable/sql/Statement"
|
|
|
|
const sql = Statement.make(Effect.void as any, MssqlClient.makeCompiler(), [], undefined)
|
|
|
|
describe("mssql", () => {
|
|
it("insert helper", () => {
|
|
const [query, params] = sql`INSERT INTO ${sql("people")} ${sql.insert({ name: "Tim", age: 10 })}`.compile()
|
|
expect(query).toEqual(
|
|
`INSERT INTO [people] ([name],[age]) VALUES (@1,@2)`
|
|
)
|
|
expect(params).toEqual(["Tim", 10])
|
|
})
|
|
|
|
it("insert helper returning", () => {
|
|
const [query, params] = sql`INSERT INTO ${sql("people")} ${sql.insert({ name: "Tim", age: 10 }).returning("*")}`
|
|
.compile()
|
|
expect(query).toEqual(
|
|
`INSERT INTO [people] ([name],[age]) OUTPUT INSERTED.* VALUES (@1,@2)`
|
|
)
|
|
expect(params).toEqual(["Tim", 10])
|
|
})
|
|
|
|
it("update helper", () => {
|
|
const [query, params] = sql`UPDATE people SET name = data.name ${
|
|
sql.updateValues(
|
|
[{ name: "Tim" }, { name: "John" }],
|
|
"data"
|
|
)
|
|
}`.compile()
|
|
expect(query).toEqual(
|
|
`UPDATE people SET name = data.name FROM (values (@1),(@2)) AS data([name])`
|
|
)
|
|
expect(params).toEqual(["Tim", "John"])
|
|
})
|
|
|
|
it("update helper returning", () => {
|
|
const [query, params] = sql`UPDATE people SET name = data.name ${
|
|
sql.updateValues(
|
|
[{ name: "Tim" }, { name: "John" }],
|
|
"data"
|
|
).returning("*")
|
|
}`.compile()
|
|
expect(query).toEqual(
|
|
`UPDATE people SET name = data.name OUTPUT INSERTED.* FROM (values (@1),(@2)) AS data([name])`
|
|
)
|
|
expect(params).toEqual(["Tim", "John"])
|
|
})
|
|
|
|
it("update single helper returning", () => {
|
|
const [query, params] = sql`UPDATE people SET ${sql.update({ name: "Tim" }).returning("*")}`
|
|
.compile()
|
|
expect(query).toEqual(
|
|
`UPDATE people SET [name] = @1 OUTPUT INSERTED.*`
|
|
)
|
|
expect(params).toEqual(["Tim"])
|
|
})
|
|
|
|
it("array helper", () => {
|
|
const [query, params] = sql`SELECT * FROM ${sql("people")} WHERE id IN ${sql.in([1, 2, "string"])}`.compile()
|
|
expect(query).toEqual(`SELECT * FROM [people] WHERE id IN (@1,@2,@3)`)
|
|
expect(params).toEqual([1, 2, "string"])
|
|
})
|
|
|
|
// it("param types", () => {
|
|
// const [query, params] = sql`SELECT * FROM ${sql("people")} WHERE id = ${
|
|
// sql.param(
|
|
// MssqlTypes.BigInt,
|
|
// 1
|
|
// )
|
|
// }`.compile()
|
|
// expect(query).toEqual(`SELECT * FROM [people] WHERE id = @1`)
|
|
// expect(isCustom("MssqlParam")(params[0])).toEqual(true)
|
|
// const param = params[0] as unknown as Custom<
|
|
// "MsSqlParam",
|
|
// any,
|
|
// any,
|
|
// any
|
|
// >
|
|
// expect(param.i0).toEqual(MssqlTypes.BigInt)
|
|
// expect(param.i1).toEqual(1)
|
|
// expect(param.i2).toEqual({})
|
|
// })
|
|
|
|
it("escape [", () => {
|
|
const [query] = sql`SELECT * FROM ${sql("peo[]ple.te[st]ing")}`.compile()
|
|
expect(query).toEqual(`SELECT * FROM [peo[]]ple].[te[st]]ing]`)
|
|
})
|
|
})
|