• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

codenotary / immudb / 30656653651

31 Jul 2026 06:48PM UTC coverage: 84.849% (+0.01%) from 84.839%
30656653651

Pull #2137

gh-ci

vchaindz
test(stdlib): expect the tx to survive a parse error

TestTx_Errors asserted the symptom that d491954a removes: a parse error used
to leave sqlTx nil, so IsClosed reported true, the session dropped the
transaction and the next statement answered "no transaction found". The
transaction now stays open, so that statement reaches the parser and returns
its own syntax error instead.

Assert that error, and roll back at the end - on the old code the rollback is
exactly what failed, so it pins the fix through the full client and session
path rather than only at the transactions package.

The sessions import goes with the ErrTransactionNotFound reference.
Pull Request #2137: fix(server): keep the ongoing tx when a statement fails before execution

18 of 18 new or added lines in 2 files covered. (100.0%)

8 existing lines in 3 files now uncovered.

45282 of 53368 relevant lines covered (84.85%)

126521.27 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.09
/pkg/database/lazy_db.go
1
/*
2
Copyright 2026 Codenotary Inc. All rights reserved.
3

4
SPDX-License-Identifier: BUSL-1.1
5
you may not use this file except in compliance with the License.
6
You may obtain a copy of the License at
7

8
        https://mariadb.com/bsl11/
9

10
Unless required by applicable law or agreed to in writing, software
11
distributed under the License is distributed on an "AS IS" BASIS,
12
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
See the License for the specific language governing permissions and
14
limitations under the License.
15
*/
16

17
package database
18

19
import (
20
        "context"
21
        "crypto/sha256"
22
        "errors"
23
        "path/filepath"
24
        "time"
25

26
        "github.com/codenotary/immudb/embedded/document"
27
        "github.com/codenotary/immudb/embedded/sql"
28
        "github.com/codenotary/immudb/pkg/api/protomodel"
29
        "github.com/codenotary/immudb/pkg/api/schema"
30
)
31

32
var ErrNoNewTransactions = errors.New("no new transactions")
33

34
type lazyDB struct {
35
        m *DBManager
36

37
        idx int
38
}
39

40
func (db *lazyDB) GetName() string {
44,189✔
41
        return db.m.GetNameByIndex(db.idx)
44,189✔
42
}
44,189✔
43

44
func (db *lazyDB) GetOptions() *Options {
76✔
45
        return db.m.GetOptionsByIndex(db.idx)
76✔
46
}
76✔
47

48
func (db *lazyDB) Path() string {
2✔
49
        opts := db.GetOptions()
2✔
50

2✔
51
        return filepath.Join(opts.GetDBRootPath(), db.GetName())
2✔
52
}
2✔
53

54
func (db *lazyDB) AsReplica(asReplica, syncReplication bool, syncAcks int) {
14✔
55
        d, err := db.m.Get(db.idx)
14✔
56
        if err != nil {
14✔
57
                db.m.logger.Errorf("%s: AsReplica", err)
×
58
                return
×
59
        }
×
60
        defer db.m.Release(db.idx)
14✔
61

14✔
62
        d.AsReplica(asReplica, syncReplication, syncAcks)
14✔
63
}
64

65
func (db *lazyDB) IsReplica() bool {
8✔
66
        d, err := db.m.Get(db.idx)
8✔
67
        if err != nil {
8✔
68
                db.m.logger.Errorf("%s: IsReplica", err)
×
69
                return false
×
70
        }
×
71
        defer db.m.Release(db.idx)
8✔
72

8✔
73
        return d.IsReplica()
8✔
74
}
75

76
func (db *lazyDB) IsSyncReplicationEnabled() bool {
8,394✔
77
        d, err := db.m.Get(db.idx)
8,394✔
78
        if err != nil {
8,394✔
79
                db.m.logger.Errorf("%s: IsSyncReplicationEnabled", err)
×
80
                return false
×
81
        }
×
82
        defer db.m.Release(db.idx)
8,394✔
83

8,394✔
84
        return d.IsSyncReplicationEnabled()
8,394✔
85
}
86

87
func (db *lazyDB) SetSyncReplication(enabled bool) {
1✔
88
        d, err := db.m.Get(db.idx)
1✔
89
        if err != nil {
1✔
90
                db.m.logger.Errorf("%s: SetSyncReplication", err)
×
91
                return
×
92
        }
×
93
        defer db.m.Release(db.idx)
1✔
94

1✔
95
        d.SetSyncReplication(enabled)
1✔
96
}
97

98
func (db *lazyDB) MaxResultSize() int {
74✔
99
        return db.GetOptions().maxResultSize
74✔
100
}
74✔
101

102
func (db *lazyDB) Health() (waitingCount int, lastReleaseAt time.Time) {
1✔
103
        d, err := db.m.Get(db.idx)
1✔
104
        if err != nil {
1✔
105
                db.m.logger.Errorf("%s: Health", err)
×
106
                return
×
107
        }
×
108
        defer db.m.Release(db.idx)
1✔
109

1✔
110
        return d.Health()
1✔
111
}
112

113
func (db *lazyDB) CurrentState() (*schema.ImmutableState, error) {
25,674✔
114
        return db.m.GetState(db.idx)
25,674✔
115
}
25,674✔
116

117
func (db *lazyDB) Size() (uint64, error) {
2✔
118
        d, err := db.m.Get(db.idx)
2✔
119
        if err != nil {
2✔
120
                return 0, err
×
121
        }
×
122
        defer db.m.Release(db.idx)
2✔
123

2✔
124
        return d.Size()
2✔
125
}
126

127
func (db *lazyDB) TxCount() (uint64, error) {
299✔
128
        d, err := db.m.Get(db.idx)
299✔
129
        if err != nil {
299✔
130
                return 0, err
×
131
        }
×
132
        defer db.m.Release(db.idx)
299✔
133

299✔
134
        return d.TxCount()
299✔
135
}
136

137
func (db *lazyDB) Set(ctx context.Context, req *schema.SetRequest) (*schema.TxHeader, error) {
3,463✔
138
        d, err := db.m.Get(db.idx)
3,463✔
139
        if err != nil {
3,463✔
140
                return nil, err
×
141
        }
×
142
        defer db.m.Release(db.idx)
3,463✔
143

3,463✔
144
        return d.Set(ctx, req)
3,463✔
145
}
146

147
func (db *lazyDB) VerifiableSet(ctx context.Context, req *schema.VerifiableSetRequest) (*schema.VerifiableTx, error) {
44✔
148
        d, err := db.m.Get(db.idx)
44✔
149
        if err != nil {
44✔
150
                return nil, err
×
151
        }
×
152
        defer db.m.Release(db.idx)
44✔
153

44✔
154
        return d.VerifiableSet(ctx, req)
44✔
155
}
156

157
func (db *lazyDB) Get(ctx context.Context, req *schema.KeyRequest) (*schema.Entry, error) {
263✔
158
        d, err := db.m.Get(db.idx)
263✔
159
        if err != nil {
263✔
UNCOV
160
                return nil, err
×
UNCOV
161
        }
×
162
        defer db.m.Release(db.idx)
263✔
163

263✔
164
        return d.Get(ctx, req)
263✔
165
}
166

167
func (db *lazyDB) VerifiableGet(ctx context.Context, req *schema.VerifiableGetRequest) (*schema.VerifiableEntry, error) {
31✔
168
        d, err := db.m.Get(db.idx)
31✔
169
        if err != nil {
31✔
170
                return nil, err
×
171
        }
×
172
        defer db.m.Release(db.idx)
31✔
173

31✔
174
        return d.VerifiableGet(ctx, req)
31✔
175
}
176

177
func (db *lazyDB) GetAll(ctx context.Context, req *schema.KeyListRequest) (*schema.Entries, error) {
3✔
178
        d, err := db.m.Get(db.idx)
3✔
179
        if err != nil {
3✔
180
                return nil, err
×
181
        }
×
182
        defer db.m.Release(db.idx)
3✔
183

3✔
184
        return d.GetAll(ctx, req)
3✔
185
}
186

187
func (db *lazyDB) Delete(ctx context.Context, req *schema.DeleteKeysRequest) (*schema.TxHeader, error) {
4✔
188
        d, err := db.m.Get(db.idx)
4✔
189
        if err != nil {
4✔
190
                return nil, err
×
191
        }
×
192
        defer db.m.Release(db.idx)
4✔
193

4✔
194
        return d.Delete(ctx, req)
4✔
195
}
196

197
func (db *lazyDB) SetReference(ctx context.Context, req *schema.ReferenceRequest) (*schema.TxHeader, error) {
4✔
198
        d, err := db.m.Get(db.idx)
4✔
199
        if err != nil {
4✔
200
                return nil, err
×
201
        }
×
202
        defer db.m.Release(db.idx)
4✔
203

4✔
204
        return d.SetReference(ctx, req)
4✔
205
}
206

207
func (db *lazyDB) VerifiableSetReference(ctx context.Context, req *schema.VerifiableReferenceRequest) (*schema.VerifiableTx, error) {
5✔
208
        d, err := db.m.Get(db.idx)
5✔
209
        if err != nil {
5✔
210
                return nil, err
×
211
        }
×
212
        defer db.m.Release(db.idx)
5✔
213

5✔
214
        return d.VerifiableSetReference(ctx, req)
5✔
215
}
216

217
func (db *lazyDB) Scan(ctx context.Context, req *schema.ScanRequest) (*schema.Entries, error) {
3✔
218
        d, err := db.m.Get(db.idx)
3✔
219
        if err != nil {
3✔
220
                return nil, err
×
221
        }
×
222
        defer db.m.Release(db.idx)
3✔
223

3✔
224
        return d.Scan(ctx, req)
3✔
225
}
226

227
func (db *lazyDB) History(ctx context.Context, req *schema.HistoryRequest) (*schema.Entries, error) {
4✔
228
        d, err := db.m.Get(db.idx)
4✔
229
        if err != nil {
5✔
230
                return nil, err
1✔
231
        }
1✔
232
        defer db.m.Release(db.idx)
3✔
233

3✔
234
        return d.History(ctx, req)
3✔
235
}
236

237
func (db *lazyDB) ExecAll(ctx context.Context, operations *schema.ExecAllRequest) (*schema.TxHeader, error) {
8✔
238
        d, err := db.m.Get(db.idx)
8✔
239
        if err != nil {
8✔
240
                return nil, err
×
241
        }
×
242
        defer db.m.Release(db.idx)
8✔
243

8✔
244
        return d.ExecAll(ctx, operations)
8✔
245
}
246

247
func (db *lazyDB) Count(ctx context.Context, prefix *schema.KeyPrefix) (*schema.EntryCount, error) {
3✔
248
        d, err := db.m.Get(db.idx)
3✔
249
        if err != nil {
3✔
250
                return nil, err
×
251
        }
×
252
        defer db.m.Release(db.idx)
3✔
253

3✔
254
        return d.Count(ctx, prefix)
3✔
255
}
256

257
func (db *lazyDB) CountAll(ctx context.Context) (*schema.EntryCount, error) {
3✔
258
        d, err := db.m.Get(db.idx)
3✔
259
        if err != nil {
3✔
260
                return nil, err
×
261
        }
×
262
        defer db.m.Release(db.idx)
3✔
263

3✔
264
        return d.CountAll(ctx)
3✔
265
}
266

267
func (db *lazyDB) ZAdd(ctx context.Context, req *schema.ZAddRequest) (*schema.TxHeader, error) {
110✔
268
        d, err := db.m.Get(db.idx)
110✔
269
        if err != nil {
110✔
270
                return nil, err
×
271
        }
×
272
        defer db.m.Release(db.idx)
110✔
273

110✔
274
        return d.ZAdd(ctx, req)
110✔
275
}
276

277
func (db *lazyDB) VerifiableZAdd(ctx context.Context, req *schema.VerifiableZAddRequest) (*schema.VerifiableTx, error) {
9✔
278
        d, err := db.m.Get(db.idx)
9✔
279
        if err != nil {
9✔
280
                return nil, err
×
281
        }
×
282
        defer db.m.Release(db.idx)
9✔
283

9✔
284
        return d.VerifiableZAdd(ctx, req)
9✔
285
}
286

287
func (db *lazyDB) ZScan(ctx context.Context, req *schema.ZScanRequest) (*schema.ZEntries, error) {
7✔
288
        d, err := db.m.Get(db.idx)
7✔
289
        if err != nil {
8✔
290
                return nil, err
1✔
291
        }
1✔
292
        defer db.m.Release(db.idx)
6✔
293

6✔
294
        return d.ZScan(ctx, req)
6✔
295
}
296

297
func (db *lazyDB) NewSQLTx(ctx context.Context, opts *sql.TxOptions) (*sql.SQLTx, error) {
288✔
298
        d, err := db.m.Get(db.idx)
288✔
299
        if err != nil {
288✔
300
                return nil, err
×
301
        }
×
302
        defer db.m.Release(db.idx)
288✔
303

288✔
304
        return d.NewSQLTx(ctx, opts)
288✔
305
}
306

307
func (db *lazyDB) SQLExec(ctx context.Context, tx *sql.SQLTx, req *schema.SQLExecRequest) (ntx *sql.SQLTx, ctxs []*sql.SQLTx, err error) {
245✔
308
        d, err := db.m.Get(db.idx)
245✔
309
        if err != nil {
245✔
310
                return nil, nil, err
×
311
        }
×
312
        defer db.m.Release(db.idx)
245✔
313

245✔
314
        return d.SQLExec(ctx, tx, req)
245✔
315
}
316

317
func (db *lazyDB) SQLExecPrepared(ctx context.Context, tx *sql.SQLTx, stmts []sql.SQLStmt, params map[string]interface{}) (ntx *sql.SQLTx, ctxs []*sql.SQLTx, err error) {
277✔
318
        d, err := db.m.Get(db.idx)
277✔
319
        if err != nil {
277✔
320
                return nil, nil, err
×
321
        }
×
322
        defer db.m.Release(db.idx)
277✔
323

277✔
324
        return d.SQLExecPrepared(ctx, tx, stmts, params)
277✔
325
}
326

327
func (db *lazyDB) InferParameters(ctx context.Context, tx *sql.SQLTx, sql string) (map[string]sql.SQLValueType, error) {
1✔
328
        d, err := db.m.Get(db.idx)
1✔
329
        if err != nil {
1✔
330
                return nil, err
×
331
        }
×
332
        defer db.m.Release(db.idx)
1✔
333

1✔
334
        return d.InferParameters(ctx, tx, sql)
1✔
335
}
336

337
func (db *lazyDB) InferParametersPrepared(ctx context.Context, tx *sql.SQLTx, stmt sql.SQLStmt) (map[string]sql.SQLValueType, error) {
151✔
338
        d, err := db.m.Get(db.idx)
151✔
339
        if err != nil {
151✔
340
                return nil, err
×
341
        }
×
342
        defer db.m.Release(db.idx)
151✔
343

151✔
344
        return d.InferParametersPrepared(ctx, tx, stmt)
151✔
345
}
346

347
func (db *lazyDB) SQLQuery(ctx context.Context, tx *sql.SQLTx, req *schema.SQLQueryRequest) (sql.RowReader, error) {
61✔
348
        d, err := db.m.Get(db.idx)
61✔
349
        if err != nil {
61✔
350
                return nil, err
×
351
        }
×
352
        defer db.m.Release(db.idx)
61✔
353

61✔
354
        return d.SQLQuery(ctx, tx, req)
61✔
355
}
356

357
func (db *lazyDB) SQLQueryAll(ctx context.Context, tx *sql.SQLTx, req *schema.SQLQueryRequest) ([]*sql.Row, error) {
1✔
358
        d, err := db.m.Get(db.idx)
1✔
359
        if err != nil {
1✔
360
                return nil, err
×
361
        }
×
362
        defer db.m.Release(db.idx)
1✔
363

1✔
364
        return d.SQLQueryAll(ctx, tx, req)
1✔
365
}
366

367
func (db *lazyDB) SQLQueryPrepared(ctx context.Context, tx *sql.SQLTx, stmt sql.DataSource, params map[string]interface{}) (sql.RowReader, error) {
333✔
368
        d, err := db.m.Get(db.idx)
333✔
369
        if err != nil {
333✔
370
                return nil, err
×
371
        }
×
372
        defer db.m.Release(db.idx)
333✔
373

333✔
374
        return d.SQLQueryPrepared(ctx, tx, stmt, params)
333✔
375
}
376

377
func (db *lazyDB) VerifiableSQLGet(ctx context.Context, req *schema.VerifiableSQLGetRequest) (*schema.VerifiableSQLEntry, error) {
48✔
378
        d, err := db.m.Get(db.idx)
48✔
379
        if err != nil {
48✔
380
                return nil, err
×
381
        }
×
382
        defer db.m.Release(db.idx)
48✔
383

48✔
384
        return d.VerifiableSQLGet(ctx, req)
48✔
385
}
386

387
func (db *lazyDB) ListTables(ctx context.Context, tx *sql.SQLTx) (*schema.SQLQueryResult, error) {
2✔
388
        d, err := db.m.Get(db.idx)
2✔
389
        if err != nil {
2✔
390
                return nil, err
×
391
        }
×
392
        defer db.m.Release(db.idx)
2✔
393

2✔
394
        return d.ListTables(ctx, tx)
2✔
395
}
396

397
func (db *lazyDB) DescribeTable(ctx context.Context, tx *sql.SQLTx, table string) (*schema.SQLQueryResult, error) {
2✔
398
        d, err := db.m.Get(db.idx)
2✔
399
        if err != nil {
2✔
400
                return nil, err
×
401
        }
×
402
        defer db.m.Release(db.idx)
2✔
403

2✔
404
        return d.DescribeTable(ctx, tx, table)
2✔
405
}
406

407
func (db *lazyDB) WaitForTx(ctx context.Context, txID uint64, allowPrecommitted bool) error {
1✔
408
        d, err := db.m.Get(db.idx)
1✔
409
        if err != nil {
1✔
410
                return err
×
411
        }
×
412
        defer db.m.Release(db.idx)
1✔
413

1✔
414
        return d.WaitForTx(ctx, txID, allowPrecommitted)
1✔
415
}
416

417
func (db *lazyDB) WaitForIndexingUpto(ctx context.Context, txID uint64) error {
1✔
418
        d, err := db.m.Get(db.idx)
1✔
419
        if err != nil {
1✔
420
                return err
×
421
        }
×
422
        defer db.m.Release(db.idx)
1✔
423

1✔
424
        return d.WaitForIndexingUpto(ctx, txID)
1✔
425
}
426

427
func (db *lazyDB) TxByID(ctx context.Context, req *schema.TxRequest) (*schema.Tx, error) {
40✔
428
        d, err := db.m.Get(db.idx)
40✔
429
        if err != nil {
40✔
430
                return nil, err
×
431
        }
×
432
        defer db.m.Release(db.idx)
40✔
433

40✔
434
        return d.TxByID(ctx, req)
40✔
435
}
436

437
func (db *lazyDB) ExportTxByID(ctx context.Context, req *schema.ExportTxRequest) (txbs []byte, mayCommitUpToTxID uint64, mayCommitUpToAlh [sha256.Size]byte, err error) {
8,394✔
438
        state, err := db.CurrentState()
8,394✔
439
        if err != nil {
8,394✔
440
                return nil, 0, [sha256.Size]byte{}, err
×
441
        }
×
442

443
        if !req.AllowPreCommitted {
10,081✔
444
                if req.Tx > state.TxId {
1,700✔
445
                        return nil, 0, [sha256.Size]byte{}, ErrNoNewTransactions
13✔
446
                }
13✔
447
        }
448

449
        d, err := db.m.Get(db.idx)
8,381✔
450
        if err != nil {
8,381✔
451
                return nil, 0, [sha256.Size]byte{}, err
×
452
        }
×
453
        defer db.m.Release(db.idx)
8,381✔
454

8,381✔
455
        return d.ExportTxByID(ctx, req)
8,381✔
456
}
457

458
func (db *lazyDB) ReplicateTx(ctx context.Context, exportedTx []byte, skipIntegrityCheck bool, waitForIndexing bool) (*schema.TxHeader, error) {
7,603✔
459
        d, err := db.m.Get(db.idx)
7,603✔
460
        if err != nil {
7,603✔
461
                return nil, err
×
462
        }
×
463
        defer db.m.Release(db.idx)
7,603✔
464

7,603✔
465
        return d.ReplicateTx(ctx, exportedTx, skipIntegrityCheck, waitForIndexing)
7,603✔
466
}
467

468
func (db *lazyDB) AllowCommitUpto(txID uint64, alh [sha256.Size]byte) error {
5,980✔
469
        d, err := db.m.Get(db.idx)
5,980✔
470
        if err != nil {
5,980✔
471
                return err
×
472
        }
×
473
        defer db.m.Release(db.idx)
5,980✔
474

5,980✔
475
        return d.AllowCommitUpto(txID, alh)
5,980✔
476
}
477

478
func (db *lazyDB) DiscardPrecommittedTxsSince(txID uint64) error {
1✔
479
        d, err := db.m.Get(db.idx)
1✔
480
        if err != nil {
1✔
481
                return err
×
482
        }
×
483
        defer db.m.Release(db.idx)
1✔
484

1✔
485
        return d.DiscardPrecommittedTxsSince(txID)
1✔
486
}
487

488
func (db *lazyDB) VerifiableTxByID(ctx context.Context, req *schema.VerifiableTxRequest) (*schema.VerifiableTx, error) {
1,296✔
489
        d, err := db.m.Get(db.idx)
1,296✔
490
        if err != nil {
1,296✔
491
                return nil, err
×
492
        }
×
493
        defer db.m.Release(db.idx)
1,296✔
494

1,296✔
495
        return d.VerifiableTxByID(ctx, req)
1,296✔
496
}
497

498
func (db *lazyDB) TxScan(ctx context.Context, req *schema.TxScanRequest) (*schema.TxList, error) {
4✔
499
        d, err := db.m.Get(db.idx)
4✔
500
        if err != nil {
4✔
501
                return nil, err
×
502
        }
×
503
        defer db.m.Release(db.idx)
4✔
504

4✔
505
        return d.TxScan(ctx, req)
4✔
506
}
507

508
func (db *lazyDB) FlushIndex(req *schema.FlushIndexRequest) error {
4✔
509
        d, err := db.m.Get(db.idx)
4✔
510
        if err != nil {
4✔
511
                return err
×
512
        }
×
513
        defer db.m.Release(db.idx)
4✔
514

4✔
515
        return d.FlushIndex(req)
4✔
516
}
517

518
func (db *lazyDB) CompactIndex() error {
2✔
519
        d, err := db.m.Get(db.idx)
2✔
520
        if err != nil {
2✔
521
                return err
×
522
        }
×
523
        defer db.m.Release(db.idx)
2✔
524

2✔
525
        return d.CompactIndex()
2✔
526
}
527

528
func (db *lazyDB) IsClosed() bool {
218✔
529
        return db.m.IsClosed(db.idx)
218✔
530
}
218✔
531

532
func (db *lazyDB) Close() error {
5✔
533
        return db.m.Close(db.idx)
5✔
534
}
5✔
535

536
// CreateCollection creates a new collection
537
func (db *lazyDB) CreateCollection(ctx context.Context, username string, req *protomodel.CreateCollectionRequest) (*protomodel.CreateCollectionResponse, error) {
10✔
538
        d, err := db.m.Get(db.idx)
10✔
539
        if err != nil {
10✔
540
                return nil, err
×
541
        }
×
542
        defer db.m.Release(db.idx)
10✔
543

10✔
544
        return d.CreateCollection(ctx, username, req)
10✔
545
}
546

547
// GetCollection returns the collection schema
548
func (db *lazyDB) GetCollection(ctx context.Context, req *protomodel.GetCollectionRequest) (*protomodel.GetCollectionResponse, error) {
5✔
549
        d, err := db.m.Get(db.idx)
5✔
550
        if err != nil {
5✔
551
                return nil, err
×
552
        }
×
553
        defer db.m.Release(db.idx)
5✔
554

5✔
555
        return d.GetCollection(ctx, req)
5✔
556
}
557

558
func (db *lazyDB) GetCollections(ctx context.Context, req *protomodel.GetCollectionsRequest) (*protomodel.GetCollectionsResponse, error) {
3✔
559
        d, err := db.m.Get(db.idx)
3✔
560
        if err != nil {
3✔
561
                return nil, err
×
562
        }
×
563
        defer db.m.Release(db.idx)
3✔
564

3✔
565
        return d.GetCollections(ctx, req)
3✔
566
}
567

568
func (db *lazyDB) UpdateCollection(ctx context.Context, username string, req *protomodel.UpdateCollectionRequest) (*protomodel.UpdateCollectionResponse, error) {
1✔
569
        d, err := db.m.Get(db.idx)
1✔
570
        if err != nil {
1✔
571
                return nil, err
×
572
        }
×
573
        defer db.m.Release(db.idx)
1✔
574

1✔
575
        return d.UpdateCollection(ctx, username, req)
1✔
576
}
577

578
func (db *lazyDB) DeleteCollection(ctx context.Context, username string, req *protomodel.DeleteCollectionRequest) (*protomodel.DeleteCollectionResponse, error) {
2✔
579
        d, err := db.m.Get(db.idx)
2✔
580
        if err != nil {
2✔
581
                return nil, err
×
582
        }
×
583
        defer db.m.Release(db.idx)
2✔
584

2✔
585
        return d.DeleteCollection(ctx, username, req)
2✔
586
}
587

588
func (db *lazyDB) AddField(ctx context.Context, username string, req *protomodel.AddFieldRequest) (*protomodel.AddFieldResponse, error) {
2✔
589
        d, err := db.m.Get(db.idx)
2✔
590
        if err != nil {
2✔
591
                return nil, err
×
592
        }
×
593
        defer db.m.Release(db.idx)
2✔
594

2✔
595
        return d.AddField(ctx, username, req)
2✔
596
}
597

598
func (db *lazyDB) RemoveField(ctx context.Context, username string, req *protomodel.RemoveFieldRequest) (*protomodel.RemoveFieldResponse, error) {
1✔
599
        d, err := db.m.Get(db.idx)
1✔
600
        if err != nil {
1✔
601
                return nil, err
×
602
        }
×
603
        defer db.m.Release(db.idx)
1✔
604

1✔
605
        return d.RemoveField(ctx, username, req)
1✔
606
}
607

608
func (db *lazyDB) CreateIndex(ctx context.Context, username string, req *protomodel.CreateIndexRequest) (*protomodel.CreateIndexResponse, error) {
1✔
609
        d, err := db.m.Get(db.idx)
1✔
610
        if err != nil {
1✔
611
                return nil, err
×
612
        }
×
613
        defer db.m.Release(db.idx)
1✔
614

1✔
615
        return d.CreateIndex(ctx, username, req)
1✔
616
}
617

618
func (db *lazyDB) DeleteIndex(ctx context.Context, username string, req *protomodel.DeleteIndexRequest) (*protomodel.DeleteIndexResponse, error) {
1✔
619
        d, err := db.m.Get(db.idx)
1✔
620
        if err != nil {
1✔
621
                return nil, err
×
622
        }
×
623
        defer db.m.Release(db.idx)
1✔
624

1✔
625
        return d.DeleteIndex(ctx, username, req)
1✔
626
}
627

628
func (db *lazyDB) InsertDocuments(ctx context.Context, username string, req *protomodel.InsertDocumentsRequest) (*protomodel.InsertDocumentsResponse, error) {
54✔
629
        d, err := db.m.Get(db.idx)
54✔
630
        if err != nil {
54✔
631
                return nil, err
×
632
        }
×
633
        defer db.m.Release(db.idx)
54✔
634

54✔
635
        return d.InsertDocuments(ctx, username, req)
54✔
636
}
637

638
func (db *lazyDB) ReplaceDocuments(ctx context.Context, username string, req *protomodel.ReplaceDocumentsRequest) (*protomodel.ReplaceDocumentsResponse, error) {
1✔
639
        d, err := db.m.Get(db.idx)
1✔
640
        if err != nil {
1✔
641
                return nil, err
×
642
        }
×
643
        defer db.m.Release(db.idx)
1✔
644

1✔
645
        return d.ReplaceDocuments(ctx, username, req)
1✔
646
}
647

648
func (db *lazyDB) AuditDocument(ctx context.Context, req *protomodel.AuditDocumentRequest) (*protomodel.AuditDocumentResponse, error) {
1✔
649
        d, err := db.m.Get(db.idx)
1✔
650
        if err != nil {
1✔
651
                return nil, err
×
652
        }
×
653
        defer db.m.Release(db.idx)
1✔
654

1✔
655
        return d.AuditDocument(ctx, req)
1✔
656
}
657

658
func (db *lazyDB) SearchDocuments(ctx context.Context, query *protomodel.Query, offset int64) (document.DocumentReader, error) {
9✔
659
        d, err := db.m.Get(db.idx)
9✔
660
        if err != nil {
9✔
661
                return nil, err
×
662
        }
×
663
        defer db.m.Release(db.idx)
9✔
664

9✔
665
        return d.SearchDocuments(ctx, query, offset)
9✔
666
}
667

668
func (db *lazyDB) CountDocuments(ctx context.Context, req *protomodel.CountDocumentsRequest) (*protomodel.CountDocumentsResponse, error) {
1✔
669
        d, err := db.m.Get(db.idx)
1✔
670
        if err != nil {
1✔
671
                return nil, err
×
672
        }
×
673
        defer db.m.Release(db.idx)
1✔
674

1✔
675
        return d.CountDocuments(ctx, req)
1✔
676
}
677

678
func (db *lazyDB) ProofDocument(ctx context.Context, req *protomodel.ProofDocumentRequest) (*protomodel.ProofDocumentResponse, error) {
1✔
679
        d, err := db.m.Get(db.idx)
1✔
680
        if err != nil {
1✔
681
                return nil, err
×
682
        }
×
683
        defer db.m.Release(db.idx)
1✔
684

1✔
685
        return d.ProofDocument(ctx, req)
1✔
686
}
687

688
func (db *lazyDB) DeleteDocuments(ctx context.Context, username string, req *protomodel.DeleteDocumentsRequest) (*protomodel.DeleteDocumentsResponse, error) {
1✔
689
        d, err := db.m.Get(db.idx)
1✔
690
        if err != nil {
1✔
691
                return nil, err
×
692
        }
×
693
        defer db.m.Release(db.idx)
1✔
694

1✔
695
        return d.DeleteDocuments(ctx, username, req)
1✔
696
}
697

698
func (db *lazyDB) FindTruncationPoint(ctx context.Context, until time.Time) (*schema.TxHeader, error) {
1✔
699
        d, err := db.m.Get(db.idx)
1✔
700
        if err != nil {
1✔
701
                return nil, err
×
702
        }
×
703
        defer db.m.Release(db.idx)
1✔
704

1✔
705
        return d.FindTruncationPoint(ctx, until)
1✔
706
}
707

708
func (db *lazyDB) CopySQLCatalog(ctx context.Context, txID uint64) (uint64, error) {
1✔
709
        d, err := db.m.Get(db.idx)
1✔
710
        if err != nil {
1✔
711
                return 0, err
×
712
        }
×
713
        defer db.m.Release(db.idx)
1✔
714

1✔
715
        return d.CopySQLCatalog(ctx, txID)
1✔
716
}
717

718
func (db *lazyDB) TruncateUptoTx(ctx context.Context, txID uint64) error {
1✔
719
        d, err := db.m.Get(db.idx)
1✔
720
        if err != nil {
1✔
721
                return err
×
722
        }
×
723
        defer db.m.Release(db.idx)
1✔
724

1✔
725
        return d.TruncateUptoTx(ctx, txID)
1✔
726
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc