MCPcopy Index your code
hub / github.com/bytebase/bytebase / TestPostgreSQLParser

Function TestPostgreSQLParser

backend/plugin/parser/pg/pg_test.go:11–68  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

9)
10
11func TestPostgreSQLParser(t *testing.T) {
12 tests := []struct {
13 name string
14 statement string
15 errorMessage string
16 }{
17 {
18 name: "valid multi-statement",
19 statement: "SELECT * FROM t1 WHERE c1 = 1; SELECT * FROM t2;",
20 },
21 {
22 name: "valid join",
23 statement: "SELECT * FROM schema1.t1 JOIN schema2.t2 ON t1.c1 = t2.c1",
24 },
25 {
26 name: "trailing FROM without table",
27 statement: "SELECT a > (select max(a) from t1) FROM",
28 errorMessage: `syntax error at end of input`,
29 },
30 {
31 name: "multi-statement with typo",
32 statement: "SELECT 1;\n SELEC 5;\nSELECT 6;",
33 errorMessage: `syntax error at or near "SELEC"`,
34 },
35 {
36 name: "single statement with typo",
37 statement: "SELECT * FRAM t1;",
38 errorMessage: `syntax error at or near "FRAM"`,
39 },
40 }
41
42 for _, test := range tests {
43 t.Run(test.name, func(t *testing.T) {
44 stmts, err := SplitSQL(test.statement)
45 require.NoError(t, err)
46
47 var firstErr error
48 for _, stmt := range stmts {
49 if stmt.Empty {
50 continue
51 }
52 _, parseErr := ParsePg(stmt.Text)
53 if parseErr != nil && firstErr == nil {
54 firstErr = parseErr
55 }
56 }
57
58 if test.errorMessage == "" {
59 require.NoError(t, firstErr, "statement: %s", test.statement)
60 } else {
61 require.Error(t, firstErr)
62 var pe *omniparser.ParseError
63 require.True(t, errors.As(firstErr, &pe), "expected *ParseError, got %T", firstErr)
64 require.Equal(t, test.errorMessage, pe.Message)
65 }
66 })
67 }
68}

Callers

nothing calls this directly

Calls 5

ParsePgFunction · 0.85
SplitSQLFunction · 0.70
EqualMethod · 0.65
RunMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected