Skip to content

Commit

Permalink
Introduce Close() func to sql database interface
Browse files Browse the repository at this point in the history
Signed-off-by: Masudur Rahman <masudjuly02@gmail.com>
  • Loading branch information
masudur-rahman committed Feb 26, 2024
1 parent e2aff88 commit 0259c9d
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 72 deletions.
2 changes: 2 additions & 0 deletions sql/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,6 @@ type Database interface {
Exec(query string, args ...any) (sql.Result, error)

Sync(...any) error

Close() error
}
4 changes: 4 additions & 0 deletions sql/postgres/postgres.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,10 @@ func (p Postgres) Sync(tables ...any) error {
return nil
}

func (p Postgres) Close() error {
return p.conn.Close()
}

func (pg Postgres) cleanup() {
pg.statement = lib.Statement{}
}
131 changes: 59 additions & 72 deletions sql/sqlite/sqlite.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,76 +16,59 @@ type SQLite struct {
statement lib.Statement
}

func GetSQLiteConnection() (*sql.Conn, error) {
db, err := sql.Open("sqlite3", "expense-tracker.db")
if err != nil {
return nil, err
}

conn, err := db.Conn(context.Background())
if err != nil {
return nil, err
}

if err = conn.PingContext(context.Background()); err != nil {
return nil, err
}
return conn, nil
}

func NewSQLite(ctx context.Context, conn *sql.Conn) SQLite {
return SQLite{ctx: ctx, conn: conn}
}

func (pg SQLite) Table(name string) isql.Database {
pg.statement = pg.statement.Table(name)
return pg
func (sq SQLite) Table(name string) isql.Database {
sq.statement = sq.statement.Table(name)
return sq
}

func (pg SQLite) ID(id any) isql.Database {
pg.statement = pg.statement.ID(id)
return pg
func (sq SQLite) ID(id any) isql.Database {
sq.statement = sq.statement.ID(id)
return sq
}

func (pg SQLite) In(col string, values ...any) isql.Database {
pg.statement = pg.statement.In(col, values...)
return pg
func (sq SQLite) In(col string, values ...any) isql.Database {
sq.statement = sq.statement.In(col, values...)
return sq
}

func (pg SQLite) Where(cond string, args ...any) isql.Database {
pg.statement = pg.statement.Where(cond, args...)
return pg
func (sq SQLite) Where(cond string, args ...any) isql.Database {
sq.statement = sq.statement.Where(cond, args...)
return sq
}

func (pg SQLite) Columns(cols ...string) isql.Database {
pg.statement = pg.statement.Columns(cols...)
return pg
func (sq SQLite) Columns(cols ...string) isql.Database {
sq.statement = sq.statement.Columns(cols...)
return sq
}

func (pg SQLite) AllCols() isql.Database {
pg.statement = pg.statement.AllCols()
return pg
func (sq SQLite) AllCols() isql.Database {
sq.statement = sq.statement.AllCols()
return sq
}

func (pg SQLite) MustCols(cols ...string) isql.Database {
pg.statement = pg.statement.MustCols(cols...)
return pg
func (sq SQLite) MustCols(cols ...string) isql.Database {
sq.statement = sq.statement.MustCols(cols...)
return sq
}

func (pg SQLite) ShowSQL(showSQL bool) isql.Database {
pg.statement = pg.statement.ShowSQL(showSQL)
return pg
func (sq SQLite) ShowSQL(showSQL bool) isql.Database {
sq.statement = sq.statement.ShowSQL(showSQL)
return sq
}

func (pg SQLite) FindOne(document any, filter ...any) (bool, error) {
pg.statement = pg.statement.GenerateWhereClause(filter...)
func (sq SQLite) FindOne(document any, filter ...any) (bool, error) {
sq.statement = sq.statement.GenerateWhereClause(filter...)

if err := pg.statement.CheckWhereClauseNotEmpty(); err != nil {
if err := sq.statement.CheckWhereClauseNotEmpty(); err != nil {
return false, err
}

query := pg.statement.GenerateReadQuery()
err := pg.statement.ExecuteReadQuery(pg.ctx, pg.conn, query, document)
query := sq.statement.GenerateReadQuery()
err := sq.statement.ExecuteReadQuery(sq.ctx, sq.conn, query, document)
if err == nil {
return true, nil
}
Expand All @@ -96,23 +79,23 @@ func (pg SQLite) FindOne(document any, filter ...any) (bool, error) {
return false, err
}

func (pg SQLite) FindMany(documents any, filter ...any) error {
pg.statement = pg.statement.GenerateWhereClause(filter...)
func (sq SQLite) FindMany(documents any, filter ...any) error {
sq.statement = sq.statement.GenerateWhereClause(filter...)

query := pg.statement.GenerateReadQuery()
return pg.statement.ExecuteReadQuery(pg.ctx, pg.conn, query, documents)
query := sq.statement.GenerateReadQuery()
return sq.statement.ExecuteReadQuery(sq.ctx, sq.conn, query, documents)
}

func (pg SQLite) InsertOne(document any) (id any, err error) {
query := pg.statement.GenerateInsertQuery(document)
return pg.statement.ExecuteInsertQuery(pg.ctx, pg.conn, query)
func (sq SQLite) InsertOne(document any) (id any, err error) {
query := sq.statement.GenerateInsertQuery(document)
return sq.statement.ExecuteInsertQuery(sq.ctx, sq.conn, query)
}

func (pg SQLite) InsertMany(documents []any) ([]any, error) {
func (sq SQLite) InsertMany(documents []any) ([]any, error) {
var ids []any
for _, doc := range documents {
query := pg.statement.GenerateInsertQuery(doc)
id, err := pg.statement.ExecuteInsertQuery(pg.ctx, pg.conn, query)
query := sq.statement.GenerateInsertQuery(doc)
id, err := sq.statement.ExecuteInsertQuery(sq.ctx, sq.conn, query)
if err != nil {
return nil, err
}
Expand All @@ -122,34 +105,34 @@ func (pg SQLite) InsertMany(documents []any) ([]any, error) {
return ids, nil
}

func (pg SQLite) UpdateOne(document any) error {
pg.statement = pg.statement.GenerateWhereClause()
if err := pg.statement.CheckWhereClauseNotEmpty(); err != nil {
func (sq SQLite) UpdateOne(document any) error {
sq.statement = sq.statement.GenerateWhereClause()
if err := sq.statement.CheckWhereClauseNotEmpty(); err != nil {
return err
}

query := pg.statement.GenerateUpdateQuery(document)
_, err := pg.statement.ExecuteWriteQuery(pg.ctx, pg.conn, query)
query := sq.statement.GenerateUpdateQuery(document)
_, err := sq.statement.ExecuteWriteQuery(sq.ctx, sq.conn, query)
return err
}

func (pg SQLite) DeleteOne(filter ...any) error {
pg.statement = pg.statement.GenerateWhereClause(filter...)
if err := pg.statement.CheckWhereClauseNotEmpty(); err != nil {
func (sq SQLite) DeleteOne(filter ...any) error {
sq.statement = sq.statement.GenerateWhereClause(filter...)
if err := sq.statement.CheckWhereClauseNotEmpty(); err != nil {
return err
}

query := pg.statement.GenerateDeleteQuery()
_, err := pg.statement.ExecuteWriteQuery(pg.ctx, pg.conn, query)
query := sq.statement.GenerateDeleteQuery()
_, err := sq.statement.ExecuteWriteQuery(sq.ctx, sq.conn, query)
return err
}

func (pg SQLite) Query(query string, args ...any) (*sql.Rows, error) {
return pg.conn.QueryContext(pg.ctx, query, args...)
func (sq SQLite) Query(query string, args ...any) (*sql.Rows, error) {
return sq.conn.QueryContext(sq.ctx, query, args...)
}

func (pg SQLite) Exec(query string, args ...any) (sql.Result, error) {
return pg.conn.ExecContext(pg.ctx, query, args...)
func (sq SQLite) Exec(query string, args ...any) (sql.Result, error) {
return sq.conn.ExecContext(sq.ctx, query, args...)
}

func (p SQLite) Sync(tables ...any) error {
Expand All @@ -163,6 +146,10 @@ func (p SQLite) Sync(tables ...any) error {
return nil
}

func (pg SQLite) cleanup() {
pg.statement = lib.Statement{}
func (sq SQLite) Close() error {
return sq.conn.Close()
}

func (sq SQLite) cleanup() {
sq.statement = lib.Statement{}
}
2 changes: 2 additions & 0 deletions sql/supabase/supabase.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,3 +156,5 @@ func (s Supabase) Sync(a ...any) error {
//TODO implement me
panic("implement me")
}

func (s Supabase) Close() error { return nil }

0 comments on commit 0259c9d

Please sign in to comment.