// getTableID retrieves the table ID for the specified table. func getTableID(p *planner, tn *parser.TableName) (sqlbase.ID, error) { if err := tn.QualifyWithDatabase(p.session.Database); err != nil { return 0, err } virtual, err := getVirtualTableDesc(tn) if err != nil { return 0, err } if virtual != nil { return virtual.GetID(), nil } dbID, err := p.getDatabaseID(tn.Database()) if err != nil { return 0, err } nameKey := tableKey{dbID, tn.Table()} key := nameKey.Key() gr, err := p.txn.Get(key) if err != nil { return 0, err } if !gr.Exists() { return 0, sqlbase.NewUndefinedTableError(parser.AsString(tn)) } return sqlbase.ID(gr.ValueInt()), nil }
// quoteName quotes based on Traditional syntax and adds commas between names. func quoteNames(names ...string) string { nameList := make(parser.NameList, len(names)) for i, n := range names { nameList[i] = parser.Name(n) } return parser.AsString(nameList) }
// findUnaliasedColumn looks up the column specified by a VarName, not // taking column renames into account (but table renames will be taken // into account). That is, given a table "blah" with single column "y", // findUnaliasedColumn("y") returns a valid index even in the context // of: // SELECT * FROM blah as foo(x) // If the VarName specifies a table name, only columns that have that // name as their source alias are considered. If the VarName does not // specify a table name, all columns in the data source are // considered. If no column is found, invalidColIdx is returned with // no error. func (p *planDataSource) findUnaliasedColumn( c *parser.ColumnItem, ) (colIdx int, err error) { colName := sqlbase.NormalizeName(c.ColumnName) tableName := sqlbase.NormalizeTableName(c.TableName) if tableName.Table() != "" { tn, err := p.info.checkDatabaseName(tableName) if err != nil { return invalidColIdx, nil } tableName = tn } colIdx = invalidColIdx planColumns := p.plan.Columns() selCol := func(colIdx int, idx int) (int, error) { col := planColumns[idx] if sqlbase.ReNormalizeName(col.Name) == colName { if colIdx != invalidColIdx { return invalidColIdx, fmt.Errorf("column reference \"%s\" is ambiguous", parser.AsString(c)) } colIdx = idx } return colIdx, nil } if tableName.Table() == "" { for idx := 0; idx < len(p.info.sourceColumns); idx++ { colIdx, err = selCol(colIdx, idx) if err != nil { return colIdx, err } } } else { colRange, ok := p.info.sourceAliases[tableName] if !ok { // A table name is specified, but there is no column with this // table name. return invalidColIdx, nil } for _, idx := range colRange { colIdx, err = selCol(colIdx, idx) if err != nil { return colIdx, err } } } return colIdx, nil }
func (s *starDatum) String() string { return parser.AsString(s) }
func (q *qvalue) String() string { return parser.AsString(q) }
func (s *subquery) String() string { return parser.AsString(s) }