Skip to content

Commit fa2f889

Browse files
committed
Change plan names
1 parent ba8ef70 commit fa2f889

12 files changed

+101
-32
lines changed

Entities/Questions.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
1. What is the size estimation of ExpandAll and ExpandInto plan?
2+
3+
2.

Query/Engine/QueryPlanner.java

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class QueryPlanner {
2121
private QueryIndexer indexer;
2222
private List<PlanTable> planTables = new ArrayList<>();
2323

24-
private List<String> nodes = new ArrayList<>();
24+
private Set<String> nodes = new HashSet<>();
2525
private List<RelationEdge> edges = new ArrayList<>();
2626

2727
public QueryPlanner(Map<String, QueryConstraints> varToConstraint,
@@ -64,9 +64,27 @@ private void constructLeafPlan() {
6464
//TODO: Change this to selecting the optimal plan.
6565
// Just pick the first and use others as filters.
6666
QueryConstraints constraints = varToConstraint.get(node);
67-
Constraint constraint = constraints.getConstraints().get(0);
67+
List<Constraint> constraintsList = new ArrayList<>();
68+
for(Constraint constraint : constraints.getConstraints()){
69+
if(constraint.name.contains("id")){
70+
constraintsList.add(constraint);
71+
}
72+
}
73+
for(Constraint constraint : constraints.getConstraints()){
74+
if(constraint.name.contains("nodeLabels")){
75+
constraintsList.add(constraint);
76+
}
77+
}
78+
for(Constraint constraint : constraints.getConstraints()){
79+
if(!constraint.name.contains("id") && !constraint.name.contains("nodeLabels")){
80+
constraintsList.add(constraint);
81+
}
82+
}
83+
Constraint constraint = constraintsList.get(0);
84+
6885
switch (constraint.name) {
6986
case "nodeLabels":
87+
assert constraint.value.type.contains("List");
7088
List<String> labels = ((List<String>) constraint.value.val);
7189
ScanByLabelPlan scanByLabelPlan = new ScanByLabelPlan(indexer, node, labels);
7290
scanByLabelPlan.applyTo(table);
@@ -87,8 +105,8 @@ private void constructLeafPlan() {
87105
break;
88106
}
89107

90-
for (int i = 1, size = constraints.getConstraints().size(); i < size; i++) {
91-
Constraint cons = constraints.getConstraints().get(i);
108+
for (int i = 1, size = constraintsList.size(); i < size; i++) {
109+
Constraint cons = constraintsList.get(i);
92110
FilterConstraintPlan filterConstraintPlan = new FilterConstraintPlan(indexer, node, cons, table);
93111
filterConstraintPlan.applyTo(table);
94112
}
@@ -102,7 +120,7 @@ private void constructLeafPlan() {
102120

103121
private List<PlanTable> candidates = new ArrayList<>();
104122
public void plan() {
105-
123+
System.out.println("Generating Plan...");
106124
init();
107125

108126
// Find start point
@@ -139,7 +157,11 @@ public void plan() {
139157
planTables.removeIf(table -> covers(best, table));
140158

141159
planTables.add(best);
142-
removeRelated(best.plans.get(best.plans.size() - 1));
160+
161+
for(Plan plan : best.plans){
162+
removeRelated(plan);
163+
}
164+
143165

144166

145167
}while(candidates.size() > 0);
@@ -153,13 +175,30 @@ public void plan() {
153175
private void removeRelated(Plan plan){
154176
if(plan instanceof ExpandAllPlan || plan instanceof ExpandIntoPlan){
155177
for(RelationEdge edge : edges){
156-
if(edge.name.equals(plan.getParams())){
157-
edge.used = true;
178+
if(plan instanceof ExpandAllPlan){
179+
String name = ((ExpandAllPlan) plan).getRelationEdge().name;
180+
if(edge.name.equals(name)){
181+
edge.used = true;
182+
break;
183+
}
184+
}
185+
186+
if(plan instanceof ExpandIntoPlan){
187+
String name = ((ExpandIntoPlan) plan).getRelationEdge().name;
188+
if(edge.name.equals(name)){
189+
edge.used = true;
190+
break;
191+
}
158192
}
159193
}
160194
}else if(plan instanceof NodeHashJoinPlan ||
161195
plan instanceof FilterRelationEqualityPlan){
162-
equalityList.removeAll(((NodeHashJoinPlan) plan).getEquality());
196+
if(plan instanceof NodeHashJoinPlan){
197+
equalityList.removeAll(((NodeHashJoinPlan) plan).getEquality());
198+
}else{
199+
equalityList.removeAll(((FilterRelationEqualityPlan) plan).getEquality());
200+
}
201+
163202
}
164203

165204
}
@@ -245,8 +284,9 @@ private void constructExpand(PlanTable table){
245284
}
246285
PlanTable newTable;
247286
if(table.nodes.contains(edge.start) && table.nodes.contains(edge.end)){
287+
QueryConstraints constraints = varToConstraint.get(edge.name);
248288
ExpandIntoPlan plan = new ExpandIntoPlan(indexer,edge,
249-
varToConstraint.get(edge.name),
289+
constraints,
250290
table);
251291
newTable = new PlanTable(table);
252292
plan.applyTo(newTable);
@@ -259,6 +299,13 @@ private void constructExpand(PlanTable table){
259299
newTable = new PlanTable(table);
260300
plan.applyTo(newTable);
261301
newTable = addAdditionalFilter(newTable);
302+
String addedNode = plan.getExpandedNode();
303+
if(varToConstraint.get(addedNode).getConstraints().size() > 0){
304+
for(Constraint constraint : varToConstraint.get(addedNode).getConstraints()){
305+
FilterConstraintPlan plan1 = new FilterConstraintPlan(indexer, addedNode, constraint, newTable);
306+
plan1.applyTo(newTable);
307+
}
308+
}
262309
candidates.add(newTable);
263310
}
264311

Query/Plan/ExpandAllPlan.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
* Created by liuche on 5/29/17.
1414
*/
1515
public class ExpandAllPlan extends Plan {
16-
RelationEdge edge;
17-
String fromNode;
18-
String toNode;
16+
private RelationEdge edge;
17+
private String fromNode;
18+
private String toNode;
1919
public ExpandAllPlan(QueryIndexer queryIndexer, RelationEdge edge, QueryConstraints constraints, PlanTable table) {
2020
super(queryIndexer);
2121
this.edge = edge;
@@ -84,7 +84,7 @@ public void applyTo(PlanTable table) {
8484

8585
@Override
8686
public String getParams() {
87-
return edge.name;
87+
return "-[" + edge.name + "]-(" + toNode + ")";
8888
}
8989

9090
@Override
@@ -94,10 +94,14 @@ public String getVariable() {
9494

9595
@Override
9696
public String getName() {
97-
return "ExpandAllPlan";
97+
return "ExpandAll";
9898
}
9999

100100
public RelationEdge getRelationEdge(){
101101
return this.edge;
102102
}
103+
104+
public String getExpandedNode(){
105+
return toNode;
106+
}
103107
}

Query/Plan/ExpandIntoPlan.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void applyTo(PlanTable table) {
8080

8181
@Override
8282
public String getParams() {
83-
return edge.name;
83+
return "-[" + edge.name + "]-(" + edge.end + ")";
8484
}
8585

8686
@Override
@@ -90,7 +90,7 @@ public String getVariable() {
9090

9191
@Override
9292
public String getName() {
93-
return "ExpandIntoPlan";
93+
return "ExpandInto";
9494
}
9595

9696
public RelationEdge getRelationEdge(){

Query/Plan/FilterConstraintPlan.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@
99

1010
/**
1111
* Created by liuche on 5/29/17.
12+
*
1213
*/
1314
public class FilterConstraintPlan extends Plan {
14-
Constraint varConstraint;
15+
private Constraint varConstraint;
1516

1617
public FilterConstraintPlan(QueryIndexer queryIndexer, String var, Constraint constraint,PlanTable table) {
1718
super(queryIndexer);
@@ -20,9 +21,10 @@ public FilterConstraintPlan(QueryIndexer queryIndexer, String var, Constraint co
2021
estimatedSize = table.estimatedSize;
2122
switch (constraint.name){
2223
case "nodeLabels":
23-
List<String> labels = ((List<String>)constraint.value);
24+
assert constraint.value.type.contains("List");
25+
List<String> labels = (List<String>)(constraint.value.val);
2426
for(String label : labels){
25-
estimatedSize /= queryIndexer.getNodesWithLabel(label);
27+
estimatedSize = estimatedSize * (queryIndexer.getNodesWithLabel(label) * 1.0 / queryIndexer.getNumberOfNode());
2628
}
2729
break;
2830
case "id":
@@ -32,16 +34,20 @@ public FilterConstraintPlan(QueryIndexer queryIndexer, String var, Constraint co
3234
Value val = constraint.value;
3335
//TODO: Add supply for other equality types.
3436
assert val.type.equals("String");
35-
assert constraint.equality.equals("==");
36-
String property = constraint.name;
37-
this.estimatedSize /= indexer.getNodesWithProperty(property);
37+
38+
if(constraint.equality.equals("==")){
39+
String property = constraint.name;
40+
this.estimatedSize /= indexer.getNodesWithProperty(property) ;
41+
}
42+
3843
break;
3944
}
4045

4146
}
4247

4348
@Override
4449
public void applyTo(PlanTable table) {
50+
table.cost += table.estimatedSize;
4551
table.estimatedSize = estimatedSize;
4652
table.plans.add(this);
4753
}
@@ -53,6 +59,6 @@ public String getParams() {
5359

5460
@Override
5561
public String getName() {
56-
return "FilterConstraintPlan";
62+
return "FilterConstraint";
5763
}
5864
}

Query/Plan/FilterRelationEqualityPlan.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,15 @@ public FilterRelationEqualityPlan(QueryIndexer queryIndexer, List<Equality> equa
3232
public void applyTo(PlanTable table) {
3333
table.cost += table.estimatedSize * eqList.size();
3434
table.estimatedSize = this.estimatedSize;
35+
table.plans.add(this);
3536
super.applyTo(table);
3637
}
3738

3839
@Override
3940
public String getParams() {
4041
List<String> strings = new ArrayList<>();
4142
eqList.forEach(equality -> strings.add(equality.toString()));
42-
return String.join(" AND ");
43+
return String.join(" AND ", strings);
4344
}
4445

4546
@Override
@@ -49,6 +50,10 @@ public String getVariable() {
4950

5051
@Override
5152
public String getName() {
52-
return "FilterRelationEqualityPlan";
53+
return "FilterRelationEquality";
54+
}
55+
56+
public List<Equality> getEquality(){
57+
return this.eqList;
5358
}
5459
}

Query/Plan/NodeHashJoinPlan.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public String getVariable() {
5555

5656
@Override
5757
public String getName() {
58-
return "NodeHashJoinPlan";
58+
return "NodeHashJoin";
5959
}
6060

6161
public List<Equality> getEquality(){

Query/Plan/ScanByIdPlan.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@ public String getParams() {
3030

3131
@Override
3232
public String getName() {
33-
return "ScanByIdPlan";
33+
return "ScanById";
3434
}
3535
}

Query/Plan/ScanByLabelPlan.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
*/
1212
public class ScanByLabelPlan extends Plan {
1313
List<String> labels = new ArrayList<>();
14-
String variable;
1514
public ScanByLabelPlan(QueryIndexer queryIndexer, String node, List<String> labels) {
1615
super(queryIndexer);
1716
this.variable = node;
@@ -37,6 +36,10 @@ public String getParams() {
3736
return res;
3837
}
3938

39+
@Override
40+
public String getVariable(){
41+
return super.getVariable();
42+
}
4043

4144
@Override
4245
public String getName() {

Query/Plan/ScanByPropertyPlan.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ public String getParams() {
3131

3232
@Override
3333
public String getName() {
34-
return "ScanByPropertyPlan";
34+
return "ScanByProperty";
3535
}
3636
}

0 commit comments

Comments
 (0)