Skip to content

Commit 530ae30

Browse files
authored
Merge pull request #3 from storage-lock/dev
refactor: 重构为基于sql storage实现
2 parents 4d1c59b + 09e677d commit 530ae30

File tree

12 files changed

+248
-233
lines changed

12 files changed

+248
-233
lines changed

.github/workflows/golang.yaml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: Go package
2+
3+
on: [ push ]
4+
5+
jobs:
6+
build:
7+
8+
runs-on: ubuntu-latest
9+
steps:
10+
# action文档:
11+
# https://github.com/marketplace/actions/postgresql-in-github-actions
12+
- uses: nnhy/[email protected]
13+
14+
- uses: actions/checkout@v3
15+
16+
- name: Set up Go
17+
uses: actions/setup-go@v4
18+
with:
19+
go-version: '1.19'
20+
21+
- name: Test
22+
run: go test -v ./...
23+
env:
24+
STORAGE_LOCK_POSTGRESQL_DSN: "host=127.0.0.1 user=postgres password=postgres port=5432 dbname=postgres sslmode=disable"

README.md

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Postgresql Storage
22

33
# 一、这是什么
4-
以PostgreSQL为存储引擎的[Storage](https://github.com/storage-lock/go-storage)实现,当前仓库为比较底层的存储层实现,你可以与[storage-lock](https://github.com/storage-lock/go-storage-lock)结合使用,或者这个项目[PostgreSQL-locks](https://github.com/storage-lock/go-postgresql-storage)里专门封装提供了一些PostgreSQL锁相关的更易用友好的API。
4+
以Postgresql为存储引擎的[Storage](https://github.com/storage-lock/go-storage)实现,当前仓库为比较底层的存储层实现,你可以与[storage-lock](https://github.com/storage-lock/go-storage-lock)结合使用,或者这个项目[PostgreSQL-locks](https://github.com/storage-lock/go-postgresql-storage)里专门封装提供了一些PostgreSQL锁相关的更易用友好的API。
55

66

77
# 二、安装依赖
@@ -12,9 +12,9 @@ go get -u github.com/storage-lock/go-postgresql-storage
1212

1313
# 三、API Examples
1414

15-
## 3.1 从DSN创建PostgreSQLStorage
15+
## 3.1 从DSN创建PostgresqlStorage
1616

17-
在Golang的世界中连接数据库最常见的就是DSN,下面的例子演示了如何从一个DSN创建PostgreSQLStorage
17+
在Golang的世界中连接数据库最常见的就是DSN,下面的例子演示了如何从一个DSN创建PostgresqlStorage
1818

1919
```go
2020
package main
@@ -30,24 +30,23 @@ func main() {
3030

3131
// 使用一个DSN形式的数据库连接字符串创建ConnectionManager
3232
testDsn := "host=127.0.0.1 user=postgres password=UeGqAm8CxYGldMDLoNNt port=5432 dbname=postgres sslmode=disable"
33-
connectionManager := postgresql_storage.NewPostgreSQLConnectionGetterFromDSN(testDsn)
33+
connectionManager := postgresql_storage.NewPostgresqlConnectionGetterFromDSN(testDsn)
3434

3535
// 然后从这个ConnectionManager创建PostgreSQL Storage
36-
options := postgresql_storage.NewPostgreSQLStorageOptions().SetConnectionManager(connectionManager)
37-
storage, err := postgresql_storage.NewPostgreSQLStorage(context.Background(), options)
36+
options := postgresql_storage.NewPostgresqlStorageOptions().SetConnectionManager(connectionManager)
37+
storage, err := postgresql_storage.NewPostgresqlStorage(context.Background(), options)
3838
if err != nil {
3939
panic(err)
4040
}
4141
fmt.Println(storage.GetName())
4242

4343
}
44-
4544
```
4645

4746

48-
## 3.2 从连接属性(ip、端口、用户名、密码等等)中创建PostgreSQLStorage
47+
## 3.2 从连接属性(ip、端口、用户名、密码等等)中创建PostgresqlStorage
4948

50-
或者你的配置文件中存放的并不是DSN,而是零散的几个连接属性,下面是一个创建PostgreSQLStorage的例子
49+
或者你的配置文件中存放的并不是DSN,而是零散的几个连接属性,下面是一个创建PostgresqlStorage的例子
5150

5251
```go
5352
package main
@@ -67,24 +66,23 @@ func main() {
6766
username := "postgres"
6867
passwd := "UeGqAm8CxYGldMDLoNNt"
6968
database := "postgres"
70-
connectionManager := postgresql_storage.NewPostgreSQLConnectionGetter(host, port, username, passwd, database)
69+
connectionManager := postgresql_storage.NewPostgresqlConnectionManager(host, port, username, passwd, database)
7170

7271
// 然后从这个ConnectionManager创建PostgreSQL Storage
73-
options := postgresql_storage.NewPostgreSQLStorageOptions().SetConnectionManager(connectionManager)
74-
storage, err := postgresql_storage.NewPostgreSQLStorage(context.Background(), options)
72+
options := postgresql_storage.NewPostgresqlStorageOptions().SetConnectionManager(connectionManager)
73+
storage, err := postgresql_storage.NewPostgresqlStorage(context.Background(), options)
7574
if err != nil {
7675
panic(err)
7776
}
7877
fmt.Println(storage.GetName())
7978

8079
}
81-
8280
```
8381

8482

85-
## 3.3 从sql.DB创建PostgreSQLStorage
83+
## 3.3 从sql.DB创建PostgresqlStorage
8684

87-
或者现在你已经有从其它渠道创建的能够连接到PostgreSQL的sql.DB,则也可以从这个*sql.DB创建PostgreSQLStorage
85+
或者现在你已经有从其它渠道创建的能够连接到Postgresql的sql.DB,则也可以从这个*sql.DB创建PostgresqlStorage
8886

8987
```go
9088
package main
@@ -109,14 +107,13 @@ func main() {
109107
}
110108
connectionManager := storage.NewFixedSqlDBConnectionManager(db)
111109

112-
// 然后从这个ConnectionManager创建PostgreSQL Storage
113-
options := postgresql_storage.NewPostgreSQLStorageOptions().SetConnectionManager(connectionManager)
114-
storage, err := postgresql_storage.NewPostgreSQLStorage(context.Background(), options)
110+
// 然后从这个ConnectionManager创建Postgresql Storage
111+
options := postgresql_storage.NewPostgresqlStorageOptions().SetConnectionManager(connectionManager)
112+
storage, err := postgresql_storage.NewPostgresqlStorage(context.Background(), options)
115113
if err != nil {
116114
panic(err)
117115
}
118116
fmt.Println(storage.GetName())
119117

120118
}
121-
122119
```

example/create_postgresql_storage_from_dsn/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ func main() {
1111

1212
// 使用一个DSN形式的数据库连接字符串创建ConnectionManager
1313
testDsn := "host=127.0.0.1 user=postgres password=UeGqAm8CxYGldMDLoNNt port=5432 dbname=postgres sslmode=disable"
14-
connectionManager := postgresql_storage.NewPostgreSQLConnectionGetterFromDSN(testDsn)
14+
connectionManager := postgresql_storage.NewPostgresqlConnectionGetterFromDSN(testDsn)
1515

1616
// 然后从这个ConnectionManager创建PostgreSQL Storage
17-
options := postgresql_storage.NewPostgreSQLStorageOptions().SetConnectionManager(connectionManager)
18-
storage, err := postgresql_storage.NewPostgreSQLStorage(context.Background(), options)
17+
options := postgresql_storage.NewPostgresqlStorageOptions().SetConnectionManager(connectionManager)
18+
storage, err := postgresql_storage.NewPostgresqlStorage(context.Background(), options)
1919
if err != nil {
2020
panic(err)
2121
}

example/create_postgresql_storage_from_service_properties/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ func main() {
1515
username := "postgres"
1616
passwd := "UeGqAm8CxYGldMDLoNNt"
1717
database := "postgres"
18-
connectionManager := postgresql_storage.NewPostgreSQLConnectionGetter(host, port, username, passwd, database)
18+
connectionManager := postgresql_storage.NewPostgresqlConnectionManager(host, port, username, passwd, database)
1919

2020
// 然后从这个ConnectionManager创建PostgreSQL Storage
21-
options := postgresql_storage.NewPostgreSQLStorageOptions().SetConnectionManager(connectionManager)
22-
storage, err := postgresql_storage.NewPostgreSQLStorage(context.Background(), options)
21+
options := postgresql_storage.NewPostgresqlStorageOptions().SetConnectionManager(connectionManager)
22+
storage, err := postgresql_storage.NewPostgresqlStorage(context.Background(), options)
2323
if err != nil {
2424
panic(err)
2525
}

example/create_postgresql_storage_from_sqldb/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ func main() {
2020
}
2121
connectionManager := storage.NewFixedSqlDBConnectionManager(db)
2222

23-
// 然后从这个ConnectionManager创建PostgreSQL Storage
24-
options := postgresql_storage.NewPostgreSQLStorageOptions().SetConnectionManager(connectionManager)
25-
storage, err := postgresql_storage.NewPostgreSQLStorage(context.Background(), options)
23+
// 然后从这个ConnectionManager创建Postgresql Storage
24+
options := postgresql_storage.NewPostgresqlStorageOptions().SetConnectionManager(connectionManager)
25+
storage, err := postgresql_storage.NewPostgresqlStorage(context.Background(), options)
2626
if err != nil {
2727
panic(err)
2828
}

go.mod

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,25 @@ module github.com/storage-lock/go-postgresql-storage
22

33
go 1.19
44

5+
require (
6+
github.com/lib/pq v1.10.9
7+
github.com/storage-lock/go-sql-based-storage v0.0.0-20230815152553-e6057f9c32e7
8+
github.com/storage-lock/go-storage v0.0.2
9+
github.com/storage-lock/go-storage-test-helper v0.0.2
10+
github.com/stretchr/testify v1.8.4
11+
)
12+
513
require (
614
github.com/davecgh/go-spew v1.1.1 // indirect
715
github.com/golang-infrastructure/go-goroutine-id v0.0.0-20230331174358-98b48a64077b // indirect
816
github.com/golang-infrastructure/go-iterator v0.0.0-20230524171120-56988a9b127c // indirect
917
github.com/golang-infrastructure/go-pointer v0.0.5 // indirect
1018
github.com/golang-infrastructure/go-reflect-utils v0.0.0-20221130143747-965ef2eb09c3 // indirect
1119
github.com/google/uuid v1.3.0 // indirect
12-
github.com/lib/pq v1.10.9 // indirect
1320
github.com/pmezard/go-difflib v1.0.0 // indirect
14-
github.com/storage-lock/go-events v0.0.0-20230805113632-ff4385b14030 // indirect
15-
github.com/storage-lock/go-storage v0.0.0-20230805070648-ce1105955864 // indirect
16-
github.com/storage-lock/go-storage-events v0.0.0-20230805074431-3c9e83cd7acb // indirect
17-
github.com/storage-lock/go-storage-lock v0.0.0-20230806063848-33d8f297b1c7 // indirect
18-
github.com/storage-lock/go-storage-test-helper v0.0.0-20230806122004-626135991a42 // indirect
19-
github.com/storage-lock/go-utils v0.0.0-20230804131655-6dbe431cdc1a // indirect
20-
github.com/stretchr/testify v1.8.4 // indirect
21+
github.com/storage-lock/go-events v0.0.3 // indirect
22+
github.com/storage-lock/go-storage-events v0.0.5 // indirect
23+
github.com/storage-lock/go-storage-lock v0.0.3 // indirect
24+
github.com/storage-lock/go-utils v0.0.2 // indirect
2125
gopkg.in/yaml.v3 v3.0.1 // indirect
2226
)

go.sum

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,30 @@ github.com/golang-infrastructure/go-reflect-utils v0.0.0-20221130143747-965ef2eb
1010
github.com/golang-infrastructure/go-reflect-utils v0.0.0-20221130143747-965ef2eb09c3/go.mod h1:zqXYxqOBa1mL2ilBK6PuH/Wb/Iego7en6XhiKWdZQHI=
1111
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
1212
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
13+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
14+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
1315
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
1416
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
1517
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1618
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
17-
github.com/storage-lock/go-events v0.0.0-20230805113632-ff4385b14030 h1:ET3kiNlDgAMW/8WKHUGcpb4GzeQSuGnW4xta2Ri/jgY=
18-
github.com/storage-lock/go-events v0.0.0-20230805113632-ff4385b14030/go.mod h1:LGZzW3f+td+b+i1pphoI9Dge0kDsguFza/YkXLADet0=
19-
github.com/storage-lock/go-storage v0.0.0-20230805070648-ce1105955864 h1:0lsu6eydV3zLSPdH4aYrQ3kJ2Tjllac8xzOhIQ5xud0=
20-
github.com/storage-lock/go-storage v0.0.0-20230805070648-ce1105955864/go.mod h1:zJZ0g3C6YyDLxX0T/+vxTiVVXZ449LNiFLNBs535a6E=
21-
github.com/storage-lock/go-storage-events v0.0.0-20230805074431-3c9e83cd7acb h1:GuAN/qYQi03ucN7QEUxZvo8Q+CAF5N53HoWAwUBGxmk=
22-
github.com/storage-lock/go-storage-events v0.0.0-20230805074431-3c9e83cd7acb/go.mod h1:6a+wteTwNtzVLBEUA8pECe2/2UtkK+wS0tjlnrEHp9k=
23-
github.com/storage-lock/go-storage-lock v0.0.0-20230806063848-33d8f297b1c7 h1:0i+jz+Dr2xON3CjM975qyzGMv75fJHqiyLRrtFDMt/w=
24-
github.com/storage-lock/go-storage-lock v0.0.0-20230806063848-33d8f297b1c7/go.mod h1:mtvTCnwMiwIHctDYkUNOIUKEJSJyIefPuPPUFLJtt0c=
25-
github.com/storage-lock/go-storage-test-helper v0.0.0-20230804163147-18f3bea87f4e h1:gFStx5vODBqW3RAJVp8CvQZqe2Ld+XSipP+jJYO8S3s=
26-
github.com/storage-lock/go-storage-test-helper v0.0.0-20230804163147-18f3bea87f4e/go.mod h1:WvnRuME9aKweoMiXAyYZ7XAqgMcZ5qyu7Rcx99g0HXI=
27-
github.com/storage-lock/go-storage-test-helper v0.0.0-20230806122004-626135991a42 h1:0CadWj5pz8NCqNLotgde5k9wozk0Oy2AH3Dk7HXiDZ0=
28-
github.com/storage-lock/go-storage-test-helper v0.0.0-20230806122004-626135991a42/go.mod h1:OMyrAjXA2WSdYFfjFPQMMa8tfMh9D5owQwdJeNwus30=
29-
github.com/storage-lock/go-utils v0.0.0-20230804131655-6dbe431cdc1a h1:6nSZOPYmogTELlp3ZUmzTbOupdrH7OomezDMKHnSAzA=
30-
github.com/storage-lock/go-utils v0.0.0-20230804131655-6dbe431cdc1a/go.mod h1:V0M52rFAkNt77MA3odRqwkl1xRkswsEcX/neFbgmhZY=
19+
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
20+
github.com/storage-lock/go-events v0.0.3 h1:QuNbaREe5m1WYC0meKs7SRJ5lY11a18jCJJS/mGD3SA=
21+
github.com/storage-lock/go-events v0.0.3/go.mod h1:DKwPgfuq8T8CyPLipH+0XHsNt8hEN4g9krUGfosU2oY=
22+
github.com/storage-lock/go-sql-based-storage v0.0.0-20230815152553-e6057f9c32e7 h1:WbtCSU+1NC4eO0QwehH4aQNLGBm9SUyvo39aMEYLFjE=
23+
github.com/storage-lock/go-sql-based-storage v0.0.0-20230815152553-e6057f9c32e7/go.mod h1:kKR7bTZ59cP7jK0tFhQ4yz2hD2XAL8A97Haql9NAygI=
24+
github.com/storage-lock/go-storage v0.0.2 h1:N5glUlrr1bbJ8ixYsPmOv+TuhIOObX/65+hrNMPWFDc=
25+
github.com/storage-lock/go-storage v0.0.2/go.mod h1:4vuU2nLdbmzj2UIBKpwB5lj8RI+GnPDZ4YHZ7QAcFHE=
26+
github.com/storage-lock/go-storage-events v0.0.5 h1:qUgB/VZIQNM0PIos67T9D1JIqu3Yiu3+YDpuHEal3FI=
27+
github.com/storage-lock/go-storage-events v0.0.5/go.mod h1:aBMVsOSr61+BLxO3QnU5FwKd5bdMGE4IpV0oDrAg8uQ=
28+
github.com/storage-lock/go-storage-lock v0.0.3 h1:eobL73fhfAjLKNk4msQNTYFcilrPKwySXY/5ympfeRU=
29+
github.com/storage-lock/go-storage-lock v0.0.3/go.mod h1:kzyjFhgPmiYMwLuuVoQfYxXPUOIGNETA+Z/wDnRc/iw=
30+
github.com/storage-lock/go-storage-test-helper v0.0.2 h1:6uipDmyxhncEJJSVwPiydKJrGVLoFARwbnkarDfhWSY=
31+
github.com/storage-lock/go-storage-test-helper v0.0.2/go.mod h1:JrQptW0yJZVqDsObE9vWSoyZxhQHdQDM8/eh4vz7Tls=
32+
github.com/storage-lock/go-utils v0.0.2 h1:pdacTOlD+AHqwWVmDqZLcjKF+7p8TjsmlvZ9bmmkIfE=
33+
github.com/storage-lock/go-utils v0.0.2/go.mod h1:tx8ATHL7yOC0Nyjpba7hJNk0+QNt2XEnMr8NcGm9Gak=
3134
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
3235
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
3336
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
37+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
3438
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
3539
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

postgresql_connection_manager.go

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import (
99
"github.com/storage-lock/go-storage"
1010
)
1111

12-
const DefaultPostgreSQLStorageSchema = "public"
12+
const DefaultPostgresqlStorageSchema = "public"
1313

14-
type PostgreSQLConnectionManager struct {
14+
type PostgresqlConnectionManager struct {
1515

1616
// 主机的名字
1717
Host string
@@ -37,18 +37,18 @@ type PostgreSQLConnectionManager struct {
3737
once sync.Once
3838
}
3939

40-
var _ storage.ConnectionManager[*sql.DB] = &PostgreSQLConnectionManager{}
40+
var _ storage.ConnectionManager[*sql.DB] = &PostgresqlConnectionManager{}
4141

42-
// NewPostgreSQLConnectionGetterFromDSN 从DSN创建PostgreSQL连接
43-
func NewPostgreSQLConnectionGetterFromDSN(dsn string) *PostgreSQLConnectionManager {
44-
return &PostgreSQLConnectionManager{
42+
// NewPostgresqlConnectionGetterFromDSN 从DSN创建PostgreSQL连接
43+
func NewPostgresqlConnectionGetterFromDSN(dsn string) *PostgresqlConnectionManager {
44+
return &PostgresqlConnectionManager{
4545
DSN: dsn,
4646
}
4747
}
4848

49-
// NewPostgreSQLConnectionGetter 从服务器属性创建数据库连接
50-
func NewPostgreSQLConnectionGetter(host string, port uint, user, passwd, databaseName string) *PostgreSQLConnectionManager {
51-
return &PostgreSQLConnectionManager{
49+
// NewPostgresqlConnectionManager 从服务器属性创建数据库连接
50+
func NewPostgresqlConnectionManager(host string, port uint, user, passwd, databaseName string) *PostgresqlConnectionManager {
51+
return &PostgresqlConnectionManager{
5252
Host: host,
5353
Port: port,
5454
User: user,
@@ -57,20 +57,32 @@ func NewPostgreSQLConnectionGetter(host string, port uint, user, passwd, databas
5757
}
5858
}
5959

60-
func (x *PostgreSQLConnectionManager) Name() string {
61-
return "postgresql-connection-manager"
60+
// NewPostgresqlConnectionGetterFromSqlDb 从一个已经存在的*sql.DB创建连接管理器
61+
func NewPostgresqlConnectionGetterFromSqlDb(db *sql.DB) *PostgresqlConnectionManager {
62+
return &PostgresqlConnectionManager{
63+
db: db,
64+
}
65+
}
66+
67+
const PostgreSQLConnectionManagerName = "postgresql-connection-manager"
68+
69+
func (x *PostgresqlConnectionManager) Name() string {
70+
return PostgreSQLConnectionManagerName
6271
}
6372

64-
func (x *PostgreSQLConnectionManager) GetDSN() string {
73+
func (x *PostgresqlConnectionManager) GetDSN() string {
6574
if x.DSN != "" {
6675
return x.DSN
6776
}
6877
return fmt.Sprintf("host=%s user=%s password=%s port=%d dbname=%s sslmode=disable", x.Host, x.User, x.Passwd, x.Port, x.DatabaseName)
6978
}
7079

7180
// Take 获取到数据库的连接
72-
func (x *PostgreSQLConnectionManager) Take(ctx context.Context) (*sql.DB, error) {
81+
func (x *PostgresqlConnectionManager) Take(ctx context.Context) (*sql.DB, error) {
7382
x.once.Do(func() {
83+
if x.err != nil {
84+
return
85+
}
7486
db, err := sql.Open("postgres", x.GetDSN())
7587
if err != nil {
7688
x.err = err
@@ -81,11 +93,11 @@ func (x *PostgreSQLConnectionManager) Take(ctx context.Context) (*sql.DB, error)
8193
return x.db, x.err
8294
}
8395

84-
func (x *PostgreSQLConnectionManager) Return(ctx context.Context, connection *sql.DB) error {
96+
func (x *PostgresqlConnectionManager) Return(ctx context.Context, connection *sql.DB) error {
8597
return nil
8698
}
8799

88-
func (x *PostgreSQLConnectionManager) Shutdown(ctx context.Context) error {
100+
func (x *PostgresqlConnectionManager) Shutdown(ctx context.Context) error {
89101
if x.db != nil {
90102
return x.db.Close()
91103
}

postgresql_sql_provider.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package postgresql_storage
2+
3+
import (
4+
"context"
5+
"fmt"
6+
sql_based_storage "github.com/storage-lock/go-sql-based-storage"
7+
"github.com/storage-lock/go-storage"
8+
)
9+
10+
// PostgresqlSqlProvider storage sql的postgresql方言
11+
type PostgresqlSqlProvider struct {
12+
*sql_based_storage.Sql97Provider
13+
}
14+
15+
var _ sql_based_storage.SqlProvider = &PostgresqlSqlProvider{}
16+
17+
func NewPostgresqlSqlProvider() *PostgresqlSqlProvider {
18+
return &PostgresqlSqlProvider{}
19+
}
20+
21+
func (x *PostgresqlSqlProvider) NowTimestampSql(ctx context.Context, tableFullName string) (string, []any) {
22+
return "SELECT CURRENT_TIMESTAMP", nil
23+
}
24+
25+
func (x *PostgresqlSqlProvider) SelectLockInformationJsonStringSql(ctx context.Context, tableFullName string, lockId string) (string, []any) {
26+
getLockSql := fmt.Sprintf("SELECT lock_information_json_string FROM %s WHERE lock_id = $1", tableFullName)
27+
return getLockSql, []any{lockId}
28+
}
29+
30+
func (x *PostgresqlSqlProvider) DeleteWithVersionSql(ctx context.Context, tableFullName string, lockId string, exceptedVersion storage.Version, lockInformation *storage.LockInformation) (string, []any) {
31+
deleteSql := fmt.Sprintf("DELETE FROM %s WHERE lock_id = $1 AND owner_id = $2 AND version = $3", tableFullName)
32+
return deleteSql, []any{lockId, lockInformation.OwnerId, exceptedVersion}
33+
}
34+
35+
func (x *PostgresqlSqlProvider) CreateWithVersionSql(ctx context.Context, tableFullName string, lockId string, version storage.Version, lockInformation *storage.LockInformation) (string, []any) {
36+
insertSql := fmt.Sprintf("INSERT INTO %s (lock_id, owner_id, version, lock_information_json_string) VALUES ($1, $2, $3, $4)", tableFullName)
37+
return insertSql, []any{lockId, lockInformation.OwnerId, version, lockInformation.ToJsonString()}
38+
}
39+
40+
func (x *PostgresqlSqlProvider) UpdateWithVersionSql(ctx context.Context, tableFullName string, lockId string, exceptedVersion, newVersion storage.Version, lockInformation *storage.LockInformation) (string, []any) {
41+
insertSql := fmt.Sprintf("UPDATE %s SET version = $1, lock_information_json_string = $2 WHERE lock_id = $3 AND owner_id = $4 AND version = $5", tableFullName)
42+
return insertSql, []any{newVersion, lockInformation.ToJsonString(), lockId, lockInformation.OwnerId, exceptedVersion}
43+
}

0 commit comments

Comments
 (0)