Skip to content

Commit b3f481c

Browse files
authored
Implement ConnBeginTx as replacement for deprecated Begin (#1255)
* implement missing method * sprinkle assertions of implementations * add note for viewers at home
1 parent fe03b98 commit b3f481c

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

clickhouse_std.go

+36
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ func (o *stdConnOpener) Connect(ctx context.Context) (_ driver.Conn, err error)
110110
return nil, err
111111
}
112112

113+
var _ driver.Connector = (*stdConnOpener)(nil)
114+
113115
func init() {
114116
var debugf = func(format string, v ...any) {}
115117
sql.Register("clickhouse", &stdDriver{debugf: debugf})
@@ -196,6 +198,12 @@ type stdDriver struct {
196198
debugf func(format string, v ...any)
197199
}
198200

201+
var _ driver.Conn = (*stdDriver)(nil)
202+
var _ driver.ConnBeginTx = (*stdDriver)(nil)
203+
var _ driver.ExecerContext = (*stdDriver)(nil)
204+
var _ driver.QueryerContext = (*stdDriver)(nil)
205+
var _ driver.ConnPrepareContext = (*stdDriver)(nil)
206+
199207
func (std *stdDriver) Open(dsn string) (_ driver.Conn, err error) {
200208
var opt Options
201209
if err := opt.fromDSN(dsn); err != nil {
@@ -211,6 +219,8 @@ func (std *stdDriver) Open(dsn string) (_ driver.Conn, err error) {
211219
return (&stdConnOpener{opt: o, debugf: debugf}).Connect(context.Background())
212220
}
213221

222+
var _ driver.Driver = (*stdDriver)(nil)
223+
214224
func (std *stdDriver) ResetSession(ctx context.Context) error {
215225
if std.conn.isBad() {
216226
std.debugf("Resetting session because connection is bad")
@@ -219,9 +229,16 @@ func (std *stdDriver) ResetSession(ctx context.Context) error {
219229
return nil
220230
}
221231

232+
var _ driver.SessionResetter = (*stdDriver)(nil)
233+
222234
func (std *stdDriver) Ping(ctx context.Context) error { return std.conn.ping(ctx) }
223235

236+
var _ driver.Pinger = (*stdDriver)(nil)
237+
224238
func (std *stdDriver) Begin() (driver.Tx, error) { return std, nil }
239+
func (std *stdDriver) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {
240+
return std, nil
241+
}
225242

226243
func (std *stdDriver) Commit() error {
227244
if std.commit == nil {
@@ -248,8 +265,12 @@ func (std *stdDriver) Rollback() error {
248265
return nil
249266
}
250267

268+
var _ driver.Tx = (*stdDriver)(nil)
269+
251270
func (std *stdDriver) CheckNamedValue(nv *driver.NamedValue) error { return nil }
252271

272+
var _ driver.NamedValueChecker = (*stdDriver)(nil)
273+
253274
func (std *stdDriver) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) {
254275
if options := queryOptions(ctx); options.async.ok {
255276
return driver.RowsAffected(0), std.conn.asyncInsert(ctx, query, options.async.wait, rebind(args)...)
@@ -340,7 +361,10 @@ func (s *stdBatch) ExecContext(ctx context.Context, args []driver.NamedValue) (d
340361
return s.Exec(values)
341362
}
342363

364+
var _ driver.StmtExecContext = (*stdBatch)(nil)
365+
343366
func (s *stdBatch) Query(args []driver.Value) (driver.Rows, error) {
367+
// Note: not implementing driver.StmtQueryContext accordingly
344368
return nil, errors.New("only Exec method supported in batch mode")
345369
}
346370

@@ -359,6 +383,8 @@ func (r *stdRows) ColumnTypeScanType(idx int) reflect.Type {
359383
return r.rows.block.Columns[idx].ScanType()
360384
}
361385

386+
var _ driver.RowsColumnTypeScanType = (*stdRows)(nil)
387+
362388
func (r *stdRows) ColumnTypeDatabaseTypeName(idx int) string {
363389
return string(r.rows.block.Columns[idx].Type())
364390
}
@@ -381,6 +407,12 @@ func (r *stdRows) ColumnTypePrecisionScale(idx int) (precision, scale int64, ok
381407
return 0, 0, false
382408
}
383409

410+
var _ driver.Rows = (*stdRows)(nil)
411+
var _ driver.RowsNextResultSet = (*stdRows)(nil)
412+
var _ driver.RowsColumnTypeDatabaseTypeName = (*stdRows)(nil)
413+
var _ driver.RowsColumnTypeNullable = (*stdRows)(nil)
414+
var _ driver.RowsColumnTypePrecisionScale = (*stdRows)(nil)
415+
384416
func (r *stdRows) Next(dest []driver.Value) error {
385417
if len(r.rows.block.Columns) != len(dest) {
386418
err := fmt.Errorf("expected %d destination arguments in Next, not %d", len(r.rows.block.Columns), len(dest))
@@ -429,10 +461,14 @@ func (r *stdRows) NextResultSet() error {
429461
return nil
430462
}
431463

464+
var _ driver.RowsNextResultSet = (*stdRows)(nil)
465+
432466
func (r *stdRows) Close() error {
433467
err := r.rows.Close()
434468
if err != nil {
435469
r.debugf("Rows Close error: %v\n", err)
436470
}
437471
return err
438472
}
473+
474+
var _ driver.Rows = (*stdRows)(nil)

0 commit comments

Comments
 (0)