@@ -81,7 +81,7 @@ import GHC.TypeLits
82import Squeal.PostgreSQL.Alias
82import Squeal.PostgreSQL.Alias
83import Squeal.PostgreSQL.Expression
83import Squeal.PostgreSQL.Expression
84−import Squeal.PostgreSQL.Expression.Set
84+import Squeal.PostgreSQL.Expression.SetOf
85import Squeal.PostgreSQL.Expression.Type
85import Squeal.PostgreSQL.Expression.Type
86import Squeal.PostgreSQL.List
86import Squeal.PostgreSQL.List
87import Squeal.PostgreSQL.Query
87import Squeal.PostgreSQL.Query
@@ -188,7 +188,7 @@ Table 9.45: JSON creation functions
188-- otherwise, a scalar value is produced. For any scalar type other than a
188-- otherwise, a scalar value is produced. For any scalar type other than a
189-- number, a Boolean, or a null value, the text representation will be used, in
189-- number, a Boolean, or a null value, the text representation will be used, in
190-- such a fashion that it is a valid json value.
190-- such a fashion that it is a valid json value.
191−toJson :: null ty --> null 'PGjson
191+toJson :: null ty :--> null 'PGjson
192toJson = unsafeFunction "to_json"
192toJson = unsafeFunction "to_json"
194-- | Returns the value as jsonb. Arrays and composites are converted
194-- | Returns the value as jsonb. Arrays and composites are converted
@@ -197,26 +197,26 @@ toJson = unsafeFunction "to_json"
197-- otherwise, a scalar value is produced. For any scalar type other than a
197-- otherwise, a scalar value is produced. For any scalar type other than a
198-- number, a Boolean, or a null value, the text representation will be used, in
198-- number, a Boolean, or a null value, the text representation will be used, in
199-- such a fashion that it is a valid jsonb value.
199-- such a fashion that it is a valid jsonb value.
200−toJsonb :: null ty --> null 'PGjsonb
200+toJsonb :: null ty :--> null 'PGjsonb
201toJsonb = unsafeFunction "to_jsonb"
201toJsonb = unsafeFunction "to_jsonb"
203-- | Returns the array as a JSON array. A PostgreSQL multidimensional array
203-- | Returns the array as a JSON array. A PostgreSQL multidimensional array
204-- becomes a JSON array of arrays.
204-- becomes a JSON array of arrays.
205−arrayToJson :: null ('PGvararray ty) --> null 'PGjson
205+arrayToJson :: null ('PGvararray ty) :--> null 'PGjson
206arrayToJson = unsafeFunction "array_to_json"
206arrayToJson = unsafeFunction "array_to_json"
208-- | Returns the row as a JSON object.
208-- | Returns the row as a JSON object.
209−rowToJson :: null ('PGcomposite ty) --> null 'PGjson
209+rowToJson :: null ('PGcomposite ty) :--> null 'PGjson
210rowToJson = unsafeFunction "row_to_json"
210rowToJson = unsafeFunction "row_to_json"
212-- | Builds a possibly-heterogeneously-typed JSON array out of a variadic
212-- | Builds a possibly-heterogeneously-typed JSON array out of a variadic
213-- argument list.
213-- argument list.
214−jsonBuildArray :: SOP.SListI tuple => tuple ---> null 'PGjson
214+jsonBuildArray :: SOP.SListI tuple => FunctionN tuple (null 'PGjson)
215jsonBuildArray = unsafeFunctionN "json_build_array"
215jsonBuildArray = unsafeFunctionN "json_build_array"
217-- | Builds a possibly-heterogeneously-typed (binary) JSON array out of a
217-- | Builds a possibly-heterogeneously-typed (binary) JSON array out of a
218-- variadic argument list.
218-- variadic argument list.
219−jsonbBuildArray :: SOP.SListI tuple => tuple ---> null 'PGjsonb
219+jsonbBuildArray :: SOP.SListI tuple => FunctionN tuple (null 'PGjsonb)
220jsonbBuildArray = unsafeFunctionN "jsonb_build_array"
220jsonbBuildArray = unsafeFunctionN "jsonb_build_array"
222-- | Builds a possibly-heterogeneously-typed JSON object out of a variadic
222-- | Builds a possibly-heterogeneously-typed JSON object out of a variadic
@@ -224,10 +224,10 @@ jsonbBuildArray = unsafeFunctionN "jsonb_build_array"
224-- and values.
224-- and values.
225class SOP.SListI tys => JsonBuildObject tys where
225class SOP.SListI tys => JsonBuildObject tys where
227− jsonBuildObject :: tys ---> null 'PGjson
227+ jsonBuildObject :: FunctionN tys (null 'PGjson)
228 jsonBuildObject = unsafeFunctionN "json_build_object"
228 jsonBuildObject = unsafeFunctionN "json_build_object"
230− jsonbBuildObject :: tys ---> null 'PGjsonb
230+ jsonbBuildObject :: FunctionN tys (null 'PGjsonb)
231 jsonbBuildObject = unsafeFunctionN "jsonb_build_object"
231 jsonbBuildObject = unsafeFunctionN "jsonb_build_object"
233instance JsonBuildObject '[]
233instance JsonBuildObject '[]
@@ -240,7 +240,7 @@ instance (JsonBuildObject tys, key `In` PGJsonKey)
240-- which are taken as a key/value pair.
240-- which are taken as a key/value pair.
241jsonObject
241jsonObject
242 :: null ('PGfixarray '[n,2] ('NotNull 'PGtext))
242 :: null ('PGfixarray '[n,2] ('NotNull 'PGtext))
243− --> null 'PGjson
243+ :--> null 'PGjson
244jsonObject = unsafeFunction "json_object"
244jsonObject = unsafeFunction "json_object"
246-- | Builds a binary JSON object out of a text array.
246-- | Builds a binary JSON object out of a text array.
@@ -249,24 +249,24 @@ jsonObject = unsafeFunction "json_object"
249-- which are taken as a key/value pair.
249-- which are taken as a key/value pair.
250jsonbObject
250jsonbObject
251 :: null ('PGfixarray '[n,2] ('NotNull 'PGtext))
251 :: null ('PGfixarray '[n,2] ('NotNull 'PGtext))
252− --> null 'PGjsonb
252+ :--> null 'PGjsonb
253jsonbObject = unsafeFunction "jsonb_object"
253jsonbObject = unsafeFunction "jsonb_object"
255-- | This is an alternate form of 'jsonObject' that takes two arrays; one for
255-- | This is an alternate form of 'jsonObject' that takes two arrays; one for
256-- keys and one for values, that are zipped pairwise to create a JSON object.
256-- keys and one for values, that are zipped pairwise to create a JSON object.
257−jsonZipObject ::
257+jsonZipObject :: FunctionN
258 '[ null ('PGvararray ('NotNull 'PGtext))
258 '[ null ('PGvararray ('NotNull 'PGtext))
259 , null ('PGvararray ('NotNull 'PGtext)) ]
259 , null ('PGvararray ('NotNull 'PGtext)) ]
260− ---> null 'PGjson
260+ ( null 'PGjson )
261jsonZipObject = unsafeFunctionN "json_object"
261jsonZipObject = unsafeFunctionN "json_object"
263-- | This is an alternate form of 'jsonbObject' that takes two arrays; one for
263-- | This is an alternate form of 'jsonbObject' that takes two arrays; one for
264-- keys and one for values, that are zipped pairwise to create a binary JSON
264-- keys and one for values, that are zipped pairwise to create a binary JSON
265-- object.
265-- object.
266−jsonbZipObject ::
266+jsonbZipObject :: FunctionN
267 '[ null ('PGvararray ('NotNull 'PGtext))
267 '[ null ('PGvararray ('NotNull 'PGtext))
268 , null ('PGvararray ('NotNull 'PGtext)) ]
268 , null ('PGvararray ('NotNull 'PGtext)) ]
269− ---> null 'PGjsonb
269+ ( null 'PGjsonb )
270jsonbZipObject = unsafeFunctionN "jsonb_object"
270jsonbZipObject = unsafeFunctionN "jsonb_object"
272{-----------------------------------------
272{-----------------------------------------
@@ -274,31 +274,31 @@ Table 9.46: JSON processing functions
274-----------------------------------------}
274-----------------------------------------}
276-- | Returns the number of elements in the outermost JSON array.
276-- | Returns the number of elements in the outermost JSON array.
277−jsonArrayLength :: null 'PGjson --> null 'PGint4
277+jsonArrayLength :: null 'PGjson :--> null 'PGint4
278jsonArrayLength = unsafeFunction "json_array_length"
278jsonArrayLength = unsafeFunction "json_array_length"
280-- | Returns the number of elements in the outermost binary JSON array.
280-- | Returns the number of elements in the outermost binary JSON array.
281−jsonbArrayLength :: null 'PGjsonb --> null 'PGint4
281+jsonbArrayLength :: null 'PGjsonb :--> null 'PGint4
282jsonbArrayLength = unsafeFunction "jsonb_array_length"
282jsonbArrayLength = unsafeFunction "jsonb_array_length"
284-- | Returns the type of the outermost JSON value as a text string. Possible
284-- | Returns the type of the outermost JSON value as a text string. Possible
285-- types are object, array, string, number, boolean, and null.
285-- types are object, array, string, number, boolean, and null.
286−jsonTypeof :: null 'PGjson --> null 'PGtext
286+jsonTypeof :: null 'PGjson :--> null 'PGtext
287jsonTypeof = unsafeFunction "json_typeof"
287jsonTypeof = unsafeFunction "json_typeof"
289-- | Returns the type of the outermost binary JSON value as a text string.
289-- | Returns the type of the outermost binary JSON value as a text string.
290-- Possible types are object, array, string, number, boolean, and null.
290-- Possible types are object, array, string, number, boolean, and null.
291−jsonbTypeof :: null 'PGjsonb --> null 'PGtext
291+jsonbTypeof :: null 'PGjsonb :--> null 'PGtext
292jsonbTypeof = unsafeFunction "jsonb_typeof"
292jsonbTypeof = unsafeFunction "jsonb_typeof"
294-- | Returns its argument with all object fields that have null values omitted.
294-- | Returns its argument with all object fields that have null values omitted.
295-- Other null values are untouched.
295-- Other null values are untouched.
296−jsonStripNulls :: null 'PGjson --> null 'PGjson
296+jsonStripNulls :: null 'PGjson :--> null 'PGjson
297jsonStripNulls = unsafeFunction "json_strip_nulls"
297jsonStripNulls = unsafeFunction "json_strip_nulls"
299-- | Returns its argument with all object fields that have null values omitted.
299-- | Returns its argument with all object fields that have null values omitted.
300-- Other null values are untouched.
300-- Other null values are untouched.
301−jsonbStripNulls :: null 'PGjsonb --> null 'PGjsonb
301+jsonbStripNulls :: null 'PGjsonb :--> null 'PGjsonb
302jsonbStripNulls = unsafeFunction "jsonb_strip_nulls"
302jsonbStripNulls = unsafeFunction "jsonb_strip_nulls"
304-- | @ jsonbSet target path new_value create_missing @
304-- | @ jsonbSet target path new_value create_missing @
@@ -309,9 +309,12 @@ jsonbStripNulls = unsafeFunction "jsonb_strip_nulls"
309-- item designated by path does not exist. As with the path orientated
309-- item designated by path does not exist. As with the path orientated
310-- operators, negative integers that appear in path count from the end of JSON
310-- operators, negative integers that appear in path count from the end of JSON
311-- arrays.
311-- arrays.
312−jsonbSet ::
312+jsonbSet
313− '[ null 'PGjsonb, null ('PGvararray ('NotNull 'PGtext))
315+ , null ('PGvararray ('NotNull 'PGtext))
314− , null 'PGjsonb, null 'PGbool ] ---> null 'PGjsonb
317+ , null 'PGbool ] (null 'PGjsonb)
315jsonbSet = unsafeFunctionN "jsonbSet"
318jsonbSet = unsafeFunctionN "jsonbSet"
317-- | @ jsonbInsert target path new_value insert_after @
320-- | @ jsonbInsert target path new_value insert_after @
@@ -323,23 +326,27 @@ jsonbSet = unsafeFunctionN "jsonbSet"
323-- path is in JSONB object, @new_value@ will be inserted only if target does not
326-- path is in JSONB object, @new_value@ will be inserted only if target does not
324-- exist. As with the path orientated operators, negative integers that appear
327-- exist. As with the path orientated operators, negative integers that appear
325-- in path count from the end of JSON arrays.
328-- in path count from the end of JSON arrays.
326−jsonbInsert ::
329+jsonbInsert
327− '[ null 'PGjsonb, null ('PGvararray ('NotNull 'PGtext))
332+ , null ('PGvararray ('NotNull 'PGtext))
328− , null 'PGjsonb, null 'PGbool ] ---> null 'PGjsonb
334+ , null 'PGbool ] (null 'PGjsonb)
329jsonbInsert = unsafeFunctionN "jsonb_insert"
335jsonbInsert = unsafeFunctionN "jsonb_insert"
331-- | Returns its argument as indented JSON text.
337-- | Returns its argument as indented JSON text.
332−jsonbPretty :: null 'PGjsonb --> null 'PGtext
338+jsonbPretty :: null 'PGjsonb :--> null 'PGtext
333jsonbPretty = unsafeFunction "jsonb_pretty"
339jsonbPretty = unsafeFunction "jsonb_pretty"
335{- | Expands the outermost JSON object into a set of key/value pairs.
342{- | Expands the outermost JSON object into a set of key/value pairs.
337>>> printSQL (select Star (from (jsonEach (literal (Json (object ["a" .= "foo", "b" .= "bar"]))))))
344>>> printSQL (select Star (from (jsonEach (literal (Json (object ["a" .= "foo", "b" .= "bar"]))))))
338SELECT * FROM json_each(('{"a":"foo","b":"bar"}' :: json))
345SELECT * FROM json_each(('{"a":"foo","b":"bar"}' :: json))
340−jsonEach :: SetFunction "json_each" (null 'PGjson)
347+jsonEach :: SetOfFunction "json_each" (null 'PGjson)
341 '["key" ::: 'NotNull 'PGtext, "value" ::: 'NotNull 'PGjson]
348 '["key" ::: 'NotNull 'PGtext, "value" ::: 'NotNull 'PGjson]
342−jsonEach = unsafeSetFunction
349+jsonEach = unsafeSetOfFunction
344{- | Expands the outermost binary JSON object into a set of key/value pairs.
351{- | Expands the outermost binary JSON object into a set of key/value pairs.
@@ -347,9 +354,9 @@ jsonEach = unsafeSetFunction
347SELECT * FROM jsonb_each(('{"a":"foo","b":"bar"}' :: jsonb))
354SELECT * FROM jsonb_each(('{"a":"foo","b":"bar"}' :: jsonb))
350− :: SetFunction "jsonb_each" (nullity 'PGjsonb)
357+ :: SetOfFunction "jsonb_each" (nullity 'PGjsonb)
351 '["key" ::: 'NotNull 'PGtext, "value" ::: 'NotNull 'PGjson]
358 '["key" ::: 'NotNull 'PGtext, "value" ::: 'NotNull 'PGjson]
352−jsonbEach = unsafeSetFunction
359+jsonbEach = unsafeSetOfFunction
354{- | Expands the outermost JSON object into a set of key/value pairs.
361{- | Expands the outermost JSON object into a set of key/value pairs.
@@ -357,9 +364,9 @@ jsonbEach = unsafeSetFunction
357SELECT * FROM json_each_text(('{"a":"foo","b":"bar"}' :: json))
364SELECT * FROM json_each_text(('{"a":"foo","b":"bar"}' :: json))
359jsonEachText
366jsonEachText
360− :: SetFunction "json_each_text" (null 'PGjson)
367+ :: SetOfFunction "json_each_text" (null 'PGjson)
361 '["key" ::: 'NotNull 'PGtext, "value" ::: 'NotNull 'PGtext]
368 '["key" ::: 'NotNull 'PGtext, "value" ::: 'NotNull 'PGtext]
362−jsonEachText = unsafeSetFunction
369+jsonEachText = unsafeSetOfFunction
364{- | Expands the outermost binary JSON object into a set of key/value pairs.
371{- | Expands the outermost binary JSON object into a set of key/value pairs.
@@ -367,9 +374,9 @@ jsonEachText = unsafeSetFunction
367SELECT * FROM jsonb_each_text(('{"a":"foo","b":"bar"}' :: jsonb))
374SELECT * FROM jsonb_each_text(('{"a":"foo","b":"bar"}' :: jsonb))
369jsonbEachText
376jsonbEachText
370− :: SetFunction "jsonb_each_text" (null 'PGjsonb)
377+ :: SetOfFunction "jsonb_each_text" (null 'PGjsonb)
371 '["key" ::: 'NotNull 'PGtext, "value" ::: 'NotNull 'PGtext]
378 '["key" ::: 'NotNull 'PGtext, "value" ::: 'NotNull 'PGtext]
372−jsonbEachText = unsafeSetFunction
379+jsonbEachText = unsafeSetOfFunction
374{- | Returns set of keys in the outermost JSON object.
381{- | Returns set of keys in the outermost JSON object.
@@ -377,9 +384,9 @@ jsonbEachText = unsafeSetFunction
377json_object_keys(('{"a":"foo","b":"bar"}' :: json))
384json_object_keys(('{"a":"foo","b":"bar"}' :: json))
379jsonObjectKeys
386jsonObjectKeys
380− :: SetFunction "json_object_keys" (nullity 'PGjson)
387+ :: SetOfFunction "json_object_keys" (nullity 'PGjson)
381 '["json_object_keys" ::: 'NotNull 'PGtext]
388 '["json_object_keys" ::: 'NotNull 'PGtext]
382−jsonObjectKeys = unsafeSetFunction
389+jsonObjectKeys = unsafeSetOfFunction
384{- | Returns set of keys in the outermost JSON object.
391{- | Returns set of keys in the outermost JSON object.
@@ -387,9 +394,9 @@ jsonObjectKeys = unsafeSetFunction
387jsonb_object_keys(('{"a":"foo","b":"bar"}' :: jsonb))
394jsonb_object_keys(('{"a":"foo","b":"bar"}' :: jsonb))
389jsonbObjectKeys
396jsonbObjectKeys
390− :: SetFunction "jsonb_object_keys" (null 'PGjsonb)
397+ :: SetOfFunction "jsonb_object_keys" (null 'PGjsonb)
391 '["jsonb_object_keys" ::: 'NotNull 'PGtext]
398 '["jsonb_object_keys" ::: 'NotNull 'PGtext]
392−jsonbObjectKeys = unsafeSetFunction
399+jsonbObjectKeys = unsafeSetOfFunction
394-- | Build rows from Json types.
401-- | Build rows from Json types.
395type JsonPopulateFunction fun json
402type JsonPopulateFunction fun json