1 package uba.db.sql.interpreter.sentencevalidation;
2
3 import java.util.Set;
4
5 import uba.db.sql.language.ColumnName;
6 import uba.db.sql.language.Sentence;
7 import uba.db.sql.language.VisitorBehavior;
8
9 public class ColumnNameValidation extends SentenceValidationBehavior {
10
11 public ColumnNameValidation(Sentence sentence,
12 SentenceValidator validationContext) {
13 super(sentence, validationContext);
14 }
15
16 /***
17 * @see uba.db.sql.interpreter.sentencevalidation.SentenceValidationBehavior#execute()
18 */
19 public void execute() throws SentenceValidationException {
20 try {
21 sentence.accept(new ColumnNameValidationVisitor());
22 } catch (Exception e) {
23 throw new SentenceValidationException(e);
24 }
25 }
26
27 private class ColumnNameValidationVisitor extends VisitorBehavior {
28 public void visitColumnName(ColumnName columnName) {
29 String columnNameString = columnName.nameAsString();
30 Set tablesFound = validator
31 .findReferencedTablesWithColumnNamed(columnNameString);
32
33 if (tablesFound.isEmpty()) {
34 throw new InexistantColumnNameException(columnNameString);
35 }
36
37 if (tablesFound.size() > 1) {
38 throw new AmbiguousColumnNameException(columnNameString,
39 tablesFound);
40 }
41 }
42 }
43
44 }