Skip to content

Commit 28c8552

Browse files
Feat: PostgreSQL capture correct line and column numbers for parse error (#2289)
* build(deps): bump github.com/pganalyze/pg_query_go/v4 Bumps [github.com/pganalyze/pg_query_go/v4](https://github.com/pganalyze/pg_query_go) from 4.2.0 to 4.2.1. - [Changelog](https://github.com/pganalyze/pg_query_go/blob/main/CHANGELOG.md) - [Commits](pganalyze/pg_query_go@v4.2.0...v4.2.1) --- updated-dependencies: - dependency-name: github.com/pganalyze/pg_query_go/v4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> * Normalize PostgreSQL parse error reporting as we do Dolphin Signed-off-by: Steve Coffman <[email protected]> --------- Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: Steve Coffman <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1 parent c13b156 commit 28c8552

File tree

4 files changed

+25
-7
lines changed

4 files changed

+25
-7
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/jinzhu/inflection v1.0.0
1515
github.com/lib/pq v1.10.9
1616
github.com/mattn/go-sqlite3 v1.14.16
17-
github.com/pganalyze/pg_query_go/v4 v4.2.0
17+
github.com/pganalyze/pg_query_go/v4 v4.2.1
1818
github.com/riza-io/grpc-go v0.2.0
1919
github.com/spf13/cobra v1.7.0
2020
github.com/spf13/pflag v1.0.5

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
118118
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
119119
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
120120
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
121-
github.com/pganalyze/pg_query_go/v4 v4.2.0 h1:67hSBZXYfABNYisEu/Xfu6R2gupnQwaoRhQicy0HSnQ=
122-
github.com/pganalyze/pg_query_go/v4 v4.2.0/go.mod h1:aEkDNOXNM5j0YGzaAapwJ7LB3dLNj+bvbWcLv1hOVqA=
121+
github.com/pganalyze/pg_query_go/v4 v4.2.1 h1:id/vuyIQccb9f6Yx3pzH5l4QYrxE3v6/m8RPlgMrprc=
122+
github.com/pganalyze/pg_query_go/v4 v4.2.1/go.mod h1:aEkDNOXNM5j0YGzaAapwJ7LB3dLNj+bvbWcLv1hOVqA=
123123
github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
124124
github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63 h1:+FZIDR/D97YOPik4N4lPDaUcLDF/EQPogxtlHB2ZZRM=
125125
github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg=
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# package querytest
2-
query/from.sql:1:1: syntax error at or near "from"
3-
query/select.sql:1:1: syntax error at or near "select"
4-
query/typo.sql:1:1: syntax error at or near "selectt"
2+
query/from.sql:2:35: syntax error at or near "from"
3+
query/select.sql:2:29: syntax error at or near "select"
4+
query/typo.sql:2:2: syntax error at or near "selectt"

internal/engine/postgresql/parse.go

+19-1
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ import (
1010
"strings"
1111

1212
nodes "github.com/pganalyze/pg_query_go/v4"
13+
"github.com/pganalyze/pg_query_go/v4/parser"
1314

1415
"github.com/kyleconroy/sqlc/internal/metadata"
1516
"github.com/kyleconroy/sqlc/internal/sql/ast"
17+
"github.com/kyleconroy/sqlc/internal/sql/sqlerr"
1618
)
1719

1820
func stringSlice(list *nodes.List) []string {
@@ -158,7 +160,8 @@ func (p *Parser) Parse(r io.Reader) ([]ast.Statement, error) {
158160
}
159161
tree, err := nodes.Parse(string(contents))
160162
if err != nil {
161-
return nil, err
163+
pErr := normalizeErr(err)
164+
return nil, pErr
162165
}
163166

164167
var stmts []ast.Statement
@@ -184,6 +187,21 @@ func (p *Parser) Parse(r io.Reader) ([]ast.Statement, error) {
184187
return stmts, nil
185188
}
186189

190+
func normalizeErr(err error) error {
191+
//TODO: errors.As complains that *parser.Error does not implement error
192+
if pErr, ok := err.(*parser.Error); ok {
193+
sErr := &sqlerr.Error{
194+
Message: pErr.Message,
195+
//Err: pErr,
196+
Line: pErr.Lineno,
197+
Location: pErr.Cursorpos,
198+
}
199+
return sErr
200+
}
201+
202+
return err
203+
}
204+
187205
// https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-COMMENTS
188206
func (p *Parser) CommentSyntax() metadata.CommentSyntax {
189207
return metadata.CommentSyntax{

0 commit comments

Comments
 (0)