diff --git a/enginetest/queries/queries.go b/enginetest/queries/queries.go index 78391e3f97..79d1192e2e 100644 --- a/enginetest/queries/queries.go +++ b/enginetest/queries/queries.go @@ -10171,6 +10171,18 @@ from typestable`, {2}, }, }, + { + Query: "select ''", + Expected: []sql.Row{ + {""}, + }, + }, + { + Query: "select '' from dual", + Expected: []sql.Row{ + {""}, + }, + }, { Query: "select @@sql_mode = 1", diff --git a/sql/analyzer/optimization_rules.go b/sql/analyzer/optimization_rules.go index 9d53294a9b..71c4c5e520 100644 --- a/sql/analyzer/optimization_rules.go +++ b/sql/analyzer/optimization_rules.go @@ -17,6 +17,8 @@ package analyzer import ( "strings" + "github.com/dolthub/go-mysql-server/memory" + "github.com/dolthub/go-mysql-server/sql" "github.com/dolthub/go-mysql-server/sql/expression" "github.com/dolthub/go-mysql-server/sql/plan" @@ -43,7 +45,9 @@ func eraseProjection(ctx *sql.Context, a *Analyzer, node sql.Node, scope *plan.S return transform.Node(node, func(node sql.Node) (sql.Node, transform.TreeIdentity, error) { project, ok := node.(*plan.Project) if ok { - if project.Schema().CaseSensitiveEquals(project.Child.Schema()) { + projSch := project.Schema() + childSch := project.Child.Schema() + if projSch.CaseSensitiveEquals(childSch) && !childSch.Equals(memory.DualTableSchema.Schema) { a.Log("project erased") return project.Child, transform.NewTree, nil }