// newSourceInfoForSingleTable creates a simple dataSourceInfo // which maps the same tableAlias to all columns. func newSourceInfoForSingleTable(tn parser.TableName, columns ResultColumns) *dataSourceInfo { norm := tn.NormalizedTableName() return &dataSourceInfo{ sourceColumns: columns, sourceAliases: sourceAliases{norm: fillColumnRange(0, len(columns)-1)}, } }
// expandStar returns the array of column metadata and name // expressions that correspond to the expansion of a star. func (src *dataSourceInfo) expandStar( v parser.VarName, ivarHelper parser.IndexedVarHelper, ) (columns ResultColumns, exprs []parser.TypedExpr, err error) { if len(src.sourceColumns) == 0 { return nil, nil, fmt.Errorf("cannot use %q without a FROM clause", v) } colSel := func(idx int) { col := src.sourceColumns[idx] if !col.hidden { ivar := ivarHelper.IndexedVar(idx) columns = append(columns, ResultColumn{Name: col.Name, Typ: ivar.ResolvedType()}) exprs = append(exprs, ivar) } } tableName := parser.TableName{} if a, ok := v.(*parser.AllColumnsSelector); ok { tableName = a.TableName } if tableName.Table() == "" { for i := 0; i < len(src.sourceColumns); i++ { colSel(i) } } else { norm := tableName.NormalizedTableName() qualifiedTn, err := src.checkDatabaseName(norm) if err != nil { return nil, nil, err } colRange, ok := src.sourceAliases[qualifiedTn] if !ok { return nil, nil, fmt.Errorf("table %q not found", tableName.String()) } for _, i := range colRange { colSel(i) } } return columns, exprs, nil }