feat: query builder can reference tables

This commit is contained in:
2023-12-18 08:43:51 -06:00
parent 825eaa0079
commit 2eba8bd07f
4 changed files with 41 additions and 20 deletions

View File

@@ -3,7 +3,8 @@ module Spec.Data.Postgres.Query.Builder where
import Prelude
import Control.Monad.Trans.Class (lift)
import Data.Postgres.Query.Builder (param, runBuilder)
import Data.Postgres.Query.Builder (param, reference, runBuilder)
import Data.Set as Set
import Data.Tuple.Nested ((/\))
import Foreign (unsafeFromForeign)
import Foreign.Internal.Stringify (unsafeStringify)
@@ -15,18 +16,34 @@ spec =
describe "Data.Postgres.Query.Builder" do
describe "runBuilder" do
it "empty" do
_ /\ ps <- runBuilder (pure unit)
map unsafeStringify ps `shouldEqual` []
_ /\ { params, refs } <- runBuilder (pure unit)
map unsafeStringify params `shouldEqual` []
refs `shouldEqual` Set.empty
describe "reference" do
it "one" do
_ /\ { refs } <- runBuilder $ reference "foo"
refs `shouldEqual` (Set.singleton "foo")
it "dup" do
_ /\ { refs } <- runBuilder do
reference "foo"
reference "foo"
refs `shouldEqual` (Set.singleton "foo")
it "multiple" do
_ /\ { refs } <- runBuilder do
reference "foo"
reference "bar"
reference "baz"
refs `shouldEqual` (Set.fromFoldable [ "foo", "bar", "baz" ])
describe "param" do
it "single" do
p /\ ps <- runBuilder $ param 123
p /\ { params } <- runBuilder $ param 123
p `shouldEqual` "$1"
map unsafeFromForeign ps `shouldEqual` [ 123 ]
map unsafeFromForeign params `shouldEqual` [ 123 ]
it "many" do
_ /\ ps <- runBuilder do
_ /\ { params } <- runBuilder do
a <- param 123
b <- param "abc"
c <- param [ 123 ]
d <- param true
lift $ [ a, b, c, d ] `shouldEqual` [ "$1", "$2", "$3", "$4" ]
map unsafeStringify ps `shouldEqual` [ "123", "\"abc\"", "[123]", "true" ]
map unsafeStringify params `shouldEqual` [ "123", "\"abc\"", "[123]", "true" ]