/
statement.go
105 lines (87 loc) · 2.56 KB
/
statement.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
99
100
101
102
103
104
105
/*
Copyright (c) 2024-present, DeltaStream Inc.
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 godeltastream
import (
"context"
"database/sql/driver"
)
// Compile time validation that our types implement the expected interfaces
var (
_ driver.Stmt = &statement{}
_ driver.StmtExecContext = &statement{}
_ driver.StmtQueryContext = &statement{}
)
type statement struct {
c *Conn
query string
isOpen bool
}
// Close implements driver.Stmt.
func (s *statement) Close() error {
s.isOpen = false
return nil
}
// Exec implements driver.Stmt.
func (s *statement) Exec(args []driver.Value) (driver.Result, error) {
if !s.isOpen {
return nil, &ErrStatementClosed{}
}
return s.c.Exec(s.query, args)
}
type result struct {
}
// LastInsertId returns the database's auto-generated ID
// after, for example, an INSERT into a table with primary
// key.
func (r *result) LastInsertId() (int64, error) {
return -1, nil
}
// RowsAffected returns the number of rows affected by the
// query.
func (r *result) RowsAffected() (int64, error) {
return -1, nil
}
// ExecContext executes a query that doesn't return rows, such
// as an INSERT or UPDATE.
//
// ExecContext must honor the context timeout and return when it is canceled.
func (s *statement) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) {
if !s.isOpen {
return nil, &ErrStatementClosed{}
}
return s.c.ExecContext(ctx, s.query, args)
}
// NumInput implements driver.Stmt.
func (s *statement) NumInput() int {
if !s.isOpen {
return 0
}
return 0
}
// Query implements driver.Stmt.
func (s *statement) Query(args []driver.Value) (driver.Rows, error) {
if !s.isOpen {
return nil, &ErrStatementClosed{}
}
return s.c.Query(s.query, args)
}
// QueryContext executes a query that may return rows, such as a
// SELECT.
//
// QueryContext must honor the context timeout and return when it is canceled.
func (s *statement) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) {
if !s.isOpen {
return nil, &ErrStatementClosed{}
}
return s.c.QueryContext(ctx, s.query, args)
}