diff --git a/driver_test.go b/driver_test.go index cb0d5f5ec..f9da416ec 100644 --- a/driver_test.go +++ b/driver_test.go @@ -1246,6 +1246,30 @@ func TestCollation(t *testing.T) { } } +func TestColumnsWithAlias(t *testing.T) { + runTests(t, dsn+"&columnsWithAlias=true", func(dbt *DBTest) { + rows := dbt.mustQuery("SELECT 1 AS A") + defer rows.Close() + cols, _ := rows.Columns() + if len(cols) != 1 { + t.Fatalf("expected 1 column, got %d", len(cols)) + } + if cols[0] != "A" { + t.Fatalf("expected column name \"A\", got \"%s\"", cols[0]) + } + rows.Close() + + rows = dbt.mustQuery("SELECT * FROM (SELECT 1 AS one) AS A") + cols, _ = rows.Columns() + if len(cols) != 1 { + t.Fatalf("expected 1 column, got %d", len(cols)) + } + if cols[0] != "A.one" { + t.Fatalf("expected column name \"A.one\", got \"%s\"", cols[0]) + } + }) +} + func TestRawBytesResultExceedsBuffer(t *testing.T) { runTests(t, dsn, func(dbt *DBTest) { // defaultBufSize from buffer.go diff --git a/rows.go b/rows.go index 9d97d6d4f..ba606e146 100644 --- a/rows.go +++ b/rows.go @@ -40,7 +40,11 @@ func (rows *mysqlRows) Columns() []string { columns := make([]string, len(rows.columns)) if rows.mc.cfg.columnsWithAlias { for i := range columns { - columns[i] = rows.columns[i].tableName + "." + rows.columns[i].name + if tableName := rows.columns[i].tableName; len(tableName) > 0 { + columns[i] = tableName + "." + rows.columns[i].name + } else { + columns[i] = rows.columns[i].name + } } } else { for i := range columns {