Skip to content

Commit dd4ed73

Browse files
committed
chore: remove the backend package
1 parent d3fe254 commit dd4ed73

File tree

15 files changed

+64
-84
lines changed

15 files changed

+64
-84
lines changed

.github/workflows/spanner-lib-tests.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
- name: Checkout code
3939
uses: actions/checkout@v4
4040
- name: Build shared lib
41-
working-directory: spannerlib
41+
working-directory: spannerlib/shared
4242
run: go build -o spannerlib.so -buildmode=c-shared shared_lib.go
4343

4444
test-dotnet-ubuntu:
@@ -51,21 +51,21 @@ jobs:
5151
- name: Checkout code
5252
uses: actions/checkout@v4
5353
- name: Build shared lib
54-
working-directory: spannerlib
54+
working-directory: spannerlib/shared
5555
run: go build -o spannerlib.so -buildmode=c-shared shared_lib.go
5656
- name: Copy lib to dotnet folder
5757
working-directory: spannerlib
5858
run: |
5959
mkdir -p dotnet-spannerlib/Google.Cloud.SpannerLib.Native/libraries/any
60-
cp spannerlib.so dotnet-spannerlib/Google.Cloud.SpannerLib.Native/libraries/any/spannerlib.so
60+
cp shared/spannerlib.so dotnet-spannerlib/Google.Cloud.SpannerLib.Native/libraries/any/spannerlib.so
6161
- name: Build gRPC server
62-
working-directory: spannerlib
62+
working-directory: spannerlib/grpc-server
6363
run: go build grpc_server.go
6464
- name: Copy gRPC server to dotnet folder
6565
working-directory: spannerlib
6666
run: |
6767
mkdir -p dotnet-spannerlib/Google.Cloud.SpannerLib.Grpc/binaries/any
68-
cp grpc_server dotnet-spannerlib/Google.Cloud.SpannerLib.Grpc/binaries/any/grpc_server
68+
cp grpc-server/grpc_server dotnet-spannerlib/Google.Cloud.SpannerLib.Grpc/binaries/any/grpc_server
6969
- name: Install dotnet
7070
uses: actions/setup-dotnet@v4
7171
with:

spannerlib/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Shared Library (Internal)
2+
3+
__This module can receive breaking changes without prior notice.__
4+
5+
This is an internal module that is used to expose the features in the database/sql driver
6+
to drivers in other programming languages.

spannerlib/api/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Shared Library (Internal)
2+
3+
__This module can receive breaking changes without prior notice.__
4+
5+
This is the common internal API for the various external APIs for exposing the
6+
features in the database/sql driver to drivers in other programming languages.

spannerlib/api/connection.go

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"google.golang.org/grpc/codes"
1717
"google.golang.org/grpc/status"
1818
"google.golang.org/protobuf/types/known/timestamppb"
19-
"spannerlib/backend"
2019
)
2120

2221
func CloseConnection(poolId, connId int64) error {
@@ -66,7 +65,7 @@ type Connection struct {
6665
transactions *sync.Map
6766
transactionsIdx atomic.Int64
6867

69-
backend *backend.SpannerConnection
68+
backend *sql.Conn
7069
}
7170

7271
type queryExecutor interface {
@@ -77,12 +76,12 @@ type queryExecutor interface {
7776
func (conn *Connection) close() error {
7877
conn.results.Range(func(key, value interface{}) bool {
7978
res := value.(*rows)
80-
res.Close()
79+
_ = res.Close()
8180
return true
8281
})
8382
conn.transactions.Range(func(key, value interface{}) bool {
8483
res := value.(*transaction)
85-
res.Close()
84+
_ = res.Close()
8685
return true
8786
})
8887
err := conn.backend.Close()
@@ -103,7 +102,7 @@ func (conn *Connection) apply(mutation *spannerpb.BatchWriteRequest_MutationGrou
103102
mutations = append(mutations, spannerMutation)
104103
}
105104
var commitTimestamp time.Time
106-
if err := conn.backend.Conn.Raw(func(driverConn any) (err error) {
105+
if err := conn.backend.Raw(func(driverConn any) (err error) {
107106
spannerConn, _ := driverConn.(spannerdriver.SpannerConn)
108107
commitTimestamp, err = spannerConn.Apply(ctx, mutations)
109108
return err
@@ -121,12 +120,12 @@ func (conn *Connection) BeginTransaction(txOpts *spannerpb.TransactionOptions) (
121120
var err error
122121
if txOpts.GetReadOnly() != nil {
123122
tx, err = spannerdriver.BeginReadOnlyTransactionOnConn(
124-
context.Background(), conn.backend.Conn, convertToReadOnlyOpts(txOpts))
123+
context.Background(), conn.backend, convertToReadOnlyOpts(txOpts))
125124
} else if txOpts.GetPartitionedDml() != nil {
126125
err = spanner.ToSpannerError(status.Error(codes.InvalidArgument, "transaction type not supported"))
127126
} else {
128127
tx, err = spannerdriver.BeginReadWriteTransactionOnConn(
129-
context.Background(), conn.backend.Conn, convertToReadWriteTransactionOptions(txOpts))
128+
context.Background(), conn.backend, convertToReadWriteTransactionOptions(txOpts))
130129
}
131130
if err != nil {
132131
return 0, err
@@ -187,11 +186,11 @@ func convertIsolationLevel(level spannerpb.TransactionOptions_IsolationLevel) sq
187186
}
188187

189188
func (conn *Connection) Execute(statement *spannerpb.ExecuteSqlRequest) (int64, error) {
190-
return execute(conn, conn.backend.Conn, statement)
189+
return execute(conn, conn.backend, statement)
191190
}
192191

193192
func (conn *Connection) ExecuteBatch(statements []*spannerpb.ExecuteBatchDmlRequest_Statement) (*spannerpb.ExecuteBatchDmlResponse, error) {
194-
return executeBatch(conn, conn.backend.Conn, statements)
193+
return executeBatch(conn, conn.backend, statements)
195194
}
196195

197196
func execute(conn *Connection, executor queryExecutor, statement *spannerpb.ExecuteSqlRequest) (int64, error) {
@@ -242,7 +241,7 @@ func executeBatch(conn *Connection, executor queryExecutor, statements []*spanne
242241
}
243242

244243
func executeBatchDdl(conn *Connection, executor queryExecutor, statements []*spannerpb.ExecuteBatchDmlRequest_Statement) (*spannerpb.ExecuteBatchDmlResponse, error) {
245-
if err := conn.backend.Conn.Raw(func(driverConn any) error {
244+
if err := conn.backend.Raw(func(driverConn any) error {
246245
spannerConn, _ := driverConn.(spannerdriver.SpannerConn)
247246
return spannerConn.StartBatchDDL()
248247
}); err != nil {
@@ -255,7 +254,7 @@ func executeBatchDdl(conn *Connection, executor queryExecutor, statements []*spa
255254
}
256255
}
257256
// TODO: Add support for getting the actual Batch DDL response.
258-
if err := conn.backend.Conn.Raw(func(driverConn any) (err error) {
257+
if err := conn.backend.Raw(func(driverConn any) (err error) {
259258
spannerConn, _ := driverConn.(spannerdriver.SpannerConn)
260259
return spannerConn.RunBatch(context.Background())
261260
}); err != nil {
@@ -271,7 +270,7 @@ func executeBatchDdl(conn *Connection, executor queryExecutor, statements []*spa
271270
}
272271

273272
func executeBatchDml(conn *Connection, executor queryExecutor, statements []*spannerpb.ExecuteBatchDmlRequest_Statement) (*spannerpb.ExecuteBatchDmlResponse, error) {
274-
if err := conn.backend.Conn.Raw(func(driverConn any) error {
273+
if err := conn.backend.Raw(func(driverConn any) error {
275274
spannerConn, _ := driverConn.(spannerdriver.SpannerConn)
276275
return spannerConn.StartBatchDML()
277276
}); err != nil {
@@ -290,7 +289,7 @@ func executeBatchDml(conn *Connection, executor queryExecutor, statements []*spa
290289
}
291290
}
292291
var spannerResult spannerdriver.SpannerResult
293-
if err := conn.backend.Conn.Raw(func(driverConn any) (err error) {
292+
if err := conn.backend.Raw(func(driverConn any) (err error) {
294293
spannerConn, _ := driverConn.(spannerdriver.SpannerConn)
295294
spannerResult, err = spannerConn.RunDmlBatch(context.Background())
296295
return err
@@ -348,21 +347,21 @@ func determineBatchType(conn *Connection, statements []*spannerpb.ExecuteBatchDm
348347
return spannerdriver.BatchTypeUnknown, status.Errorf(codes.InvalidArgument, "cannot determine type of an empty batch")
349348
}
350349
batchType := spannerdriver.BatchTypeUnknown
351-
if err := conn.backend.Conn.Raw(func(driverConn any) error {
350+
if err := conn.backend.Raw(func(driverConn any) error {
352351
spannerConn, _ := driverConn.(spannerdriver.SpannerConn)
353352
firstStatementType := spannerConn.DetectStatementType(statements[0].Sql)
354353
if firstStatementType == parser.StatementTypeDml {
355354
batchType = spannerdriver.BatchTypeDml
356355
} else if firstStatementType == parser.StatementTypeDdl {
357356
batchType = spannerdriver.BatchTypeDdl
358357
} else {
359-
return status.Errorf(codes.InvalidArgument, "unsupported statement type for batching: %s", firstStatementType)
358+
return status.Errorf(codes.InvalidArgument, "unsupported statement type for batching: %v", firstStatementType)
360359
}
361360
for i, statement := range statements {
362361
if i > 0 {
363362
tp := spannerConn.DetectStatementType(statement.Sql)
364363
if tp != firstStatementType {
365-
return status.Errorf(codes.InvalidArgument, "Batches may not contain different types of statements. The first statement is of type %s. The statement on position %d is of type %s.", firstStatementType, i, tp)
364+
return status.Errorf(codes.InvalidArgument, "Batches may not contain different types of statements. The first statement is of type %v. The statement on position %d is of type %v.", firstStatementType, i, tp)
366365
}
367366
}
368367
}

spannerlib/api/pool.go

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,38 @@ package api
22

33
import (
44
"context"
5+
"database/sql"
56
"fmt"
67
"sync"
78
"sync/atomic"
89

9-
"spannerlib/backend"
10+
spannerdriver "github.com/googleapis/go-sql-spanner"
1011
)
1112

1213
var pools = sync.Map{}
1314
var poolsIdx = atomic.Int64{}
1415

1516
// Pool is the equivalent of a sql.DB. It contains a pool of connections to the same database.
1617
type Pool struct {
17-
backend *backend.Pool
18+
db *sql.DB
1819
connections *sync.Map
1920
connectionsIdx atomic.Int64
2021
}
2122

2223
func CreatePool(dsn string) (int64, error) {
23-
backendPool, err := backend.CreatePool(dsn)
24+
config, err := spannerdriver.ExtractConnectorConfig(dsn)
2425
if err != nil {
2526
return 0, err
2627
}
28+
connector, err := spannerdriver.CreateConnector(config)
29+
if err != nil {
30+
return 0, err
31+
}
32+
db := sql.OpenDB(connector)
33+
2734
id := poolsIdx.Add(1)
2835
pool := &Pool{
29-
backend: backendPool,
36+
db: db,
3037
connections: &sync.Map{},
3138
}
3239
pools.Store(id, pool)
@@ -41,10 +48,10 @@ func ClosePool(id int64) error {
4148
pool := p.(*Pool)
4249
pool.connections.Range(func(key, value interface{}) bool {
4350
conn := value.(*Connection)
44-
conn.close()
51+
_ = conn.close()
4552
return true
4653
})
47-
if err := pool.backend.Close(); err != nil {
54+
if err := pool.db.Close(); err != nil {
4855
return err
4956
}
5057
return nil
@@ -56,13 +63,13 @@ func CreateConnection(poolId int64) (int64, error) {
5663
return 0, fmt.Errorf("pool %v not found", poolId)
5764
}
5865
pool := p.(*Pool)
59-
sqlConn, err := pool.backend.Conn(context.Background())
66+
sqlConn, err := pool.db.Conn(context.Background())
6067
if err != nil {
6168
return 0, err
6269
}
6370
id := poolsIdx.Add(1)
6471
conn := &Connection{
65-
backend: &backend.SpannerConnection{Conn: sqlConn},
72+
backend: sqlConn,
6673
results: &sync.Map{},
6774
transactions: &sync.Map{},
6875
}

spannerlib/api/transaction.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func (tx *transaction) bufferWrite(mutation *spannerpb.BatchWriteRequest_Mutatio
7878
}
7979
mutations = append(mutations, spannerMutation)
8080
}
81-
if err := tx.conn.backend.Conn.Raw(func(driverConn any) error {
81+
if err := tx.conn.backend.Raw(func(driverConn any) error {
8282
spannerConn, _ := driverConn.(spannerdriver.SpannerConn)
8383
return spannerConn.BufferWrite(mutations)
8484
}); err != nil {
@@ -100,7 +100,7 @@ func (tx *transaction) Commit() (*spannerpb.CommitResponse, error) {
100100
if tx.txOpts.GetReadWrite() == nil {
101101
return &spannerpb.CommitResponse{}, nil
102102
}
103-
if err := tx.conn.backend.Conn.Raw(func(driverConn any) (err error) {
103+
if err := tx.conn.backend.Raw(func(driverConn any) (err error) {
104104
spannerConn, _ := driverConn.(spannerdriver.SpannerConn)
105105
response, err = spannerConn.CommitResponse()
106106
if err != nil {

spannerlib/backend/connection.go

Lines changed: 0 additions & 13 deletions
This file was deleted.

spannerlib/backend/db_pool.go

Lines changed: 0 additions & 37 deletions
This file was deleted.

spannerlib/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ require (
1616

1717
require (
1818
cel.dev/expr v0.24.0 // indirect
19-
cloud.google.com/go v0.121.6 // indirect
19+
cloud.google.com/go v0.122.0 // indirect
2020
cloud.google.com/go/auth v0.16.5 // indirect
2121
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
2222
cloud.google.com/go/compute/metadata v0.8.0 // indirect

spannerlib/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRY
3838
cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM=
3939
cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I=
4040
cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY=
41-
cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c=
42-
cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI=
41+
cloud.google.com/go v0.122.0 h1:0JTLGrcSIs3HIGsgVPvTx3cfyFSP/k9CI8vLPHTd6Wc=
42+
cloud.google.com/go v0.122.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU=
4343
cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4=
4444
cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw=
4545
cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E=

0 commit comments

Comments
 (0)