2025-01-17 15:54:48 +05:30
|
|
|
package sqlstoretest
|
|
|
|
|
|
|
|
|
|
import (
|
2025-03-05 18:50:48 +05:30
|
|
|
"context"
|
2025-01-17 15:54:48 +05:30
|
|
|
"database/sql"
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
"github.com/DATA-DOG/go-sqlmock"
|
2025-04-27 16:38:34 +05:30
|
|
|
"github.com/SigNoz/signoz/pkg/errors"
|
2025-03-20 21:01:41 +05:30
|
|
|
"github.com/SigNoz/signoz/pkg/sqlstore"
|
2025-01-17 15:54:48 +05:30
|
|
|
"github.com/uptrace/bun"
|
2025-06-20 00:34:54 +05:30
|
|
|
"github.com/uptrace/bun/dialect/pgdialect"
|
2025-01-17 15:54:48 +05:30
|
|
|
"github.com/uptrace/bun/dialect/sqlitedialect"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var _ sqlstore.SQLStore = (*Provider)(nil)
|
|
|
|
|
|
|
|
|
|
type Provider struct {
|
2025-03-06 15:39:45 +05:30
|
|
|
db *sql.DB
|
|
|
|
|
mock sqlmock.Sqlmock
|
|
|
|
|
bunDB *bun.DB
|
2025-03-25 04:05:40 +05:30
|
|
|
dialect *dialect
|
2025-01-17 15:54:48 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func New(config sqlstore.Config, matcher sqlmock.QueryMatcher) *Provider {
|
|
|
|
|
db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(matcher))
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var bunDB *bun.DB
|
|
|
|
|
|
|
|
|
|
if config.Provider == "sqlite" {
|
|
|
|
|
bunDB = bun.NewDB(db, sqlitedialect.New())
|
2025-06-20 00:34:54 +05:30
|
|
|
} else if config.Provider == "postgres" {
|
|
|
|
|
bunDB = bun.NewDB(db, pgdialect.New())
|
2025-01-17 15:54:48 +05:30
|
|
|
} else {
|
2025-06-20 00:34:54 +05:30
|
|
|
panic(fmt.Errorf("provider %q is not supported", config.Provider))
|
2025-01-17 15:54:48 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &Provider{
|
2025-03-06 15:39:45 +05:30
|
|
|
db: db,
|
|
|
|
|
mock: mock,
|
|
|
|
|
bunDB: bunDB,
|
2025-03-25 04:05:40 +05:30
|
|
|
dialect: new(dialect),
|
2025-01-17 15:54:48 +05:30
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (provider *Provider) BunDB() *bun.DB {
|
|
|
|
|
return provider.bunDB
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (provider *Provider) SQLDB() *sql.DB {
|
|
|
|
|
return provider.db
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (provider *Provider) Mock() sqlmock.Sqlmock {
|
|
|
|
|
return provider.mock
|
|
|
|
|
}
|
2025-03-05 18:50:48 +05:30
|
|
|
|
2025-03-06 15:39:45 +05:30
|
|
|
func (provider *Provider) Dialect() sqlstore.SQLDialect {
|
|
|
|
|
return provider.dialect
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-05 18:50:48 +05:30
|
|
|
func (provider *Provider) BunDBCtx(ctx context.Context) bun.IDB {
|
|
|
|
|
return provider.bunDB
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (provider *Provider) RunInTxCtx(ctx context.Context, opts *sql.TxOptions, cb func(ctx context.Context) error) error {
|
|
|
|
|
return cb(ctx)
|
|
|
|
|
}
|
2025-04-27 16:38:34 +05:30
|
|
|
|
|
|
|
|
func (provider *Provider) WrapNotFoundErrf(err error, code errors.Code, format string, args ...any) error {
|
|
|
|
|
return fmt.Errorf(format, args...)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (provider *Provider) WrapAlreadyExistsErrf(err error, code errors.Code, format string, args ...any) error {
|
|
|
|
|
return fmt.Errorf(format, args...)
|
|
|
|
|
}
|