void AmendColumnWalker::MutableVisit(Expr *io_expr) { switch (io_expr->GetExprType()) { case Expr::kExprColumnRef: { Status result; ColumnExpr *pColExpr = dynamic_cast<ColumnExpr *>(io_expr); PDASSERT(pColExpr); if (pColExpr) { ColumnQualifiedName qualifiedName = pColExpr->GetQualifiedColumnName(); if (qualifiedName.tableName.empty()) { bool hasMatch = false; std::string ownedTableName; TableAndColumnSetMap::const_iterator setIter = mTableAndColumnSetMap.begin(); for (; setIter != mTableAndColumnSetMap.end(); setIter++) { ColumnNameSet::const_iterator columnIter = setIter->second.begin(); for (; columnIter != setIter->second.end(); columnIter++) { if (*columnIter == qualifiedName.columnName) { if (hasMatch) { result = Status::kAmbiguousColumn; break; } else { ownedTableName = setIter->first; hasMatch = true; } } } } if (result.OK()) { if (hasMatch) { qualifiedName.tableName = ownedTableName; pColExpr->SetQualifiedColumnName(qualifiedName); } } } } break; } default: break; } }