From 48d898d71bd7fd32cea9b2f253e25aa8e61360c3 Mon Sep 17 00:00:00 2001 From: ashtonian Date: Wed, 17 Jul 2019 15:08:29 -0500 Subject: [PATCH 1/7] add ParseQuery to allow web frameworks to parse the initial json contents --- rql.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rql.go b/rql.go index 7d3bc45..b6be9ed 100644 --- a/rql.go +++ b/rql.go @@ -154,6 +154,12 @@ func (p *Parser) Parse(b []byte) (pr *Params, err error) { }() q := new(Query) must(q.UnmarshalJSON(b), "decoding buffer to Query") + return p.ParseQuery(*q) +} + +// Parse Query parses the given struct into a Param object. It returns an error +// if the filter JSON is invalid, or its values don't follow the schema of rql. +func (p *Parser) ParseQuery(q Query) (pr *Params, err error) { pr = &Params{ Limit: p.DefaultLimit, } From a1ec2045e3d25ab6b680328f11d13bb4e979bbff Mon Sep 17 00:00:00 2001 From: ashtonian Date: Wed, 17 Jul 2019 15:22:00 -0500 Subject: [PATCH 2/7] add extra recover func --- rql.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rql.go b/rql.go index b6be9ed..b6f3248 100644 --- a/rql.go +++ b/rql.go @@ -160,6 +160,16 @@ func (p *Parser) Parse(b []byte) (pr *Params, err error) { // Parse Query parses the given struct into a Param object. It returns an error // if the filter JSON is invalid, or its values don't follow the schema of rql. func (p *Parser) ParseQuery(q Query) (pr *Params, err error) { + defer func() { + if e := recover(); e != nil { + perr, ok := e.(ParseError) + if !ok { + panic(e) + } + err = perr + pr = nil + } + }() pr = &Params{ Limit: p.DefaultLimit, } From 1ddf9ab37f128bd1847b155d815a8da17aadd086 Mon Sep 17 00:00:00 2001 From: Ashton Kinslow Date: Wed, 24 Jul 2019 14:22:42 -0500 Subject: [PATCH 3/7] Update rql.go Co-Authored-By: Ariel Mashraki <7413593+a8m@users.noreply.github.com> --- rql.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rql.go b/rql.go index b6f3248..cee9046 100644 --- a/rql.go +++ b/rql.go @@ -153,7 +153,9 @@ func (p *Parser) Parse(b []byte) (pr *Params, err error) { } }() q := new(Query) - must(q.UnmarshalJSON(b), "decoding buffer to Query") + if err := q.UnmarshalJSON(b); err != nil { + return nil, &ParseError{"decoding buffer to *Query: "+ err.Error()) + } return p.ParseQuery(*q) } From 053b06acb6d584cc25bdafa8a23fb26c0dc0352d Mon Sep 17 00:00:00 2001 From: Ashton Kinslow Date: Wed, 24 Jul 2019 14:48:09 -0500 Subject: [PATCH 4/7] Update rql.go Co-Authored-By: Ariel Mashraki <7413593+a8m@users.noreply.github.com> --- rql.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rql.go b/rql.go index cee9046..6dd5e79 100644 --- a/rql.go +++ b/rql.go @@ -159,7 +159,7 @@ func (p *Parser) Parse(b []byte) (pr *Params, err error) { return p.ParseQuery(*q) } -// Parse Query parses the given struct into a Param object. It returns an error +// ParseQuery parses the given struct into a Param object. It returns an error // if the filter JSON is invalid, or its values don't follow the schema of rql. func (p *Parser) ParseQuery(q Query) (pr *Params, err error) { defer func() { From 905679840cf1c89c437877e4b1ad32c8f88da72e Mon Sep 17 00:00:00 2001 From: Ashton Kinslow Date: Wed, 24 Jul 2019 14:50:28 -0500 Subject: [PATCH 5/7] Update rql.go Co-Authored-By: Ariel Mashraki <7413593+a8m@users.noreply.github.com> --- rql.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rql.go b/rql.go index 6dd5e79..4397880 100644 --- a/rql.go +++ b/rql.go @@ -160,7 +160,7 @@ func (p *Parser) Parse(b []byte) (pr *Params, err error) { } // ParseQuery parses the given struct into a Param object. It returns an error -// if the filter JSON is invalid, or its values don't follow the schema of rql. +// if one of the query values don't follow the schema of rql. func (p *Parser) ParseQuery(q Query) (pr *Params, err error) { defer func() { if e := recover(); e != nil { From 663b8888e995e4db1913647b941ff8a2f3db6d0f Mon Sep 17 00:00:00 2001 From: ashtonian Date: Wed, 24 Jul 2019 14:53:25 -0500 Subject: [PATCH 6/7] fix ) -> } --- rql.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rql.go b/rql.go index 4397880..5fb4c49 100644 --- a/rql.go +++ b/rql.go @@ -154,7 +154,7 @@ func (p *Parser) Parse(b []byte) (pr *Params, err error) { }() q := new(Query) if err := q.UnmarshalJSON(b); err != nil { - return nil, &ParseError{"decoding buffer to *Query: "+ err.Error()) + return nil, &ParseError{"decoding buffer to *Query: " + err.Error()} } return p.ParseQuery(*q) } From d7582bec53dd6668c21d962c2f764040d68f0807 Mon Sep 17 00:00:00 2001 From: ashtonian Date: Thu, 25 Jul 2019 17:49:46 -0500 Subject: [PATCH 7/7] remove extra recover --- rql.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/rql.go b/rql.go index 5fb4c49..5945809 100644 --- a/rql.go +++ b/rql.go @@ -142,16 +142,6 @@ func MustNewParser(c Config) *Parser { // Parse parses the given buffer into a Param object. It returns an error // if the JSON is invalid, or its values don't follow the schema of rql. func (p *Parser) Parse(b []byte) (pr *Params, err error) { - defer func() { - if e := recover(); e != nil { - perr, ok := e.(ParseError) - if !ok { - panic(e) - } - err = perr - pr = nil - } - }() q := new(Query) if err := q.UnmarshalJSON(b); err != nil { return nil, &ParseError{"decoding buffer to *Query: " + err.Error()}