Skip to content

Commit 79fe65a

Browse files
authored
Rename template SQL files to have "tmpl" suffix (#94)
#### Type of change - Improvement #### Description - Rename template SQL files to have "tmpl" suffix. - Use a common namespace-ID template method. - Rename `insertTxStatusSQLTempl` to `insertTxStatusSQLStmt` because it wasn't a template. #### Related issues - resolves #73 Signed-off-by: Liran Funaro <liran.funaro@gmail.com>
1 parent 6ce2c14 commit 79fe65a

File tree

7 files changed

+31
-44
lines changed

7 files changed

+31
-44
lines changed

service/query/query.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
"github.com/hyperledger/fabric-x-committer/service/vc"
2323
)
2424

25-
//go:embed query.sql
25+
//go:embed query_tmpl.sql
2626
var queryRowSQLTemplate string
2727

2828
var (
File renamed without changes.
File renamed without changes.

service/vc/database.go

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,21 @@ import (
2525
)
2626

2727
const (
28-
// tableNameTempl is the template for the table name for each namespace.
29-
tableNameTempl = "ns_%s"
30-
3128
// validateReadsSQLTempl template for validating reads for each namespace.
32-
validateReadsSQLTempl = "SELECT * FROM " + validateReadsOnNsFuncNamePrefix + tableNameTempl +
33-
"($1::bytea[], $2::bigint[]);"
29+
validateReadsSQLTempl = "SELECT * FROM validate_reads_ns_${NAMESPACE_ID}($1::BYTEA[], $2::BIGINT[]);"
3430
// updateNsStatesSQLTempl template for the committing updates for each namespace.
35-
updateNsStatesSQLTempl = "SELECT " + updateNsStatesFuncNamePrefix + tableNameTempl +
36-
"($1::bytea[], $2::bytea[], $3::bigint[]);"
31+
updateNsStatesSQLTempl = "SELECT * FROM update_ns_${NAMESPACE_ID}($1::BYTEA[], $2::BYTEA[], $3::BIGINT[]);"
3732
// insertNsStatesSQLTempl template for committing new keys for each namespace.
38-
insertNsStatesSQLTempl = "SELECT " + insertNsStatesFuncNamePrefix + tableNameTempl + "($1::bytea[], $2::bytea[]);"
39-
33+
insertNsStatesSQLTempl = "SELECT * FROM insert_ns_${NAMESPACE_ID}($1::BYTEA[], $2::BYTEA[]);"
4034
// queryVersionsSQLTempl template for the querying versions for given keys for each namespace.
41-
queryVersionsSQLTempl = "SELECT key, version FROM " + tableNameTempl + " WHERE key = ANY($1);"
42-
// insertTxStatusSQLTempl template for committing transaction's status for each TX.
43-
insertTxStatusSQLTempl = "SELECT " + insertTxStatusFuncName + "($1::bytea[], $2::integer[], $3::bytea[]);"
35+
queryVersionsSQLTempl = "SELECT key, version FROM ns_${NAMESPACE_ID} WHERE key = ANY($1);"
4436

37+
// insertTxStatusSQLStmt commits transaction's status for each TX.
38+
insertTxStatusSQLStmt = "SELECT * FROM insert_tx_status($1::BYTEA[], $2::INTEGER[], $3::BYTEA[]);"
39+
// queryPoliciesSQLStmt queries meta-namespace policies.
4540
queryPoliciesSQLStmt = "SELECT key, value from ns_" + types.MetaNamespaceID + ";"
46-
queryConfigSQLStmt = "SELECT key, value from ns_" + types.ConfigNamespaceID + ";"
41+
// queryConfigSQLStmt queries the config-namespace policy.
42+
queryConfigSQLStmt = "SELECT key, value from ns_" + types.ConfigNamespaceID + ";"
4743
)
4844

4945
// ErrMetadataEmpty indicates that a requested metadata value is empty or not found.
@@ -118,7 +114,7 @@ func (db *database) validateNamespaceReads(
118114
// a common function for all namespace, we need to pass the table name as a parameter
119115
// which makes the query dynamic and hence we lose the benefits of static SQL.
120116
start := time.Now()
121-
query := fmt.Sprintf(validateReadsSQLTempl, nsID)
117+
query := FmtNsID(validateReadsSQLTempl, nsID)
122118

123119
conflictIdx, err := retryQueryAndReadArrayResult[int](ctx, db, query, r.keys, r.versions)
124120
if err != nil {
@@ -137,7 +133,7 @@ func (db *database) validateNamespaceReads(
137133
// queryVersionsIfPresent queries the versions for the given keys if they exist.
138134
func (db *database) queryVersionsIfPresent(ctx context.Context, nsID string, queryKeys [][]byte) (keyToVersion, error) {
139135
start := time.Now()
140-
query := fmt.Sprintf(queryVersionsSQLTempl, nsID)
136+
query := FmtNsID(queryVersionsSQLTempl, nsID)
141137

142138
foundKeys, foundVersions, err := retryQueryAndReadTwoItems[[]byte, int64](ctx, db, query, queryKeys)
143139
if err != nil {
@@ -302,10 +298,10 @@ func (db *database) insertTxStatus(
302298
heights = append(heights, blkAndTxNum.ToBytes())
303299
}
304300

305-
ret := tx.QueryRow(ctx, insertTxStatusSQLTempl, ids, statues, heights)
301+
ret := tx.QueryRow(ctx, insertTxStatusSQLStmt, ids, statues, heights)
306302
duplicates, err := readArrayResult[[]byte](ret)
307303
if err != nil {
308-
return nil, fmt.Errorf("failed to read result from query [%s]: %w", insertTxStatusSQLTempl, err)
304+
return nil, fmt.Errorf("failed to read result from query [%s]: %w", insertTxStatusSQLStmt, err)
309305
}
310306
if len(duplicates) == 0 {
311307
promutil.Observe(db.metrics.databaseTxBatchCommitTxsStatusLatencySeconds, time.Since(start))
@@ -338,7 +334,7 @@ func (db *database) insertStates(
338334
continue
339335
}
340336

341-
q := fmt.Sprintf(insertNsStatesSQLTempl, nsID)
337+
q := FmtNsID(insertNsStatesSQLTempl, nsID)
342338
ret := tx.QueryRow(ctx, q, writes.keys, writes.values)
343339
violating, err := readArrayResult[[]byte](ret)
344340
if err != nil {
@@ -367,7 +363,7 @@ func (db *database) updateStates(ctx context.Context, tx pgx.Tx, nsToWrites name
367363
continue
368364
}
369365

370-
query := fmt.Sprintf(updateNsStatesSQLTempl, nsID)
366+
query := FmtNsID(updateNsStatesSQLTempl, nsID)
371367
_, err := tx.Exec(ctx, query, writes.keys, writes.values, writes.versions)
372368
if err != nil {
373369
return errors.Wrapf(err, "failed to execute query [%s]", query)
@@ -418,11 +414,6 @@ func (s *statesToBeCommitted) empty() bool {
418414
return s.updateWrites.empty() && s.newWrites.empty() && (s.batchStatus == nil || len(s.batchStatus.Status) == 0)
419415
}
420416

421-
// TableName returns the table name for the given namespace.
422-
func TableName(nsID string) string {
423-
return fmt.Sprintf(tableNameTempl, nsID)
424-
}
425-
426417
func (db *database) readStatusWithHeight(
427418
ctx context.Context,
428419
txIDs [][]byte,

service/vc/dbinit.go

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,31 +19,23 @@ import (
1919
)
2020

2121
const (
22-
// system tables and function names.
23-
txStatusTableName = "tx_status"
24-
metadataTableName = "metadata"
25-
insertTxStatusFuncName = "insert_tx_status"
26-
27-
// namespace table and function names prefix.
28-
nsTableNamePrefix = "ns_"
29-
validateReadsOnNsFuncNamePrefix = "validate_reads_"
30-
updateNsStatesFuncNamePrefix = "update_"
31-
insertNsStatesFuncNamePrefix = "insert_"
32-
33-
setMetadataPrepSQLStmt = "UPDATE " + metadataTableName + " SET value = $2 WHERE key = $1;"
34-
getMetadataPrepSQLStmt = "SELECT value FROM " + metadataTableName + " WHERE key = $1;"
35-
queryTxIDsStatusPrepSQLStmt = "SELECT tx_id, status, height FROM " + txStatusTableName + " WHERE tx_id = ANY($1);"
22+
setMetadataPrepSQLStmt = "UPDATE metadata SET value = $2 WHERE key = $1;"
23+
getMetadataPrepSQLStmt = "SELECT value FROM metadata WHERE key = $1;"
24+
queryTxIDsStatusPrepSQLStmt = "SELECT tx_id, status, height FROM tx_status WHERE tx_id = ANY($1);"
3625

3726
lastCommittedBlockNumberKey = "last committed block number"
3827

3928
// nsIDTemplatePlaceholder is used as a template placeholder for SQL queries.
4029
nsIDTemplatePlaceholder = "${NAMESPACE_ID}"
30+
31+
// tableNameTempl is the template for the table name for each namespace.
32+
tableNameTempl = "ns_" + nsIDTemplatePlaceholder
4133
)
4234

4335
var (
44-
//go:embed init_database.sql
36+
//go:embed init_database_tmpl.sql
4537
dbInitSQLStmt string
46-
//go:embed create_namespace.sql
38+
//go:embed create_namespace_tmpl.sql
4739
createNamespaceSQLStmt string
4840

4941
systemNamespaces = []string{types.MetaNamespaceID, types.ConfigNamespaceID}
@@ -104,3 +96,8 @@ func createNsTables(nsID string, queryFunc func(q string) error) error {
10496
func FmtNsID(sqlTemplate, namespaceID string) string {
10597
return strings.ReplaceAll(sqlTemplate, nsIDTemplatePlaceholder, namespaceID)
10698
}
99+
100+
// TableName returns the table name for the given namespace.
101+
func TableName(nsID string) string {
102+
return FmtNsID(tableNameTempl, nsID)
103+
}

service/vc/dbinit_test.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ package vc
88

99
import (
1010
"context"
11-
"fmt"
1211
"testing"
1312
"time"
1413

@@ -22,9 +21,9 @@ func TestDBInit(t *testing.T) {
2221
t.Parallel()
2322
env := newDatabaseTestEnvWithTablesSetup(t)
2423

25-
tableName := nsTableNamePrefix + types.MetaNamespaceID
24+
tableName := TableName(types.MetaNamespaceID)
2625
keys := [][]byte{[]byte("tx1"), []byte("tx2"), []byte("tx3"), []byte("tx4")}
27-
ret := env.DB.pool.QueryRow(t.Context(), fmt.Sprintf(insertNsStatesSQLTempl, types.MetaNamespaceID), keys, keys)
26+
ret := env.DB.pool.QueryRow(t.Context(), FmtNsID(insertNsStatesSQLTempl, types.MetaNamespaceID), keys, keys)
2827
duplicates, err := readArrayResult[[]byte](ret)
2928
require.NoError(t, err)
3029
require.Empty(t, duplicates)
File renamed without changes.

0 commit comments

Comments
 (0)