add Stdout dummy database engine

This commit is contained in:
Bora M. Alper 2019-09-18 01:51:58 +01:00
parent 0e2fd5a7cc
commit 7c881cae65
No known key found for this signature in database
GPG Key ID: 8F1A9504E1BD114D
2 changed files with 89 additions and 0 deletions

View File

@ -60,6 +60,7 @@ type databaseEngine uint8
const (
Sqlite3 databaseEngine = 1
Stdout
)
type Statistics struct {
@ -112,6 +113,9 @@ func MakeDatabase(rawURL string, logger *zap.Logger) (Database, error) {
case "sqlite3":
return makeSqlite3Database(url_)
case "stdout":
return makeStdoutDatabase(url_)
case "postgresql":
return nil, fmt.Errorf("postgresql is not yet supported")

85
pkg/persistence/stdout.go Normal file
View File

@ -0,0 +1,85 @@
package persistence
import (
"encoding/json"
"net/url"
"os"
"github.com/pkg/errors"
)
type out struct {
InfoHash []byte `json:"infoHash"`
Name string `json:"name"`
Files []File `json:"files"`
}
var notSupportedError = errors.New("This dummy database engine (\"stdout\") does not support any sort of queries")
func makeStdoutDatabase(_ *url.URL) (Database, error) {
s := new(stdout)
s.encoder = json.NewEncoder(os.Stdout)
return s, nil
}
type stdout struct {
encoder *json.Encoder
}
func (s *stdout) Engine() databaseEngine {
return Stdout
}
func (s *stdout) DoesTorrentExist(infoHash []byte) (bool, error) {
// Always say that "No the torrent does not exist" because we do not have
// a way to know if we have seen it before or not.
// TODO:
// A possible improvement would be using bloom filters (with low false positive
// probabilities) to apply some reasonable filtering.
return false, nil
}
func (s *stdout) AddNewTorrent(infoHash []byte, name string, files []File) error {
err := s.encoder.Encode(out {
InfoHash: infoHash,
Name: name,
Files: files,
})
if err != nil {
return errors.Wrap(err, "DB engine stdout encode error")
}
return nil
}
func (s *stdout) Close() error {
return os.Stdout.Sync()
}
func (s *stdout) GetNumberOfTorrents() (uint, error) {
return 0, notSupportedError
}
func (s *stdout) QueryTorrents(
query string,
epoch int64,
orderBy OrderingCriteria,
ascending bool,
limit uint,
lastOrderedValue *float64,
lastID *uint64,
) ([]TorrentMetadata, error) {
return nil, notSupportedError
}
func (s *stdout) GetTorrent(infoHash []byte) (*TorrentMetadata, error) {
return nil, notSupportedError
}
func (s *stdout) GetFiles(infoHash []byte) ([]File, error) {
return nil, notSupportedError
}
func (s *stdout) GetStatistics(from string, n uint) (*Statistics, error) {
return nil, notSupportedError
}