From 0259c9d5327af0164835ac5dfa93c74091594072 Mon Sep 17 00:00:00 2001 From: Masudur Rahman Date: Mon, 26 Feb 2024 15:31:20 +0600 Subject: [PATCH] Introduce Close() func to sql database interface Signed-off-by: Masudur Rahman --- sql/database.go | 2 + sql/postgres/postgres.go | 4 ++ sql/sqlite/sqlite.go | 131 ++++++++++++++++++--------------------- sql/supabase/supabase.go | 2 + 4 files changed, 67 insertions(+), 72 deletions(-) diff --git a/sql/database.go b/sql/database.go index acea4a5..b1158dc 100644 --- a/sql/database.go +++ b/sql/database.go @@ -29,4 +29,6 @@ type Database interface { Exec(query string, args ...any) (sql.Result, error) Sync(...any) error + + Close() error } diff --git a/sql/postgres/postgres.go b/sql/postgres/postgres.go index 7d0d471..3012163 100644 --- a/sql/postgres/postgres.go +++ b/sql/postgres/postgres.go @@ -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{} } diff --git a/sql/sqlite/sqlite.go b/sql/sqlite/sqlite.go index 534deec..83e1bea 100644 --- a/sql/sqlite/sqlite.go +++ b/sql/sqlite/sqlite.go @@ -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 } @@ -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 } @@ -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 { @@ -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{} } diff --git a/sql/supabase/supabase.go b/sql/supabase/supabase.go index 17876bf..971e3d6 100644 --- a/sql/supabase/supabase.go +++ b/sql/supabase/supabase.go @@ -156,3 +156,5 @@ func (s Supabase) Sync(a ...any) error { //TODO implement me panic("implement me") } + +func (s Supabase) Close() error { return nil }