@@ -146,17 +146,17 @@ DECLARE
146
146
cols text [] = ARRAY[]::text [];
147
147
col name;
148
148
sub record;
149
- pk text = NULL ;
149
+ pk text [] = NULL ;
150
150
fks graphql .fk [];
151
151
subselects text [] = ARRAY[]::text [];
152
152
predicates text [] = ARRAY[]::text [];
153
153
BEGIN
154
154
body := btrim(body, ' {}' );
155
155
IF predicate IS NOT NULL THEN
156
+ SELECT array_agg(_) INTO STRICT pk
157
+ FROM jsonb_array_elements_text(jsonb(' [' || predicate|| ' ]' )) AS __(_);
156
158
predicates := predicates
157
- || graphql .format_comparison (tab,
158
- graphql .pk (tab),
159
- jsonb(' [' || predicate|| ' ]' ));
159
+ || graphql .format_comparison (tab, graphql .pk (tab), pk);
160
160
END IF;
161
161
FOR sub IN SELECT * FROM graphql .parse_many (body) LOOP
162
162
IF sub .predicate IS NOT NULL THEN
@@ -473,11 +473,10 @@ RETURNS text AS $$
473
473
array_to_string((SELECT array_agg(col) FROM ys), ' , ' ))
474
474
$$ LANGUAGE sql STABLE STRICT;
475
475
476
- CREATE FUNCTION format_comparison (x regclass, xs name[], ys jsonb )
476
+ CREATE FUNCTION format_comparison (x regclass, xs name[], ys text [] )
477
477
RETURNS text AS $$
478
478
WITH xs(col) AS (SELECT format(' %I.%I' , x, col) FROM unnest(xs) AS _(col)),
479
- named(col, txt) AS
480
- (SELECT * FROM ROWS FROM (unnest(xs), jsonb_array_elements_text(ys))),
479
+ named(col, txt) AS (SELECT * FROM unnest(xs, ys)),
481
480
casted(val) AS (SELECT format(' %L::%I' , txt, typ)
482
481
FROM named JOIN graphql .cols (x) USING (col))
483
482
SELECT format(' (%s) = (%s)' ,
0 commit comments