diff --git a/internal/infra/analyse/sql_datasource.go b/internal/infra/analyse/sql_datasource.go index b55342ef..f78bc039 100644 --- a/internal/infra/analyse/sql_datasource.go +++ b/internal/infra/analyse/sql_datasource.go @@ -47,7 +47,7 @@ type SQLExtractor struct { schema string } -func (s SQLExtractor) New(tableName string, columnName string) analyse.Extractor { +func (s SQLExtractor) New(tableName string, columnName string) analyse.Extractor { //nolint:ireturn return &SQLDataSource{ url: s.url, schema: s.schema, diff --git a/pkg/analyse/driven.go b/pkg/analyse/driven.go index 3f29c618..8f204249 100644 --- a/pkg/analyse/driven.go +++ b/pkg/analyse/driven.go @@ -17,7 +17,9 @@ package analyse -import "github.com/cgi-fr/rimo/pkg/model" +import ( + "github.com/cgi-fr/rimo/pkg/model" +) type DataSource interface { Name() string @@ -30,6 +32,8 @@ type ExtractorFactory interface { } type Extractor interface { + Open() error + Close() error ExtractValue() (bool, interface{}, error) } diff --git a/pkg/analyse/driver.go b/pkg/analyse/driver.go index 7bf25276..3ba9d091 100644 --- a/pkg/analyse/driver.go +++ b/pkg/analyse/driver.go @@ -65,7 +65,6 @@ func (d *Driver) Next() bool { if d.curColumn+1 < len(d.columns) { // yes, so increase column index d.curColumn++ - fmt.Println("next column!", d.curTable, d.curColumn) return true } @@ -79,7 +78,6 @@ func (d *Driver) Next() bool { // yes, increase table index and read columns d.curTable++ d.curColumn = 0 - fmt.Println("next table!", d.curTable, d.curColumn) d.columns = d.ds.ListColumn(d.tables[d.curTable]) // should we try next table because there is no column in this table @@ -89,17 +87,24 @@ func (d *Driver) Next() bool { } // last table is not passed - return d.curTable < len(d.tables) + return d.curTable < len(d.tables) && len(d.columns) > 0 } -func (d *Driver) Col() (rimo.ColReader, error) { //nolint:ireturn - return &ValueIterator{ +//nolint:ireturn +func (d *Driver) Col() (rimo.ColReader, error) { + vi := &ValueIterator{ Extractor: d.exf.New(d.tables[d.curTable], d.columns[d.curColumn]), tableName: d.tables[d.curTable], colName: d.columns[d.curColumn], nextValue: nil, err: nil, - }, nil + } + + if err := vi.Open(); err != nil { + return nil, err + } + + return vi, nil } func (d *Driver) Export(base *model.Base) error { @@ -118,6 +123,8 @@ type ValueIterator struct { err error } +func (vi *ValueIterator) Open() error { return vi.Extractor.Open() } //nolint:wrapcheck +func (vi *ValueIterator) Close() error { return vi.Extractor.Close() } //nolint:wrapcheck func (vi *ValueIterator) ColName() string { return vi.colName } func (vi *ValueIterator) TableName() string { return vi.tableName } diff --git a/pkg/analyse/driver_test.go b/pkg/analyse/driver_test.go index b9653225..81e795ea 100644 --- a/pkg/analyse/driver_test.go +++ b/pkg/analyse/driver_test.go @@ -44,6 +44,9 @@ type testExtractor struct { index int } +func (tds *testExtractor) Open() error { return nil } +func (tds *testExtractor) Close() error { return nil } + func (tds *testExtractor) ExtractValue() (bool, interface{}, error) { defer func() { tds.index++ }()