Skip to content

Commit 77a7714

Browse files
DB implementation for binding store
Signed-off-by: Alexandros Filios <alexandros.filios@ibm.com>
1 parent c2fd98e commit 77a7714

File tree

1 file changed

+11
-14
lines changed
  • platform/view/services/db/driver/sql/common

1 file changed

+11
-14
lines changed

platform/view/services/db/driver/sql/common/binding.go

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,17 @@ func (db *BindingPersistence) PutBinding(ephemeral, longTerm view.Identity) erro
7272
"INSERT INTO %s (ephemeral_hash, long_term_id) "+
7373
"SELECT '%s', long_term_id FROM %s WHERE ephemeral_hash=$1",
7474
db.table, ephemeral.UniqueID(), db.table)
75-
result, err := db.writeDB.Exec(query, longTerm.UniqueID())
76-
if err != nil {
77-
return errors.Wrapf(err, "failed executing query [%s]", query)
78-
}
79-
rowsAffected, err := result.RowsAffected()
80-
if err != nil {
81-
return errors.Wrapf(err, "query failed: %s", query)
82-
}
8375

84-
if rowsAffected > 1 {
76+
if result, err := db.writeDB.Exec(query, longTerm.UniqueID()); err != nil && errors.Is(db.errorWrapper.WrapError(err), driver.UniqueKeyViolation) {
77+
logger.Warnf("Tuple [%s,%s] already in db. Skipping...", ephemeral, longTerm)
78+
return nil
79+
} else if err != nil {
80+
return errors.Wrapf(err, "failed executing query [%s]", query)
81+
} else if rowsAffected, err := result.RowsAffected(); err != nil {
82+
return errors.Wrapf(err, "failed fetching affected rows for query: %s", query)
83+
} else if rowsAffected > 1 {
8584
panic("unexpected result")
86-
}
87-
88-
if rowsAffected == 1 {
85+
} else if rowsAffected == 1 {
8986
logger.Debugf("New binding registered [%s:%s]", ephemeral, longTerm)
9087
return nil
9188
}
@@ -96,11 +93,11 @@ func (db *BindingPersistence) PutBinding(ephemeral, longTerm view.Identity) erro
9693
// return errors.Wrapf(err, "failed inserting long-term id and ephemeral id")
9794
//}
9895
query = fmt.Sprintf("INSERT INTO %s (ephemeral_hash, long_term_id) VALUES ($1, $2)", db.table)
99-
if _, err = db.writeDB.Exec(query, longTerm.UniqueID(), longTerm); err != nil {
96+
if _, err := db.writeDB.Exec(query, longTerm.UniqueID(), longTerm); err != nil {
10097
return errors.Wrapf(err, "failed inserting long-term id and ephemeral id")
10198
}
10299
query = fmt.Sprintf("INSERT INTO %s (ephemeral_hash, long_term_id) VALUES ($1, $2)", db.table)
103-
if _, err = db.writeDB.Exec(query, ephemeral.UniqueID(), longTerm); err != nil {
100+
if _, err := db.writeDB.Exec(query, ephemeral.UniqueID(), longTerm); err != nil {
104101
return errors.Wrapf(err, "failed inserting long-term id and ephemeral id")
105102
}
106103
logger.Infof("Long-term and ephemeral ids registered [%s,%s]", longTerm, ephemeral)

0 commit comments

Comments
 (0)