Skip to content

Commit b2331f5

Browse files
authored
Merge pull request #15 from knocknote/feature/add_show_parser
add show statement parser
2 parents f2c6b32 + 049139c commit b2331f5

File tree

5 files changed

+35
-2
lines changed

5 files changed

+35
-2
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
github.com/juju/errors v0.0.0-20170703010042-c7d06af17c68 // indirect
1111
github.com/juju/loggo v0.0.0-20190212223446-d976af380377 // indirect
1212
github.com/juju/testing v0.0.0-20190415054131-a282c42ba059 // indirect
13-
github.com/knocknote/vitess-sqlparser v0.0.0-20181121014348-1003c43917a3
13+
github.com/knocknote/vitess-sqlparser v0.0.0-20190712090058-385243f72d33
1414
github.com/mattn/go-colorable v0.0.0-20160220075935-9cbef7c35391 // indirect
1515
github.com/mattn/go-isatty v0.0.0-20151211000621-56b76bdf51f7 // indirect
1616
github.com/mattn/go-sqlite3 v0.0.0-20170407154627-cf7286f069c3

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ github.com/juju/testing v0.0.0-20190415054131-a282c42ba059 h1:vsqkD58dFysYgUZ8XH
1616
github.com/juju/testing v0.0.0-20190415054131-a282c42ba059/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
1717
github.com/knocknote/vitess-sqlparser v0.0.0-20181121014348-1003c43917a3 h1:Nk/bqRokAz+B4j+18CKyAYhkf/scbbY7anWdSZFHjqI=
1818
github.com/knocknote/vitess-sqlparser v0.0.0-20181121014348-1003c43917a3/go.mod h1:bF2oGXw2Ex/jIPGFPaFzEf8BtNRSBWc81ni+N9UaW5Q=
19+
github.com/knocknote/vitess-sqlparser v0.0.0-20190712090058-385243f72d33 h1:3//yyn1X4pIytNgAA3a1a7CQJm2w3WNVNCGLBQrPcPA=
20+
github.com/knocknote/vitess-sqlparser v0.0.0-20190712090058-385243f72d33/go.mod h1:bF2oGXw2Ex/jIPGFPaFzEf8BtNRSBWc81ni+N9UaW5Q=
1921
github.com/mattn/go-colorable v0.0.0-20160220075935-9cbef7c35391 h1:x4vT4RoTH2BNkPx0LgrBKeFuPQPviK1aSAIWG6ruc+Y=
2022
github.com/mattn/go-colorable v0.0.0-20160220075935-9cbef7c35391/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
2123
github.com/mattn/go-isatty v0.0.0-20151211000621-56b76bdf51f7 h1:owMyzMR4QR+jSdlfkX9jPU3rsby4++j99BfbtgVr6ZY=

sqlparser/query.go

+3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ const (
3232
CreateTable
3333
// TruncateTable 'TRUNCATE TABLE' query type
3434
TruncateTable
35+
// Show 'SHOW' query type
36+
Show
37+
3538
)
3639

3740
func (t QueryType) IsWriteQuery() bool {

sqlparser/sqlparser.go

+12
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,12 @@ func (p *Parser) parseDDLStmt(stmt *vtparser.DDL, queryBase *QueryBase) (Query,
382382
return queryBase, nil
383383
}
384384

385+
func (p *Parser) parseShowStmt(stmt *vtparser.Show, queryBase *QueryBase) (Query, error) {
386+
queryBase.Type = Show
387+
queryBase.TableName = stmt.TableName
388+
return queryBase, nil
389+
}
390+
385391
func (p *Parser) formatQuery(query string) string {
386392
formattedQuery := replaceDoubleQuote.ReplaceAllString(query, "`")
387393
formattedQuery = removeSemiColon.ReplaceAllString(formattedQuery, "")
@@ -445,6 +451,12 @@ func (p *Parser) Parse(queryText string, args ...interface{}) (Query, error) {
445451
return nil, errors.WithStack(err)
446452
}
447453
return query, nil
454+
case *vtparser.Show:
455+
query, err := p.parseShowStmt(stmt, queryBase)
456+
if err != nil {
457+
return nil, errors.WithStack(err)
458+
}
459+
return query, nil
448460
default:
449461
}
450462
return nil, errors.Errorf("unsupported query type %s", reflect.TypeOf(ast))

sqlparser/sqlparser_test.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,22 @@ func TestDDL(t *testing.T) {
5858
})
5959
}
6060

61+
func TestSHOW(t *testing.T) {
62+
parser, err := New()
63+
checkErr(t, err)
64+
t.Run("show create table", func(t *testing.T) {
65+
query, err := parser.Parse("show create table users")
66+
fmt.Printf("show.table:%v\n", query.Table())
67+
checkErr(t, err)
68+
if query.QueryType() != Show {
69+
t.Fatal("cannot parse 'show' query")
70+
}
71+
if query.Table() != "users" {
72+
t.Fatal("cannot parse 'show' query")
73+
}
74+
})
75+
}
76+
6177
func validateSelectQuery(t *testing.T, query Query) {
6278
if query.QueryType() != Select {
6379
t.Fatal("cannot parse 'select' query")
@@ -542,7 +558,7 @@ func TestERROR(t *testing.T) {
542558
log.Println(err)
543559
})
544560
t.Run("unsupport query", func(t *testing.T) {
545-
query, err := parser.Parse("show create table users")
561+
query, err := parser.Parse("show slave status")
546562
if query != nil {
547563
t.Fatal("invalid query value")
548564
}

0 commit comments

Comments
 (0)