Browse Source

in progress

0x4a52466c696e74 1 year ago
parent
commit
ad21693a11
5 changed files with 53 additions and 26 deletions
  1. 6 6
      database/nosql/example_basic_test.go
  2. 16 14
      database/nosql/nosql.go
  3. 6 6
      database/nosql/z_test.go
  4. 8 0
      go.mod
  5. 17 0
      go.sum

+ 6 - 6
database/nosql/example_basic_test.go

@@ -1,13 +1,13 @@
 package nosql_test
 
 import (
-	"database/sql"
+	"context"
 	"fmt"
 	"io/ioutil"
 	"log"
 
 	"git.ali33.ru/fcg-xvii/go-tools/database/nosql"
-	_ "github.com/lib/pq"
+	"github.com/jackc/pgx/v5"
 )
 
 var (
@@ -41,15 +41,15 @@ func Example_basic() {
 	// example dbConn string: postgres://postgres:postgres@127.0.0.1/postgres?sslmode=disable&port=5432
 
 	// open the postgres database
-	db, err := sql.Open("postgres", dbConn)
+	db, err := pgx.Connect(context.Background(), dbConn)
 	if err != nil {
 		fmt.Println(err)
 		return
 	}
 
 	// setup open new database transaction method
-	openTX := func() (*sql.Tx, error) {
-		return db.Begin()
+	openTX := func(ctx context.Context) (pgx.Tx, error) {
+		return db.Begin(ctx)
 	}
 
 	// create api object
@@ -61,7 +61,7 @@ func Example_basic() {
 	}
 
 	// call the function on database side
-	result, err := api.Call("public.arr_count", data)
+	result, err := api.Call(context.Background(), "public.arr_count", data)
 	if err == nil {
 		fmt.Println(err)
 		return

+ 16 - 14
database/nosql/nosql.go

@@ -1,13 +1,15 @@
 package nosql
 
 import (
-	"database/sql"
+	"context"
 	"encoding/json"
 	"fmt"
+
+	"github.com/jackc/pgx/v5"
 )
 
 // OpenTXMethod is callback functon to open transaction in NoSQL object
-type OpenTXMethod func() (*sql.Tx, error)
+type OpenTXMethod func(context.Context) (pgx.Tx, error)
 
 // NoSQL object
 type NoSQL struct {
@@ -20,35 +22,35 @@ func New(openMethod OpenTXMethod) *NoSQL {
 }
 
 // CallJSON accepts raw json bytes and returns result raw json bytes
-func (_self *NoSQL) CallJSON(function string, rawJSON []byte) (resRawJSON []byte, err error) {
+func (_self *NoSQL) CallJSON(ctx context.Context, function string, rawJSON []byte) (resRawJSON []byte, err error) {
 	// open tx
-	var tx *sql.Tx
-	if tx, err = _self.openMethod(); err == nil {
+	var tx pgx.Tx
+	if tx, err = _self.openMethod(ctx); err == nil {
 		// execute query and scan result
-		row := tx.QueryRow(fmt.Sprintf("select * from %v($1)", function), rawJSON)
+		row := tx.QueryRow(context.Background(), fmt.Sprintf("select * from %v($1)", function), rawJSON)
 		if err = row.Scan(&resRawJSON); err != nil {
-			tx.Rollback()
+			tx.Rollback(context.Background())
 			return
 		}
-		err = tx.Commit()
+		err = tx.Commit(context.Background())
 	}
 	return
 }
 
 // CallObjParam accepts interface{} object and returns result raw json bytes
-func (_self *NoSQL) CallObjParam(function string, data interface{}) (resRawJSON []byte, err error) {
+func (_self *NoSQL) CallObjParam(ctx context.Context, function string, data interface{}) (resRawJSON []byte, err error) {
 	// convert incoming object to raw json
 	var raw []byte
 	if raw, err = json.Marshal(data); err != nil {
 		return
 	}
-	return _self.CallJSON(function, raw)
+	return _self.CallJSON(ctx, function, raw)
 }
 
 // Call accepts interface{} object and returns result interface{}
-func (_self *NoSQL) Call(function string, data interface{}) (res interface{}, err error) {
+func (_self *NoSQL) Call(ctx context.Context, function string, data interface{}) (res interface{}, err error) {
 	var resRawJSON []byte
-	if resRawJSON, err = _self.CallObjParam(function, data); err == nil {
+	if resRawJSON, err = _self.CallObjParam(ctx, function, data); err == nil {
 		// convert raw result data to obj
 		if len(resRawJSON) > 0 {
 			err = json.Unmarshal(resRawJSON, &res)
@@ -57,9 +59,9 @@ func (_self *NoSQL) Call(function string, data interface{}) (res interface{}, er
 	return
 }
 
-func (_self *NoSQL) CallObject(function string, data interface{}, resultObject interface{}) (err error) {
+func (_self *NoSQL) CallObject(ctx context.Context, function string, data interface{}, resultObject interface{}) (err error) {
 	var resRawJSON []byte
-	if resRawJSON, err = _self.CallObjParam(function, data); err == nil {
+	if resRawJSON, err = _self.CallObjParam(ctx, function, data); err == nil {
 		// convert raw result data to result object
 		err = json.Unmarshal(resRawJSON, resultObject)
 	}

+ 6 - 6
database/nosql/z_test.go

@@ -1,11 +1,11 @@
 package nosql
 
 import (
-	"database/sql"
+	"context"
 	"io/ioutil"
 	"testing"
 
-	_ "github.com/lib/pq"
+	"github.com/jackc/pgx/v5"
 )
 
 var (
@@ -19,11 +19,11 @@ func init() {
 }
 
 func TestNoSQL(t *testing.T) {
-	if db, err := sql.Open("postgres", dbConn); err == nil {
-		ex := New(func() (*sql.Tx, error) {
-			return db.Begin()
+	if db, err := pgx.Connect(context.Background(), dbConn); err == nil {
+		ex := New(func(ctx context.Context) (pgx.Tx, error) {
+			return db.Begin(ctx)
 		})
-		res, err := ex.Call("public.arr_count", map[string]interface{}{
+		res, err := ex.Call(context.Background(), "public.arr_count", map[string]interface{}{
 			"input": []int{0, 1, 2},
 		})
 		t.Log(res, err)

+ 8 - 0
go.mod

@@ -6,3 +6,11 @@ require (
 	github.com/fcg-xvii/go-tools v0.0.0-20220316201232-6d6629b9d1e7
 	github.com/lib/pq v1.10.4
 )
+
+require (
+	github.com/jackc/pgpassfile v1.0.0 // indirect
+	github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect
+	github.com/jackc/pgx/v5 v5.0.0-beta.3 // indirect
+	golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect
+	golang.org/x/text v0.3.7 // indirect
+)

+ 17 - 0
go.sum

@@ -1,5 +1,22 @@
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/fcg-xvii/go-tools v0.0.0-20220316201232-6d6629b9d1e7 h1:y9HN4JU8mMzR6KfCRQVO7V5CUJqrCe55fDYreyur7YU=
 github.com/fcg-xvii/go-tools v0.0.0-20220316201232-6d6629b9d1e7/go.mod h1:iqeLyAqB+RN0zxQTNk7yWI9dzy09Oc6yUk1m1vkdws0=
+github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
+github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
+github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg=
+github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
+github.com/jackc/pgx/v5 v5.0.0-beta.3 h1:/fvyxKQQVrEgD6elYv2Fa0L16ytVn8Ll18k1XQ/yaGw=
+github.com/jackc/pgx/v5 v5.0.0-beta.3/go.mod h1:QJ8xU09HYKHOccHeisi/6sXeRG4dd3AxuV7cmKET4WA=
 github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
 github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c=
+golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=