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/07/03 08:46:25 UTC
[2/9] incubator-kylin git commit: KYLIN-780 Upgrade query module,
all query test pass
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/5bcb652c/jdbc/pom.xml
----------------------------------------------------------------------
diff --git a/jdbc/pom.xml b/jdbc/pom.xml
index 7f707c7..485ed3d 100644
--- a/jdbc/pom.xml
+++ b/jdbc/pom.xml
@@ -22,7 +22,7 @@
<artifactId>kylin-jdbc</artifactId>
<packaging>jar</packaging>
<name>Kylin:JDBC</name>
- <description>Kylin JDBC Driver on optiq avatica</description>
+ <description>Kylin JDBC Driver on Calcite Avatica</description>
<parent>
<groupId>org.apache.kylin</groupId>
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/metadata/src/main/java/org/apache/kylin/metadata/model/DataType.java
----------------------------------------------------------------------
diff --git a/metadata/src/main/java/org/apache/kylin/metadata/model/DataType.java b/metadata/src/main/java/org/apache/kylin/metadata/model/DataType.java
index a4e8db6..9f6d38a 100644
--- a/metadata/src/main/java/org/apache/kylin/metadata/model/DataType.java
+++ b/metadata/src/main/java/org/apache/kylin/metadata/model/DataType.java
@@ -32,7 +32,7 @@ import java.util.regex.Pattern;
*
*/
public class DataType {
-
+
public static final String VALID_TYPES_STRING = "any|char|varchar|boolean|binary" //
+ "|integer|tinyint|smallint|bigint|decimal|numeric|float|real|double" //
+ "|date|time|datetime|timestamp|byte|int|short|long|string|hllc" //
@@ -89,6 +89,7 @@ public class DataType {
private static final ConcurrentMap<DataType, DataType> CACHE = new ConcurrentHashMap<DataType, DataType>();
+ public static final DataType ANY = DataType.getInstance("any");
public static DataType getInstance(String type) {
if (type == null)
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/5bcb652c/metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java
----------------------------------------------------------------------
diff --git a/metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java b/metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java
index eda31a1..5f21fff 100644
--- a/metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java
+++ b/metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java
@@ -138,13 +138,13 @@ public class FunctionDesc {
this.returnDataType = returnDataType;
}
- public String getSQLType() {
+ public DataType getSQLType() {
if (isCountDistinct())
- return "any";
+ return DataType.ANY;
else if (isSum() || isMax() || isMin())
- return parameter.getColRefs().get(0).getType().getName();
+ return parameter.getColRefs().get(0).getType();
else
- return returnType;
+ return returnDataType;
}
public String getReturnType() {
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/5bcb652c/metadata/src/main/java/org/apache/kylin/metadata/project/ProjectL2Cache.java
----------------------------------------------------------------------
diff --git a/metadata/src/main/java/org/apache/kylin/metadata/project/ProjectL2Cache.java b/metadata/src/main/java/org/apache/kylin/metadata/project/ProjectL2Cache.java
index 10c4472..bc1b3a6 100644
--- a/metadata/src/main/java/org/apache/kylin/metadata/project/ProjectL2Cache.java
+++ b/metadata/src/main/java/org/apache/kylin/metadata/project/ProjectL2Cache.java
@@ -256,7 +256,7 @@ class ProjectL2Cache {
private static class TableCache {
private boolean exposed = false;
private TableDesc tableDesc;
- private Set<ColumnDesc> exposedColumns = Sets.newHashSet();
+ private Set<ColumnDesc> exposedColumns = Sets.newLinkedHashSet();
private Set<IRealization> realizations = Sets.newHashSet();
TableCache(TableDesc tableDesc) {
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/5bcb652c/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index cdd8191..c0a4be2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,9 +83,8 @@
<!-- REST Service -->
<spring.framework.version>3.1.2.RELEASE</spring.framework.version>
- <!-- Optiq Version -->
- <optiq.version>0.9.2-incubating</optiq.version>
- <linq4j.version>0.4</linq4j.version>
+ <!-- Calcite Version -->
+ <calcite.version>1.0.0-incubating</calcite.version>
<!-- Metrics Codahale Version -->
<metrics.version>3.0.1</metrics.version>
@@ -102,7 +101,7 @@
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
<sonar.language>java</sonar.language>
<sonar.jacoco.excludes>
- org/apache/kylin/**/tools/**:**/*CLI.java:net/hydromatic/optiq/**:org/eigenbase/sql2rel/**
+ org/apache/kylin/**/tools/**:**/*CLI.java
</sonar.jacoco.excludes>
</properties>
@@ -248,21 +247,21 @@
<version>${yarn.version}</version>
</dependency>
- <!-- optiq dependencies -->
+ <!-- Calcite dependencies -->
<dependency>
<groupId>org.apache.calcite</groupId>
<artifactId>calcite-core</artifactId>
- <version>${optiq.version}</version>
+ <version>${calcite.version}</version>
</dependency>
<dependency>
<groupId>org.apache.calcite</groupId>
<artifactId>calcite-avatica</artifactId>
- <version>${optiq.version}</version>
+ <version>${calcite.version}</version>
</dependency>
<dependency>
- <groupId>net.hydromatic</groupId>
- <artifactId>linq4j</artifactId>
- <version>${linq4j.version}</version>
+ <groupId>org.apache.calcite</groupId>
+ <artifactId>calcite-linq4j</artifactId>
+ <version>${calcite.version}</version>
</dependency>
<!-- Other dependencies -->
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/5bcb652c/query/pom.xml
----------------------------------------------------------------------
diff --git a/query/pom.xml b/query/pom.xml
index 3881b4d..86fca54 100644
--- a/query/pom.xml
+++ b/query/pom.xml
@@ -23,7 +23,7 @@
<artifactId>kylin-query</artifactId>
<packaging>jar</packaging>
<name>Kylin:Query</name>
- <description>kylin query engine based on optiq</description>
+ <description>kylin query engine based on Calcite</description>
<parent>
<groupId>org.apache.kylin</groupId>
@@ -54,8 +54,8 @@
<version>${project.parent.version}</version>
</dependency>
<dependency>
- <groupId>net.hydromatic</groupId>
- <artifactId>linq4j</artifactId>
+ <groupId>org.apache.calcite</groupId>
+ <artifactId>calcite-linq4j</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/5bcb652c/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..b83e449 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 {
@@ -135,11 +132,9 @@ public class CubeEnumerator implements Enumerator<Object[]> {
// bind dynamic variables
bindVariable(olapContext.filter);
-
-
// query storage engine
IStorageEngine storageEngine = StorageEngineFactory.getStorageEngine(olapContext.realization);
- ITupleIterator iterator = storageEngine.search(olapContext.storageContext,olapContext.getSQLDigest());
+ ITupleIterator iterator = storageEngine.search(olapContext.storageContext, olapContext.getSQLDigest());
if (logger.isDebugEnabled()) {
logger.debug("return TupleIterator...");
}
@@ -148,7 +143,6 @@ public class CubeEnumerator implements Enumerator<Object[]> {
return iterator;
}
-
private void bindVariable(TupleFilter filter) {
if (filter == null) {
return;
@@ -172,7 +166,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/5bcb652c/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/5bcb652c/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..3ae19dd 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
@@ -18,12 +18,12 @@
package org.apache.kylin.query.enumerator;
+import java.util.Arrays;
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 +34,6 @@ import org.apache.kylin.query.schema.OLAPTable;
import org.apache.kylin.storage.tuple.Tuple;
/**
- * @author yangli9
- *
*/
public class LookupTableEnumerator implements Enumerator<Object[]> {
@@ -85,7 +83,8 @@ public class LookupTableEnumerator implements Enumerator<Object[]> {
@Override
public Object[] current() {
- return current;
+ // NOTE if without the copy, sql_lookup/query03.sql will yields messy result. Very weird coz other lookup queries are all good.
+ return Arrays.copyOf(current, current.length);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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/5bcb652c/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 10d4150..832d4c8 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
@@ -20,50 +20,47 @@ package org.apache.kylin.query.relnode;
import java.util.*;
-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.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.metadata.model.ColumnDesc;
import org.apache.kylin.metadata.model.FunctionDesc;
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 {
private final static Map<String, String> AGGR_FUNC_MAP = new HashMap<String, String>();
@@ -96,16 +93,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) {
@@ -115,19 +118,13 @@ 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);
}
@Override
public void implementOLAP(OLAPImplementor implementor) {
- implementor.visitChild(getChild(), this);
+ implementor.visitChild(getInput(), this);
this.context = implementor.getContext();
this.columnRowType = buildColumnRowType();
@@ -153,7 +150,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);
@@ -187,7 +184,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);
@@ -196,7 +193,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;
@@ -223,7 +220,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);
@@ -247,14 +244,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);
}
@@ -264,7 +260,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)) {
@@ -281,7 +277,8 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
}
// rebuild rowType & columnRowType
- this.rowType = this.deriveRowType();
+ //ClassUtil.updateFinalField(Aggregate.class, "aggCalls", this, rewriteAggCalls);
+ this.rowType = this.deriveRowType(); // this does not work coz super.aggCalls is final
this.columnRowType = this.buildColumnRowType();
}
@@ -291,34 +288,24 @@ 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()) {
- //newAgg = new SqlSumEmptyIsZeroAggFunction(fieldType);
newAgg = SqlStdOperatorTable.SUM0;
}
// rebuild aggregate call
AggregateCall newAggCall = new AggregateCall(newAgg, false, newArgList, fieldType, newAgg.getName());
-
- // To make sure specified type matches the inferReturnType, or otherwise
- // there will be assertion failure in optiq
- // The problem is BIGINT != BIGINT NOT NULL
- // Details see https://github.scm.corp.ebay.com/Kylin/Kylin/issues/323
- SqlAggFunction aggFunction = (SqlAggFunction) newAggCall.getAggregation();
- AggCallBinding callBinding = newAggCall.createBinding(this);
- RelDataType inferReturnType = aggFunction.inferReturnType(callBinding);
-
- return new AggregateCall(newAgg, false, newArgList, inferReturnType, newAgg.getName());
+ return newAggCall;
}
- 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);
@@ -333,16 +320,13 @@ public class OLAPAggregateRel extends AggregateRelBase implements OLAPRel, Enume
}
@Override
- public Result implement(EnumerableRelImplementor implementor, Prefer pref) {
-
- EnumerableAggregateRel enumAggRel;
+ public EnumerableRel implementEnumerable(List<EnumerableRel> inputs) {
try {
- enumAggRel = new EnumerableAggregateRel(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), getChild(), this.groupSet, rewriteAggCalls);
+ return new EnumerableAggregate(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), //
+ sole(inputs), false, this.groupSet, this.groupSets, rewriteAggCalls);
} catch (InvalidRelException e) {
- throw new IllegalStateException("Can't create EnumerableAggregateRel!", e);
+ throw new IllegalStateException("Can't create EnumerableAggregate!", e);
}
-
- return enumAggRel.implement(implementor, pref);
}
@Override
@@ -357,7 +341,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/5bcb652c/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/5bcb652c/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..48c1075 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,38 @@
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.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 +59,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 {
private static class TupleFilterVisitor extends RexVisitorImpl<TupleFilter> {
@@ -211,9 +212,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 +248,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 +266,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;
}
@@ -296,23 +297,22 @@ public class OLAPFilterRel extends FilterRelBase implements OLAPRel, EnumerableR
}
@Override
- public Result implement(EnumerableRelImplementor implementor, Prefer pref) {
+ public EnumerableRel implementEnumerable(List<EnumerableRel> inputs) {
// 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());
-
- return enumCalcRel.implement(implementor, pref);
+ return new EnumerableCalc(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), //
+ sole(inputs), program, ImmutableList.<RelCollation> of());
}
@Override
public void implementRewrite(RewriteImplementor implementor) {
- implementor.visitChild(this, getChild());
+ implementor.visitChild(this, getInput());
this.rowType = this.deriveRowType();
this.columnRowType = buildColumnRowType();
@@ -330,7 +330,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/5bcb652c/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..8de155c 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,43 @@ 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.calcite.adapter.enumerable.EnumerableConvention;
+import org.apache.calcite.adapter.enumerable.EnumerableJoin;
+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.MethodCallExpression;
+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;
-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.kylin.metadata.model.JoinDesc;
-import org.apache.kylin.metadata.model.TblColRef;
/**
- * @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 +80,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 +88,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);
}
}
@@ -227,18 +227,25 @@ public class OLAPJoinRel extends EnumerableJoinRel implements OLAPRel {
}
@Override
- public Result implement(EnumerableRelImplementor implementor, Prefer pref) {
- Result result = null;
+ public EnumerableRel implementEnumerable(List<EnumerableRel> inputs) {
if (this.hasSubQuery) {
- result = super.implement(implementor, pref);
+ try {
+ return new EnumerableJoin(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), //
+ inputs.get(0), inputs.get(1), condition, leftKeys, rightKeys, joinType, variablesStopped);
+ } catch (InvalidRelException e) {
+ throw new IllegalStateException("Can't create EnumerableJoin!", e);
+ }
} else {
- PhysType physType = PhysTypeImpl.of(implementor.getTypeFactory(), getRowType(), pref.preferArray());
-
- RelOptTable factTable = context.firstTableScan.getTable();
- result = implementor.result(physType, Blocks.toBlock(Expressions.call(factTable.getExpression(OLAPTable.class), "executeIndexQuery", implementor.getRootExpression(), Expressions.constant(context.id))));
+ return this;
}
+ }
- return result;
+ @Override
+ public Result implement(EnumerableRelImplementor implementor, Prefer pref) {
+ PhysType physType = PhysTypeImpl.of(implementor.getTypeFactory(), getRowType(), pref.preferArray());
+ RelOptTable factTable = context.firstTableScan.getTable();
+ MethodCallExpression exprCall = Expressions.call(factTable.getExpression(OLAPTable.class), "executeIndexQuery", implementor.getRootExpression(), Expressions.constant(context.id));
+ return implementor.result(physType, Blocks.toBlock(exprCall));
}
@Override
@@ -259,7 +266,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/5bcb652c/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..a31cc21 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,30 +20,25 @@ 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.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 {
+public class OLAPLimitRel extends SingleRel implements OLAPRel {
private final RexNode localOffset; // avoid same name in parent class
private final RexNode localFetch; // avoid same name in parent class
@@ -75,7 +70,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,30 +81,23 @@ 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();
}
@Override
- public Result implement(EnumerableRelImplementor implementor, Prefer pref) {
- OLAPRel childRel = (OLAPRel) getChild();
- childRel.replaceTraitSet(EnumerableConvention.INSTANCE);
-
- EnumerableLimitRel enumLimit = new EnumerableLimitRel(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), getChild(), localOffset, localFetch);
- Result res = enumLimit.implement(implementor, pref);
-
- childRel.replaceTraitSet(CONVENTION);
-
- return res;
+ public EnumerableRel implementEnumerable(List<EnumerableRel> inputs) {
+ return new EnumerableLimit(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), //
+ sole(inputs), localOffset, localFetch);
}
@Override
@@ -124,7 +112,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/5bcb652c/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 1215f9e..8f80962 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,44 +25,39 @@ 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.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.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 {
private OLAPContext context;
private List<RexNode> rewriteProjects;
@@ -98,13 +93,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;
@@ -117,7 +112,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);
@@ -125,12 +120,28 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
String fieldName = columnField.getName();
Set<TblColRef> sourceCollector = new HashSet<TblColRef>();
TblColRef column = translateRexNode(rex, inputColumnRowType, fieldName, sourceCollector);
+ if (column == null)
+ throw new IllegalStateException("No TblColRef found in " + rex);
columns.add(column);
sourceColumns.add(sourceCollector);
}
return new ColumnRowType(columns, sourceColumns);
}
+ private TblColRef translateFirstRexInputRef(RexCall call, ColumnRowType inputColumnRowType, String fieldName, Set<TblColRef> sourceCollector) {
+ for (RexNode operand : call.getOperands()) {
+ if (operand instanceof RexInputRef) {
+ return translateRexInputRef((RexInputRef) operand, inputColumnRowType, fieldName, sourceCollector);
+ }
+ if (operand instanceof RexCall) {
+ TblColRef r = translateFirstRexInputRef((RexCall) operand, inputColumnRowType, fieldName, sourceCollector);
+ if (r != null)
+ return r;
+ }
+ }
+ return null;
+ }
+
private TblColRef translateRexNode(RexNode rexNode, ColumnRowType inputColumnRowType, String fieldName, Set<TblColRef> sourceCollector) {
TblColRef column = null;
if (rexNode instanceof RexInputRef) {
@@ -175,16 +186,10 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
private TblColRef translateRexCall(RexCall call, ColumnRowType inputColumnRowType, String fieldName, Set<TblColRef> sourceCollector) {
SqlOperator operator = call.getOperator();
if (operator == SqlStdOperatorTable.EXTRACT_DATE) {
- List<RexNode> extractDateOps = call.getOperands();
- RexCall reinterpret = (RexCall) extractDateOps.get(1);
- List<RexNode> reinterpretOps = reinterpret.getOperands();
- RexInputRef inputRef = (RexInputRef) reinterpretOps.get(0);
- return translateRexInputRef(inputRef, inputColumnRowType, fieldName, sourceCollector);
+ return translateFirstRexInputRef(call, inputColumnRowType, fieldName, sourceCollector);
} else if (operator instanceof SqlUserDefinedFunction) {
if (operator.getName().equals("QUARTER")) {
- List<RexNode> quaterOps = call.getOperands();
- RexInputRef inputRef = (RexInputRef) quaterOps.get(0);
- return translateRexInputRef(inputRef, inputColumnRowType, fieldName, sourceCollector);
+ return translateFirstRexInputRef(call, inputColumnRowType, fieldName, sourceCollector);
}
} else if (operator instanceof SqlCaseOperator) {
for (RexNode operand : call.getOperands()) {
@@ -202,24 +207,21 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
}
@Override
- public Result implement(EnumerableRelImplementor implementor, Prefer pref) {
- EnumerableCalcRel enumCalcRel;
-
- RelNode child = getChild();
- if (child instanceof OLAPFilterRel) {
+ public EnumerableRel implementEnumerable(List<EnumerableRel> inputs) {
+ if (getInput() instanceof OLAPFilterRel) {
// merge project & filter
- OLAPFilterRel filter = (OLAPFilterRel) getChild();
- RexProgram program = RexProgram.create(filter.getChild().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());
+ OLAPFilterRel filter = (OLAPFilterRel) getInput();
+ RelNode inputOfFilter = inputs.get(0).getInput(0);
+ RexProgram program = RexProgram.create(inputOfFilter.getRowType(), this.rewriteProjects, filter.getCondition(), this.rowType, getCluster().getRexBuilder());
+ return new EnumerableCalc(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), //
+ inputOfFilter, 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());
+ // keep project for table scan
+ EnumerableRel input = sole(inputs);
+ RexProgram program = RexProgram.create(input.getRowType(), this.rewriteProjects, null, this.rowType, getCluster().getRexBuilder());
+ return new EnumerableCalc(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE), //
+ input, program, ImmutableList.<RelCollation> of());
}
-
- return enumCalcRel.implement(implementor, pref);
}
@Override
@@ -229,7 +231,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;
@@ -243,7 +245,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();
@@ -256,7 +258,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);
}
@@ -289,7 +291,7 @@ public class OLAPProjectRel extends ProjectRelBase implements OLAPRel, Enumerabl
@Override
public boolean hasSubQuery() {
- OLAPRel olapChild = (OLAPRel) getChild();
+ OLAPRel olapChild = (OLAPRel) getInput();
return olapChild.hasSubQuery();
}