Skip to content

Commit 8a538fa

Browse files
committed
[to sqaush]
1 parent 6b7fe6b commit 8a538fa

File tree

6 files changed

+75
-160
lines changed

6 files changed

+75
-160
lines changed

connection_pool/connection_pool.go

-24
Original file line numberDiff line numberDiff line change
@@ -314,18 +314,6 @@ func (connPool *ConnectionPool) Execute(expr string, args interface{}, userMode
314314
return conn.Execute(expr, args)
315315
}
316316

317-
// Prepare sends a sql statement to prepare.
318-
//
319-
// Since 1.7.0
320-
func (connPool *ConnectionPool) Prepare(expr string, userMode Mode) (stmt *tarantool.PreparedStatement, err error) {
321-
conn, err := connPool.getNextConnection(userMode)
322-
if err != nil {
323-
return nil, err
324-
}
325-
326-
return conn.Prepare(expr)
327-
}
328-
329317
// GetTyped performs select (with limit = 1 and offset = 0)
330318
// to box space and fills typed result.
331319
func (connPool *ConnectionPool) GetTyped(space, index interface{}, key interface{}, result interface{}, userMode ...Mode) (err error) {
@@ -572,18 +560,6 @@ func (connPool *ConnectionPool) ExecuteAsync(expr string, args interface{}, user
572560
return conn.ExecuteAsync(expr, args)
573561
}
574562

575-
// PrepareAsync sends a sql statement to prepare and returns PreparedStatement object.
576-
//
577-
// Since 1.7.0
578-
func (connPool *ConnectionPool) PrepareAsync(expr string, userMode Mode) *tarantool.PreparedStatement {
579-
conn, err := connPool.getNextConnection(userMode)
580-
if err != nil {
581-
return nil
582-
}
583-
584-
return conn.PrepareAsync(expr)
585-
}
586-
587563
// Do sends the request and returns a response.
588564
func (connPool *ConnectionPool) Do(req tarantool.Request, userMode Mode) (*tarantool.Response, error) {
589565
conn, err := connPool.getNextConnection(userMode)

connector.go

-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ type Connector interface {
1919
Call17(functionName string, args interface{}) (resp *Response, err error)
2020
Eval(expr string, args interface{}) (resp *Response, err error)
2121
Execute(expr string, args interface{}) (resp *Response, err error)
22-
Prepare(expr string) (stmt *PreparedStatement, err error)
2322

2423
GetTyped(space, index interface{}, key interface{}, result interface{}) (err error)
2524
SelectTyped(space, index interface{}, offset, limit, iterator uint32, key interface{}, result interface{}) (err error)
@@ -44,7 +43,6 @@ type Connector interface {
4443
Call17Async(functionName string, args interface{}) *Future
4544
EvalAsync(expr string, args interface{}) *Future
4645
ExecuteAsync(expr string, args interface{}) *Future
47-
PrepareAsync(expr string) *PreparedStatement
4846

4947
Do(req Request) (resp *Response, err error)
5048
DoTyped(req Request, result interface{}) (err error)

example_test.go

+26-22
Original file line numberDiff line numberDiff line change
@@ -653,12 +653,13 @@ func ExampleConnection_Execute() {
653653
}
654654

655655
// To use prepared statements to query a tarantool instance, call Prepare.
656-
func ExampleConnection_Prepare() {
656+
func ExampleConnection_Do() {
657657
// Tarantool supports SQL since version 2.0.0
658658
isLess, _ := test_helpers.IsTarantoolVersionLess(2, 0, 0)
659659
if isLess {
660660
return
661661
}
662+
662663
server := "127.0.0.1:3013"
663664
opts := tarantool.Opts{
664665
Timeout: 500 * time.Millisecond,
@@ -672,27 +673,30 @@ func ExampleConnection_Prepare() {
672673
fmt.Printf("Failed to connect: %s", err.Error())
673674
}
674675

675-
// pass a query to prepare
676-
stmtResp, err := client.Prepare("SELECT id FROM SQL_TEST WHERE id=? AND name=?")
677-
fmt.Println("Prepare")
678-
fmt.Println("Error", err)
679-
fmt.Println("Statement ID", stmtResp.StatementID)
676+
prepareReq := tarantool.NewPrepareRequest(selectPosQuery2)
677+
resp, err := client.Do(prepareReq)
678+
if err != nil {
679+
fmt.Printf("failed to prepare request: %s", err)
680+
}
680681

681-
// pass the id of the statement to Execute
682-
resp, err := stmtResp.Execute([]interface{}{1, "test_1"})
683-
fmt.Println("Execute")
684-
fmt.Println("Error", err)
685-
fmt.Println("Code", resp.Code)
686-
fmt.Println("Data", resp.Data)
687-
fmt.Println("MetaData", resp.MetaData)
688-
fmt.Println("SQL Info", resp.SQLInfo)
682+
stmt := tarantool.NewPreparedStatement(client, resp)
683+
args := []interface{}{1, "test"}
689684

690-
// use the same object for execute with other arguments
691-
resp, err = stmtResp.Execute([]interface{}{2, "test_2"})
692-
fmt.Println("Execute")
693-
fmt.Println("Error", err)
694-
fmt.Println("Code", resp.Code)
695-
fmt.Println("Data", resp.Data)
696-
fmt.Println("MetaData", resp.MetaData)
697-
fmt.Println("SQL Info", resp.SQLInfo)
685+
execPreparedReq := tarantool.NewPreparedExecuteRequest(stmt)
686+
res2, err := client.Do(execPreparedReq.Args(args))
687+
if err != nil {
688+
fmt.Printf("failed to execute with prepared statement: %s", err)
689+
}
690+
if len(res2.MetaData) != len(args) {
691+
fmt.Printf("the length of slice with meta data is wrong: %d", len(res2.MetaData))
692+
}
693+
if res2.Code != 0 {
694+
fmt.Printf("Failed to execute: code error %d", res2.Code)
695+
}
696+
697+
unprepareReq := tarantool.NewUnprepareRequest(stmt)
698+
_, err = client.Do(unprepareReq)
699+
if err != nil {
700+
fmt.Printf("failed to undo the statement: %s", err)
701+
}
698702
}

multi/multi.go

-16
Original file line numberDiff line numberDiff line change
@@ -356,15 +356,6 @@ func (connMulti *ConnectionMulti) Execute(expr string, args interface{}) (resp *
356356
return connMulti.getCurrentConnection().Execute(expr, args)
357357
}
358358

359-
// Prepare sends a sql statement to prepare.
360-
//
361-
// Returns a PreparedStatement object for the current connection.
362-
//
363-
// Since 1.7.0
364-
func (connMulti *ConnectionMulti) Prepare(expr string) (resp *tarantool.PreparedStatement, err error) {
365-
return connMulti.getCurrentConnection().Prepare(expr)
366-
}
367-
368359
// GetTyped performs select (with limit = 1 and offset = 0) to box space and
369360
// fills typed result.
370361
func (connMulti *ConnectionMulti) GetTyped(space, index interface{}, key interface{}, result interface{}) (err error) {
@@ -503,13 +494,6 @@ func (connMulti *ConnectionMulti) ExecuteAsync(expr string, args interface{}) *t
503494
return connMulti.getCurrentConnection().ExecuteAsync(expr, args)
504495
}
505496

506-
// PrepareAsync passes a sql statement to prepare.
507-
//
508-
// Since 1.7.0
509-
func (connMulti *ConnectionMulti) PrepareAsync(expr string) *tarantool.PreparedStatement {
510-
return connMulti.getCurrentConnection().PrepareAsync(expr)
511-
}
512-
513497
// Do sends the request and returns a response.
514498
func (connMulti *ConnectionMulti) Do(req tarantool.Request) (*tarantool.Response, error) {
515499
return connMulti.getCurrentConnection().Do(req)

request.go

+24-85
Original file line numberDiff line numberDiff line change
@@ -210,16 +210,6 @@ func (conn *Connection) Execute(expr string, args interface{}) (resp *Response,
210210
return conn.ExecuteAsync(expr, args).Get()
211211
}
212212

213-
// Prepare sends a sql statement to prepare.
214-
//
215-
// It is equal to conn.PrepareAsync(expr).Get().
216-
// Since 1.7.0
217-
func (conn *Connection) Prepare(expr string) (stmt *PreparedStatement, err error) {
218-
stmt = conn.PrepareAsync(expr)
219-
err = stmt.wait()
220-
return stmt, err
221-
}
222-
223213
// single used for conn.GetTyped for decode one tuple.
224214
type single struct {
225215
res interface{}
@@ -419,16 +409,6 @@ func (conn *Connection) ExecuteAsync(expr string, args interface{}) *Future {
419409
return conn.DoAsync(req)
420410
}
421411

422-
// PrepareAsync sends a sql statement to prepare and returns PreparedStatement object.
423-
//
424-
// Since 1.7.0
425-
func (conn *Connection) PrepareAsync(expr string) *PreparedStatement {
426-
req := newPrepareRequest(expr)
427-
fut := conn.DoAsync(req)
428-
stmt := newPreparedStatement(fut, conn)
429-
return stmt
430-
}
431-
432412
type PreparedStatementID uint64
433413

434414
// PreparedStatement is a type for handling prepared statements
@@ -439,56 +419,15 @@ type PreparedStatement struct {
439419
MetaData []ColumnMetaData
440420
ParamCount uint64
441421
conn *Connection
442-
fut *Future
443422
}
444423

445-
func newPreparedStatement(fut *Future, conn *Connection) *PreparedStatement {
424+
func NewPreparedStatement(conn *Connection, resp *Response) *PreparedStatement {
446425
stmt := new(PreparedStatement)
447-
stmt.fut = fut
448426
stmt.conn = conn
449-
return stmt
450-
}
451-
452-
// wait until the prepared statement is ready and fill the statement object
453-
func (stmt *PreparedStatement) wait() error {
454-
resp, err := stmt.fut.Get()
455-
stmt.StatementID = PreparedStatementID(resp.StmtID)
456-
stmt.MetaData = resp.MetaData
457427
stmt.ParamCount = resp.BindCount
458-
return err
459-
}
460-
461-
// UnprepareAsync sends an undo request and returns Future
462-
func (stmt *PreparedStatement) UnprepareAsync() *Future {
463-
err := stmt.wait()
464-
if err != nil {
465-
return NewErrorFuture(err)
466-
}
467-
req := newUnprepareRequest(*stmt)
468-
fut := stmt.conn.DoAsync(req)
469-
return fut
470-
}
471-
472-
// Unprepare undo the prepared statement
473-
func (stmt *PreparedStatement) Unprepare() (resp *Response, err error) {
474-
return stmt.UnprepareAsync().Get()
475-
}
476-
477-
// ExecuteAsync sends the prepared SQL statement for execution and returns Future
478-
func (stmt *PreparedStatement) ExecuteAsync(args interface{}) *Future {
479-
err := stmt.wait()
480-
if err != nil {
481-
return NewErrorFuture(err)
482-
}
483-
req := newPreparedExecuteRequest(*stmt)
484-
req.Args(args)
485-
fut := stmt.conn.DoAsync(req)
486-
return fut
487-
}
488-
489-
// Execute sends the prepared SQL statement for execution
490-
func (stmt *PreparedStatement) Execute(args interface{}) (resp *Response, err error) {
491-
return stmt.ExecuteAsync(args).Get()
428+
stmt.MetaData = resp.MetaData
429+
stmt.StatementID = PreparedStatementID(resp.StmtID)
430+
return stmt
492431
}
493432

494433
// KeyValueBind is a type for encoding named SQL parameters
@@ -1084,62 +1023,62 @@ func (req *ExecuteRequest) Body(res SchemaResolver, enc *msgpack.Encoder) error
10841023
return fillExecute(enc, req.expr, req.args)
10851024
}
10861025

1087-
type prepareRequest struct {
1026+
type PrepareRequest struct {
10881027
baseRequest
10891028
expr string
10901029
}
10911030

1092-
// newPrepareRequest returns a new empty prepareRequest.
1093-
func newPrepareRequest(expr string) *prepareRequest {
1094-
req := new(prepareRequest)
1031+
// NewPrepareRequest returns a new empty PrepareRequest.
1032+
func NewPrepareRequest(expr string) *PrepareRequest {
1033+
req := new(PrepareRequest)
10951034
req.requestCode = PrepareRequestCode
10961035
req.expr = expr
10971036
return req
10981037
}
10991038

11001039
// Body fills an encoder with the execute request body.
1101-
func (req *prepareRequest) Body(res SchemaResolver, enc *msgpack.Encoder) error {
1040+
func (req *PrepareRequest) Body(res SchemaResolver, enc *msgpack.Encoder) error {
11021041
return fillPrepare(enc, req.expr)
11031042
}
11041043

1105-
type unprepareRequest struct {
1044+
type UnprepareRequest struct {
11061045
baseRequest
1107-
stmt PreparedStatement
1046+
stmt *PreparedStatement
11081047
}
11091048

1110-
// newUnprepareRequest returns a new empty unprepareRequest.
1111-
func newUnprepareRequest(stmt PreparedStatement) *unprepareRequest {
1112-
req := new(unprepareRequest)
1049+
// NewUnprepareRequest returns a new empty UnprepareRequest.
1050+
func NewUnprepareRequest(stmt *PreparedStatement) *UnprepareRequest {
1051+
req := new(UnprepareRequest)
11131052
req.requestCode = PrepareRequestCode
11141053
req.stmt = stmt
11151054
return req
11161055
}
11171056

11181057
// Body fills an encoder with the execute request body.
1119-
func (req *unprepareRequest) Body(res SchemaResolver, enc *msgpack.Encoder) error {
1120-
return fillUnprepare(enc, req.stmt)
1058+
func (req *UnprepareRequest) Body(res SchemaResolver, enc *msgpack.Encoder) error {
1059+
return fillUnprepare(enc, *req.stmt)
11211060
}
11221061

1123-
type preparedExecuteRequest struct {
1062+
type PreparedExecuteRequest struct {
11241063
baseRequest
1125-
stmt PreparedStatement
1064+
stmt *PreparedStatement
11261065
args interface{}
11271066
}
11281067

1129-
// newPreparedExecuteRequest returns a new empty preparedExecuteRequest.
1130-
func newPreparedExecuteRequest(stmt PreparedStatement) *preparedExecuteRequest {
1131-
req := new(preparedExecuteRequest)
1068+
// NewPreparedExecuteRequest returns a new empty preparedExecuteRequest.
1069+
func NewPreparedExecuteRequest(stmt *PreparedStatement) *PreparedExecuteRequest {
1070+
req := new(PreparedExecuteRequest)
11321071
req.requestCode = ExecuteRequestCode
11331072
req.stmt = stmt
11341073
return req
11351074
}
11361075

1137-
func (req *preparedExecuteRequest) Args(args interface{}) *preparedExecuteRequest {
1076+
func (req *PreparedExecuteRequest) Args(args interface{}) *PreparedExecuteRequest {
11381077
req.args = args
11391078
return req
11401079
}
11411080

11421081
// Body fills an encoder with the execute request body.
1143-
func (req *preparedExecuteRequest) Body(res SchemaResolver, enc *msgpack.Encoder) error {
1144-
return fillPreparedExecute(enc, req.stmt, req.args)
1082+
func (req *PreparedExecuteRequest) Body(res SchemaResolver, enc *msgpack.Encoder) error {
1083+
return fillPreparedExecute(enc, *req.stmt, req.args)
11451084
}

0 commit comments

Comments
 (0)