Skip to content

Commit d8dbdf5

Browse files
committed
feat: add more example for querying with prepare statement
1 parent bcf8af4 commit d8dbdf5

3 files changed

Lines changed: 43 additions & 3 deletions

File tree

go/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ func (client *Client) ClosePrepared(preparedStmt *flightsql.PreparedStatement) e
168168
func (client *Client) doGet(ticket *flight.Ticket) ([]arrow.Record, error) {
169169
ctx, cancel := client.timeoutContext()
170170
reader, err := client.inner.DoGet(ctx, ticket)
171-
cancel()
171+
defer cancel()
172172
if err != nil {
173173
return nil, fmt.Errorf("failed to perform DoGet: %v", err)
174174
}

go/main.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func main() {
2828
}
2929

3030
// Creates a database `go`.
31-
sql := "CREATE DATABASE go;"
31+
sql := "CREATE DATABASE if not exists go;"
3232
result, err := client.Execute(sql)
3333
if err != nil {
3434
fmt.Println("Failed to create database: ", err)
@@ -46,7 +46,7 @@ func main() {
4646

4747
// Creates a table `demo` within the database `go`.
4848
sql = `
49-
CREATE TABLE go.demo (
49+
CREATE TABLE if not exists go.demo (
5050
ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
5151
sid INT32,
5252
value REAL,
@@ -148,6 +148,21 @@ func main() {
148148
// 2024-09-02 10:05:00 +0800 CST 2 15.30 1
149149
PrintRecords(result)
150150

151+
sql = "SELECT * FROM go.demo WHERE sid in (?, ?, ?)"
152+
preparedStmt, err = dbClient.Prepare(sql)
153+
if err != nil {
154+
fmt.Println("Failed to create a select prepared statement: ", err)
155+
return
156+
}
157+
// Retrieves all rows where `sid` in (1, 2, 3).
158+
binding = MakeMultiBinding([]int32{1, 2, 3})
159+
result, err = dbClient.ExecutePrepared(preparedStmt, binding)
160+
if err != nil {
161+
fmt.Println("Failed to execute a select prepared statement: ", err)
162+
return
163+
}
164+
PrintRecords(result)
165+
151166
// Closes the prepared statement to notify releasing resources on server side.
152167
if err = dbClient.ClosePrepared(preparedStmt); err != nil {
153168
fmt.Println("Failed to close a prepared statement: ", err)

go/util.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,31 @@ func MakeQueryBinding(sid int32) arrow.Record {
132132
return record
133133
}
134134

135+
func MakeMultiBinding(sids []int32) arrow.Record {
136+
sidBuilder := array.NewInt32Builder(memory.NewGoAllocator())
137+
defer sidBuilder.Release()
138+
sidBuilder.Append(1)
139+
sidArray1 := sidBuilder.NewArray()
140+
141+
sidBuilder = array.NewInt32Builder(memory.NewGoAllocator())
142+
defer sidBuilder.Release()
143+
sidBuilder.Append(2)
144+
sidArray2 := sidBuilder.NewArray()
145+
146+
sidBuilder = array.NewInt32Builder(memory.NewGoAllocator())
147+
defer sidBuilder.Release()
148+
sidBuilder.Append(3)
149+
sidArray3 := sidBuilder.NewArray()
150+
151+
schema := arrow.NewSchema([]arrow.Field{
152+
{Name: "sid", Type: arrow.PrimitiveTypes.Int32, Nullable: true},
153+
{Name: "sid", Type: arrow.PrimitiveTypes.Int32, Nullable: true},
154+
{Name: "sid", Type: arrow.PrimitiveTypes.Int32, Nullable: true},
155+
}, nil)
156+
record := array.NewRecord(schema, []arrow.Array{sidArray1, sidArray2, sidArray3}, 1)
157+
return record
158+
}
159+
135160
func releaseRecords(records []arrow.Record) {
136161
for _, record := range records {
137162
record.Release()

0 commit comments

Comments
 (0)