mirror of
https://github.com/ent/ent.git
synced 2026-05-22 09:31:45 +03:00
dialect/sql: improve support for subqueries (#3274)
This commit is contained in:
@@ -2367,7 +2367,25 @@ func (s *Selector) Table() *SelectTable {
|
||||
if len(s.from) == 0 {
|
||||
return nil
|
||||
}
|
||||
return s.from[0].(*SelectTable)
|
||||
return selectTable(s.from[0])
|
||||
}
|
||||
|
||||
// selectTable returns a *SelectTable from the given TableView.
|
||||
func selectTable(tb TableView) *SelectTable {
|
||||
if tb == nil {
|
||||
return nil
|
||||
}
|
||||
switch view := tb.(type) {
|
||||
case *SelectTable:
|
||||
return view
|
||||
case *Selector:
|
||||
if len(view.from) == 0 {
|
||||
return nil
|
||||
}
|
||||
return selectTable(view.from[0])
|
||||
default:
|
||||
panic(fmt.Sprintf("unhandled TableView type %T", tb))
|
||||
}
|
||||
}
|
||||
|
||||
// TableName returns the name of the selected table or alias of selector.
|
||||
|
||||
@@ -2355,3 +2355,14 @@ func TestMultipleFrom(t *testing.T) {
|
||||
require.Equal(t, []any{"neutrino|(dark & matter)", 10}, args)
|
||||
require.Equal(t, `SELECT items.*, ts_rank_cd(search, search_query) AS "rank" FROM "items", to_tsquery($1) AS search_query WHERE "value" = $2 AND search @@ search_query`, query)
|
||||
}
|
||||
|
||||
func TestFormattedColumnFromSubQuery(t *testing.T) {
|
||||
q := Select("*").From(Select("*").AppendSelectExprAs(P(func(b *Builder) {
|
||||
b.SetDialect(dialect.Postgres)
|
||||
b.WriteString("calculate_score")
|
||||
b.Wrap(func(bb *Builder) {
|
||||
bb.WriteString(Table("table_name").C("field_name")).Comma().Args("test")
|
||||
})
|
||||
}), "score").From(Table("table_name").As("table_name_alias")))
|
||||
require.Equal(t, "`table_name_alias`.`score`", q.C("score"))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user