/
JoinParser.java
77 lines (66 loc) · 1.84 KB
/
JoinParser.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
Name: Martin Smith, Eric Anderson
CSCI 330 - Spring 2019
File Name : JoinParser.java
*/
import java.util.*;
public class JoinParser{ // handler for the JOIN command
private String relationAName;
private String relationBName;
private String relationTempName;
private boolean validStatement;
private Relation r;
private Parser p;
private JoinCondition join;
JoinParser(Parser p){ // constructor
this.p = p;
relationAName = new String();
relationBName = new String();
relationTempName = new String();
r = new Relation();
join = new JoinCondition();
validStatement = true;
addInfo();
}
public void setRelationA(Relation A) { join.setRelA(A); }
public void setRelationB(Relation B) { join.setRelB(B); }
public void getComparison(){
join.compare();
r = join.getJoinedRel();
r.setName(relationTempName);
}
private int hasOn(LinkedList<String> info){ // checks that there is indeed a join condition.
int i = 0;
while(i != info.size() && !info.get(i).equals("ON")){
i++;
}
if(i == info.size()){
i = -1;
validStatement = false;
}
return i;
}
private void addInfo(){ // based on what the JoinCondition returns
LinkedList<String> content = p.parseCommandSet();
relationTempName = content.get(0);
int onPtr = hasOn(content);
if(onPtr != -1){
relationAName = content.get(3);
relationBName = content.get(5);
join.setLeft(content.get(onPtr + 1));
join.setEquivalence(content.get(onPtr + 2));
join.setRight(content.get(onPtr + 3));
}
}
public boolean isValid(){
if(validStatement){
validStatement = join.validEquivalence();
}
return validStatement;
}
public boolean validRelations(){ return join.evaluate(); }
public String getRelationAName(){ return relationAName; }
public String getRelationBName(){ return relationBName; }
public Relation getTempRelation(){ return r; }
}
// ### END ###