Skip to content

Commit a2e0a3e

Browse files
committed
feat: Implement query planning for SQL and fix more bugs
1 parent f275ecf commit a2e0a3e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1156
-453
lines changed

Diff for: glint/src/main/java/co/clflushopt/glint/dataframe/DataFrame.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.List;
44

5-
import co.clflushopt.glint.query.logical.expr.AggregateExpr;
5+
import co.clflushopt.glint.query.logical.expr.LogicalAggregateExpr;
66
import co.clflushopt.glint.query.logical.expr.LogicalExpr;
77
import co.clflushopt.glint.query.logical.plan.LogicalPlan;
88
import co.clflushopt.glint.types.Schema;
@@ -33,7 +33,7 @@ public interface DataFrame {
3333
*
3434
* @return aggregated tuples as a dataframe.
3535
*/
36-
public DataFrame aggregate(List<LogicalExpr> groupBy, List<AggregateExpr> aggregateExpr);
36+
public DataFrame aggregate(List<LogicalExpr> groupBy, List<LogicalAggregateExpr> aggregateExpr);
3737

3838
/**
3939
* Returns the schema of the tuples in the dataframe.

Diff for: glint/src/main/java/co/clflushopt/glint/dataframe/DataFrameImpl.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
import java.util.List;
44

5-
import co.clflushopt.glint.query.logical.expr.AggregateExpr;
5+
import co.clflushopt.glint.query.logical.expr.LogicalAggregateExpr;
66
import co.clflushopt.glint.query.logical.expr.LogicalExpr;
77
import co.clflushopt.glint.query.logical.plan.Aggregate;
8+
import co.clflushopt.glint.query.logical.plan.Filter;
89
import co.clflushopt.glint.query.logical.plan.LogicalPlan;
910
import co.clflushopt.glint.query.logical.plan.Projection;
10-
import co.clflushopt.glint.query.logical.plan.Selection;
1111
import co.clflushopt.glint.types.Schema;
1212

1313
public class DataFrameImpl implements DataFrame {
@@ -24,11 +24,12 @@ public DataFrame project(List<LogicalExpr> expr) {
2424

2525
@Override
2626
public DataFrame filter(LogicalExpr expr) {
27-
return new DataFrameImpl(new Selection(plan, expr));
27+
return new DataFrameImpl(new Filter(plan, expr));
2828
}
2929

3030
@Override
31-
public DataFrame aggregate(List<LogicalExpr> groupBy, List<AggregateExpr> aggregateExpr) {
31+
public DataFrame aggregate(List<LogicalExpr> groupBy,
32+
List<LogicalAggregateExpr> aggregateExpr) {
3233
return new DataFrameImpl(new Aggregate(plan, groupBy, aggregateExpr));
3334
}
3435

Diff for: glint/src/main/java/co/clflushopt/glint/datasource/MemoryDataSource.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public Schema getSchema() {
2727

2828
@Override
2929
public List<RecordBatch> scan(List<String> projection) {
30-
var projectionIndices = projection.stream()
31-
.map(name -> Iterables.indexOf(schema.getFields(), field -> field.name() == name))
30+
var projectionIndices = projection.stream().map(
31+
name -> Iterables.indexOf(schema.getFields(), field -> field.name().equals(name)))
3232
.collect(Collectors.toList());
3333

3434
return records.stream()

Diff for: glint/src/main/java/co/clflushopt/glint/examples/NYCYellowTrips.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
import co.clflushopt.glint.core.ExecutionContext;
1313
import co.clflushopt.glint.core.datasets.DatasetUtils;
1414
import co.clflushopt.glint.dataframe.DataFrame;
15-
import co.clflushopt.glint.query.logical.expr.AggregateExpr;
16-
import co.clflushopt.glint.query.logical.expr.CastExpr;
17-
import co.clflushopt.glint.query.logical.expr.ColumnExpr;
15+
import co.clflushopt.glint.query.logical.expr.LogicalAggregateExpr;
16+
import co.clflushopt.glint.query.logical.expr.LogicalCastExpr;
17+
import co.clflushopt.glint.query.logical.expr.LogicalColumnExpr;
1818
import co.clflushopt.glint.query.logical.expr.LogicalExpr;
1919
import co.clflushopt.glint.query.logical.plan.LogicalPlan;
2020
import co.clflushopt.glint.query.optimizer.QueryOptimizer;
@@ -101,15 +101,15 @@ public static void runParquetExample() throws FileNotFoundException {
101101

102102
// Helper methods for creating expressions
103103
private static LogicalExpr col(String name) {
104-
return new ColumnExpr(name);
104+
return new LogicalColumnExpr(name);
105105
}
106106

107107
private static LogicalExpr cast(LogicalExpr expr, ArrowType targetType) {
108-
return new CastExpr(expr, targetType);
108+
return new LogicalCastExpr(expr, targetType);
109109
}
110110

111-
private static AggregateExpr max(LogicalExpr expr) {
112-
return new AggregateExpr.Max(expr);
111+
private static LogicalAggregateExpr max(LogicalExpr expr) {
112+
return new LogicalAggregateExpr.Max(expr);
113113
}
114114

115115
}

Diff for: glint/src/main/java/co/clflushopt/glint/query/logical/expr/AggregateExpr.java renamed to glint/src/main/java/co/clflushopt/glint/query/logical/expr/LogicalAggregateExpr.java

+13-13
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
*
1010
* AggregateExpr
1111
*/
12-
public abstract class AggregateExpr implements LogicalExpr {
12+
public abstract class LogicalAggregateExpr implements LogicalExpr {
1313
protected final String name;
1414
protected final LogicalExpr expr;
1515

16-
public AggregateExpr(String name, LogicalExpr expr) {
16+
public LogicalAggregateExpr(String name, LogicalExpr expr) {
1717
this.name = name;
1818
this.expr = expr;
1919
}
@@ -36,25 +36,25 @@ public String toString() {
3636
* Sum aggregation operator.
3737
*
3838
*/
39-
public static class Sum extends AggregateExpr {
39+
public static class Sum extends LogicalAggregateExpr {
4040
public Sum(LogicalExpr input) {
4141
super("SUM", input);
4242
}
4343
}
4444

45-
public static class Min extends AggregateExpr {
45+
public static class Min extends LogicalAggregateExpr {
4646
public Min(LogicalExpr input) {
4747
super("MIN", input);
4848
}
4949
}
5050

51-
public static class Max extends AggregateExpr {
51+
public static class Max extends LogicalAggregateExpr {
5252
public Max(LogicalExpr input) {
5353
super("MAX", input);
5454
}
5555
}
5656

57-
public static class Avg extends AggregateExpr {
57+
public static class Avg extends LogicalAggregateExpr {
5858
public Avg(LogicalExpr input) {
5959
super("AVG", input);
6060
}
@@ -66,7 +66,7 @@ public Field toField(LogicalPlan plan) {
6666
}
6767
}
6868

69-
public static class Count extends AggregateExpr {
69+
public static class Count extends LogicalAggregateExpr {
7070
public Count(LogicalExpr input) {
7171
super("COUNT", input);
7272
}
@@ -83,7 +83,7 @@ public String toString() {
8383
}
8484
}
8585

86-
public static class CountDistinct extends AggregateExpr {
86+
public static class CountDistinct extends LogicalAggregateExpr {
8787
public CountDistinct(LogicalExpr input) {
8888
super("COUNT_DISTINCT", input);
8989
}
@@ -100,23 +100,23 @@ public String toString() {
100100
}
101101

102102
// Factory methods for creating aggregate expressions
103-
public static AggregateExpr sum(LogicalExpr input) {
103+
public static LogicalAggregateExpr sum(LogicalExpr input) {
104104
return new Sum(input);
105105
}
106106

107-
public static AggregateExpr min(LogicalExpr input) {
107+
public static LogicalAggregateExpr min(LogicalExpr input) {
108108
return new Min(input);
109109
}
110110

111-
public static AggregateExpr max(LogicalExpr input) {
111+
public static LogicalAggregateExpr max(LogicalExpr input) {
112112
return new Max(input);
113113
}
114114

115-
public static AggregateExpr avg(LogicalExpr input) {
115+
public static LogicalAggregateExpr avg(LogicalExpr input) {
116116
return new Avg(input);
117117
}
118118

119-
public static AggregateExpr count(LogicalExpr input) {
119+
public static LogicalAggregateExpr count(LogicalExpr input) {
120120
return new Count(input);
121121
}
122122
}

Diff for: glint/src/main/java/co/clflushopt/glint/query/logical/expr/AliasExpr.java renamed to glint/src/main/java/co/clflushopt/glint/query/logical/expr/LogicalAliasExpr.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
*
99
* AliasExpr
1010
*/
11-
public class AliasExpr implements LogicalExpr {
11+
public class LogicalAliasExpr implements LogicalExpr {
1212
private String alias;
1313
private LogicalExpr expr;
1414

15-
public AliasExpr(LogicalExpr expr, String alias) {
15+
public LogicalAliasExpr(LogicalExpr expr, String alias) {
1616
this.expr = expr;
1717
this.alias = alias;
1818
}
@@ -27,7 +27,7 @@ public String getAlias() {
2727

2828
@Override
2929
public Field toField(LogicalPlan plan) {
30-
return new Field(expr.toField(plan).name(), expr.toField(plan).dataType());
30+
return new Field(alias, expr.toField(plan).dataType());
3131
}
3232

3333
@Override

Diff for: glint/src/main/java/co/clflushopt/glint/query/logical/expr/BinaryExpr.java renamed to glint/src/main/java/co/clflushopt/glint/query/logical/expr/LogicalBinaryExpr.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package co.clflushopt.glint.query.logical.expr;
22

3-
public abstract class BinaryExpr {
3+
public abstract class LogicalBinaryExpr {
44
private String name;
55
private String operator;
66
private LogicalExpr lhs;
77
private LogicalExpr rhs;
88

9-
public BinaryExpr(String name, String operator, LogicalExpr lhs, LogicalExpr rhs) {
9+
public LogicalBinaryExpr(String name, String operator, LogicalExpr lhs, LogicalExpr rhs) {
1010
this.name = name;
1111
this.operator = operator;
1212
this.lhs = lhs;

Diff for: glint/src/main/java/co/clflushopt/glint/query/logical/expr/BooleanExpr.java renamed to glint/src/main/java/co/clflushopt/glint/query/logical/expr/LogicalBooleanExpr.java

+18-18
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
*
1010
* BooleanBinaryExpr
1111
*/
12-
public class BooleanExpr extends BinaryExpr implements LogicalExpr {
12+
public class LogicalBooleanExpr extends LogicalBinaryExpr implements LogicalExpr {
1313

14-
public BooleanExpr(String name, String operator, LogicalExpr lhs, LogicalExpr rhs) {
14+
public LogicalBooleanExpr(String name, String operator, LogicalExpr lhs, LogicalExpr rhs) {
1515
super(name, operator, lhs, rhs);
1616
}
1717

@@ -32,8 +32,8 @@ public String toString() {
3232
* @param rhs
3333
* @return
3434
*/
35-
public static BooleanExpr Eq(LogicalExpr lhs, LogicalExpr rhs) {
36-
return new BooleanExpr("eq", "=", lhs, rhs);
35+
public static LogicalBooleanExpr Eq(LogicalExpr lhs, LogicalExpr rhs) {
36+
return new LogicalBooleanExpr("eq", "=", lhs, rhs);
3737
}
3838

3939
/**
@@ -43,8 +43,8 @@ public static BooleanExpr Eq(LogicalExpr lhs, LogicalExpr rhs) {
4343
* @param rhs
4444
* @return
4545
*/
46-
public static BooleanExpr Neq(LogicalExpr lhs, LogicalExpr rhs) {
47-
return new BooleanExpr("neq", "!=", lhs, rhs);
46+
public static LogicalBooleanExpr Neq(LogicalExpr lhs, LogicalExpr rhs) {
47+
return new LogicalBooleanExpr("neq", "!=", lhs, rhs);
4848
}
4949

5050
/**
@@ -54,8 +54,8 @@ public static BooleanExpr Neq(LogicalExpr lhs, LogicalExpr rhs) {
5454
* @param rhs
5555
* @return
5656
*/
57-
public static BooleanExpr Gt(LogicalExpr lhs, LogicalExpr rhs) {
58-
return new BooleanExpr("gt", ">", lhs, rhs);
57+
public static LogicalBooleanExpr Gt(LogicalExpr lhs, LogicalExpr rhs) {
58+
return new LogicalBooleanExpr("gt", ">", lhs, rhs);
5959
}
6060

6161
/**
@@ -66,8 +66,8 @@ public static BooleanExpr Gt(LogicalExpr lhs, LogicalExpr rhs) {
6666
* @param rhs
6767
* @return
6868
*/
69-
public static BooleanExpr Gte(LogicalExpr lhs, LogicalExpr rhs) {
70-
return new BooleanExpr("gte", ">=", lhs, rhs);
69+
public static LogicalBooleanExpr Gte(LogicalExpr lhs, LogicalExpr rhs) {
70+
return new LogicalBooleanExpr("gte", ">=", lhs, rhs);
7171
}
7272

7373
/**
@@ -77,8 +77,8 @@ public static BooleanExpr Gte(LogicalExpr lhs, LogicalExpr rhs) {
7777
* @param rhs
7878
* @return
7979
*/
80-
public static BooleanExpr Lt(LogicalExpr lhs, LogicalExpr rhs) {
81-
return new BooleanExpr("lt", "<", lhs, rhs);
80+
public static LogicalBooleanExpr Lt(LogicalExpr lhs, LogicalExpr rhs) {
81+
return new LogicalBooleanExpr("lt", "<", lhs, rhs);
8282
}
8383

8484
/**
@@ -89,8 +89,8 @@ public static BooleanExpr Lt(LogicalExpr lhs, LogicalExpr rhs) {
8989
* @param rhs
9090
* @return
9191
*/
92-
public static BooleanExpr Lte(LogicalExpr lhs, LogicalExpr rhs) {
93-
return new BooleanExpr("lte", "<=", lhs, rhs);
92+
public static LogicalBooleanExpr Lte(LogicalExpr lhs, LogicalExpr rhs) {
93+
return new LogicalBooleanExpr("lte", "<=", lhs, rhs);
9494
}
9595

9696
/**
@@ -100,8 +100,8 @@ public static BooleanExpr Lte(LogicalExpr lhs, LogicalExpr rhs) {
100100
* @param rhs
101101
* @return
102102
*/
103-
public static BooleanExpr And(LogicalExpr lhs, LogicalExpr rhs) {
104-
return new BooleanExpr("and", "AND", lhs, rhs);
103+
public static LogicalBooleanExpr And(LogicalExpr lhs, LogicalExpr rhs) {
104+
return new LogicalBooleanExpr("and", "AND", lhs, rhs);
105105
}
106106

107107
/**
@@ -111,7 +111,7 @@ public static BooleanExpr And(LogicalExpr lhs, LogicalExpr rhs) {
111111
* @param rhs
112112
* @return
113113
*/
114-
public static BooleanExpr Or(LogicalExpr lhs, LogicalExpr rhs) {
115-
return new BooleanExpr("or", "OR", lhs, rhs);
114+
public static LogicalBooleanExpr Or(LogicalExpr lhs, LogicalExpr rhs) {
115+
return new LogicalBooleanExpr("or", "OR", lhs, rhs);
116116
}
117117
}

Diff for: glint/src/main/java/co/clflushopt/glint/query/logical/expr/CastExpr.java renamed to glint/src/main/java/co/clflushopt/glint/query/logical/expr/LogicalCastExpr.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
*
1212
* CastExpr
1313
*/
14-
public class CastExpr implements LogicalExpr {
14+
public class LogicalCastExpr implements LogicalExpr {
1515
private LogicalExpr expr;
1616
private ArrowType dataType;
1717

18-
public CastExpr(LogicalExpr expr, ArrowType dataType) {
18+
public LogicalCastExpr(LogicalExpr expr, ArrowType dataType) {
1919
this.expr = expr;
2020
this.dataType = dataType;
2121
}

Diff for: glint/src/main/java/co/clflushopt/glint/query/logical/expr/ColumnExpr.java renamed to glint/src/main/java/co/clflushopt/glint/query/logical/expr/LogicalColumnExpr.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
*
1010
* ColumnExpr
1111
*/
12-
public class ColumnExpr implements LogicalExpr {
12+
public class LogicalColumnExpr implements LogicalExpr {
1313
private String name;
1414

15-
public ColumnExpr(String name) {
15+
public LogicalColumnExpr(String name) {
1616
this.name = name;
1717
}
1818

@@ -22,7 +22,7 @@ public String getName() {
2222

2323
@Override
2424
public Field toField(LogicalPlan plan) {
25-
return plan.getSchema().getFields().stream().filter(field -> field.name() == name)
25+
return plan.getSchema().getFields().stream().filter(field -> field.name().equals(name))
2626
.findFirst().get();
2727
}
2828

Diff for: glint/src/main/java/co/clflushopt/glint/query/logical/expr/ColumnIndex.java renamed to glint/src/main/java/co/clflushopt/glint/query/logical/expr/LogicalColumnIndex.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
/**
77
* Logical expression representing a referenced column by an index. ColumnIndex
88
*/
9-
public class ColumnIndex implements LogicalExpr {
9+
public class LogicalColumnIndex implements LogicalExpr {
1010
private Integer index;
1111

12-
public ColumnIndex(Integer index) {
12+
public LogicalColumnIndex(Integer index) {
1313
this.index = index;
1414
}
1515

0 commit comments

Comments
 (0)