From 92cdcbc6a28628834b2f03a3ad1fae2d9aef2e39 Mon Sep 17 00:00:00 2001 From: Ian Norden Date: Sat, 30 May 2020 12:09:43 -0500 Subject: [PATCH] bacther --- batch.go | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 batch.go diff --git a/batch.go b/batch.go new file mode 100644 index 0000000..533a115 --- /dev/null +++ b/batch.go @@ -0,0 +1,99 @@ +// VulcanizeDB +// Copyright © 2020 Vulcanize + +// 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 this program. If not, see . + +package ipfseth + +import ( + "github.com/ethereum/go-ethereum/ethdb" + "github.com/jmoiron/sqlx" +) + +type Batch struct { + db *sqlx.DB + tx *sqlx.Tx + size int +} + +func NewBatch(db *sqlx.DB) ethdb.Batch { + return &Batch{ + db: db, + } +} + +// Put satisfies the ethdb.Batch interface +// Put inserts the given value into the key-value data store +func (b *Batch) Put(key []byte, value []byte) (err error) { + if b.tx == nil { + b.Reset() + } + mhKey, err := MultihashKeyFromKeccak256(key) + if err != nil { + return err + } + _, err = b.tx.Exec(putPgStr, mhKey, value) + if err != nil { + return err + } + b.size += len(value) + return nil +} + +// Delete satisfies the ethdb.Batch interface +// Delete removes the key from the key-value data store +func (b *Batch) Delete(key []byte) (err error) { + if b.tx == nil { + b.Reset() + } + mhKey, err := MultihashKeyFromKeccak256(key) + if err != nil { + return err + } + _, err = b.tx.Exec(deletePgStr, mhKey) + return err +} + +// ValueSize satisfies the ethdb.Batch interface +// ValueSize retrieves the amount of data queued up for writing +// The returned value is the total byte length of all data queued to write +func (b *Batch) ValueSize() int { + return b.size +} + +// Write satisfies the ethdb.Batch interface +// Write flushes any accumulated data to disk +func (b *Batch) Write() error { + if b.tx == nil { + return nil + } + return b.tx.Commit() +} + +// Replay satisfies the ethdb.Batch interface +// Replay replays the batch contents +func (b *Batch) Replay(w ethdb.KeyValueWriter) error { + return errNotSupported +} + +// Reset satisfies the ethdb.Batch interface +// Reset resets the batch for reuse +func (b *Batch) Reset() { + var err error + b.tx, err = b.db.Beginx() + if err != nil { + panic(err) + } + b.size = 0 +} \ No newline at end of file