use sql as db driver instead of sqlite

This commit is contained in:
2022-05-16 00:27:52 +02:00
parent 508e109734
commit f0254a6370
8 changed files with 64 additions and 44 deletions

6
internal/db/setup.sql Normal file
View File

@@ -0,0 +1,6 @@
CREATE TABLE IF NOT EXISTS `shares` (
slug VARCHAR(6) NOT NULL PRIMARY KEY,
objKey TEXT NOT NULL
)
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci;

View File

@@ -3,44 +3,52 @@ package db
import (
"context"
"database/sql"
"os"
"time"
_ "embed"
_ "github.com/mattn/go-sqlite3"
_ "github.com/go-sql-driver/mysql"
"github.com/sirupsen/logrus"
"git.kapelle.org/niklas/s3share/internal/types"
)
//go:embed sqlite.sql
//go:embed setup.sql
var setupSql string
type sqlLiteDB struct {
type sqlDB struct {
db *sql.DB
}
func NewSqlLiteDB(path string) (DB, error) {
os.Remove(path)
func NewSQLDB(dataSourceName string) (DB, error) {
db, err := sql.Open("mysql", dataSourceName)
logrus.Info("Opening database")
db, err := sql.Open("sqlite3", path)
if err != nil {
return nil, err
}
logrus.Info("Initializing database")
// https://github.com/go-sql-driver/mysql#important-settings
db.SetConnMaxLifetime(time.Minute * 3)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(10)
// Connect and check the server version
var version string
db.QueryRow("SELECT VERSION()").Scan(&version)
logrus.Info("DB Version:", version)
_, err = db.Exec(setupSql)
if err != nil {
return nil, err
}
return &sqlLiteDB{
return &sqlDB{
db: db,
}, nil
}
func (db *sqlLiteDB) GetShare(ctx context.Context, slug string) (*types.Share, error) {
func (db *sqlDB) GetShare(ctx context.Context, slug string) (*types.Share, error) {
res, err := db.db.QueryContext(ctx, "SELECT slug, objKey FROM shares WHERE slug = ?", slug)
if err != nil {
return nil, err
@@ -61,7 +69,7 @@ func (db *sqlLiteDB) GetShare(ctx context.Context, slug string) (*types.Share, e
return &share, nil
}
func (db *sqlLiteDB) CreateShare(ctx context.Context, share *types.Share) error {
func (db *sqlDB) CreateShare(ctx context.Context, share *types.Share) error {
_, err := db.db.ExecContext(ctx, "INSERT INTO shares (slug, objKey) VALUES (?, ?)", share.Slug, share.Key)
if err != nil {
return err
@@ -70,7 +78,7 @@ func (db *sqlLiteDB) CreateShare(ctx context.Context, share *types.Share) error
return nil
}
func (db *sqlLiteDB) DeleteShare(ctx context.Context, slug string) error {
func (db *sqlDB) DeleteShare(ctx context.Context, slug string) error {
_, err := db.db.ExecContext(ctx, "DELETE FROM shares WHERE slug = ?", slug)
if err != nil {
return err
@@ -78,7 +86,7 @@ func (db *sqlLiteDB) DeleteShare(ctx context.Context, slug string) error {
return nil
}
func (db *sqlLiteDB) GetAllShares(ctx context.Context) ([]*types.Share, error) {
func (db *sqlDB) GetAllShares(ctx context.Context) ([]*types.Share, error) {
res, err := db.db.QueryContext(ctx, "SELECT slug, objKey FROM shares")
if err != nil {
return nil, err
@@ -100,6 +108,6 @@ func (db *sqlLiteDB) GetAllShares(ctx context.Context) ([]*types.Share, error) {
return shares, nil
}
func (db *sqlLiteDB) Close() error {
func (db *sqlDB) Close() error {
return db.db.Close()
}

View File

@@ -1,5 +0,0 @@
CREATE TABLE `shares` (
slug VARCHAR(6) NOT NULL PRIMARY KEY,
objKey TEXT NOT NULL
);