-
Notifications
You must be signed in to change notification settings - Fork 20
/
hello_world.go
98 lines (81 loc) · 3.08 KB
/
hello_world.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/* This file is part of VoltDB.
* Copyright (C) 2008-2018 VoltDB Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with VoltDB. If not, see <http://www.gnu.org/licenses/>.
*/
// A simple example that demonstrates the use of asynchronous Query and Exec calls.
package main
import (
"database/sql/driver"
"fmt"
"log"
"math/rand"
"github.com/VoltDB/voltdb-client-go/voltdbclient"
)
func main() {
// create one connection, save the async results and wait on them explicitly.
conn, err := voltdbclient.OpenConn("localhost:21212")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
// can also specify a latency target (milliseconds) when opening a connection. The number of
// outstanding transactions is throttled until the latency target is met.
// conn, err := voltdbclient.OpenConnWithLatencyTarget([]string{"localhost:21212"}, 5)
// or can specify the max number of allowable outstanding transactions.
// conn, err := voltdbclient.OpenConnWithMaxOutstandingTxns([]string{"localhost:21212"}, 20)
conn.Exec("@AdHoc", []driver.Value{"DELETE FROM HELLOWORLD;"})
resCons := responseConsumer{}
conn.ExecAsync(resCons, "HELLOWORLD.insert", []driver.Value{"Bonjour", "Monde", "French"})
conn.ExecAsync(resCons, "HELLOWORLD.insert", []driver.Value{"Hello", "World", "English"})
conn.ExecAsync(resCons, "HELLOWORLD.insert", []driver.Value{"Hola", "Mundo", "Spanish"})
conn.ExecAsync(resCons, "HELLOWORLD.insert", []driver.Value{"Hej", "Verden", "Danish"})
conn.ExecAsync(resCons, "HELLOWORLD.insert", []driver.Value{"Ciao", "Mondo", "Italian"})
conn.Drain()
keys := []string{"English", "French", "Spanish", "Danish", "Italian"}
for i := 0; i < 100; i++ {
key := keys[rand.Intn(5)]
conn.QueryAsync(resCons, "HELLOWORLD.select", []driver.Value{key})
}
conn.Drain()
for i := 0; i < 2000; i++ {
key := keys[rand.Intn(5)]
conn.QueryAsync(resCons, "HELLOWORLD.select", []driver.Value{key})
}
conn.Drain()
}
type responseConsumer struct{}
func (rc responseConsumer) ConsumeError(err error) {
fmt.Println(err)
}
func (rc responseConsumer) ConsumeResult(res driver.Result) {
ra, _ := res.RowsAffected()
lid, _ := res.LastInsertId()
fmt.Printf("%d, %d\n", ra, lid)
}
func (rc responseConsumer) ConsumeRows(rows driver.Rows) {
vrows := rows.(voltdbclient.VoltRows)
vrows.AdvanceRow()
iHello, err := vrows.GetStringByName("HELLO")
hello := iHello.(string)
if err != nil {
log.Fatal(err)
}
iWorld, err := vrows.GetStringByName("WORLD")
world := iWorld.(string)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%v, %v!\n", hello, world)
}