Skip to content

Commit 8e58a29

Browse files
authored
Merge pull request #29 from weiguoz/query_fix
Remove last semicolon in query
2 parents 9442ebc + 1fe53ae commit 8e58a29

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

connection.go

+19-12
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,18 @@ func (c *Connection) Close() error {
6666
return nil
6767
}
6868

69-
func (c *Connection) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) {
69+
func removeLastSemicolon(s string) string {
70+
n := len(s)
71+
if n > 0 && s[n-1] == ';' {
72+
return s[0 : n-1]
73+
}
74+
return s
75+
}
76+
77+
func (c *Connection) execute(ctx context.Context, query string, args []driver.NamedValue) (*hiveserver2.TExecuteStatementResp, error) {
7078
executeReq := hiveserver2.NewTExecuteStatementReq()
7179
executeReq.SessionHandle = c.session
72-
executeReq.Statement = query
80+
executeReq.Statement = removeLastSemicolon(query)
7381

7482
resp, err := c.thrift.ExecuteStatement(executeReq)
7583
if err != nil {
@@ -79,22 +87,21 @@ func (c *Connection) QueryContext(ctx context.Context, query string, args []driv
7987
if !isSuccessStatus(resp.Status) {
8088
return nil, fmt.Errorf("Error from server: %s", resp.Status.String())
8189
}
90+
return resp, nil
91+
}
8292

93+
func (c *Connection) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) {
94+
resp, err := c.execute(ctx, query, args)
95+
if err != nil {
96+
return nil, err
97+
}
8398
return newRows(c.thrift, resp.OperationHandle, c.options), nil
8499
}
85100

86101
func (c *Connection) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) {
87-
executeReq := hiveserver2.NewTExecuteStatementReq()
88-
executeReq.SessionHandle = c.session
89-
executeReq.Statement = query
90-
91-
resp, err := c.thrift.ExecuteStatement(executeReq)
102+
resp, err := c.execute(ctx, query, args)
92103
if err != nil {
93-
return nil, fmt.Errorf("Error in ExecuteStatement: %+v, %v", resp, err)
94-
}
95-
96-
if !isSuccessStatus(resp.Status) {
97-
return nil, fmt.Errorf("Error from server: %s", resp.Status.String())
104+
return nil, err
98105
}
99106
return newHiveResult(resp.OperationHandle), nil
100107
}

driver_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestQuery(t *testing.T) {
3636
func TestColumnName(t *testing.T) {
3737
a := assert.New(t)
3838
db, _ := sql.Open("hive", "127.0.0.1:10000/churn")
39-
rows, err := db.Query("SELECT customerID, gender FROM train")
39+
rows, err := db.Query("SELECT customerID, gender FROM train;")
4040
assert.Nil(t, err)
4141
defer db.Close()
4242
defer rows.Close()

0 commit comments

Comments
 (0)