Skip to content

Commit

Permalink
log stmt.Close() call
Browse files Browse the repository at this point in the history
  • Loading branch information
simukti committed Jan 2, 2020
1 parent 22e8cc8 commit e933656
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 7 deletions.
11 changes: 10 additions & 1 deletion statement.go
Expand Up @@ -22,7 +22,16 @@ type statement struct {

// Close implements driver.Stmt
func (s *statement) Close() error {
return s.Stmt.Close()
lvl, start := LevelDebug, time.Now()
err := s.Stmt.Close()

if err != nil {
lvl = LevelError
}

s.logger.log(context.Background(), lvl, "StmtClose", start, err, s.logData()...)

return err
}

// NumInput implements driver.Stmt
Expand Down
43 changes: 37 additions & 6 deletions statement_test.go
Expand Up @@ -13,13 +13,44 @@ import (
)

func TestStatement_Close(t *testing.T) {
q := "SELECT * FROM tt WHERE id = ?"
stmtMock := &statementMock{}
stmtMock.On("Close").Return(driver.ErrBadConn)
t.Run("Error", func(t *testing.T) {
q := "SELECT * FROM tt WHERE id = ?"
stmtMock := &statementMock{}
stmtMock.On("Close").Return(driver.ErrBadConn)

stmt := &statement{query: q, Stmt: stmtMock, logger: testLogger, id: testLogger.opt.uidGenerator.UniqueID(), connID: testLogger.opt.uidGenerator.UniqueID()}
err := stmt.Close()
assert.Error(t, err)
stmt := &statement{query: q, Stmt: stmtMock, logger: testLogger, id: testLogger.opt.uidGenerator.UniqueID(), connID: testLogger.opt.uidGenerator.UniqueID()}
err := stmt.Close()
assert.Error(t, err)

var output bufLog
err = json.Unmarshal(bufLogger.Bytes(), &output)
assert.NoError(t, err)
assert.Equal(t, "StmtClose", output.Message)
assert.Equal(t, LevelError.String(), output.Level)
assert.Equal(t, driver.ErrBadConn.Error(), output.Data[testOpts.errorFieldname])
assert.Equal(t, q, output.Data[testOpts.sqlQueryFieldname])
assert.Equal(t, stmt.connID, output.Data[testOpts.connIDFieldname])
assert.Equal(t, stmt.id, output.Data[testOpts.stmtIDFieldname])
})

t.Run("Success", func(t *testing.T) {
q := "SELECT * FROM tt WHERE id = ?"
stmtMock := &statementMock{}
stmtMock.On("Close").Return(nil)

stmt := &statement{query: q, Stmt: stmtMock, logger: testLogger, id: testLogger.opt.uidGenerator.UniqueID(), connID: testLogger.opt.uidGenerator.UniqueID()}
err := stmt.Close()
assert.NoError(t, err)

var output bufLog
err = json.Unmarshal(bufLogger.Bytes(), &output)
assert.NoError(t, err)
assert.Equal(t, "StmtClose", output.Message)
assert.NotContains(t, output.Data, testOpts.errorFieldname)
assert.Equal(t, q, output.Data[testOpts.sqlQueryFieldname])
assert.Equal(t, stmt.connID, output.Data[testOpts.connIDFieldname])
assert.Equal(t, stmt.id, output.Data[testOpts.stmtIDFieldname])
})
}

func TestStatement_NumInput(t *testing.T) {
Expand Down

0 comments on commit e933656

Please sign in to comment.