Skip to content

Commit

Permalink
Sort columns (#41)
Browse files Browse the repository at this point in the history
  • Loading branch information
aslakhellesoy committed Jul 14, 2023
1 parent 1bdda72 commit 6c3b2df
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
7 changes: 7 additions & 0 deletions analyzer/analyzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ func (a analyzer) GetColumnsAndConstraints(db database.Connector, selectedTables
return nil, err
}

sortColumns(columns)
tableResults = append(tableResults, database.TableResult{Table: table, Columns: columns, Constraints: constraints})
}
a.loadingSpinner.Stop()
Expand All @@ -196,3 +197,9 @@ func getTableResultStats(tableResults []database.TableResult) (columnCount int,

return columnCount, constraintCount
}

func sortColumns(columns []database.ColumnResult) {
sort.SliceStable(columns, func(i, j int) bool {
return columns[i].Name < columns[j].Name
})
}
36 changes: 36 additions & 0 deletions analyzer/analyzer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -297,4 +297,40 @@ func TestAnalyzer_Analyze(t *testing.T) {
assert.Equal(t, result.Tables[2].Table, database.TableDetail{Schema: "schemaB", Name: "tableA"})
assert.Equal(t, result.Tables[3].Table, database.TableDetail{Schema: "schemaB", Name: "tableB"})
})

t.Run("Sorts the columns", func(t *testing.T) {
// Arrange
analyzer, configMock, connectionFactoryMock, questionerMock := getAnalyzerWithMocks()
connectorMock := mocks.Connector{}
configMock.On("ConnectionString").Return("validConnectionString").Once()
connectionFactoryMock.On("NewConnector", "validConnectionString").Return(&connectorMock, nil).Once()
connectorMock.On("Connect").Return(nil).Once()
connectorMock.On("Close").Return().Once()
configMock.On("Schemas").Return([]string{"schemaA", "schemaB"}).Once()
// The tables returned are unsorted
configMock.On("SelectedTables").Return([]string{
"schemaA.tableA",
}).Once()
connectorMock.On("GetColumns", database.TableDetail{Schema: "schemaA", Name: "tableA"}).Return([]database.ColumnResult{
{Name: "fieldB", DataType: "int"},
{Name: "fieldC", DataType: "int"},
{Name: "fieldA", DataType: "int"},
}, nil).Once()
connectorMock.On("GetConstraints", database.TableDetail{Schema: "schemaA", Name: "tableA"}).Return([]database.ConstraintResult{}, nil).Once()

// Act
result, err := analyzer.Analyze()

// Assert
configMock.AssertExpectations(t)
connectionFactoryMock.AssertExpectations(t)
questionerMock.AssertExpectations(t)
connectorMock.AssertExpectations(t)
assert.Nil(t, err)
assert.NotNil(t, result)
// The tables are now sorted
assert.Equal(t, result.Tables[0].Columns[0], database.ColumnResult{Name: "fieldA", DataType: "int"})
assert.Equal(t, result.Tables[0].Columns[1], database.ColumnResult{Name: "fieldB", DataType: "int"})
assert.Equal(t, result.Tables[0].Columns[2], database.ColumnResult{Name: "fieldC", DataType: "int"})
})
}

0 comments on commit 6c3b2df

Please sign in to comment.