You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2015/06/17 12:14:06 UTC
[3/8] incubator-kylin git commit: KYLIN-780, query compile pass
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/jdbc/src/main/java/org/apache/kylin/jdbc/Driver.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/Driver.java b/jdbc/src/main/java/org/apache/kylin/jdbc/Driver.java
index 5198fd7..cee4de4 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/Driver.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/Driver.java
@@ -21,12 +21,12 @@ package org.apache.kylin.jdbc;
import java.sql.DriverManager;
import java.sql.SQLException;
-import net.hydromatic.avatica.AvaticaConnection;
-import net.hydromatic.avatica.AvaticaStatement;
-import net.hydromatic.avatica.DriverVersion;
-import net.hydromatic.avatica.Handler;
-import net.hydromatic.avatica.HandlerImpl;
-import net.hydromatic.avatica.UnregisteredDriver;
+import org.apache.calcite.avatica.AvaticaConnection;
+import org.apache.calcite.avatica.AvaticaStatement;
+import org.apache.calcite.avatica.DriverVersion;
+import org.apache.calcite.avatica.Handler;
+import org.apache.calcite.avatica.HandlerImpl;
+import org.apache.calcite.avatica.UnregisteredDriver;
import org.apache.kylin.jdbc.stub.RemoteClient;
import org.slf4j.Logger;
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/jdbc/src/main/java/org/apache/kylin/jdbc/KylinConnectionImpl.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinConnectionImpl.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinConnectionImpl.java
index 887bd66..718ef7d 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinConnectionImpl.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinConnectionImpl.java
@@ -27,12 +27,12 @@ import java.util.Properties;
import javax.xml.bind.DatatypeConverter;
-import net.hydromatic.avatica.AvaticaConnection;
-import net.hydromatic.avatica.AvaticaFactory;
-import net.hydromatic.avatica.AvaticaPreparedStatement;
-import net.hydromatic.avatica.AvaticaStatement;
-import net.hydromatic.avatica.Meta;
-import net.hydromatic.avatica.UnregisteredDriver;
+import org.apache.calcite.avatica.AvaticaConnection;
+import org.apache.calcite.avatica.AvaticaFactory;
+import org.apache.calcite.avatica.AvaticaPreparedStatement;
+import org.apache.calcite.avatica.AvaticaStatement;
+import org.apache.calcite.avatica.Meta;
+import org.apache.calcite.avatica.UnregisteredDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/jdbc/src/main/java/org/apache/kylin/jdbc/KylinEnumerator.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinEnumerator.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinEnumerator.java
index 04d9231..2502d4b 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinEnumerator.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinEnumerator.java
@@ -21,7 +21,7 @@ package org.apache.kylin.jdbc;
import java.util.Collection;
import java.util.Iterator;
-import net.hydromatic.linq4j.Enumerator;
+import org.apache.calcite.linq4j.Enumerator;
/**
* Query results enumerator
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/jdbc/src/main/java/org/apache/kylin/jdbc/KylinJdbc41Factory.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinJdbc41Factory.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinJdbc41Factory.java
index 90ff2e2..1336f96 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinJdbc41Factory.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinJdbc41Factory.java
@@ -24,16 +24,16 @@ import java.util.List;
import java.util.Properties;
import java.util.TimeZone;
-import net.hydromatic.avatica.AvaticaConnection;
-import net.hydromatic.avatica.AvaticaDatabaseMetaData;
-import net.hydromatic.avatica.AvaticaFactory;
-import net.hydromatic.avatica.AvaticaPrepareResult;
-import net.hydromatic.avatica.AvaticaPreparedStatement;
-import net.hydromatic.avatica.AvaticaResultSet;
-import net.hydromatic.avatica.AvaticaResultSetMetaData;
-import net.hydromatic.avatica.AvaticaStatement;
-import net.hydromatic.avatica.ColumnMetaData;
-import net.hydromatic.avatica.UnregisteredDriver;
+import org.apache.calcite.avatica.AvaticaConnection;
+import org.apache.calcite.avatica.AvaticaDatabaseMetaData;
+import org.apache.calcite.avatica.AvaticaFactory;
+import org.apache.calcite.avatica.AvaticaPrepareResult;
+import org.apache.calcite.avatica.AvaticaPreparedStatement;
+import org.apache.calcite.avatica.AvaticaResultSet;
+import org.apache.calcite.avatica.AvaticaResultSetMetaData;
+import org.apache.calcite.avatica.AvaticaStatement;
+import org.apache.calcite.avatica.ColumnMetaData;
+import org.apache.calcite.avatica.UnregisteredDriver;
import org.apache.kylin.jdbc.stub.KylinClient;
import org.apache.kylin.jdbc.stub.RemoteClient;
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/jdbc/src/main/java/org/apache/kylin/jdbc/KylinMetaImpl.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinMetaImpl.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinMetaImpl.java
index 3c14c9b..17e8ed4 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinMetaImpl.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinMetaImpl.java
@@ -29,25 +29,19 @@ import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
-import net.hydromatic.avatica.AvaticaPrepareResult;
-import net.hydromatic.avatica.AvaticaResultSet;
-import net.hydromatic.avatica.AvaticaStatement;
-import net.hydromatic.avatica.ColumnMetaData;
-import net.hydromatic.avatica.ColumnMetaData.Rep;
-import net.hydromatic.avatica.Cursor;
-import net.hydromatic.avatica.Meta;
-import net.hydromatic.linq4j.Enumerator;
-import net.hydromatic.optiq.runtime.EnumeratorCursor;
-
+import org.apache.calcite.avatica.AvaticaResultSet;
+import org.apache.calcite.avatica.AvaticaStatement;
+import org.apache.calcite.avatica.ColumnMetaData;
+import org.apache.calcite.avatica.ColumnMetaData.Rep;
+import org.apache.calcite.avatica.Meta;
+import org.apache.calcite.linq4j.Enumerator;
+import org.apache.calcite.sql.SqlJdbcFunctionCall;
+import org.apache.calcite.sql.parser.SqlParser;
import org.apache.kylin.jdbc.stub.DataSet;
import org.apache.kylin.jdbc.stub.KylinColumnMetaData;
import org.apache.kylin.jdbc.stub.RemoteClient;
-import org.eigenbase.sql.SqlJdbcFunctionCall;
-import org.eigenbase.sql.parser.SqlParser;
-import org.eigenbase.util.Util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
import org.apache.kylin.jdbc.util.SQLTypeMap;
/**
@@ -329,7 +323,7 @@ public class KylinMetaImpl implements Meta {
* Client could request metadata after prepare
*
* (non-Javadoc)
- * @see net.hydromatic.avatica.Meta#prepare(net.hydromatic.avatica.AvaticaStatement, java.lang.String)
+ * @see org.apache.calcite.avatica.Meta#prepare(org.apache.calcite.avatica.AvaticaStatement, java.lang.String)
*/
public AvaticaPrepareResult prepare(AvaticaStatement statement, String sql) {
RemoteClient client = factory.newRemoteClient(conn);
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/jdbc/src/main/java/org/apache/kylin/jdbc/KylinPrepare.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinPrepare.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinPrepare.java
index 0e4fb35..686e948 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinPrepare.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinPrepare.java
@@ -21,12 +21,10 @@ package org.apache.kylin.jdbc;
import java.util.List;
import java.util.Map;
-import net.hydromatic.avatica.AvaticaParameter;
-import net.hydromatic.avatica.AvaticaPrepareResult;
-import net.hydromatic.avatica.ColumnMetaData;
-import net.hydromatic.avatica.Cursor;
-import net.hydromatic.linq4j.Enumerator;
-import net.hydromatic.optiq.runtime.EnumeratorCursor;
+import org.apache.calcite.avatica.AvaticaParameter;
+import org.apache.calcite.avatica.AvaticaPrepareResult;
+import org.apache.calcite.avatica.ColumnMetaData;
+import org.apache.calcite.avatica.Cursor;
/**
* Interface of kylin prepare statement implementation
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/jdbc/src/main/java/org/apache/kylin/jdbc/KylinResultSet.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinResultSet.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinResultSet.java
index 28c3725..7cb9b25 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinResultSet.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinResultSet.java
@@ -21,9 +21,9 @@ package org.apache.kylin.jdbc;
import java.sql.ResultSetMetaData;
import java.util.TimeZone;
-import net.hydromatic.avatica.AvaticaPrepareResult;
-import net.hydromatic.avatica.AvaticaResultSet;
-import net.hydromatic.avatica.AvaticaStatement;
+import org.apache.calcite.avatica.AvaticaPrepareResult;
+import org.apache.calcite.avatica.AvaticaResultSet;
+import org.apache.calcite.avatica.AvaticaStatement;
import org.apache.kylin.jdbc.KylinPrepare.PrepareResult;
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/jdbc/src/main/java/org/apache/kylin/jdbc/KylinStatementImpl.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinStatementImpl.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinStatementImpl.java
index b380b00..0d7605d 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinStatementImpl.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinStatementImpl.java
@@ -18,9 +18,9 @@
package org.apache.kylin.jdbc;
-import net.hydromatic.avatica.AvaticaConnection;
-import net.hydromatic.avatica.AvaticaResultSet;
-import net.hydromatic.avatica.AvaticaStatement;
+import org.apache.calcite.avatica.AvaticaConnection;
+import org.apache.calcite.avatica.AvaticaResultSet;
+import org.apache.calcite.avatica.AvaticaStatement;
/**
* Kylin statement implementation
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/jdbc/src/main/java/org/apache/kylin/jdbc/stub/DataSet.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/stub/DataSet.java b/jdbc/src/main/java/org/apache/kylin/jdbc/stub/DataSet.java
index 3584b31..8b0347a 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/stub/DataSet.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/stub/DataSet.java
@@ -20,8 +20,8 @@ package org.apache.kylin.jdbc.stub;
import java.util.List;
-import net.hydromatic.avatica.ColumnMetaData;
-import net.hydromatic.linq4j.Enumerator;
+import org.apache.calcite.avatica.ColumnMetaData;
+import org.apache.calcite.linq4j.Enumerator;
/**
* Data set wrapper.
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/jdbc/src/main/java/org/apache/kylin/jdbc/stub/KylinClient.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/stub/KylinClient.java b/jdbc/src/main/java/org/apache/kylin/jdbc/stub/KylinClient.java
index ccbfe5d..67652cb 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/stub/KylinClient.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/stub/KylinClient.java
@@ -23,10 +23,10 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
-import net.hydromatic.avatica.AvaticaStatement;
-import net.hydromatic.avatica.ColumnMetaData;
-import net.hydromatic.avatica.ColumnMetaData.Rep;
-import net.hydromatic.avatica.ColumnMetaData.ScalarType;
+import org.apache.calcite.avatica.AvaticaStatement;
+import org.apache.calcite.avatica.ColumnMetaData;
+import org.apache.calcite.avatica.ColumnMetaData.Rep;
+import org.apache.calcite.avatica.ColumnMetaData.ScalarType;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/jdbc/src/main/java/org/apache/kylin/jdbc/stub/RemoteClient.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/stub/RemoteClient.java b/jdbc/src/main/java/org/apache/kylin/jdbc/stub/RemoteClient.java
index dae4126..093f150 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/stub/RemoteClient.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/stub/RemoteClient.java
@@ -20,7 +20,7 @@ package org.apache.kylin.jdbc.stub;
import java.sql.SQLException;
-import net.hydromatic.avatica.AvaticaStatement;
+import org.apache.calcite.avatica.AvaticaStatement;
import org.apache.kylin.jdbc.KylinMetaImpl.MetaProject;
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/enumerator/CubeEnumerator.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/enumerator/CubeEnumerator.java b/query/src/main/java/org/apache/kylin/query/enumerator/CubeEnumerator.java
index a85f47b..cc89119 100644
--- a/query/src/main/java/org/apache/kylin/query/enumerator/CubeEnumerator.java
+++ b/query/src/main/java/org/apache/kylin/query/enumerator/CubeEnumerator.java
@@ -22,14 +22,12 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
-import net.hydromatic.linq4j.Enumerator;
-import net.hydromatic.optiq.DataContext;
-import net.hydromatic.optiq.jdbc.OptiqConnection;
-
-import org.eigenbase.reltype.RelDataTypeField;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
+import org.apache.calcite.DataContext;
+import org.apache.calcite.jdbc.CalciteConnection;
+import org.apache.calcite.linq4j.Enumerator;
+import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.kylin.query.relnode.OLAPContext;
import org.apache.kylin.storage.IStorageEngine;
import org.apache.kylin.storage.StorageEngineFactory;
@@ -39,7 +37,6 @@ import org.apache.kylin.metadata.tuple.ITuple;
import org.apache.kylin.metadata.tuple.ITupleIterator;
/**
- * @author xjiang
*/
public class CubeEnumerator implements Enumerator<Object[]> {
@@ -104,7 +101,7 @@ public class CubeEnumerator implements Enumerator<Object[]> {
this.fieldIndexes = new int[size];
for (int i = 0; i < size; i++) {
String field = fields.get(i);
- RelDataTypeField relField = olapContext.olapRowType.getField(field, true);
+ RelDataTypeField relField = olapContext.olapRowType.getField(field, true, false);
if (relField != null) {
fieldIndexes[i] = relField.getIndex();
} else {
@@ -172,7 +169,7 @@ public class CubeEnumerator implements Enumerator<Object[]> {
}
private void setConnectionProperties() {
- OptiqConnection conn = (OptiqConnection) optiqContext.getQueryProvider();
+ CalciteConnection conn = (CalciteConnection) optiqContext.getQueryProvider();
Properties connProps = conn.getProperties();
String propThreshold = connProps.getProperty(OLAPQuery.PROP_SCAN_THRESHOLD);
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/enumerator/HiveEnumerator.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/enumerator/HiveEnumerator.java b/query/src/main/java/org/apache/kylin/query/enumerator/HiveEnumerator.java
index c9cec94..b9fb39c 100644
--- a/query/src/main/java/org/apache/kylin/query/enumerator/HiveEnumerator.java
+++ b/query/src/main/java/org/apache/kylin/query/enumerator/HiveEnumerator.java
@@ -24,16 +24,12 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
-import net.hydromatic.linq4j.Enumerator;
-
+import org.apache.calcite.linq4j.Enumerator;
+import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.kylin.query.relnode.OLAPContext;
-import org.eigenbase.reltype.RelDataTypeField;
/**
* Hive Query Result Enumerator
- *
- * @author xjiang
- *
*/
public class HiveEnumerator implements Enumerator<Object[]> {
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/enumerator/LookupTableEnumerator.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/enumerator/LookupTableEnumerator.java b/query/src/main/java/org/apache/kylin/query/enumerator/LookupTableEnumerator.java
index 0a3627f..9e3e81d 100644
--- a/query/src/main/java/org/apache/kylin/query/enumerator/LookupTableEnumerator.java
+++ b/query/src/main/java/org/apache/kylin/query/enumerator/LookupTableEnumerator.java
@@ -22,8 +22,7 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.List;
-import net.hydromatic.linq4j.Enumerator;
-
+import org.apache.calcite.linq4j.Enumerator;
import org.apache.kylin.cube.CubeInstance;
import org.apache.kylin.cube.CubeManager;
import org.apache.kylin.cube.model.DimensionDesc;
@@ -34,8 +33,6 @@ import org.apache.kylin.query.schema.OLAPTable;
import org.apache.kylin.storage.tuple.Tuple;
/**
- * @author yangli9
- *
*/
public class LookupTableEnumerator implements Enumerator<Object[]> {
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/enumerator/OLAPQuery.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/enumerator/OLAPQuery.java b/query/src/main/java/org/apache/kylin/query/enumerator/OLAPQuery.java
index 090980f..453c898 100644
--- a/query/src/main/java/org/apache/kylin/query/enumerator/OLAPQuery.java
+++ b/query/src/main/java/org/apache/kylin/query/enumerator/OLAPQuery.java
@@ -18,17 +18,13 @@
package org.apache.kylin.query.enumerator;
-import net.hydromatic.linq4j.AbstractEnumerable;
-import net.hydromatic.linq4j.Enumerable;
-import net.hydromatic.linq4j.Enumerator;
-import net.hydromatic.optiq.DataContext;
-
+import org.apache.calcite.DataContext;
+import org.apache.calcite.linq4j.AbstractEnumerable;
+import org.apache.calcite.linq4j.Enumerable;
+import org.apache.calcite.linq4j.Enumerator;
import org.apache.kylin.query.relnode.OLAPContext;
/**
- *
- * @author xjiang
- *
*/
public class OLAPQuery extends AbstractEnumerable<Object[]> implements Enumerable<Object[]> {
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/optrule/OLAPAggregateRule.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/optrule/OLAPAggregateRule.java b/query/src/main/java/org/apache/kylin/query/optrule/OLAPAggregateRule.java
index 5c6b29b..b80a483 100644
--- a/query/src/main/java/org/apache/kylin/query/optrule/OLAPAggregateRule.java
+++ b/query/src/main/java/org/apache/kylin/query/optrule/OLAPAggregateRule.java
@@ -18,35 +18,31 @@
package org.apache.kylin.query.optrule;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.InvalidRelException;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.logical.LogicalAggregate;
import org.apache.kylin.query.relnode.OLAPRel;
-import org.eigenbase.rel.AggregateRel;
-import org.eigenbase.rel.InvalidRelException;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.rel.convert.ConverterRule;
-import org.eigenbase.relopt.Convention;
-import org.eigenbase.relopt.RelTraitSet;
-
import org.apache.kylin.query.relnode.OLAPAggregateRel;
/**
- *
- * @author xjiang
- *
*/
public class OLAPAggregateRule extends ConverterRule {
public static final ConverterRule INSTANCE = new OLAPAggregateRule();
public OLAPAggregateRule() {
- super(AggregateRel.class, Convention.NONE, OLAPRel.CONVENTION, "OLAPAggregateRule");
+ super(LogicalAggregate.class, Convention.NONE, OLAPRel.CONVENTION, "OLAPAggregateRule");
}
@Override
public RelNode convert(RelNode rel) {
- AggregateRel agg = (AggregateRel) rel;
+ LogicalAggregate agg = (LogicalAggregate) rel;
RelTraitSet traitSet = agg.getTraitSet().replace(OLAPRel.CONVENTION);
try {
- return new OLAPAggregateRel(agg.getCluster(), traitSet, convert(agg.getChild(), traitSet), agg.getGroupSet(), agg.getAggCallList());
+ return new OLAPAggregateRel(agg.getCluster(), traitSet, convert(agg.getInput(), traitSet), agg.getGroupSet(), agg.getAggCallList());
} catch (InvalidRelException e) {
throw new IllegalStateException("Can't create OLAPAggregateRel!", e);
}
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/optrule/OLAPFilterRule.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/optrule/OLAPFilterRule.java b/query/src/main/java/org/apache/kylin/query/optrule/OLAPFilterRule.java
index 619e430..4c34f4e 100644
--- a/query/src/main/java/org/apache/kylin/query/optrule/OLAPFilterRule.java
+++ b/query/src/main/java/org/apache/kylin/query/optrule/OLAPFilterRule.java
@@ -18,33 +18,29 @@
package org.apache.kylin.query.optrule;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.logical.LogicalFilter;
import org.apache.kylin.query.relnode.OLAPFilterRel;
import org.apache.kylin.query.relnode.OLAPRel;
-import org.eigenbase.rel.FilterRel;
-import org.eigenbase.relopt.RelOptRule;
-import org.eigenbase.relopt.RelOptRuleCall;
-import org.eigenbase.relopt.RelTraitSet;
/**
- *
- * @author xjiang
- *
*/
-
public class OLAPFilterRule extends RelOptRule {
public static final RelOptRule INSTANCE = new OLAPFilterRule();
public OLAPFilterRule() {
- super(operand(FilterRel.class, any()));
+ super(operand(LogicalFilter.class, any()));
}
@Override
public void onMatch(RelOptRuleCall call) {
- FilterRel filter = call.rel(0);
+ LogicalFilter filter = call.rel(0);
RelTraitSet traitSet = filter.getTraitSet().replace(OLAPRel.CONVENTION);
- OLAPFilterRel olapFilter = new OLAPFilterRel(filter.getCluster(), traitSet, convert(filter.getChild(), traitSet), filter.getCondition());
+ OLAPFilterRel olapFilter = new OLAPFilterRel(filter.getCluster(), traitSet, convert(filter.getInput(), traitSet), filter.getCondition());
call.transformTo(olapFilter);
}
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/optrule/OLAPJoinRule.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/optrule/OLAPJoinRule.java b/query/src/main/java/org/apache/kylin/query/optrule/OLAPJoinRule.java
index dd97933..10047e6 100644
--- a/query/src/main/java/org/apache/kylin/query/optrule/OLAPJoinRule.java
+++ b/query/src/main/java/org/apache/kylin/query/optrule/OLAPJoinRule.java
@@ -18,35 +18,32 @@
package org.apache.kylin.query.optrule;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.InvalidRelException;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.JoinInfo;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.logical.LogicalJoin;
import org.apache.kylin.query.relnode.OLAPFilterRel;
import org.apache.kylin.query.relnode.OLAPJoinRel;
import org.apache.kylin.query.relnode.OLAPRel;
-import org.eigenbase.rel.InvalidRelException;
-import org.eigenbase.rel.JoinInfo;
-import org.eigenbase.rel.JoinRel;
-import org.eigenbase.rel.JoinRelType;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.rel.convert.ConverterRule;
-import org.eigenbase.relopt.Convention;
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.relopt.RelTraitSet;
/**
- *
- * @author xjiang
- *
*/
public class OLAPJoinRule extends ConverterRule {
public static final ConverterRule INSTANCE = new OLAPJoinRule();
public OLAPJoinRule() {
- super(JoinRel.class, Convention.NONE, OLAPRel.CONVENTION, "OLAPJoinRule");
+ super(LogicalJoin.class, Convention.NONE, OLAPRel.CONVENTION, "OLAPJoinRule");
}
@Override
public RelNode convert(RelNode rel) {
- JoinRel join = (JoinRel) rel;
+ LogicalJoin join = (LogicalJoin) rel;
RelNode left = join.getInput(0);
RelNode right = join.getInput(1);
@@ -68,8 +65,7 @@ public class OLAPJoinRule extends ConverterRule {
info.getEquiCondition(left, right, cluster.getRexBuilder()), //
info.leftKeys, info.rightKeys, join.getJoinType(), join.getVariablesStopped());
} catch (InvalidRelException e) {
- // Semantic error not possible. Must be a bug. Convert to
- // internal error.
+ // Semantic error not possible. Must be a bug. Convert to internal error.
throw new AssertionError(e);
// LOGGER.fine(e.toString());
// return null;
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/optrule/OLAPLimitRule.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/optrule/OLAPLimitRule.java b/query/src/main/java/org/apache/kylin/query/optrule/OLAPLimitRule.java
index 359b722..cde934e 100644
--- a/query/src/main/java/org/apache/kylin/query/optrule/OLAPLimitRule.java
+++ b/query/src/main/java/org/apache/kylin/query/optrule/OLAPLimitRule.java
@@ -18,35 +18,32 @@
package org.apache.kylin.query.optrule;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Sort;
import org.apache.kylin.query.relnode.OLAPLimitRel;
import org.apache.kylin.query.relnode.OLAPRel;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.rel.SortRel;
-import org.eigenbase.relopt.RelOptRule;
-import org.eigenbase.relopt.RelOptRuleCall;
-import org.eigenbase.relopt.RelTraitSet;
/**
- *
- * @author xjiang
- *
*/
public class OLAPLimitRule extends RelOptRule {
public static final RelOptRule INSTANCE = new OLAPLimitRule();
public OLAPLimitRule() {
- super(operand(SortRel.class, any()), "OLAPLimitRule");
+ super(operand(Sort.class, any()), "OLAPLimitRule");
}
@Override
public void onMatch(RelOptRuleCall call) {
- final SortRel sort = call.rel(0);
+ final Sort sort = call.rel(0);
if (sort.offset == null && sort.fetch == null) {
return;
}
final RelTraitSet traitSet = sort.getTraitSet().replace(OLAPRel.CONVENTION);
- RelNode input = sort.getChild();
+ RelNode input = sort.getInput();
if (!sort.getCollation().getFieldCollations().isEmpty()) {
// Create a sort with the same sort key, but no offset or fetch.
input = sort.copy(sort.getTraitSet(), input, sort.getCollation(), null, null);
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/optrule/OLAPProjectRule.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/optrule/OLAPProjectRule.java b/query/src/main/java/org/apache/kylin/query/optrule/OLAPProjectRule.java
index 7ab9dc3..4867162 100644
--- a/query/src/main/java/org/apache/kylin/query/optrule/OLAPProjectRule.java
+++ b/query/src/main/java/org/apache/kylin/query/optrule/OLAPProjectRule.java
@@ -18,34 +18,30 @@
package org.apache.kylin.query.optrule;
-import org.eigenbase.rel.ProjectRel;
-import org.eigenbase.relopt.RelOptRule;
-import org.eigenbase.relopt.RelOptRuleCall;
-import org.eigenbase.relopt.RelTraitSet;
-
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.logical.LogicalProject;
import org.apache.kylin.query.relnode.OLAPProjectRel;
import org.apache.kylin.query.relnode.OLAPRel;
/**
- *
- * @author xjiang
- *
*/
public class OLAPProjectRule extends RelOptRule {
public static final RelOptRule INSTANCE = new OLAPProjectRule();
public OLAPProjectRule() {
- super(operand(ProjectRel.class, any()));
+ super(operand(LogicalProject.class, any()));
}
@Override
public void onMatch(RelOptRuleCall call) {
- ProjectRel project = call.rel(0);
+ LogicalProject project = call.rel(0);
RelTraitSet traitSet = project.getTraitSet().replace(OLAPRel.CONVENTION);
OLAPProjectRel olapProj = new OLAPProjectRel(project.getCluster(), traitSet, //
- convert(project.getChild(), traitSet), project.getProjects(), project.getRowType(), project.getFlags());
+ convert(project.getInput(), traitSet), project.getProjects(), project.getRowType(), project.getFlags());
call.transformTo(olapProj);
}
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/optrule/OLAPSortRule.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/optrule/OLAPSortRule.java b/query/src/main/java/org/apache/kylin/query/optrule/OLAPSortRule.java
index c9ea5f4..c020d63 100644
--- a/query/src/main/java/org/apache/kylin/query/optrule/OLAPSortRule.java
+++ b/query/src/main/java/org/apache/kylin/query/optrule/OLAPSortRule.java
@@ -18,35 +18,32 @@
package org.apache.kylin.query.optrule;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.Sort;
import org.apache.kylin.query.relnode.OLAPRel;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.rel.SortRel;
-import org.eigenbase.rel.convert.ConverterRule;
-import org.eigenbase.relopt.Convention;
-import org.eigenbase.relopt.RelTraitSet;
-
import org.apache.kylin.query.relnode.OLAPSortRel;
/**
- * @author xjiang
- *
*/
public class OLAPSortRule extends ConverterRule {
public static final OLAPSortRule INSTANCE = new OLAPSortRule();
public OLAPSortRule() {
- super(SortRel.class, Convention.NONE, OLAPRel.CONVENTION, "OLAPSortRule");
+ super(Sort.class, Convention.NONE, OLAPRel.CONVENTION, "OLAPSortRule");
}
@Override
public RelNode convert(RelNode rel) {
- final SortRel sort = (SortRel) rel;
+ final Sort sort = (Sort) rel;
if (sort.offset != null || sort.fetch != null) {
return null;
}
final RelTraitSet traitSet = sort.getTraitSet().replace(OLAPRel.CONVENTION);
- final RelNode input = sort.getChild();
+ final RelNode input = sort.getInput();
return new OLAPSortRel(rel.getCluster(), traitSet, convert(input, input.getTraitSet().replace(OLAPRel.CONVENTION)), sort.getCollation(), sort.offset, sort.fetch);
}
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/optrule/OLAPToEnumerableConverterRule.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/optrule/OLAPToEnumerableConverterRule.java b/query/src/main/java/org/apache/kylin/query/optrule/OLAPToEnumerableConverterRule.java
index 4edee38..995e3e7 100644
--- a/query/src/main/java/org/apache/kylin/query/optrule/OLAPToEnumerableConverterRule.java
+++ b/query/src/main/java/org/apache/kylin/query/optrule/OLAPToEnumerableConverterRule.java
@@ -18,19 +18,14 @@
package org.apache.kylin.query.optrule;
-import net.hydromatic.optiq.rules.java.EnumerableConvention;
-
+import org.apache.calcite.adapter.enumerable.EnumerableConvention;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.convert.ConverterRule;
import org.apache.kylin.query.relnode.OLAPRel;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.rel.convert.ConverterRule;
-import org.eigenbase.relopt.RelTraitSet;
-
import org.apache.kylin.query.relnode.OLAPToEnumerableConverter;
/**
- *
- * @author xjiang
- *
*/
public class OLAPToEnumerableConverterRule extends ConverterRule {
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
index 940668d..277cd22 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
@@ -19,20 +19,41 @@
package org.apache.kylin.query.relnode;
import java.util.ArrayList;
-import java.util.BitSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import net.hydromatic.optiq.AggregateFunction;
-import net.hydromatic.optiq.FunctionParameter;
-import net.hydromatic.optiq.impl.AggregateFunctionImpl;
-import net.hydromatic.optiq.rules.java.EnumerableConvention;
-import net.hydromatic.optiq.rules.java.EnumerableRel;
-import net.hydromatic.optiq.rules.java.EnumerableRelImplementor;
-import net.hydromatic.optiq.rules.java.JavaRules.EnumerableAggregateRel;
-
+import org.apache.calcite.adapter.enumerable.EnumerableAggregate;
+import org.apache.calcite.adapter.enumerable.EnumerableConvention;
+import org.apache.calcite.adapter.enumerable.EnumerableRel;
+import org.apache.calcite.adapter.enumerable.EnumerableRelImplementor;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelTrait;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.InvalidRelException;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Aggregate;
+import org.apache.calcite.rel.core.AggregateCall;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeFactory;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.schema.AggregateFunction;
+import org.apache.calcite.schema.FunctionParameter;
+import org.apache.calcite.schema.impl.AggregateFunctionImpl;
+import org.apache.calcite.sql.SqlAggFunction;
+import org.apache.calcite.sql.SqlIdentifier;
+import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.calcite.sql.parser.SqlParserPos;
+import org.apache.calcite.sql.type.InferTypes;
+import org.apache.calcite.sql.type.OperandTypes;
+import org.apache.calcite.sql.type.ReturnTypes;
+import org.apache.calcite.sql.type.SqlTypeFamily;
+import org.apache.calcite.sql.validate.SqlUserDefinedAggFunction;
+import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.calcite.util.Util;
import org.apache.kylin.common.util.ClassUtil;
import org.apache.kylin.metadata.model.ColumnDesc;
import org.apache.kylin.metadata.model.FunctionDesc;
@@ -40,36 +61,12 @@ import org.apache.kylin.metadata.model.ParameterDesc;
import org.apache.kylin.metadata.model.TableDesc;
import org.apache.kylin.metadata.model.TblColRef;
import org.apache.kylin.query.sqlfunc.HLLDistinctCountAggFunc;
-import org.eigenbase.rel.AggregateCall;
-import org.eigenbase.rel.AggregateRelBase;
-import org.eigenbase.rel.Aggregation;
-import org.eigenbase.rel.InvalidRelException;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.relopt.RelOptCost;
-import org.eigenbase.relopt.RelOptPlanner;
-import org.eigenbase.relopt.RelTrait;
-import org.eigenbase.relopt.RelTraitSet;
-import org.eigenbase.reltype.RelDataType;
-import org.eigenbase.reltype.RelDataTypeFactory;
-import org.eigenbase.reltype.RelDataTypeField;
-import org.eigenbase.sql.SqlAggFunction;
-import org.eigenbase.sql.SqlIdentifier;
-import org.eigenbase.sql.fun.SqlStdOperatorTable;
-import org.eigenbase.sql.parser.SqlParserPos;
-import org.eigenbase.sql.type.InferTypes;
-import org.eigenbase.sql.type.OperandTypes;
-import org.eigenbase.sql.type.ReturnTypes;
-import org.eigenbase.sql.type.SqlTypeFamily;
-import org.eigenbase.sql.validate.SqlUserDefinedAggFunction;
-import org.eigenbase.util.Util;
import com.google.common.base.Preconditions;
/**
- * @author xjiang
*/
-public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, EnumerableRel {
+public class OLAPAggregateRel extends Aggregate implements OLAPRel, EnumerableRel {
private final static Map<String, String> AGGR_FUNC_MAP = new HashMap<String, String>();
@@ -102,16 +99,22 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
private List<TblColRef> groups;
private List<FunctionDesc> aggregations;
- public OLAPAggregateRel(RelOptCluster cluster, RelTraitSet traits, RelNode child, BitSet groupSet, List<AggregateCall> aggCalls) throws InvalidRelException {
- super(cluster, traits, child, groupSet, aggCalls);
+ public OLAPAggregateRel(RelOptCluster cluster, RelTraitSet traits, RelNode child, ImmutableBitSet groupSet, List<AggregateCall> aggCalls) throws InvalidRelException {
+ super(cluster, traits, child, false, groupSet, asList(groupSet), aggCalls);
Preconditions.checkArgument(getConvention() == OLAPRel.CONVENTION);
this.afterAggregate = false;
this.rewriteAggCalls = aggCalls;
this.rowType = getRowType();
}
+ private static List<ImmutableBitSet> asList(ImmutableBitSet groupSet) {
+ ArrayList<ImmutableBitSet> l = new ArrayList<ImmutableBitSet>(1);
+ l.add(groupSet);
+ return l;
+ }
+
@Override
- public AggregateRelBase copy(RelTraitSet traitSet, RelNode input, BitSet groupSet, List<AggregateCall> aggCalls) {
+ public Aggregate copy(RelTraitSet traitSet, RelNode input, boolean indicator, ImmutableBitSet groupSet, List<ImmutableBitSet> groupSets, List<AggregateCall> aggCalls) {
try {
return new OLAPAggregateRel(getCluster(), traitSet, input, groupSet, aggCalls);
} catch (InvalidRelException e) {
@@ -121,19 +124,20 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
@Override
public RelOptCost computeSelfCost(RelOptPlanner planner) {
- double factor = .5;
- for (AggregateCall aggCall : aggCalls) {
- if ("$SUM0".equals(aggCall.getAggregation().getName())) {
- factor = .2;
- }
- }
- return super.computeSelfCost(planner).multiplyBy(factor);
+ return super.computeSelfCost(planner).multiplyBy(.05);
+// double factor = .5;
+// for (AggregateCall aggCall : aggCalls) {
+// if ("$SUM0".equals(aggCall.getAggregation().getName())) {
+// factor = .2;
+// }
+// }
+// return super.computeSelfCost(planner).multiplyBy(factor);
}
@Override
public void implementOLAP(OLAPImplementor implementor) {
- implementor.visitChild(getChild(), this);
+ implementor.visitChild(getInput(), this);
this.context = implementor.getContext();
this.columnRowType = buildColumnRowType();
@@ -159,7 +163,7 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
buildGroups();
buildAggregations();
- ColumnRowType inputColumnRowType = ((OLAPRel) getChild()).getColumnRowType();
+ ColumnRowType inputColumnRowType = ((OLAPRel) getInput()).getColumnRowType();
List<TblColRef> columns = new ArrayList<TblColRef>(this.rowType.getFieldCount());
columns.addAll(this.groups);
@@ -193,7 +197,7 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
}
private void buildGroups() {
- ColumnRowType inputColumnRowType = ((OLAPRel) getChild()).getColumnRowType();
+ ColumnRowType inputColumnRowType = ((OLAPRel) getInput()).getColumnRowType();
this.groups = new ArrayList<TblColRef>();
for (int i = getGroupSet().nextSetBit(0); i >= 0; i = getGroupSet().nextSetBit(i + 1)) {
Set<TblColRef> columns = inputColumnRowType.getSourceColumnsByIndex(i);
@@ -202,7 +206,7 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
}
private void buildAggregations() {
- ColumnRowType inputColumnRowType = ((OLAPRel) getChild()).getColumnRowType();
+ ColumnRowType inputColumnRowType = ((OLAPRel) getInput()).getColumnRowType();
this.aggregations = new ArrayList<FunctionDesc>();
for (AggregateCall aggCall : this.rewriteAggCalls) {
ParameterDesc parameter = null;
@@ -228,7 +232,7 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
}
private void translateAggregation() {
- ColumnRowType inputColumnRowType = ((OLAPRel) getChild()).getColumnRowType();
+ ColumnRowType inputColumnRowType = ((OLAPRel) getInput()).getColumnRowType();
for (int i = 0; i < this.aggregations.size(); i++) {
FunctionDesc aggFunc = this.aggregations.get(i);
context.aggregations.add(aggFunc);
@@ -252,14 +256,13 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
}
private void fillbackOptimizedColumn() {
- // some aggcall will be optimized out in sub-query (e.g. tableau generated sql)
- // we need to fill them back
- RelDataType inputAggRow = getChild().getRowType();
+ // some aggcall will be optimized out in sub-query (e.g. tableau generated sql), we need to fill them back
+ RelDataType inputAggRow = getInput().getRowType();
RelDataType outputAggRow = getRowType();
if (inputAggRow.getFieldCount() != outputAggRow.getFieldCount()) {
for (RelDataTypeField inputField : inputAggRow.getFieldList()) {
String inputFieldName = inputField.getName();
- if (outputAggRow.getField(inputFieldName, true) == null) {
+ if (outputAggRow.getField(inputFieldName, true, false) == null) {
TblColRef column = this.columnRowType.getColumnByIndex(inputField.getIndex());
this.context.metricsColumns.add(column);
}
@@ -269,7 +272,7 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
@Override
public void implementRewrite(RewriteImplementor implementor) {
- implementor.visitChild(this, getChild());
+ implementor.visitChild(this, getInput());
// only rewrite the first aggregation
if (!this.afterAggregate && RewriteImplementor.needRewrite(this.context)) {
@@ -283,7 +286,7 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
}
this.rewriteAggCalls.add(aggCall);
}
- ClassUtil.updateFinalField(AggregateRelBase.class, "aggCalls", this, this.rewriteAggCalls);
+ ClassUtil.updateFinalField(Aggregate.class, "aggCalls", this, this.rewriteAggCalls);
}
// rebuild rowType & columnRowType
@@ -297,12 +300,12 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
// rebuild parameters
List<Integer> newArgList = new ArrayList<Integer>(1);
String fieldName = func.getRewriteFieldName();
- RelDataTypeField field = getChild().getRowType().getField(fieldName, true);
+ RelDataTypeField field = getInput().getRowType().getField(fieldName, true, false);
newArgList.add(field.getIndex());
// rebuild function
RelDataType fieldType = aggCall.getType();
- Aggregation newAgg = aggCall.getAggregation();
+ SqlAggFunction newAgg = aggCall.getAggregation();
if (func.isCountDistinct()) {
newAgg = createHyperLogLogAggFunction(fieldType);
} else if (func.isCount()) {
@@ -324,7 +327,7 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
return new AggregateCall(newAgg, false, newArgList, inferReturnType, newAgg.getName());
}
- private Aggregation createHyperLogLogAggFunction(RelDataType returnType) {
+ private SqlAggFunction createHyperLogLogAggFunction(RelDataType returnType) {
RelDataTypeFactory typeFactory = getCluster().getTypeFactory();
SqlIdentifier sqlIdentifier = new SqlIdentifier("HLL_COUNT", new SqlParserPos(1, 1));
AggregateFunction aggFunction = AggregateFunctionImpl.create(HLLDistinctCountAggFunc.class);
@@ -341,9 +344,9 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
@Override
public Result implement(EnumerableRelImplementor implementor, Prefer pref) {
- EnumerableAggregateRel enumAggRel;
+ EnumerableAggregate enumAggRel;
try {
- enumAggRel = new EnumerableAggregateRel(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), getChild(), this.groupSet, rewriteAggCalls);
+ enumAggRel = new EnumerableAggregate(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), getInput(), false, this.groupSet, this.groupSets, rewriteAggCalls);
} catch (InvalidRelException e) {
throw new IllegalStateException("Can't create EnumerableAggregateRel!", e);
}
@@ -363,7 +366,7 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
@Override
public boolean hasSubQuery() {
- OLAPRel olapChild = (OLAPRel) getChild();
+ OLAPRel olapChild = (OLAPRel) getInput();
return olapChild.hasSubQuery();
}
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java
index 8e532a9..86473b5 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java
@@ -26,10 +26,9 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import org.apache.calcite.rel.type.RelDataType;
import org.apache.kylin.metadata.realization.SQLDigest;
import org.apache.kylin.query.schema.OLAPSchema;
-import org.eigenbase.reltype.RelDataType;
-
import org.apache.kylin.metadata.model.FunctionDesc;
import org.apache.kylin.metadata.model.JoinDesc;
import org.apache.kylin.metadata.model.TblColRef;
@@ -38,8 +37,6 @@ import org.apache.kylin.storage.StorageContext;
import org.apache.kylin.metadata.filter.TupleFilter;
/**
- * @author xjiang
- *
*/
public class OLAPContext {
@@ -95,8 +92,7 @@ public class OLAPContext {
// query info
public OLAPSchema olapSchema = null;
- public OLAPTableScan firstTableScan = null; // to be fact table scan except
- // "select * from lookupTable"
+ public OLAPTableScan firstTableScan = null; // to be fact table scan except "select * from lookupTable"
public RelDataType olapRowType = null;
public boolean afterAggregate = false;
public boolean afterJoin = false;
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/relnode/OLAPFilterRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPFilterRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPFilterRel.java
index 0783e31..7d16c8d 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPFilterRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPFilterRel.java
@@ -18,41 +18,39 @@
package org.apache.kylin.query.relnode;
-import java.util.*;
-
-import com.google.common.collect.Sets;
-import net.hydromatic.optiq.rules.java.EnumerableConvention;
-import net.hydromatic.optiq.rules.java.EnumerableRel;
-import net.hydromatic.optiq.rules.java.EnumerableRelImplementor;
-import net.hydromatic.optiq.rules.java.JavaRules.EnumerableCalcRel;
-import net.hydromatic.optiq.runtime.SqlFunctions;
-
-import org.eigenbase.rel.FilterRelBase;
-import org.eigenbase.rel.RelCollation;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.relopt.RelOptCost;
-import org.eigenbase.relopt.RelOptPlanner;
-import org.eigenbase.relopt.RelTrait;
-import org.eigenbase.relopt.RelTraitSet;
-import org.eigenbase.reltype.RelDataType;
-import org.eigenbase.rex.RexBuilder;
-import org.eigenbase.rex.RexCall;
-import org.eigenbase.rex.RexDynamicParam;
-import org.eigenbase.rex.RexInputRef;
-import org.eigenbase.rex.RexLiteral;
-import org.eigenbase.rex.RexLocalRef;
-import org.eigenbase.rex.RexNode;
-import org.eigenbase.rex.RexProgram;
-import org.eigenbase.rex.RexProgramBuilder;
-import org.eigenbase.rex.RexVisitorImpl;
-import org.eigenbase.sql.SqlKind;
-import org.eigenbase.sql.SqlOperator;
-import org.eigenbase.util.NlsString;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import org.apache.kylin.metadata.model.TblColRef;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.calcite.adapter.enumerable.EnumerableCalc;
+import org.apache.calcite.adapter.enumerable.EnumerableConvention;
+import org.apache.calcite.adapter.enumerable.EnumerableRel;
+import org.apache.calcite.adapter.enumerable.EnumerableRelImplementor;
+import org.apache.calcite.avatica.util.TimeUnitRange;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelTrait;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Filter;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexCall;
+import org.apache.calcite.rex.RexDynamicParam;
+import org.apache.calcite.rex.RexInputRef;
+import org.apache.calcite.rex.RexLiteral;
+import org.apache.calcite.rex.RexLocalRef;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexProgram;
+import org.apache.calcite.rex.RexProgramBuilder;
+import org.apache.calcite.rex.RexVisitorImpl;
+import org.apache.calcite.sql.SqlKind;
+import org.apache.calcite.sql.SqlOperator;
+import org.apache.calcite.util.NlsString;
import org.apache.kylin.metadata.filter.CaseTupleFilter;
import org.apache.kylin.metadata.filter.ColumnTupleFilter;
import org.apache.kylin.metadata.filter.CompareTupleFilter;
@@ -62,11 +60,15 @@ import org.apache.kylin.metadata.filter.ExtractTupleFilter;
import org.apache.kylin.metadata.filter.LogicalTupleFilter;
import org.apache.kylin.metadata.filter.TupleFilter;
import org.apache.kylin.metadata.filter.TupleFilter.FilterOperatorEnum;
+import org.apache.kylin.metadata.model.TblColRef;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
/**
- * @author xjiang
*/
-public class OLAPFilterRel extends FilterRelBase implements OLAPRel, EnumerableRel {
+public class OLAPFilterRel extends Filter implements OLAPRel, EnumerableRel {
private static class TupleFilterVisitor extends RexVisitorImpl<TupleFilter> {
@@ -211,9 +213,9 @@ public class OLAPFilterRel extends FilterRelBase implements OLAPRel, EnumerableR
} else if (literalValue instanceof GregorianCalendar) {
GregorianCalendar g = (GregorianCalendar) literalValue;
strValue = "" + g.get(Calendar.YEAR) + "-" + normToTwoDigits(g.get(Calendar.MONTH) + 1) + "-" + normToTwoDigits(g.get(Calendar.DAY_OF_MONTH));
- } else if (literalValue instanceof SqlFunctions.TimeUnitRange) {
+ } else if (literalValue instanceof TimeUnitRange) {
// Extract(x from y) in where clause
- strValue = ((SqlFunctions.TimeUnitRange) literalValue).name();
+ strValue = ((TimeUnitRange) literalValue).name();
} else if (literalValue == null) {
strValue = null;
} else {
@@ -247,13 +249,13 @@ public class OLAPFilterRel extends FilterRelBase implements OLAPRel, EnumerableR
}
@Override
- public FilterRelBase copy(RelTraitSet traitSet, RelNode input, RexNode condition) {
+ public Filter copy(RelTraitSet traitSet, RelNode input, RexNode condition) {
return new OLAPFilterRel(getCluster(), traitSet, input, condition);
}
@Override
public void implementOLAP(OLAPImplementor implementor) {
- implementor.visitChild(getChild(), this);
+ implementor.visitChild(getInput(), this);
this.columnRowType = buildColumnRowType();
this.context = implementor.getContext();
@@ -265,7 +267,7 @@ public class OLAPFilterRel extends FilterRelBase implements OLAPRel, EnumerableR
}
private ColumnRowType buildColumnRowType() {
- OLAPRel olapChild = (OLAPRel) getChild();
+ OLAPRel olapChild = (OLAPRel) getInput();
ColumnRowType inputColumnRowType = olapChild.getColumnRowType();
return inputColumnRowType;
}
@@ -299,20 +301,20 @@ public class OLAPFilterRel extends FilterRelBase implements OLAPRel, EnumerableR
public Result implement(EnumerableRelImplementor implementor, Prefer pref) {
// keep it for having clause
RexBuilder rexBuilder = getCluster().getRexBuilder();
- RelDataType inputRowType = getChild().getRowType();
+ RelDataType inputRowType = getInput().getRowType();
RexProgramBuilder programBuilder = new RexProgramBuilder(inputRowType, rexBuilder);
programBuilder.addIdentity();
programBuilder.addCondition(this.condition);
RexProgram program = programBuilder.getProgram();
- EnumerableCalcRel enumCalcRel = new EnumerableCalcRel(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), getChild(), this.rowType, program, ImmutableList.<RelCollation> of());
+ EnumerableCalc enumCalcRel = new EnumerableCalc(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), getInput(), program, ImmutableList.<RelCollation> of());
return enumCalcRel.implement(implementor, pref);
}
@Override
public void implementRewrite(RewriteImplementor implementor) {
- implementor.visitChild(this, getChild());
+ implementor.visitChild(this, getInput());
this.rowType = this.deriveRowType();
this.columnRowType = buildColumnRowType();
@@ -330,7 +332,7 @@ public class OLAPFilterRel extends FilterRelBase implements OLAPRel, EnumerableR
@Override
public boolean hasSubQuery() {
- OLAPRel olapChild = (OLAPRel) getChild();
+ OLAPRel olapChild = (OLAPRel) getInput();
return olapChild.hasSubQuery();
}
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
index c51196a..cb0c65f 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
@@ -25,42 +25,40 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import net.hydromatic.linq4j.expressions.Blocks;
-import net.hydromatic.linq4j.expressions.Expressions;
-import net.hydromatic.optiq.rules.java.EnumerableRelImplementor;
-import net.hydromatic.optiq.rules.java.JavaRules.EnumerableJoinRel;
-import net.hydromatic.optiq.rules.java.PhysType;
-import net.hydromatic.optiq.rules.java.PhysTypeImpl;
-
-import org.apache.kylin.query.schema.OLAPTable;
-import org.eigenbase.rel.InvalidRelException;
-import org.eigenbase.rel.JoinInfo;
-import org.eigenbase.rel.JoinRelType;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.relopt.RelOptCost;
-import org.eigenbase.relopt.RelOptPlanner;
-import org.eigenbase.relopt.RelOptTable;
-import org.eigenbase.relopt.RelTrait;
-import org.eigenbase.relopt.RelTraitSet;
-import org.eigenbase.reltype.RelDataType;
-import org.eigenbase.reltype.RelDataTypeFactory.FieldInfoBuilder;
-import org.eigenbase.reltype.RelDataTypeField;
-import org.eigenbase.reltype.RelDataTypeFieldImpl;
-import org.eigenbase.rex.RexCall;
-import org.eigenbase.rex.RexInputRef;
-import org.eigenbase.rex.RexNode;
-import org.eigenbase.sql.SqlKind;
-import org.eigenbase.util.ImmutableIntList;
-
import com.google.common.base.Preconditions;
+
+import org.apache.calcite.adapter.enumerable.EnumerableJoin;
+import org.apache.calcite.adapter.enumerable.EnumerableRelImplementor;
+import org.apache.calcite.adapter.enumerable.PhysType;
+import org.apache.calcite.adapter.enumerable.PhysTypeImpl;
+import org.apache.calcite.linq4j.tree.Blocks;
+import org.apache.calcite.linq4j.tree.Expressions;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.plan.RelTrait;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.InvalidRelException;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.JoinInfo;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeFactory.FieldInfoBuilder;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rel.type.RelDataTypeFieldImpl;
+import org.apache.calcite.rex.RexCall;
+import org.apache.calcite.rex.RexInputRef;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.sql.SqlKind;
+import org.apache.calcite.util.ImmutableIntList;
import org.apache.kylin.metadata.model.JoinDesc;
import org.apache.kylin.metadata.model.TblColRef;
+import org.apache.kylin.query.schema.OLAPTable;
/**
- * @author xjiang
*/
-public class OLAPJoinRel extends EnumerableJoinRel implements OLAPRel {
+public class OLAPJoinRel extends EnumerableJoin implements OLAPRel {
private final static String[] COLUMN_ARRAY_MARKER = new String[0];
@@ -79,7 +77,7 @@ public class OLAPJoinRel extends EnumerableJoinRel implements OLAPRel {
}
@Override
- public EnumerableJoinRel copy(RelTraitSet traitSet, RexNode conditionExpr, RelNode left, RelNode right, //
+ public EnumerableJoin copy(RelTraitSet traitSet, RexNode conditionExpr, RelNode left, RelNode right, //
JoinRelType joinType, boolean semiJoinDone) {
final JoinInfo joinInfo = JoinInfo.of(left, right, condition);
@@ -87,8 +85,7 @@ public class OLAPJoinRel extends EnumerableJoinRel implements OLAPRel {
try {
return new OLAPJoinRel(getCluster(), traitSet, left, right, condition, joinInfo.leftKeys, joinInfo.rightKeys, joinType, variablesStopped);
} catch (InvalidRelException e) {
- // Semantic error not possible. Must be a bug. Convert to
- // internal error.
+ // Semantic error not possible. Must be a bug. Convert to internal error.
throw new AssertionError(e);
}
}
@@ -259,7 +256,7 @@ public class OLAPJoinRel extends EnumerableJoinRel implements OLAPRel {
List<RelDataTypeField> newFieldList = new LinkedList<RelDataTypeField>();
for (Map.Entry<String, RelDataType> rewriteField : this.context.rewriteFields.entrySet()) {
String fieldName = rewriteField.getKey();
- if (this.rowType.getField(fieldName, true) == null) {
+ if (this.rowType.getField(fieldName, true, false) == null) {
RelDataType fieldType = rewriteField.getValue();
RelDataTypeField newField = new RelDataTypeFieldImpl(fieldName, paramIndex++, fieldType);
newFieldList.add(newField);
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/relnode/OLAPLimitRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPLimitRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPLimitRel.java
index e638fe7..ac9f3b1 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPLimitRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPLimitRel.java
@@ -20,28 +20,24 @@ package org.apache.kylin.query.relnode;
import java.util.List;
-import net.hydromatic.optiq.rules.java.EnumerableConvention;
-import net.hydromatic.optiq.rules.java.EnumerableRel;
-import net.hydromatic.optiq.rules.java.EnumerableRelImplementor;
-import net.hydromatic.optiq.rules.java.JavaRules.EnumerableLimitRel;
-
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.rel.RelWriter;
-import org.eigenbase.rel.SingleRel;
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.relopt.RelOptCost;
-import org.eigenbase.relopt.RelOptPlanner;
-import org.eigenbase.relopt.RelTrait;
-import org.eigenbase.relopt.RelTraitSet;
-import org.eigenbase.rex.RexLiteral;
-import org.eigenbase.rex.RexNode;
+import org.apache.calcite.adapter.enumerable.EnumerableConvention;
+import org.apache.calcite.adapter.enumerable.EnumerableLimit;
+import org.apache.calcite.adapter.enumerable.EnumerableRel;
+import org.apache.calcite.adapter.enumerable.EnumerableRelImplementor;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelTrait;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.SingleRel;
+import org.apache.calcite.rex.RexLiteral;
+import org.apache.calcite.rex.RexNode;
import com.google.common.base.Preconditions;
/**
- *
- * @author xjiang
- *
*/
public class OLAPLimitRel extends SingleRel implements OLAPRel, EnumerableRel {
@@ -75,7 +71,7 @@ public class OLAPLimitRel extends SingleRel implements OLAPRel, EnumerableRel {
@Override
public void implementOLAP(OLAPImplementor implementor) {
- implementor.visitChild(getChild(), this);
+ implementor.visitChild(getInput(), this);
this.columnRowType = buildColumnRowType();
@@ -86,14 +82,14 @@ public class OLAPLimitRel extends SingleRel implements OLAPRel, EnumerableRel {
}
private ColumnRowType buildColumnRowType() {
- OLAPRel olapChild = (OLAPRel) getChild();
+ OLAPRel olapChild = (OLAPRel) getInput();
ColumnRowType inputColumnRowType = olapChild.getColumnRowType();
return inputColumnRowType;
}
@Override
public void implementRewrite(RewriteImplementor implementor) {
- implementor.visitChild(this, getChild());
+ implementor.visitChild(this, getInput());
this.rowType = this.deriveRowType();
this.columnRowType = buildColumnRowType();
@@ -101,10 +97,10 @@ public class OLAPLimitRel extends SingleRel implements OLAPRel, EnumerableRel {
@Override
public Result implement(EnumerableRelImplementor implementor, Prefer pref) {
- OLAPRel childRel = (OLAPRel) getChild();
+ OLAPRel childRel = (OLAPRel) getInput();
childRel.replaceTraitSet(EnumerableConvention.INSTANCE);
- EnumerableLimitRel enumLimit = new EnumerableLimitRel(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), getChild(), localOffset, localFetch);
+ EnumerableLimit enumLimit = new EnumerableLimit(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), getInput(), localOffset, localFetch);
Result res = enumLimit.implement(implementor, pref);
childRel.replaceTraitSet(CONVENTION);
@@ -124,7 +120,7 @@ public class OLAPLimitRel extends SingleRel implements OLAPRel, EnumerableRel {
@Override
public boolean hasSubQuery() {
- OLAPRel olapChild = (OLAPRel) getChild();
+ OLAPRel olapChild = (OLAPRel) getInput();
return olapChild.hasSubQuery();
}
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/relnode/OLAPProjectRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPProjectRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPProjectRel.java
index 9b9b07e..62943d6 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPProjectRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPProjectRel.java
@@ -25,45 +25,41 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import net.hydromatic.optiq.rules.java.EnumerableConvention;
-import net.hydromatic.optiq.rules.java.EnumerableRel;
-import net.hydromatic.optiq.rules.java.EnumerableRelImplementor;
-import net.hydromatic.optiq.rules.java.JavaRules.EnumerableCalcRel;
-
+import org.apache.calcite.adapter.enumerable.EnumerableCalc;
+import org.apache.calcite.adapter.enumerable.EnumerableConvention;
+import org.apache.calcite.adapter.enumerable.EnumerableRel;
+import org.apache.calcite.adapter.enumerable.EnumerableRelImplementor;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelTrait;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeFactory.FieldInfoBuilder;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rel.type.RelDataTypeFieldImpl;
+import org.apache.calcite.rex.RexCall;
+import org.apache.calcite.rex.RexInputRef;
+import org.apache.calcite.rex.RexLiteral;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexProgram;
+import org.apache.calcite.sql.SqlOperator;
+import org.apache.calcite.sql.fun.SqlCaseOperator;
+import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.calcite.sql.validate.SqlUserDefinedFunction;
import org.apache.kylin.common.util.ClassUtil;
import org.apache.kylin.metadata.model.TblColRef;
import org.apache.kylin.metadata.model.TblColRef.InnerDataTypeEnum;
-import org.eigenbase.rel.ProjectRelBase;
-import org.eigenbase.rel.RelCollation;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.relopt.RelOptCost;
-import org.eigenbase.relopt.RelOptPlanner;
-import org.eigenbase.relopt.RelTrait;
-import org.eigenbase.relopt.RelTraitSet;
-import org.eigenbase.reltype.RelDataType;
-import org.eigenbase.reltype.RelDataTypeFactory.FieldInfoBuilder;
-import org.eigenbase.reltype.RelDataTypeField;
-import org.eigenbase.reltype.RelDataTypeFieldImpl;
-import org.eigenbase.rex.RexCall;
-import org.eigenbase.rex.RexInputRef;
-import org.eigenbase.rex.RexLiteral;
-import org.eigenbase.rex.RexNode;
-import org.eigenbase.rex.RexProgram;
-import org.eigenbase.sql.SqlOperator;
-import org.eigenbase.sql.fun.SqlCaseOperator;
-import org.eigenbase.sql.fun.SqlStdOperatorTable;
-import org.eigenbase.sql.validate.SqlUserDefinedFunction;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
/**
- *
- * @author xjiang
- *
*/
-public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, EnumerableRel {
+public class OLAPProjectRel extends Project implements OLAPRel, EnumerableRel {
private OLAPContext context;
private List<RexNode> rewriteProjects;
@@ -99,13 +95,13 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
}
@Override
- public ProjectRelBase copy(RelTraitSet traitSet, RelNode child, List<RexNode> exps, RelDataType rowType) {
+ public Project copy(RelTraitSet traitSet, RelNode child, List<RexNode> exps, RelDataType rowType) {
return new OLAPProjectRel(getCluster(), traitSet, child, exps, rowType, this.flags);
}
@Override
public void implementOLAP(OLAPImplementor implementor) {
- implementor.visitChild(getChild(), this);
+ implementor.visitChild(getInput(), this);
this.context = implementor.getContext();
this.hasJoin = context.hasJoin;
@@ -118,7 +114,7 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
private ColumnRowType buildColumnRowType() {
List<TblColRef> columns = new ArrayList<TblColRef>();
List<Set<TblColRef>> sourceColumns = new ArrayList<Set<TblColRef>>();
- OLAPRel olapChild = (OLAPRel) getChild();
+ OLAPRel olapChild = (OLAPRel) getInput();
ColumnRowType inputColumnRowType = olapChild.getColumnRowType();
for (int i = 0; i < this.rewriteProjects.size(); i++) {
RexNode rex = this.rewriteProjects.get(i);
@@ -204,20 +200,20 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
@Override
public Result implement(EnumerableRelImplementor implementor, Prefer pref) {
- EnumerableCalcRel enumCalcRel;
+ EnumerableCalc enumCalcRel;
- RelNode child = getChild();
+ RelNode child = getInput();
if (child instanceof OLAPFilterRel) {
// merge project & filter
- OLAPFilterRel filter = (OLAPFilterRel) getChild();
- RexProgram program = RexProgram.create(filter.getChild().getRowType(), this.rewriteProjects, filter.getCondition(), this.rowType, getCluster().getRexBuilder());
+ OLAPFilterRel filter = (OLAPFilterRel) getInput();
+ RexProgram program = RexProgram.create(filter.getInput().getRowType(), this.rewriteProjects, filter.getCondition(), this.rowType, getCluster().getRexBuilder());
- enumCalcRel = new EnumerableCalcRel(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), filter.getChild(), this.rowType, program, ImmutableList.<RelCollation> of());
+ enumCalcRel = new EnumerableCalc(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), filter.getInput(), program, ImmutableList.<RelCollation> of());
} else {
// keep project for tablescan
RexProgram program = RexProgram.create(child.getRowType(), this.rewriteProjects, null, this.rowType, getCluster().getRexBuilder());
- enumCalcRel = new EnumerableCalcRel(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), child, this.rowType, program, ImmutableList.<RelCollation> of());
+ enumCalcRel = new EnumerableCalc(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), child, program, ImmutableList.<RelCollation> of());
}
return enumCalcRel.implement(implementor, pref);
@@ -230,7 +226,7 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
@Override
public void implementRewrite(RewriteImplementor implementor) {
- implementor.visitChild(this, getChild());
+ implementor.visitChild(this, getInput());
this.rewriting = true;
@@ -244,7 +240,7 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
int paramIndex = this.rowType.getFieldList().size();
List<RelDataTypeField> newFieldList = new LinkedList<RelDataTypeField>();
List<RexNode> newExpList = new LinkedList<RexNode>();
- ColumnRowType inputColumnRowType = ((OLAPRel) getChild()).getColumnRowType();
+ ColumnRowType inputColumnRowType = ((OLAPRel) getInput()).getColumnRowType();
for (Map.Entry<String, RelDataType> rewriteField : this.context.rewriteFields.entrySet()) {
String rewriteFieldName = rewriteField.getKey();
@@ -257,7 +253,7 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
RelDataTypeField newField = new RelDataTypeFieldImpl(rewriteFieldName, paramIndex++, fieldType);
newFieldList.add(newField);
// new project
- RelDataTypeField inputField = getChild().getRowType().getFieldList().get(inputIndex);
+ RelDataTypeField inputField = getInput().getRowType().getFieldList().get(inputIndex);
RexInputRef newFieldRef = new RexInputRef(inputField.getIndex(), inputField.getType());
newExpList.add(newFieldRef);
}
@@ -269,7 +265,7 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
List<RexNode> newProjects = new ArrayList<RexNode>(this.rewriteProjects);
newProjects.addAll(newExpList);
this.rewriteProjects = newProjects;
- ClassUtil.updateFinalField(ProjectRelBase.class, "exps", this, ImmutableList.copyOf(this.rewriteProjects));
+ ClassUtil.updateFinalField(Project.class, "exps", this, ImmutableList.copyOf(this.rewriteProjects));
// rebuild row type
FieldInfoBuilder fieldInfo = getCluster().getTypeFactory().builder();
@@ -291,7 +287,7 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
@Override
public boolean hasSubQuery() {
- OLAPRel olapChild = (OLAPRel) getChild();
+ OLAPRel olapChild = (OLAPRel) getInput();
return olapChild.hasSubQuery();
}
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
index 06cad92..1f6057f 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
@@ -21,20 +21,16 @@ package org.apache.kylin.query.relnode;
import java.util.LinkedHashMap;
import java.util.Stack;
-import net.hydromatic.optiq.rules.java.EnumerableRel;
-import net.hydromatic.optiq.rules.java.EnumerableRelImplementor;
-
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.relopt.Convention;
-import org.eigenbase.relopt.RelTrait;
-import org.eigenbase.relopt.RelTraitSet;
+import org.apache.calcite.adapter.enumerable.EnumerableRel;
+import org.apache.calcite.adapter.enumerable.EnumerableRelImplementor;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelTrait;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- *
- * @author xjiang
- *
*/
public interface OLAPRel extends RelNode {
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/relnode/OLAPSortRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPSortRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPSortRel.java
index 6287f68..2591719 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPSortRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPSortRel.java
@@ -18,32 +18,29 @@
package org.apache.kylin.query.relnode;
-import net.hydromatic.optiq.rules.java.EnumerableConvention;
-import net.hydromatic.optiq.rules.java.EnumerableRel;
-import net.hydromatic.optiq.rules.java.EnumerableRelImplementor;
-import net.hydromatic.optiq.rules.java.JavaRules.EnumerableSortRel;
-
-import org.eigenbase.rel.RelCollation;
-import org.eigenbase.rel.RelFieldCollation;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.rel.SortRel;
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.relopt.RelOptCost;
-import org.eigenbase.relopt.RelOptPlanner;
-import org.eigenbase.relopt.RelTrait;
-import org.eigenbase.relopt.RelTraitSet;
-import org.eigenbase.rex.RexNode;
-
import com.google.common.base.Preconditions;
+
+import org.apache.calcite.adapter.enumerable.EnumerableConvention;
+import org.apache.calcite.adapter.enumerable.EnumerableRel;
+import org.apache.calcite.adapter.enumerable.EnumerableRelImplementor;
+import org.apache.calcite.adapter.enumerable.EnumerableSort;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelTrait;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelFieldCollation;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Sort;
+import org.apache.calcite.rex.RexNode;
import org.apache.kylin.metadata.model.MeasureDesc;
import org.apache.kylin.metadata.model.TblColRef;
import org.apache.kylin.storage.StorageContext;
/**
- * @author xjiang
- *
*/
-public class OLAPSortRel extends SortRel implements EnumerableRel, OLAPRel {
+public class OLAPSortRel extends Sort implements EnumerableRel, OLAPRel {
private ColumnRowType columnRowType;
private OLAPContext context;
@@ -66,26 +63,26 @@ public class OLAPSortRel extends SortRel implements EnumerableRel, OLAPRel {
@Override
public void implementOLAP(OLAPImplementor implementor) {
- implementor.visitChild(getChild(), this);
+ implementor.visitChild(getInput(), this);
this.context = implementor.getContext();
this.columnRowType = buildColumnRowType();
}
private ColumnRowType buildColumnRowType() {
- OLAPRel olapChild = (OLAPRel) getChild();
+ OLAPRel olapChild = (OLAPRel) getInput();
ColumnRowType inputColumnRowType = olapChild.getColumnRowType();
return inputColumnRowType;
}
@Override
public void implementRewrite(RewriteImplementor implementor) {
- implementor.visitChild(this, getChild());
+ implementor.visitChild(this, getInput());
for (RelFieldCollation fieldCollation : this.collation.getFieldCollations()) {
int index = fieldCollation.getFieldIndex();
StorageContext.OrderEnum order = getOrderEnum(fieldCollation.getDirection());
- OLAPRel olapChild = (OLAPRel) this.getChild();
+ OLAPRel olapChild = (OLAPRel) this.getInput();
TblColRef orderCol = olapChild.getColumnRowType().getAllColumns().get(index);
MeasureDesc measure = findMeasure(orderCol);
if (measure != null) {
@@ -117,10 +114,10 @@ public class OLAPSortRel extends SortRel implements EnumerableRel, OLAPRel {
@Override
public Result implement(EnumerableRelImplementor implementor, Prefer pref) {
- OLAPRel childRel = (OLAPRel) getChild();
+ OLAPRel childRel = (OLAPRel) getInput();
childRel.replaceTraitSet(EnumerableConvention.INSTANCE);
- EnumerableSortRel enumSort = new EnumerableSortRel(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE, collation), getChild(), collation, offset, fetch);
+ EnumerableSort enumSort = new EnumerableSort(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE, collation), getInput(), collation, offset, fetch);
Result res = enumSort.implement(implementor, pref);
@@ -141,7 +138,7 @@ public class OLAPSortRel extends SortRel implements EnumerableRel, OLAPRel {
@Override
public boolean hasSubQuery() {
- OLAPRel olapChild = (OLAPRel) getChild();
+ OLAPRel olapChild = (OLAPRel) getInput();
return olapChild.hasSubQuery();
}
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/f379ff42/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
index af76511..f149592 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
@@ -22,32 +22,36 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import net.hydromatic.linq4j.expressions.Blocks;
-import net.hydromatic.linq4j.expressions.Expressions;
-import net.hydromatic.linq4j.expressions.Primitive;
-import net.hydromatic.optiq.rules.java.EnumerableRel;
-import net.hydromatic.optiq.rules.java.EnumerableRelImplementor;
-import net.hydromatic.optiq.rules.java.PhysType;
-import net.hydromatic.optiq.rules.java.PhysTypeImpl;
-
+import org.apache.calcite.adapter.enumerable.EnumerableRel;
+import org.apache.calcite.adapter.enumerable.EnumerableRelImplementor;
+import org.apache.calcite.adapter.enumerable.PhysType;
+import org.apache.calcite.adapter.enumerable.PhysTypeImpl;
+import org.apache.calcite.linq4j.tree.Blocks;
+import org.apache.calcite.linq4j.tree.Expressions;
+import org.apache.calcite.linq4j.tree.Primitive;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.plan.RelTrait;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.plan.volcano.AbstractConverter.ExpandConversionRule;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.core.TableScan;
+import org.apache.calcite.rel.rules.AggregateExpandDistinctAggregatesRule;
+import org.apache.calcite.rel.rules.FilterJoinRule;
+import org.apache.calcite.rel.rules.FilterProjectTransposeRule;
+import org.apache.calcite.rel.rules.JoinCommuteRule;
+import org.apache.calcite.rel.rules.JoinPushThroughJoinRule;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeFactory;
+import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.kylin.query.schema.OLAPSchema;
import org.apache.kylin.query.schema.OLAPTable;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.rel.RelWriter;
-import org.eigenbase.rel.TableAccessRelBase;
-import org.eigenbase.rel.rules.*;
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.relopt.RelOptCost;
-import org.eigenbase.relopt.RelOptPlanner;
-import org.eigenbase.relopt.RelOptTable;
-import org.eigenbase.relopt.RelTrait;
-import org.eigenbase.relopt.RelTraitSet;
-import org.eigenbase.relopt.volcano.AbstractConverter.ExpandConversionRule;
-import org.eigenbase.reltype.RelDataType;
-import org.eigenbase.reltype.RelDataTypeFactory;
-import org.eigenbase.reltype.RelDataTypeField;
import com.google.common.base.Preconditions;
+
import org.apache.kylin.metadata.model.ColumnDesc;
import org.apache.kylin.metadata.model.TblColRef;
import org.apache.kylin.query.optrule.OLAPAggregateRule;
@@ -59,9 +63,8 @@ import org.apache.kylin.query.optrule.OLAPSortRule;
import org.apache.kylin.query.optrule.OLAPToEnumerableConverterRule;
/**
- * @author xjiang
*/
-public class OLAPTableScan extends TableAccessRelBase implements OLAPRel, EnumerableRel {
+public class OLAPTableScan extends TableScan implements OLAPRel, EnumerableRel {
private final OLAPTable olapTable;
private final String tableName;
@@ -115,19 +118,18 @@ public class OLAPTableScan extends TableAccessRelBase implements OLAPRel, Enumer
planner.addRule(OLAPSortRule.INSTANCE);
// since join is the entry point, we can't push filter past join
- planner.removeRule(PushFilterPastJoinRule.FILTER_ON_JOIN);
- planner.removeRule(PushFilterPastJoinRule.JOIN);
+ planner.removeRule(FilterJoinRule.FILTER_ON_JOIN);
+ planner.removeRule(FilterJoinRule.JOIN);
// TODO : since we don't have statistic of table, the optimization of join is too cost
- planner.removeRule(SwapJoinRule.INSTANCE);
- planner.removeRule(PushJoinThroughJoinRule.LEFT);
- planner.removeRule(PushJoinThroughJoinRule.RIGHT);
+ planner.removeRule(JoinCommuteRule.INSTANCE);
+ planner.removeRule(JoinPushThroughJoinRule.LEFT);
+ planner.removeRule(JoinPushThroughJoinRule.RIGHT);
- // for columns in having clause will enable table scan filter rule
- // cause kylin does not depend on MPP
- planner.removeRule(PushFilterPastProjectRule.INSTANCE);
+ // for columns in having clause will enable table scan filter rule cause kylin does not depend on MPP
+ planner.removeRule(FilterProjectTransposeRule.INSTANCE);
// distinct count will be split into a separated query that is joined with the left query
- planner.removeRule(RemoveDistinctAggregateRule.INSTANCE);
+ planner.removeRule(AggregateExpandDistinctAggregatesRule.INSTANCE);
// see Dec 26th email @ http://mail-archives.apache.org/mod_mbox/calcite-dev/201412.mbox/browser
planner.removeRule(ExpandConversionRule.INSTANCE);
@@ -231,7 +233,7 @@ public class OLAPTableScan extends TableAccessRelBase implements OLAPRel, Enumer
for (Map.Entry<String, RelDataType> rewriteField : rewriteFields.entrySet()) {
String fieldName = rewriteField.getKey();
- RelDataTypeField field = rowType.getField(fieldName, true);
+ RelDataTypeField field = rowType.getField(fieldName, true, false);
if (field != null) {
RelDataType fieldType = field.getType();
rewriteField.setValue(fieldType);