Skip to content

Commit 15b0251

Browse files
authored
Merge pull request #621 from zhyass/feature_show
proxy: add hint for streaming fetch #619
2 parents 6c1e734 + eb7419d commit 15b0251

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/proxy/query.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/xelabs/go-mysqlstack/sqldb"
2020
"github.com/xelabs/go-mysqlstack/sqlparser"
2121

22+
"github.com/xelabs/go-mysqlstack/sqlparser/depends/common"
2223
querypb "github.com/xelabs/go-mysqlstack/sqlparser/depends/query"
2324
"github.com/xelabs/go-mysqlstack/sqlparser/depends/sqltypes"
2425
)
@@ -233,8 +234,20 @@ func (spanner *Spanner) ComQuery(session *driver.Session, query string, bindVari
233234
spanner.auditLog(session, W, xbase.UPDATE, query, qr, status)
234235
return returnQuery(qr, callback, err)
235236
case *sqlparser.Select:
237+
streamingFetch := false
236238
txSession := spanner.sessions.getTxnSession(session)
237239
if txSession.getStreamingFetchVar() {
240+
streamingFetch = true
241+
} else {
242+
if len(node.Comments) > 0 {
243+
comment := strings.Replace(common.BytesToString(node.Comments[0]), " ", "", -1)
244+
if comment == "/*+streaming*/" {
245+
streamingFetch = true
246+
}
247+
}
248+
}
249+
250+
if streamingFetch {
238251
if err = spanner.handleSelectStream(session, query, node, callback); err != nil {
239252
log.Error("proxy.select.for.backup:[%s].error:%+v", xbase.TruncateQuery(query, 256), err)
240253
return err

src/proxy/query_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,14 @@ func TestProxyQuerys(t *testing.T) {
223223
_, err = client.FetchAll(query, -1)
224224
assert.Nil(t, err)
225225
}
226+
{ // select * from t1 as ...;
227+
query := "select /*+ streaming */ * from test.t1 as aliaseTable"
228+
qr, err := client.FetchAll(query, -1)
229+
assert.Nil(t, err)
230+
want := 60510
231+
got := int(qr.RowsAffected)
232+
assert.Equal(t, want, got)
233+
}
226234
{ // select 1 from dual
227235
query := "select 1 from dual"
228236
qr, err := client.FetchAll(query, -1)
@@ -315,6 +323,13 @@ func TestProxyQuerys(t *testing.T) {
315323
_, err = client.FetchAll(query, -1)
316324
assert.Nil(t, err)
317325
}
326+
{
327+
query := "select /*+ streaming */ a from test.dual"
328+
_, err = client.FetchAll(query, -1)
329+
want := "Table 'dual' doesn't exist (errno 1146) (sqlstate 42S02)"
330+
got := err.Error()
331+
assert.Equal(t, want, got)
332+
}
318333
}
319334
}
320335

0 commit comments

Comments
 (0)