From 6d47f0df8e6d2ea9e6df809ee4a072fbc52b2eb5 Mon Sep 17 00:00:00 2001 From: Vikram Rangnekar Date: Fri, 29 Nov 2019 00:09:50 -0500 Subject: [PATCH] Fix for missing filters on nested selectors --- Makefile | 9 ++++----- psql/query_test.go | 4 ++-- qcode/qcode.go | 3 ++- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 947f4fc..08fe46f 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,6 @@ BUILD_DATE ?= $(shell git log -1 --format=%ci) BUILD_BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD) BUILD_VERSION ?= $(shell git describe --always --tags) -PKGS := $(shell go list ./... | grep -v /vendor) GOPATH ?= $(shell go env GOPATH) ifndef GOPATH @@ -22,8 +21,8 @@ BUILD_FLAGS ?= -ldflags '-s -w -X ${lastCommitSHA}=${BUILD} -X "${lastCommitTime .PHONY: all build gen clean test run lint changlog release version help $(PLATFORMS) -test: lint - @go test -v $(PKGS) +test: + @go test -v ./... BIN_DIR := $(GOPATH)/bin GORICE := $(BIN_DIR)/github.com/GeertJohan/go.rice @@ -50,13 +49,13 @@ LDFLAGS := -s -w PLATFORMS := windows linux darwin os = $(word 1, $@) -$(PLATFORMS): gen +$(PLATFORMS): lint test gen @mkdir -p release @GOOS=$(os) GOARCH=amd64 go build $(BUILD_FLAGS) -o release/$(BINARY)-$(BUILD_VERSION)-$(os)-amd64 release: windows linux darwin -all: $(BINARY) +all: lint test $(BINARY) build: $(BINARY) diff --git a/psql/query_test.go b/psql/query_test.go index 72a87a8..c4fcfb4 100644 --- a/psql/query_test.go +++ b/psql/query_test.go @@ -171,7 +171,7 @@ func oneToMany(t *testing.T) { } }` - sql := `SELECT json_object_agg('users', json_0) FROM (SELECT coalesce(json_agg("json_0"), '[]') AS "json_0" FROM (SELECT row_to_json((SELECT "json_row_0" FROM (SELECT "users_0"."email" AS "email", "products_1_join"."json_1" AS "products") AS "json_row_0")) AS "json_0" FROM (SELECT "users"."email", "users"."id" FROM "users" LIMIT ('20') :: integer) AS "users_0" LEFT OUTER JOIN LATERAL (SELECT coalesce(json_agg("json_1"), '[]') AS "json_1" FROM (SELECT row_to_json((SELECT "json_row_1" FROM (SELECT "products_1"."name" AS "name", "products_1"."price" AS "price") AS "json_row_1")) AS "json_1" FROM (SELECT "products"."name", "products"."price" FROM "products" WHERE ((("products"."user_id") = ("users_0"."id"))) LIMIT ('20') :: integer) AS "products_1" LIMIT ('20') :: integer) AS "json_agg_1") AS "products_1_join" ON ('true') LIMIT ('20') :: integer) AS "json_agg_0") AS "sel_0"` + sql := `SELECT json_object_agg('users', json_0) FROM (SELECT coalesce(json_agg("json_0"), '[]') AS "json_0" FROM (SELECT row_to_json((SELECT "json_row_0" FROM (SELECT "users_0"."email" AS "email", "products_1_join"."json_1" AS "products") AS "json_row_0")) AS "json_0" FROM (SELECT "users"."email", "users"."id" FROM "users" LIMIT ('20') :: integer) AS "users_0" LEFT OUTER JOIN LATERAL (SELECT coalesce(json_agg("json_1"), '[]') AS "json_1" FROM (SELECT row_to_json((SELECT "json_row_1" FROM (SELECT "products_1"."name" AS "name", "products_1"."price" AS "price") AS "json_row_1")) AS "json_1" FROM (SELECT "products"."name", "products"."price" FROM "products" WHERE ((("products"."user_id") = ("users_0"."id")) AND (("products"."price") > 0) AND (("products"."price") < 8)) LIMIT ('20') :: integer) AS "products_1" LIMIT ('20') :: integer) AS "json_agg_1") AS "products_1_join" ON ('true') LIMIT ('20') :: integer) AS "json_agg_0") AS "sel_0"` resSQL, err := compileGQLToPSQL(gql, nil, "user") if err != nil { @@ -240,7 +240,7 @@ func manyToManyReverse(t *testing.T) { } }` - sql := `SELECT json_object_agg('customers', json_0) FROM (SELECT coalesce(json_agg("json_0"), '[]') AS "json_0" FROM (SELECT row_to_json((SELECT "json_row_0" FROM (SELECT "customers_0"."email" AS "email", "customers_0"."full_name" AS "full_name", "products_1_join"."json_1" AS "products") AS "json_row_0")) AS "json_0" FROM (SELECT "customers"."email", "customers"."full_name", "customers"."id" FROM "customers" LIMIT ('20') :: integer) AS "customers_0" LEFT OUTER JOIN LATERAL (SELECT coalesce(json_agg("json_1"), '[]') AS "json_1" FROM (SELECT row_to_json((SELECT "json_row_1" FROM (SELECT "products_1"."name" AS "name") AS "json_row_1")) AS "json_1" FROM (SELECT "products"."name" FROM "products" LEFT OUTER JOIN "purchases" ON (("purchases"."customer_id") = ("customers_0"."id")) WHERE ((("products"."id") = ("purchases"."product_id"))) LIMIT ('20') :: integer) AS "products_1" LIMIT ('20') :: integer) AS "json_agg_1") AS "products_1_join" ON ('true') LIMIT ('20') :: integer) AS "json_agg_0") AS "sel_0"` + sql := `SELECT json_object_agg('customers', json_0) FROM (SELECT coalesce(json_agg("json_0"), '[]') AS "json_0" FROM (SELECT row_to_json((SELECT "json_row_0" FROM (SELECT "customers_0"."email" AS "email", "customers_0"."full_name" AS "full_name", "products_1_join"."json_1" AS "products") AS "json_row_0")) AS "json_0" FROM (SELECT "customers"."email", "customers"."full_name", "customers"."id" FROM "customers" LIMIT ('20') :: integer) AS "customers_0" LEFT OUTER JOIN LATERAL (SELECT coalesce(json_agg("json_1"), '[]') AS "json_1" FROM (SELECT row_to_json((SELECT "json_row_1" FROM (SELECT "products_1"."name" AS "name") AS "json_row_1")) AS "json_1" FROM (SELECT "products"."name" FROM "products" LEFT OUTER JOIN "purchases" ON (("purchases"."customer_id") = ("customers_0"."id")) WHERE ((("products"."id") = ("purchases"."product_id")) AND (("products"."price") > 0) AND (("products"."price") < 8)) LIMIT ('20') :: integer) AS "products_1" LIMIT ('20') :: integer) AS "json_agg_1") AS "products_1_join" ON ('true') LIMIT ('20') :: integer) AS "json_agg_0") AS "sel_0"` resSQL, err := compileGQLToPSQL(gql, nil, "user") if err != nil { diff --git a/qcode/qcode.go b/qcode/qcode.go index cfb7869..9ae505c 100644 --- a/qcode/qcode.go +++ b/qcode/qcode.go @@ -334,9 +334,10 @@ func (com *Compiler) compileQuery(qc *QCode, op *Operation, role string) error { } // Order is important addFilters must come after compileArgs + com.addFilters(qc, s, role) + if s.ParentID == -1 { qc.Roots = append(qc.Roots, s.ID) - com.addFilters(qc, s, role) } else { p := &selects[s.ParentID] p.Children = append(p.Children, s.ID)