-
Notifications
You must be signed in to change notification settings - Fork 14
/
result.go
84 lines (69 loc) · 1.62 KB
/
result.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
/*
Copyright 2020 JM Robles (@jmrobles)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package h2go
import (
"database/sql/driver"
"io"
"github.com/pkg/errors"
)
type h2Result struct {
query string
columns []string
numRows int32
curRow int32
trans *transfer
// Interface
driver.Rows
}
// Rows interface
func (h2r *h2Result) Close() error {
return nil
}
func (h2r *h2Result) Columns() []string {
return h2r.columns
}
func (h2r *h2Result) Next(dest []driver.Value) error {
var err error
// log.Printf("LEN: %d", len(dest))
if h2r.curRow == h2r.numRows {
return io.EOF
}
h2r.curRow++
next, err := h2r.trans.readBool()
if err != nil {
return err
}
if !next {
return io.EOF
}
// log.Printf(">>> DEST: %v", dest)
for i := range h2r.columns {
v, err := h2r.trans.readValue()
if err != nil {
return errors.Wrapf(err, "Can't read value")
}
dest[i] = driver.Value(v)
}
return nil
}
type h2ExecResult struct {
nUpdated int32
// Interface
driver.Result
}
func (h2er *h2ExecResult) LastInsertId() (int64, error) {
return 1, nil
}
func (h2er *h2ExecResult) RowsAffected() (int64, error) {
return int64(h2er.nUpdated), nil
}