diff --git a/engine/storage_mysql_local_test.go b/engine/storage_mysql_local_test.go index bca491dcb..02a5283ce 100644 --- a/engine/storage_mysql_local_test.go +++ b/engine/storage_mysql_local_test.go @@ -566,15 +566,13 @@ func TestMySQLGetStoredCdrs(t *testing.T) { t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) } // Count ALL - /* - if storedCdrs, count, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{Count: true}); err != nil { - t.Error(err.Error()) - } else if len(storedCdrs) != 0 { - t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) - } else if count != 8 { - t.Error("Unexpected count of StoredCdrs returned: ", count) - } - */ + if storedCdrs, count, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{Count: true}); err != nil { + t.Error(err.Error()) + } else if len(storedCdrs) != 0 { + t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) + } else if count != 8 { + t.Error("Unexpected count of StoredCdrs returned: ", count) + } // Filter on cgrids if storedCdrs, _, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}}); err != nil { @@ -583,14 +581,12 @@ func TestMySQLGetStoredCdrs(t *testing.T) { t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) } // Count on CGRIDS - /* - if _, count, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), - utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}, Count: true}); err != nil { - t.Error(err.Error()) - } else if count != 2 { - t.Error("Unexpected count of StoredCdrs returned: ", count) - } - */ + if _, count, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), + utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}, Count: true}); err != nil { + t.Error(err.Error()) + } else if count != 2 { + t.Error("Unexpected count of StoredCdrs returned: ", count) + } // Filter on cgrids plus reqType if storedCdrs, _, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}, ReqTypes: []string{"prepaid"}}); err != nil { @@ -599,14 +595,12 @@ func TestMySQLGetStoredCdrs(t *testing.T) { t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) } // Count on multiple filter - /* - if _, count, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), - utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}, ReqTypes: []string{"prepaid"}, Count: true}); err != nil { - t.Error(err.Error()) - } else if count != 1 { - t.Error("Unexpected count of StoredCdrs returned: ", count) - } - */ + if _, count, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), + utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}, ReqTypes: []string{"prepaid"}, Count: true}); err != nil { + t.Error(err.Error()) + } else if count != 1 { + t.Error("Unexpected count of StoredCdrs returned: ", count) + } // Filter on runId if storedCdrs, _, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{RunIds: []string{utils.DEFAULT_RUNID}}); err != nil { t.Error(err.Error()) diff --git a/engine/storage_psql_local_test.go b/engine/storage_psql_local_test.go index aeaa46cb0..fd91f70d6 100644 --- a/engine/storage_psql_local_test.go +++ b/engine/storage_psql_local_test.go @@ -568,14 +568,13 @@ func TestPSQLGetStoredCdrs(t *testing.T) { t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) } // Count ALL - /*if storedCdrs, count, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{Count: true}); err != nil { + if storedCdrs, count, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{Count: true}); err != nil { t.Error(err.Error()) } else if len(storedCdrs) != 0 { t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) } else if count != 8 { t.Error("Unexpected count of StoredCdrs returned: ", count) } - */ // Filter on cgrids if storedCdrs, _, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}}); err != nil { @@ -584,14 +583,12 @@ func TestPSQLGetStoredCdrs(t *testing.T) { t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) } // Count on CGRIDS - /* - if _, count, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), - utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}, Count: true}); err != nil { - t.Error(err.Error()) - } else if count != 2 { - t.Error("Unexpected count of StoredCdrs returned: ", count) - } - */ + if _, count, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), + utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}, Count: true}); err != nil { + t.Error(err.Error()) + } else if count != 2 { + t.Error("Unexpected count of StoredCdrs returned: ", count) + } // Filter on cgrids plus reqType if storedCdrs, _, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}, ReqTypes: []string{"prepaid"}}); err != nil { @@ -600,14 +597,12 @@ func TestPSQLGetStoredCdrs(t *testing.T) { t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) } // Count on multiple filter - /* - if _, count, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), - utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}, ReqTypes: []string{"prepaid"}, Count: true}); err != nil { - t.Error(err.Error()) - } else if count != 1 { - t.Error("Unexpected count of StoredCdrs returned: ", count) - } - */ + if _, count, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), + utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}, ReqTypes: []string{"prepaid"}, Count: true}); err != nil { + t.Error(err.Error()) + } else if count != 1 { + t.Error("Unexpected count of StoredCdrs returned: ", count) + } // Filter on runId if storedCdrs, _, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{RunIds: []string{utils.DEFAULT_RUNID}}); err != nil { t.Error(err.Error()) diff --git a/engine/storage_sql.go b/engine/storage_sql.go index f11248a97..8e057ebfb 100644 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -955,13 +955,18 @@ func (self *SQLStorage) GetStoredCdrs(qryFltr *utils.CdrsFilter) ([]*utils.Store if qryFltr.PaginatorLimit != 0 { q = q.Limit(qryFltr.PaginatorLimit) } + /* ToDo: Fix as soon as issue on Gorm analyzed: https://github.com/jinzhu/gorm/issues/354 if qryFltr.Count { var cnt int64 + fmt.Printf("Rows is: %+v\n", rows) + //fmt.Printf("Counting, got count: %+v\n", q.Count()) if err := q.Count(&cnt).Error; err != nil { + fmt.Printf("Counting, got error %s", err.Error()) return nil, 0, err } return nil, cnt, nil } + */ // Execute query rows, err := q.Rows() if err != nil { @@ -996,6 +1001,9 @@ func (self *SQLStorage) GetStoredCdrs(qryFltr *utils.CdrsFilter) ([]*utils.Store } cdrs = append(cdrs, storCdr) } + if qryFltr.Count { // Emulate Count for now + return nil, int64(len(cdrs)), nil + } return cdrs, 0, nil } diff --git a/utils/apitpdata.go b/utils/apitpdata.go index 528f1638a..f988ac570 100644 --- a/utils/apitpdata.go +++ b/utils/apitpdata.go @@ -930,7 +930,7 @@ type CdrsFilter struct { Count bool // If true count the items instead of returning data } -// Used in Rpc calls +// Used in Rpc calls, slightly different than CdrsFilter by using string instead of Time filters type RpcCdrsFilter struct { CgrIds []string // If provided, it will filter based on the cgrids present in list NotCgrIds []string // Filter specific CgrIds out