@ -17,6 +17,7 @@ limitations under the License.
package driver
package driver
import (
import (
"context"
"fmt"
"fmt"
"log/slog"
"log/slog"
"maps"
"maps"
@ -486,6 +487,7 @@ func (s *SQL) Create(key string, rel release.Releaser) error {
s . Logger ( ) . Debug ( "failed to start SQL transaction" , slog . Any ( "error" , err ) )
s . Logger ( ) . Debug ( "failed to start SQL transaction" , slog . Any ( "error" , err ) )
return fmt . Errorf ( "error beginning transaction: %w" , err )
return fmt . Errorf ( "error beginning transaction: %w" , err )
}
}
defer transaction . Rollback ( )
insertQuery , args , err := s . statementBuilder .
insertQuery , args , err := s . statementBuilder .
Insert ( sqlReleaseTableName ) .
Insert ( sqlReleaseTableName ) .
@ -516,9 +518,7 @@ func (s *SQL) Create(key string, rel release.Releaser) error {
return err
return err
}
}
if _ , err := transaction . Exec ( insertQuery , args ... ) ; err != nil {
if _ , err := transaction . ExecContext ( context . Background ( ) , insertQuery , args ... ) ; err != nil {
defer transaction . Rollback ( )
selectQuery , args , buildErr := s . statementBuilder .
selectQuery , args , buildErr := s . statementBuilder .
Select ( sqlReleaseTableKeyColumn ) .
Select ( sqlReleaseTableKeyColumn ) .
From ( sqlReleaseTableName ) .
From ( sqlReleaseTableName ) .
@ -558,18 +558,20 @@ func (s *SQL) Create(key string, rel release.Releaser) error {
) . ToSql ( )
) . ToSql ( )
if err != nil {
if err != nil {
defer transaction . Rollback ( )
s . Logger ( ) . Debug ( "failed to build insert query" , slog . Any ( "error" , err ) )
s . Logger ( ) . Debug ( "failed to build insert query" , slog . Any ( "error" , err ) )
return err
return err
}
}
if _ , err := transaction . Exec ( insertLabelsQuery , args ... ) ; err != nil {
if _ , err := transaction . ExecContext ( context . Background ( ) , insertLabelsQuery , args ... ) ; err != nil {
defer transaction . Rollback ( )
s . Logger ( ) . Debug ( "failed to write Labels" , slog . Any ( "error" , err ) )
s . Logger ( ) . Debug ( "failed to write Labels" , slog . Any ( "error" , err ) )
return err
return err
}
}
}
}
defer transaction . Commit ( )
if err := transaction . Commit ( ) ; err != nil {
s . Logger ( ) . Debug ( "failed to commit release creation transaction" , slog . Any ( "error" , err ) )
return fmt . Errorf ( "error committing transaction: %w" , err )
}
return nil
return nil
}
}
@ -609,7 +611,7 @@ func (s *SQL) Update(key string, rel release.Releaser) error {
return err
return err
}
}
if _ , err := s . db . Exec ( query , args ... ) ; err != nil {
if _ , err := s . db . Exec Context ( context . Background ( ) , query , args ... ) ; err != nil {
s . Logger ( ) . Debug ( "failed to update release in SQL database" , slog . String ( "key" , key ) , slog . Any ( "error" , err ) )
s . Logger ( ) . Debug ( "failed to update release in SQL database" , slog . String ( "key" , key ) , slog . Any ( "error" , err ) )
return err
return err
}
}
@ -624,6 +626,7 @@ func (s *SQL) Delete(key string) (release.Releaser, error) {
s . Logger ( ) . Debug ( "failed to start SQL transaction" , slog . Any ( "error" , err ) )
s . Logger ( ) . Debug ( "failed to start SQL transaction" , slog . Any ( "error" , err ) )
return nil , fmt . Errorf ( "error beginning transaction: %w" , err )
return nil , fmt . Errorf ( "error beginning transaction: %w" , err )
}
}
defer transaction . Rollback ( )
selectQuery , args , err := s . statementBuilder .
selectQuery , args , err := s . statementBuilder .
Select ( sqlReleaseTableBodyColumn ) .
Select ( sqlReleaseTableBodyColumn ) .
@ -646,10 +649,8 @@ func (s *SQL) Delete(key string) (release.Releaser, error) {
release , err := decodeRelease ( record . Body )
release , err := decodeRelease ( record . Body )
if err != nil {
if err != nil {
s . Logger ( ) . Debug ( "failed to decode release" , slog . String ( "key" , key ) , slog . Any ( "error" , err ) )
s . Logger ( ) . Debug ( "failed to decode release" , slog . String ( "key" , key ) , slog . Any ( "error" , err ) )
transaction . Rollback ( )
return nil , err
return nil , err
}
}
defer transaction . Commit ( )
deleteQuery , args , err := s . statementBuilder .
deleteQuery , args , err := s . statementBuilder .
Delete ( sqlReleaseTableName ) .
Delete ( sqlReleaseTableName ) .
@ -661,7 +662,7 @@ func (s *SQL) Delete(key string) (release.Releaser, error) {
return nil , err
return nil , err
}
}
_ , err = transaction . Exec ( deleteQuery , args ... )
_ , err = transaction . Exec Context ( context . Background ( ) , deleteQuery , args ... )
if err != nil {
if err != nil {
s . Logger ( ) . Debug ( "failed perform delete query" , slog . Any ( "error" , err ) )
s . Logger ( ) . Debug ( "failed perform delete query" , slog . Any ( "error" , err ) )
return release , err
return release , err
@ -686,8 +687,17 @@ func (s *SQL) Delete(key string) (release.Releaser, error) {
s . Logger ( ) . Debug ( "failed to build delete Labels query" , slog . Any ( "error" , err ) )
s . Logger ( ) . Debug ( "failed to build delete Labels query" , slog . Any ( "error" , err ) )
return nil , err
return nil , err
}
}
_ , err = transaction . Exec ( deleteCustomLabelsQuery , args ... )
if _ , err = transaction . ExecContext ( context . Background ( ) , deleteCustomLabelsQuery , args ... ) ; err != nil {
s . Logger ( ) . Debug ( "failed to delete release custom labels" , slog . String ( "key" , key ) , slog . Any ( "error" , err ) )
return release , err
return release , err
}
if err := transaction . Commit ( ) ; err != nil {
s . Logger ( ) . Debug ( "failed to commit release deletion transaction" , slog . Any ( "error" , err ) )
return release , fmt . Errorf ( "error committing transaction: %w" , err )
}
return release , nil
}
}
// Get release custom labels from database
// Get release custom labels from database