// getSharedColumns returns the intersection of two lists of columns in same order as the first list func (this *Inspector) getSharedColumns(originalColumns, ghostColumns *sql.ColumnList, columnRenameMap map[string]string) (*sql.ColumnList, *sql.ColumnList) { columnsInGhost := make(map[string]bool) for _, ghostColumn := range ghostColumns.Names { columnsInGhost[ghostColumn] = true } sharedColumnNames := []string{} for _, originalColumn := range originalColumns.Names { if columnsInGhost[originalColumn] || columnsInGhost[columnRenameMap[originalColumn]] { sharedColumnNames = append(sharedColumnNames, originalColumn) } } mappedSharedColumnNames := []string{} for _, columnName := range sharedColumnNames { if mapped, ok := columnRenameMap[columnName]; ok { mappedSharedColumnNames = append(mappedSharedColumnNames, mapped) } else { mappedSharedColumnNames = append(mappedSharedColumnNames, columnName) } } return sql.NewColumnList(sharedColumnNames), sql.NewColumnList(mappedSharedColumnNames) }
// getTableColumns reads column list from given table func (this *Inspector) getTableColumns(databaseName, tableName string) (*sql.ColumnList, error) { query := fmt.Sprintf(` show columns from %s.%s `, sql.EscapeName(databaseName), sql.EscapeName(tableName), ) columnNames := []string{} err := sqlutils.QueryRowsMap(this.db, query, func(rowMap sqlutils.RowMap) error { columnNames = append(columnNames, rowMap.GetString("Field")) return nil }) if err != nil { return nil, err } if len(columnNames) == 0 { return nil, log.Errorf("Found 0 columns on %s.%s. Bailing out", sql.EscapeName(databaseName), sql.EscapeName(tableName), ) } return sql.NewColumnList(columnNames), nil }