Skip to content

handle multiple rows in a function #675

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 19, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 5 additions & 9 deletions api/service/mempoolTransactionApiService.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ func (ut *MempoolTransactionService) GetMempoolTransactions(
err error
count uint64
selectQuery, countQuery string
rows *sql.Rows
rowCount *sql.Row
rows2 *sql.Rows
txs []*model.MempoolTransaction
response *model.GetMempoolTransactionsResponse
Expand Down Expand Up @@ -103,17 +103,13 @@ func (ut *MempoolTransactionService) GetMempoolTransactions(
selectQuery, args = caseQuery.Build()
countQuery = query.GetTotalRecordOfSelect(selectQuery)

rows, err = ut.Query.ExecuteSelect(countQuery, false, args...)
rowCount, err = ut.Query.ExecuteSelectRow(countQuery, false, args...)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
defer rows.Close()

if rows.Next() {
err = rows.Scan(&count)
if err != nil {
return response, status.Error(codes.Internal, err.Error())
}
err = rowCount.Scan(&count)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}

// select records
Expand Down
12 changes: 9 additions & 3 deletions api/service/mempoolTransactionApiService_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ type (
}
)

func (*mockQueryExecutorGetMempoolTXsFail) ExecuteSelect(query string, tx bool, args ...interface{}) (*sql.Rows, error) {
func (*mockQueryExecutorGetMempoolTXsFail) ExecuteSelectRow(query string, tx bool, args ...interface{}) (*sql.Row, error) {
return nil, errors.New("want error")
}
func (*mockQueryExecutorGetMempoolTXsScanFail) ExecuteSelect(qStr string, tx bool, args ...interface{}) (*sql.Rows, error) {
func (*mockQueryExecutorGetMempoolTXsScanFail) ExecuteSelectRow(qStr string, tx bool, args ...interface{}) (*sql.Row, error) {
db, mock, _ := sqlmock.New()
mock.ExpectQuery(regexp.QuoteMeta(qStr)).WillReturnRows(sqlmock.NewRows([]string{"one", "two"}).AddRow(1, 2))
return db.Query(qStr)
return db.QueryRow(qStr), nil
}
func (*mockQueryExecutorGetMempoolTXs) ExecuteSelect(qStr string, tx bool, args ...interface{}) (*sql.Rows, error) {
db, mock, _ := sqlmock.New()
Expand All @@ -82,6 +82,12 @@ func (*mockQueryExecutorGetMempoolTXs) ExecuteSelect(qStr string, tx bool, args
}
return db.Query(qStr)
}
func (*mockQueryExecutorGetMempoolTXs) ExecuteSelectRow(qStr string, tx bool, args ...interface{}) (*sql.Row, error) {
db, mock, _ := sqlmock.New()
defer db.Close()
mock.ExpectQuery(regexp.QuoteMeta(qStr)).WillReturnRows(sqlmock.NewRows([]string{"total_record"}).AddRow(1))
return db.QueryRow(qStr), nil
}
func TestMempoolTransactionService_GetMempoolTransactions(t *testing.T) {
type fields struct {
Query query.ExecutorInterface
Expand Down
18 changes: 7 additions & 11 deletions api/service/nodeRegistryApiService.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func (ns NodeRegistryService) GetNodeRegistrations(params *model.GetNodeRegistra

var (
err error
rows *sql.Rows
rowCount *sql.Row
rows2 *sql.Rows
selectQuery string
args []interface{}
Expand All @@ -57,19 +57,15 @@ func (ns NodeRegistryService) GetNodeRegistrations(params *model.GetNodeRegistra
// count first
selectQuery, args = caseQuery.Build()
countQuery := query.GetTotalRecordOfSelect(selectQuery)
rows, err = ns.Query.ExecuteSelect(countQuery, false, args...)
rowCount, err = ns.Query.ExecuteSelectRow(countQuery, false, args...)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
defer rows.Close()

if rows.Next() {
err = rows.Scan(
&totalRecords,
)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
err = rowCount.Scan(
&totalRecords,
)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}

if page.GetOrderField() == "" {
Expand Down
43 changes: 27 additions & 16 deletions api/service/nodeRegistryApiService_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,30 +60,41 @@ func (*mockQueryGetNodeRegistrationsFail) ExecuteSelect(query string, tx bool, a
return nil, errors.New("want error")
}

func (*mockQueryGetNodeRegistrationsFail) ExecuteSelectRow(query string, tx bool, args ...interface{}) (*sql.Row, error) {
return nil, errors.New("want error")
}

func (*mockQueryGetNodeRegistrationsSuccess) ExecuteSelect(qStr string, tx bool, args ...interface{}) (*sql.Rows, error) {
db, mock, _ := sqlmock.New()
defer db.Close()

mock.ExpectQuery("").
WillReturnRows(sqlmock.NewRows(query.NewNodeRegistrationQuery().Fields).
AddRow(
1,
[]byte{1, 2},
"AccountA",
1,
"127.0.0.1",
1,
uint32(model.NodeRegistrationState_NodeQueued),
true,
1,
),
)
return db.Query("")
}

func (*mockQueryGetNodeRegistrationsSuccess) ExecuteSelectRow(qStr string, tx bool, args ...interface{}) (*sql.Row, error) {
db, mock, _ := sqlmock.New()
defer db.Close()
switch strings.Contains(qStr, "total_record") {
case true:
mock.ExpectQuery("").WillReturnRows(sqlmock.NewRows([]string{"total_record"}).AddRow(1))
mock.ExpectQuery(regexp.QuoteMeta(qStr)).WillReturnRows(sqlmock.NewRows([]string{"total_record"}).AddRow(1))
default:
mock.ExpectQuery("").
WillReturnRows(sqlmock.NewRows(query.NewNodeRegistrationQuery().Fields).
AddRow(
1,
[]byte{1, 2},
"AccountA",
1,
"127.0.0.1",
1,
uint32(model.NodeRegistrationState_NodeQueued),
true,
1,
),
)
return nil, nil
}
return db.Query("")
return db.QueryRow(qStr), nil
}

func TestNodeRegistryService_GetNodeRegistrations(t *testing.T) {
Expand Down
18 changes: 7 additions & 11 deletions api/service/transactionApiService.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ func (ts *TransactionService) GetTransactions(
) (*model.GetTransactionsResponse, error) {
var (
err error
rows *sql.Rows
rowCount *sql.Row
rows2 *sql.Rows
txs []*model.Transaction
selectQuery string
Expand Down Expand Up @@ -146,19 +146,15 @@ func (ts *TransactionService) GetTransactions(

// count first
countQuery := query.GetTotalRecordOfSelect(selectQuery)
rows, err = ts.Query.ExecuteSelect(countQuery, false, args...)
rowCount, err = ts.Query.ExecuteSelectRow(countQuery, false, args...)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
defer rows.Close()

if rows.Next() {
err = rows.Scan(
&totalRecords,
)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
err = rowCount.Scan(
&totalRecords,
)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}

// Get Transactions with Pagination
Expand Down
54 changes: 28 additions & 26 deletions api/service/transactionApiService_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"database/sql"
"errors"
"reflect"
"strings"
"testing"

"github.com/DATA-DOG/go-sqlmock"
Expand Down Expand Up @@ -568,35 +567,38 @@ type (
func (*mockQueryGetTransactionsFail) ExecuteSelect(query string, tx bool, args ...interface{}) (*sql.Rows, error) {
return nil, errors.New("want error")
}
func (*mockQueryGetTransactionsFail) ExecuteSelectRow(query string, tx bool, args ...interface{}) (*sql.Row, error) {
return nil, errors.New("want error")
}
func (*mockQueryGetTransactionsSuccess) ExecuteSelect(qStr string, tx bool, args ...interface{}) (*sql.Rows, error) {
db, mock, _ := sqlmock.New()
switch strings.Contains(qStr, "total_record") {
case true:
mock.ExpectQuery("").WillReturnRows(sqlmock.NewRows([]string{"total_record"}).AddRow(1))
default:
mock.ExpectQuery("").
WillReturnRows(sqlmock.NewRows(query.NewTransactionQuery(&chaintype.MainChain{}).Fields).
AddRow(
4545420970999433273,
1,
1,
"senderA",
"recipientA",
1,
1,
10000,
[]byte{1, 1},
8,
[]byte{1, 2, 3, 4, 5, 6, 7, 8},
[]byte{0, 0, 0, 0, 0, 0, 0},
1,
1,
false,
),
)
}
mock.ExpectQuery("").
WillReturnRows(sqlmock.NewRows(query.NewTransactionQuery(&chaintype.MainChain{}).Fields).
AddRow(
4545420970999433273,
1,
1,
"senderA",
"recipientA",
1,
1,
10000,
[]byte{1, 1},
8,
[]byte{1, 2, 3, 4, 5, 6, 7, 8},
[]byte{0, 0, 0, 0, 0, 0, 0},
1,
1,
false,
),
)
return db.Query("")
}
func (*mockQueryGetTransactionsSuccess) ExecuteSelectRow(qStr string, tx bool, args ...interface{}) (*sql.Row, error) {
db, mock, _ := sqlmock.New()
mock.ExpectQuery("").WillReturnRows(sqlmock.NewRows([]string{"total_record"}).AddRow(1))
return db.QueryRow(""), nil
}
func TestTransactionService_GetTransactions(t *testing.T) {
type fields struct {
Query query.ExecutorInterface
Expand Down
50 changes: 33 additions & 17 deletions cmd/genesisblock/genesisGenerator.go
Original file line number Diff line number Diff line change
Expand Up @@ -257,19 +257,29 @@ func getDbLastState(dbPath string) (bcEntries []genesisEntry, err error) {
if acc.AccountAddress == constant.MainchainGenesisAccountAddress {
continue
}

var nodeRegistrations []*model.NodeRegistration

bcEntry := new(genesisEntry)
bcEntry.AccountAddress = acc.AccountAddress
bcEntry.AccountBalance = acc.Balance

// get node registration for this account, if exists
qry, args := nodeRegistrationQuery.GetNodeRegistrationByAccountAddress(acc.AccountAddress)
nrRows, err := queryExecutor.ExecuteSelect(qry, false, args...)
if err != nil {
return nil, err
}
defer nrRows.Close()
err := func() error {
// get node registration for this account, if exists
qry, args := nodeRegistrationQuery.GetNodeRegistrationByAccountAddress(acc.AccountAddress)
nrRows, err := queryExecutor.ExecuteSelect(qry, false, args...)
if err != nil {
return err
}
defer nrRows.Close()

nodeRegistrations, err = nodeRegistrationQuery.BuildModel([]*model.NodeRegistration{}, nrRows)
if err != nil {
return err
}
return nil
}()

nodeRegistrations, err := nodeRegistrationQuery.BuildModel([]*model.NodeRegistration{}, nrRows)
if err != nil {
return nil, err
}
Expand All @@ -284,18 +294,24 @@ func getDbLastState(dbPath string) (bcEntries []genesisEntry, err error) {
}
bcEntry.NodePublicKey = nr.NodePublicKey
bcEntry.NodePublicKeyB64 = base64.StdEncoding.EncodeToString(nr.NodePublicKey)
// get the participation score for this node registration
qry, args := participationScoreQuery.GetParticipationScoreByNodeID(nr.NodeID)
psRows, err := queryExecutor.ExecuteSelect(qry, false, args...)
err := func() error {
// get the participation score for this node registration
qry, args := participationScoreQuery.GetParticipationScoreByNodeID(nr.NodeID)
psRows, err := queryExecutor.ExecuteSelect(qry, false, args...)
if err != nil {
return err
}
defer psRows.Close()

participationScores, err := participationScoreQuery.BuildModel([]*model.ParticipationScore{}, psRows)
if (err != nil) || len(participationScores) > 0 {
bcEntry.ParticipationScore = participationScores[0].Score
}
return nil
}()
if err != nil {
return nil, err
}
defer psRows.Close()

participationScores, err := participationScoreQuery.BuildModel([]*model.ParticipationScore{}, psRows)
if (err != nil) || len(participationScores) > 0 {
bcEntry.ParticipationScore = participationScores[0].Score
}
}
bcEntries = append(bcEntries, *bcEntry)
}
Expand Down
Loading