You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by lu...@apache.org on 2015/01/14 15:16:00 UTC

[25/51] [partial] incubator-kylin git commit: cleanup for migration from github.com

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/pom.xml
----------------------------------------------------------------------
diff --git a/jdbc/pom.xml b/jdbc/pom.xml
deleted file mode 100644
index e69cac0..0000000
--- a/jdbc/pom.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<artifactId>kylin-jdbc</artifactId>
-	<packaging>jar</packaging>
-
-	<!-- More project information. -->
-	<name>Kylin:Jdbc</name>
-	<description>kylin jdbc on optiq avatica</description>
-	<url>https://github.scm.corp.ebay.com/BIPlatform/Kylin</url>
-
-	<parent>
-		<groupId>com.kylinolap</groupId>
-		<artifactId>kylin</artifactId>
-		<version>0.6.3-SNAPSHOT</version>
-	</parent>
-
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-	</properties>
-
-	<dependencies>
-		<dependency>
-			<groupId>org.apache.calcite</groupId>
-			<artifactId>calcite-core</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.calcite</groupId>
-			<artifactId>calcite-avatica</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>commons-httpclient</groupId>
-			<artifactId>commons-httpclient</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>log4j</groupId>
-			<artifactId>log4j</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>jcl-over-slf4j</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-log4j12</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<plugins>
-			<plugin>
-				<artifactId>maven-assembly-plugin</artifactId>
-				<configuration>
-					<descriptorRefs>
-						<descriptorRef>jar-with-dependencies</descriptorRef>
-					</descriptorRefs>
-					<appendAssemblyId>false</appendAssemblyId>
-				</configuration>
-				<executions>
-					<execution>
-						<id>make-assembly</id>
-						<phase>package</phase>
-						<goals>
-							<goal>single</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/Driver.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/Driver.java b/jdbc/src/main/java/com/kylinolap/jdbc/Driver.java
deleted file mode 100644
index 0f5e380..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/Driver.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc;
-
-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.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.kylinolap.jdbc.stub.ConnectionException;
-import com.kylinolap.jdbc.stub.RemoteClient;
-
-/**
- * <p>
- * Kylin JDBC Driver based on optiq avatica and kylin restful api.<br>
- * Supported versions:
- * </p>
- * <ul>
- * <li>jdbc 4.0</li>
- * <li>jdbc 4.1</li>
- * </ul>
- * 
- * <p>
- * Supported Statements:
- * </p>
- * <ul>
- * <li>{@link KylinStatementImpl}</li>
- * <li>{@link KylinPrepareStatementImpl}</li>
- * </ul>
- * 
- * <p>
- * Supported properties:
- * <ul>
- * <li>user: username</li>
- * <li>password: password</li>
- * <li>ssl: true/false</li>
- * </ul>
- * </p>
- * 
- * <p>
- * Driver init code sample:<br>
- * 
- * <pre>
- * Driver driver = (Driver) Class.forName(&quot;com.kylinolap.kylin.jdbc.Driver&quot;).newInstance();
- * Properties info = new Properties();
- * info.put(&quot;user&quot;, &quot;user&quot;);
- * info.put(&quot;password&quot;, &quot;password&quot;);
- * info.put(&quot;ssl&quot;, true);
- * Connection conn = driver.connect(&quot;jdbc:kylin://{domain}/{project}&quot;, info);
- * </pre>
- * 
- * </p>
- * 
- * @author xduo
- * 
- */
-public class Driver extends UnregisteredDriver {
-    private static final Logger logger = LoggerFactory.getLogger(Driver.class);
-
-    public static final String CONNECT_STRING_PREFIX = "jdbc:kylin:";
-
-    @Override
-    protected DriverVersion createDriverVersion() {
-        return DriverVersion.load(Driver.class, "com-kylinolap-kylin-jdbc.properties", "Kylin JDBC Driver", "unknown version", "Kylin", "unknown version");
-    }
-
-    @Override
-    protected String getFactoryClassName(JdbcVersion jdbcVersion) {
-        switch (jdbcVersion) {
-        case JDBC_30:
-            throw new UnsupportedOperationException();
-        case JDBC_40:
-            return "com.kylinolap.kylin.jdbc.KylinJdbc40Factory";
-        case JDBC_41:
-        default:
-            return "com.kylinolap.kylin.jdbc.KylinJdbc41Factory";
-        }
-    }
-
-    @Override
-    protected Handler createHandler() {
-        return new HandlerImpl() {
-            @Override
-            public void onConnectionInit(AvaticaConnection connection_) throws SQLException {
-                KylinConnectionImpl kylinConn = (KylinConnectionImpl) connection_;
-                RemoteClient runner = ((KylinJdbc41Factory) factory).newRemoteClient(kylinConn);
-                try {
-                    runner.connect();
-                    kylinConn.setMetaProject(runner.getMetadata(kylinConn.getProject()));
-                    logger.debug("Connection inited.");
-                } catch (ConnectionException e) {
-                    logger.error(e.getLocalizedMessage(), e);
-                    throw new SQLException(e.getLocalizedMessage());
-                }
-            }
-
-            public void onConnectionClose(AvaticaConnection connection) {
-                logger.debug("Connection closed.");
-            }
-
-            public void onStatementExecute(AvaticaStatement statement, ResultSink resultSink) {
-                logger.debug("statement executed.");
-            }
-
-            public void onStatementClose(AvaticaStatement statement) {
-                logger.debug("statement closed.");
-            }
-        };
-    }
-
-    @Override
-    protected String getConnectStringPrefix() {
-        return CONNECT_STRING_PREFIX;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/KylinConnectionImpl.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/KylinConnectionImpl.java b/jdbc/src/main/java/com/kylinolap/jdbc/KylinConnectionImpl.java
deleted file mode 100644
index 2b412ed..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/KylinConnectionImpl.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-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.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.kylinolap.jdbc.KylinMetaImpl.MetaProject;
-import com.kylinolap.jdbc.KylinPrepare.PrepareResult;
-
-/**
- * Kylin connection implementation
- * 
- * @author xduo
- * 
- */
-public abstract class KylinConnectionImpl extends AvaticaConnection {
-    private static final Logger logger = LoggerFactory.getLogger(KylinConnectionImpl.class);
-
-    private final String baseUrl;
-    private final String project;
-    private MetaProject metaProject;
-    public final List<AvaticaStatement> statements;
-    static final Trojan TROJAN = createTrojan();
-
-    protected KylinConnectionImpl(UnregisteredDriver driver, AvaticaFactory factory, String url, Properties info) {
-        super(driver, factory, url, info);
-
-        String odbcUrl = url;
-        odbcUrl = odbcUrl.replace(Driver.CONNECT_STRING_PREFIX + "//", "");
-        String[] temps = odbcUrl.split("/");
-
-        assert temps.length == 2;
-
-        this.baseUrl = temps[0];
-        this.project = temps[1];
-
-        logger.debug("Kylin base url " + this.baseUrl + ", project name " + this.project);
-
-        statements = new ArrayList<AvaticaStatement>();
-    }
-
-    @Override
-    protected Meta createMeta() {
-        return new KylinMetaImpl(this, (KylinJdbc41Factory) factory);
-    }
-
-    @Override
-    public AvaticaStatement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
-        AvaticaStatement statement = super.createStatement(resultSetType, resultSetConcurrency, resultSetHoldability);
-        statements.add(statement);
-
-        return statement;
-    }
-
-    @Override
-    public PreparedStatement prepareStatement(String sql) throws SQLException {
-        PrepareResult pr = new KylinPrepareImpl().prepare(sql);
-        AvaticaPreparedStatement statement = ((KylinJdbc41Factory) factory).newPreparedStatement(this, pr, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, this.getHoldability());
-        statements.add(statement);
-
-        return statement;
-    }
-
-    // ~ kylin specified implements
-
-    public String getBasicAuthHeader() {
-        String username = this.info.getProperty("user");
-        String password = this.info.getProperty("password");
-
-        return DatatypeConverter.printBase64Binary((username + ":" + password).getBytes());
-    }
-
-    public String getConnectUrl() {
-        boolean isSsl = Boolean.parseBoolean((this.info.getProperty("ssl", "false")));
-        return (isSsl ? "https://" : "http://") + this.baseUrl + ":" + (isSsl ? 443 : 80) + "/kylin/api/user/authentication";
-    }
-
-    public String getMetaProjectUrl(String project) {
-        assert project != null;
-        boolean isSsl = Boolean.parseBoolean((this.info.getProperty("ssl", "false")));
-        return (isSsl ? "https://" : "http://") + this.baseUrl + ":" + (isSsl ? 443 : 80) + "/kylin/api/tables_and_columns?project=" + project;
-    }
-
-    public String getQueryUrl() {
-        boolean isSsl = Boolean.parseBoolean((this.info.getProperty("ssl", "false")));
-        return (isSsl ? "https://" : "http://") + this.baseUrl + ":" + (isSsl ? 443 : 80) + "/kylin/api/query";
-    }
-
-    public String getProject() {
-        return this.project;
-    }
-
-    public Meta getMeta() {
-        return this.meta;
-    }
-
-    public AvaticaFactory getFactory() {
-        return this.factory;
-    }
-
-    public UnregisteredDriver getDriver() {
-        return this.driver;
-    }
-
-    public MetaProject getMetaProject() {
-        return metaProject;
-    }
-
-    public void setMetaProject(MetaProject metaProject) {
-        this.metaProject = metaProject;
-    }
-
-    @Override
-    public void close() throws SQLException {
-        super.close();
-
-        this.metaProject = null;
-        this.statements.clear();
-    }
-
-    @Override
-    public String toString() {
-        return "KylinConnectionImpl [baseUrl=" + baseUrl + ", project=" + project + ", metaProject=" + metaProject + "]";
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/KylinEnumerator.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/KylinEnumerator.java b/jdbc/src/main/java/com/kylinolap/jdbc/KylinEnumerator.java
deleted file mode 100644
index 8ef6f66..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/KylinEnumerator.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import net.hydromatic.linq4j.Enumerator;
-
-/**
- * Query results enumerator
- * 
- * @author xduo
- * 
- */
-public class KylinEnumerator<E> implements Enumerator<E> {
-
-    /**
-     * current row
-     */
-    private E current;
-
-    /**
-     * data collection
-     */
-    private Collection<E> dataCollection;
-
-    /**
-     * result iterator
-     */
-    private Iterator<E> cursor;
-
-    public KylinEnumerator(Collection<E> dataCollection) {
-        this.dataCollection = dataCollection;
-        this.cursor = this.dataCollection.iterator();
-
-        if (null == this.cursor) {
-            throw new RuntimeException("Cursor can't be null");
-        }
-    }
-
-    @Override
-    public E current() {
-        return current;
-    }
-
-    @Override
-    public boolean moveNext() {
-        if (!cursor.hasNext()) {
-            this.reset();
-
-            return false;
-        }
-
-        current = cursor.next();
-
-        return true;
-    }
-
-    @Override
-    public void reset() {
-        this.cursor = this.dataCollection.iterator();
-    }
-
-    @Override
-    public void close() {
-        this.cursor = null;
-        this.dataCollection = null;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/KylinJdbc40Factory.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/KylinJdbc40Factory.java b/jdbc/src/main/java/com/kylinolap/jdbc/KylinJdbc40Factory.java
deleted file mode 100644
index 83fcca3..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/KylinJdbc40Factory.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc;
-
-/**
- * @author xduo
- * 
- */
-public class KylinJdbc40Factory extends KylinJdbc41Factory {
-
-    public KylinJdbc40Factory() {
-        super(4, 0);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/KylinJdbc41Factory.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/KylinJdbc41Factory.java b/jdbc/src/main/java/com/kylinolap/jdbc/KylinJdbc41Factory.java
deleted file mode 100644
index 10a8e02..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/KylinJdbc41Factory.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc;
-
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-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 com.kylinolap.jdbc.stub.KylinClient;
-import com.kylinolap.jdbc.stub.RemoteClient;
-
-/**
- * Kylin JDBC factory.
- * 
- * @author xduo
- * 
- */
-public class KylinJdbc41Factory implements AvaticaFactory {
-    private final int major;
-    private final int minor;
-
-    /** Creates a JDBC factory. */
-    public KylinJdbc41Factory() {
-        this(4, 1);
-    }
-
-    /** Creates a JDBC factory with given major/minor version number. */
-    protected KylinJdbc41Factory(int major, int minor) {
-        this.major = major;
-        this.minor = minor;
-    }
-
-    public int getJdbcMajorVersion() {
-        return major;
-    }
-
-    public int getJdbcMinorVersion() {
-        return minor;
-    }
-
-    public AvaticaConnection newConnection(UnregisteredDriver driver, AvaticaFactory factory, String url, Properties info) {
-        return new KylinJdbc41Connection(driver, factory, url, info);
-    }
-
-    public AvaticaDatabaseMetaData newDatabaseMetaData(AvaticaConnection connection) {
-        return new AvaticaJdbc41DatabaseMetaData(connection);
-    }
-
-    public AvaticaStatement newStatement(AvaticaConnection connection, int resultSetType, int resultSetConcurrency, int resultSetHoldability) {
-        return new KylinJdbc41Statement(connection, resultSetType, resultSetConcurrency, resultSetHoldability);
-    }
-
-    public AvaticaPreparedStatement newPreparedStatement(AvaticaConnection connection, AvaticaPrepareResult prepareResult, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
-        return new KylinJdbc41PreparedStatement(connection, prepareResult, resultSetType, resultSetConcurrency, resultSetHoldability);
-    }
-
-    public AvaticaResultSet newResultSet(AvaticaStatement statement, AvaticaPrepareResult prepareResult, TimeZone timeZone) {
-        final ResultSetMetaData metaData = newResultSetMetaData(statement, prepareResult.getColumnList());
-        return new KylinResultSet(statement, prepareResult, metaData, timeZone);
-    }
-
-    public AvaticaResultSetMetaData newResultSetMetaData(AvaticaStatement statement, List<ColumnMetaData> columnMetaDataList) {
-        return new AvaticaResultSetMetaData(statement, null, columnMetaDataList);
-    }
-
-    // ~ kylin sepcified
-    public RemoteClient newRemoteClient(KylinConnectionImpl connection) {
-        return new KylinClient(connection);
-    }
-
-    /** Implementation of Connection for JDBC 4.1. */
-    private static class KylinJdbc41Connection extends KylinConnectionImpl {
-        KylinJdbc41Connection(UnregisteredDriver driver, AvaticaFactory factory, String url, Properties info) {
-            super(driver, (KylinJdbc41Factory) factory, url, info);
-        }
-    }
-
-    /** Implementation of Statement for JDBC 4.1. */
-    public static class KylinJdbc41Statement extends KylinStatementImpl {
-        public KylinJdbc41Statement(AvaticaConnection connection, int resultSetType, int resultSetConcurrency, int resultSetHoldability) {
-            super(connection, resultSetType, resultSetConcurrency, resultSetHoldability);
-        }
-    }
-
-    /** Implementation of PreparedStatement for JDBC 4.1. */
-    public static class KylinJdbc41PreparedStatement extends KylinPrepareStatementImpl {
-        KylinJdbc41PreparedStatement(AvaticaConnection connection, AvaticaPrepareResult sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
-            super(connection, sql, resultSetType, resultSetConcurrency, resultSetHoldability);
-        }
-    }
-
-    /** Implementation of DatabaseMetaData for JDBC 4.1. */
-    private static class AvaticaJdbc41DatabaseMetaData extends AvaticaDatabaseMetaData {
-        AvaticaJdbc41DatabaseMetaData(AvaticaConnection connection) {
-            super(connection);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/KylinMetaImpl.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/KylinMetaImpl.java b/jdbc/src/main/java/com/kylinolap/jdbc/KylinMetaImpl.java
deleted file mode 100644
index 8be47b0..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/KylinMetaImpl.java
+++ /dev/null
@@ -1,825 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc;
-
-import java.lang.reflect.Field;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-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.eigenbase.sql.SqlJdbcFunctionCall;
-import org.eigenbase.sql.parser.SqlParser;
-import org.eigenbase.util.Util;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.kylinolap.jdbc.stub.DataSet;
-import com.kylinolap.jdbc.stub.KylinColumnMetaData;
-import com.kylinolap.jdbc.stub.RemoteClient;
-import com.kylinolap.jdbc.util.SQLTypeMap;
-
-/**
- * Implementation of avatica interface
- *
- * @author xduo
- */
-public class KylinMetaImpl implements Meta {
-
-    private static final Logger logger = LoggerFactory.getLogger(KylinMetaImpl.class);
-
-    private final KylinConnectionImpl conn;
-
-    private final KylinJdbc41Factory factory;
-
-    /**
-     * @param conn
-     */
-    public KylinMetaImpl(KylinConnectionImpl conn, KylinJdbc41Factory factory) {
-        super();
-        this.conn = conn;
-        this.factory = factory;
-    }
-
-    private ResultSet mockEmptyResultSet() {
-        AvaticaResultSet resultSet = null;
-        try {
-            List<ColumnMetaData> columnMetas = new ArrayList<ColumnMetaData>();
-            List<Object[]> data = new ArrayList<Object[]>();
-            resultSet = this.conn.getFactory().newResultSet(this.conn.createStatement(), new KylinPrepare.PrepareResult(null, null, new KylinEnumerator<Object[]>(data), ColumnMetaData.struct(columnMetas)), this.conn.getTimeZone());
-            KylinConnectionImpl.TROJAN.execute(resultSet);
-        } catch (SQLException e) {
-            logger.error(e.getLocalizedMessage(), e);
-        }
-
-        return resultSet;
-    }
-
-    public String getSqlKeywords() {
-        return SqlParser.create("").getMetadata().getJdbcKeywords();
-    }
-
-    public String getNumericFunctions() {
-        return SqlJdbcFunctionCall.getNumericFunctions();
-    }
-
-    public String getStringFunctions() {
-        return SqlJdbcFunctionCall.getStringFunctions();
-    }
-
-    public String getSystemFunctions() {
-        return SqlJdbcFunctionCall.getSystemFunctions();
-    }
-
-    public String getTimeDateFunctions() {
-        return SqlJdbcFunctionCall.getTimeDateFunctions();
-    }
-
-    public ResultSet getTables(String catalog, Pat schemaPattern, Pat tableNamePattern, List<String> typeList) {
-        logger.debug("Get tables with conn " + conn);
-        MetaProject metaProject = conn.getMetaProject();
-
-        if (null != metaProject) {
-            final DataSet<MetaTable> tables = metaProject.getMetaTables(catalog, schemaPattern, tableNamePattern);
-            final NamedFieldGetter<MetaTable> tableGetter = new NamedFieldGetter<MetaTable>(MetaTable.class, tables.getMeta(), "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "TABLE_TYPE", "REMARKS", "TYPE_CAT", "TYPE_SCHEM", "TYPE_NAME", "SELF_REFERENCING_COL_NAME", "REF_GENERATION");
-
-            AvaticaResultSet resultSet = null;
-            try {
-                resultSet = this.conn.getFactory().newResultSet(this.conn.createStatement(), new KylinPrepare.PrepareResult(null, null, null, tableGetter.structType) {
-                    @Override
-                    public Cursor createCursor() {
-                        return tableGetter.cursor(tables.getEnumerator());
-                    }
-                }, this.conn.getTimeZone());
-                KylinConnectionImpl.TROJAN.execute(resultSet);
-            } catch (SQLException e) {
-                logger.error(e.getLocalizedMessage(), e);
-            }
-
-            return resultSet;
-        } else {
-            return mockEmptyResultSet();
-        }
-    }
-
-    public ResultSet getColumns(String catalog, Pat schemaPattern, Pat tableNamePattern, Pat columnNamePattern) {
-        logger.debug("Get columns with conn " + conn);
-        MetaProject metaProject = conn.getMetaProject();
-
-        if (null != metaProject) {
-            final DataSet<MetaColumn> columns = metaProject.getMetaColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);
-            final NamedFieldGetter<MetaColumn> columnGetter = new NamedFieldGetter<MetaColumn>(MetaColumn.class, columns.getMeta(), "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME", "DATA_TYPE", "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH", "DECIMAL_DIGITS", "NUM_PREC_RADIX", "NULLABLE", "REMARKS", "COLUMN_DEF", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "CHAR_OCTET_LENGTH", "ORDINAL_POSITION", "IS_NULLABLE", "SCOPE_CATALOG", "SCOPE_TABLE", "SOURCE_DATA_TYPE", "IS_AUTOINCREMENT", "IS_GENERATEDCOLUMN");
-
-            AvaticaResultSet resultSet = null;
-            try {
-                resultSet = this.conn.getFactory().newResultSet(this.conn.createStatement(), new KylinPrepare.PrepareResult(null, null, null, columnGetter.structType) {
-                    @Override
-                    public Cursor createCursor() {
-                        return columnGetter.cursor(columns.getEnumerator());
-                    }
-                }, this.conn.getTimeZone());
-
-                KylinConnectionImpl.TROJAN.execute(resultSet);
-            } catch (SQLException e) {
-                logger.error(e.getLocalizedMessage(), e);
-            }
-
-            return resultSet;
-        } else {
-            return mockEmptyResultSet();
-        }
-    }
-
-    public ResultSet getSchemas(String catalog, Pat schemaPattern) {
-        logger.debug("Get schemas with conn " + conn);
-        MetaProject metaProject = conn.getMetaProject();
-
-        if (null != metaProject) {
-            final DataSet<MetaSchema> schemas = metaProject.getMetaSchemas(catalog, schemaPattern);
-            final NamedFieldGetter<MetaSchema> schemaGetter = new NamedFieldGetter<MetaSchema>(MetaSchema.class, schemas.getMeta(), "TABLE_SCHEM", "TABLE_CATALOG");
-
-            AvaticaResultSet resultSet = null;
-            try {
-                resultSet = this.conn.getFactory().newResultSet(this.conn.createStatement(), new KylinPrepare.PrepareResult(null, null, null, schemaGetter.structType) {
-                    @Override
-                    public Cursor createCursor() {
-                        return schemaGetter.cursor(schemas.getEnumerator());
-                    }
-                }, this.conn.getTimeZone());
-
-                KylinConnectionImpl.TROJAN.execute(resultSet);
-            } catch (SQLException e) {
-                logger.error(e.getLocalizedMessage(), e);
-            }
-
-            return resultSet;
-        } else {
-            return mockEmptyResultSet();
-        }
-    }
-
-    public ResultSet getCatalogs() {
-        MetaProject metaProject = conn.getMetaProject();
-
-        if (null != metaProject) {
-            final DataSet<MetaCatalog> catalogs = metaProject.getMetaCatalogs();
-            final NamedFieldGetter<MetaCatalog> catalogGetter = new NamedFieldGetter<MetaCatalog>(MetaCatalog.class, catalogs.getMeta(), "TABLE_CATALOG");
-
-            AvaticaResultSet resultSet = null;
-            try {
-                resultSet = this.conn.getFactory().newResultSet(this.conn.createStatement(), new KylinPrepare.PrepareResult(null, null, null, catalogGetter.structType) {
-                    @Override
-                    public Cursor createCursor() {
-                        return catalogGetter.cursor(catalogs.getEnumerator());
-                    }
-                }, this.conn.getTimeZone());
-
-                KylinConnectionImpl.TROJAN.execute(resultSet);
-            } catch (SQLException e) {
-                logger.error(e.getLocalizedMessage(), e);
-            }
-
-            return resultSet;
-        } else {
-            return mockEmptyResultSet();
-        }
-    }
-
-    public ResultSet getTableTypes() {
-        List<ColumnMetaData> tableTypeMeta = new ArrayList<ColumnMetaData>();
-        tableTypeMeta.add(ColumnMetaData.dummy(ColumnMetaData.scalar(Types.VARCHAR, "varchar", Rep.STRING), false));
-        List<Object[]> data = new ArrayList<Object[]>();
-        Object[] row = new Object[1];
-        row[0] = "TABLE";
-        data.add(row);
-
-        AvaticaResultSet resultSet = null;
-        try {
-            resultSet = this.conn.getFactory().newResultSet(this.conn.createStatement(), new KylinPrepare.PrepareResult(null, null, new KylinEnumerator<Object[]>(data), ColumnMetaData.struct(tableTypeMeta)), this.conn.getTimeZone());
-            KylinConnectionImpl.TROJAN.execute(resultSet);
-        } catch (SQLException e) {
-            logger.error(e.getLocalizedMessage(), e);
-        }
-
-        return resultSet;
-    }
-
-    public ResultSet getProcedures(String catalog, Pat schemaPattern, Pat procedureNamePattern) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getProcedureColumns(String catalog, Pat schemaPattern, Pat procedureNamePattern, Pat columnNamePattern) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getColumnPrivileges(String catalog, String schema, String table, Pat columnNamePattern) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getTablePrivileges(String catalog, Pat schemaPattern, Pat tableNamePattern) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getVersionColumns(String catalog, String schema, String table) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getPrimaryKeys(String catalog, String schema, String table) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getImportedKeys(String catalog, String schema, String table) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getExportedKeys(String catalog, String schema, String table) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getCrossReference(String parentCatalog, String parentSchema, String parentTable, String foreignCatalog, String foreignSchema, String foreignTable) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getTypeInfo() {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getUDTs(String catalog, Pat schemaPattern, Pat typeNamePattern, int[] types) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getSuperTypes(String catalog, Pat schemaPattern, Pat typeNamePattern) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getSuperTables(String catalog, Pat schemaPattern, Pat tableNamePattern) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getAttributes(String catalog, Pat schemaPattern, Pat typeNamePattern, Pat attributeNamePattern) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getClientInfoProperties() {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getFunctions(String catalog, Pat schemaPattern, Pat functionNamePattern) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getFunctionColumns(String catalog, Pat schemaPattern, Pat functionNamePattern, Pat columnNamePattern) {
-        return mockEmptyResultSet();
-    }
-
-    public ResultSet getPseudoColumns(String catalog, Pat schemaPattern, Pat tableNamePattern, Pat columnNamePattern) {
-        return mockEmptyResultSet();
-    }
-
-    public Cursor createCursor(AvaticaResultSet resultSet) {
-
-        if (!(resultSet instanceof KylinResultSet))
-            throw new IllegalStateException("resultSet is not KylinResultSet");
-
-        KylinPrepare.PrepareResult result = ((KylinResultSet) resultSet).getPrepareResult();
-
-        return result.createCursor();
-    }
-
-    /* 
-     * Client could request metadata after prepare
-     * 
-     * (non-Javadoc)
-     * @see net.hydromatic.avatica.Meta#prepare(net.hydromatic.avatica.AvaticaStatement, java.lang.String)
-     */
-    public AvaticaPrepareResult prepare(AvaticaStatement statement, String sql) {
-        RemoteClient client = factory.newRemoteClient(conn);
-        DataSet<Object[]> result = null;
-
-        try {
-            result = (DataSet<Object[]>) client.query(statement, sql);
-        } catch (Exception e) {
-            logger.error(e.getLocalizedMessage(), e);
-            throw new RuntimeException("Failed to query kylin server with exception " + e.getLocalizedMessage());
-        }
-
-        return new KylinPrepare.PrepareResult(sql, null, (Enumerator<Object[]>) result.getEnumerator(), ColumnMetaData.struct(result.getMeta()));
-    }
-
-    /**
-     * Tree node used by project tree-like structure
-     *
-     * @author xduo
-     */
-    interface Node {
-        /**
-         * Get the node name
-         *
-         * @return
-         */
-        public String getName();
-
-        /**
-         * Get direct children of the node.
-         *
-         * @return
-         */
-        public List<? extends Node> getChildren();
-
-        /**
-         * Search the subtree of the node with patterns. One pattern, one level.
-         *
-         * @param patterns
-         * @return
-         */
-        public List<? extends Node> searchByPatterns(Pat... patterns);
-    }
-
-    /**
-     * Abstract of the tree-like structure
-     *
-     * @author xduo
-     */
-    public static abstract class AbstractNode implements Node {
-
-        public List<? extends Node> searchByPatterns(Pat... patterns) {
-            if (patterns.length == 1) {
-                return findChildren(patterns[0]);
-            } else {
-                List<Node> children = new ArrayList<Node>();
-
-                for (Node child : this.findChildren(patterns[0])) {
-                    children.addAll(child.searchByPatterns(Arrays.copyOfRange(patterns, 1, patterns.length)));
-                }
-
-                return children;
-            }
-        }
-
-        private List<? extends Node> findChildren(Pat pattern) {
-            if (null == pattern.s || pattern.s.equals("%")) {
-                return this.getChildren();
-            }
-
-            List<Node> list = new ArrayList<Node>();
-
-            for (Node c : this.getChildren()) {
-                if (likeToRegex(pattern).matcher(c.getName()).matches()) {
-                    list.add(c);
-                }
-            }
-
-            return list;
-        }
-
-        ;
-
-        /**
-         * Converts a LIKE-style pattern (where '%' represents a wild-card,
-         * escaped using '\') to a Java regex.
-         */
-        private Pattern likeToRegex(Pat pattern) {
-            StringBuilder buf = new StringBuilder("^");
-            char[] charArray = pattern.s.toCharArray();
-            int slash = -2;
-            for (int i = 0; i < charArray.length; i++) {
-                char c = charArray[i];
-                if (slash == i - 1) {
-                    buf.append('[').append(c).append(']');
-                } else {
-                    switch (c) {
-                    case '\\':
-                        slash = i;
-                        break;
-                    case '%':
-                        buf.append(".*");
-                        break;
-                    case '[':
-                        buf.append("\\[");
-                        break;
-                    case ']':
-                        buf.append("\\]");
-                        break;
-                    default:
-                        buf.append('[').append(c).append(']');
-                    }
-                }
-            }
-            buf.append("$");
-
-            return Pattern.compile(buf.toString());
-        }
-    }
-
-    public static class MetaProject extends AbstractNode {
-        public final String project;
-        public final List<MetaCatalog> catalogs;
-
-        public MetaProject(String project, List<MetaCatalog> catalogs) {
-            super();
-            this.project = project;
-            this.catalogs = catalogs;
-        }
-
-        public DataSet<MetaCatalog> getMetaCatalogs() {
-            return new DataSet<MetaCatalog>(MetaCatalog.meta, new KylinEnumerator<MetaCatalog>(catalogs));
-        }
-
-        /**
-         * facade method to search schemas in current project.
-         *
-         * @param catalog
-         * @param schemaPattern
-         * @return
-         */
-        @SuppressWarnings("unchecked")
-        public DataSet<MetaSchema> getMetaSchemas(String catalog, Pat schemaPattern) {
-            List<? extends Node> metaSchemas = this.searchByPatterns(Pat.of(catalog), schemaPattern);
-
-            return new DataSet<MetaSchema>(MetaSchema.meta, new KylinEnumerator<MetaSchema>((Collection<MetaSchema>) metaSchemas));
-        }
-
-        /**
-         * facade method to search tables in current project
-         *
-         * @param catalog
-         * @param schemaPattern
-         * @param tableNamePattern
-         * @return
-         */
-        @SuppressWarnings("unchecked")
-        public DataSet<MetaTable> getMetaTables(String catalog, Pat schemaPattern, Pat tableNamePattern) {
-            logger.debug("getMetaTables with catalog:" + catalog + ", schema:" + schemaPattern.s + ", table:" + tableNamePattern.s);
-            List<? extends Node> tables = this.searchByPatterns(Pat.of(catalog), schemaPattern, tableNamePattern);
-
-            return new DataSet<MetaTable>(MetaTable.meta, new KylinEnumerator<MetaTable>((Collection<MetaTable>) tables));
-        }
-
-        /**
-         * facade method to search columns in current project
-         *
-         * @param catalog
-         * @param schemaPattern
-         * @param tableNamePattern
-         * @param columnNamePattern
-         * @return
-         */
-        @SuppressWarnings("unchecked")
-        public DataSet<MetaColumn> getMetaColumns(String catalog, Pat schemaPattern, Pat tableNamePattern, Pat columnNamePattern) {
-            logger.debug("getMetaColumns with catalog:" + catalog + ", schema:" + schemaPattern.s + ", table:" + tableNamePattern.s + ", column:" + columnNamePattern.s);
-            List<? extends Node> columns = this.searchByPatterns(Pat.of(catalog), schemaPattern, tableNamePattern, columnNamePattern);
-
-            return new DataSet<MetaColumn>(MetaColumn.meta, new KylinEnumerator<MetaColumn>((Collection<MetaColumn>) columns));
-        }
-
-        @Override
-        public String getName() {
-            return project;
-        }
-
-        @Override
-        public List<? extends Node> getChildren() {
-            return this.catalogs;
-        }
-    }
-
-    /**
-     * Metadata describing a catalog.
-     */
-    public static class MetaCatalog extends AbstractNode {
-        public static final List<ColumnMetaData> meta = new ArrayList<ColumnMetaData>();
-        public final String tableCatalog;
-        public final List<MetaSchema> schemas;
-
-        static {
-            meta.add(KylinColumnMetaData.dummy(0, "TABLE_CAT", "TABLE_CAT", ColumnMetaData.scalar(Types.VARCHAR, "varchar", Rep.STRING), true));
-        }
-
-        public MetaCatalog(String tableCatalog, List<MetaSchema> schemas) {
-            this.tableCatalog = tableCatalog;
-            this.schemas = schemas;
-        }
-
-        public String getName() {
-            return tableCatalog;
-        }
-
-        @Override
-        public int hashCode() {
-            final int prime = 31;
-            int result = 1;
-            result = prime * result + ((tableCatalog == null) ? 0 : tableCatalog.hashCode());
-            return result;
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (this == obj)
-                return true;
-            if (obj == null)
-                return false;
-            if (getClass() != obj.getClass())
-                return false;
-            MetaCatalog other = (MetaCatalog) obj;
-            if (tableCatalog == null) {
-                if (other.tableCatalog != null)
-                    return false;
-            } else if (!tableCatalog.equals(other.tableCatalog))
-                return false;
-            return true;
-        }
-
-        @Override
-        public List<? extends Node> getChildren() {
-            return schemas;
-        }
-
-    }
-
-    /**
-     * Metadata describing a schema.
-     */
-    public static class MetaSchema extends AbstractNode {
-        public static final List<ColumnMetaData> meta = new ArrayList<ColumnMetaData>();
-        public final String tableCatalog;
-        public final String tableSchem;
-        public final List<MetaTable> tables;
-
-        static {
-            for (ColumnMetaData cmd : SQLTypeMap.schemaMetaTypeMapping.values()) {
-                meta.add(cmd);
-            }
-        }
-
-        public MetaSchema(String tableCatalog, String tableSchem, List<MetaTable> tables) {
-            this.tableCatalog = tableCatalog;
-            this.tableSchem = tableSchem;
-            this.tables = tables;
-        }
-
-        public String getName() {
-            return tableSchem;
-        }
-
-        @Override
-        public int hashCode() {
-            final int prime = 31;
-            int result = 1;
-            result = prime * result + ((tableCatalog == null) ? 0 : tableCatalog.hashCode());
-            result = prime * result + ((tableSchem == null) ? 0 : tableSchem.hashCode());
-            return result;
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (this == obj)
-                return true;
-            if (obj == null)
-                return false;
-            if (getClass() != obj.getClass())
-                return false;
-            MetaSchema other = (MetaSchema) obj;
-            if (tableCatalog == null) {
-                if (other.tableCatalog != null)
-                    return false;
-            } else if (!tableCatalog.equals(other.tableCatalog))
-                return false;
-            if (tableSchem == null) {
-                if (other.tableSchem != null)
-                    return false;
-            } else if (!tableSchem.equals(other.tableSchem))
-                return false;
-            return true;
-        }
-
-        @Override
-        public List<MetaTable> getChildren() {
-            return this.tables;
-        }
-    }
-
-    /**
-     * Metadata describing a table type.
-     */
-    public static class MetaTableType {
-        public final String tableType;
-
-        public MetaTableType(String tableType) {
-            this.tableType = tableType;
-        }
-    }
-
-    /**
-     * Metadata describing a table.
-     */
-    public static class MetaTable extends AbstractNode {
-        public static final List<ColumnMetaData> meta = new ArrayList<ColumnMetaData>();
-        public final String tableCat;
-        public final String tableSchem;
-        public final String tableName;
-        public final String tableType;
-        public final String remarks;
-        public final String typeCat;
-        public final String typeSchem;
-        public final String typeName;
-        public final String selfReferencingColName;
-        public final String refGeneration;
-        public final List<MetaColumn> columns;
-
-        static {
-            for (ColumnMetaData cmd : SQLTypeMap.tableMetaTypeMapping.values()) {
-                meta.add(cmd);
-            }
-        }
-
-        public MetaTable(String tableCat, String tableSchem, String tableName, String tableType, String remarks, String typeCat, String typeSchem, String typeName, String selfReferencingColName, String refGeneration, List<MetaColumn> columns) {
-            this.tableCat = tableCat;
-            this.tableSchem = tableSchem;
-            this.tableName = tableName;
-            this.tableType = tableType;
-            this.remarks = remarks;
-            this.typeCat = typeCat;
-            this.typeSchem = typeSchem;
-            this.typeName = typeName;
-            this.selfReferencingColName = selfReferencingColName;
-            this.refGeneration = refGeneration;
-            this.columns = columns;
-        }
-
-        public String getName() {
-            return tableName;
-        }
-
-        @Override
-        public List<? extends Node> getChildren() {
-            return this.columns;
-        }
-    }
-
-    /**
-     * Metadata describing a column.
-     */
-    public static class MetaColumn implements Node {
-        public static final List<ColumnMetaData> meta = new ArrayList<ColumnMetaData>();
-        public final String tableCat;
-        public final String tableSchem;
-        public final String tableName;
-        public final String columnName;
-        public final int dataType;
-        public final String typeName;
-        public final int columnSize;
-        public final int bufferLength;
-        public final int decimalDigits;
-        public final int numPrecRadix;
-        public final int nullable;
-        public final String remarks;
-        public final String columnDef;
-        public final int sqlDataType;
-        public final int sqlDatetimeSub;
-        public final int charOctetLength;
-        public final int ordinalPosition;
-        public final String isNullable;
-        public final String scopeCatalog;
-        public final String scopeTable;
-        public final int sourceDataType;
-        public final String isAutoincrement;
-        public final String isGeneratedcolumn;
-
-        static {
-            for (ColumnMetaData cmd : SQLTypeMap.columnMetaTypeMapping.values()) {
-                meta.add(cmd);
-            }
-        }
-
-        public MetaColumn(String tableCat, String tableSchem, String tableName, String columnName, int dataType, String typeName, int columnSize, int bufferLength, int decimalDigits, int numPrecRadix, int nullable, String remarks, String columnDef, int sqlDataType, int sqlDatetimeSub, int charOctetLength, int ordinalPosition, String isNullable, String scopeCatalog, String scopeTable, int sourceDataType, String isAutoincrement, String isGeneratedcolumn) {
-            super();
-            this.tableCat = tableCat;
-            this.tableSchem = tableSchem;
-            this.tableName = tableName;
-            this.columnName = columnName;
-            this.dataType = dataType;
-            this.typeName = typeName;
-            this.columnSize = columnSize;
-            this.bufferLength = bufferLength;
-            this.decimalDigits = decimalDigits;
-            this.numPrecRadix = numPrecRadix;
-            this.nullable = nullable;
-            this.remarks = remarks;
-            this.columnDef = columnDef;
-            this.sqlDataType = sqlDataType;
-            this.sqlDatetimeSub = sqlDatetimeSub;
-            this.charOctetLength = charOctetLength;
-            this.ordinalPosition = ordinalPosition;
-            this.isNullable = isNullable;
-            this.scopeCatalog = scopeCatalog;
-            this.scopeTable = scopeTable;
-            this.sourceDataType = sourceDataType;
-            this.isAutoincrement = isAutoincrement;
-            this.isGeneratedcolumn = isGeneratedcolumn;
-        }
-
-        public String getName() {
-            return columnName;
-        }
-
-        @Override
-        public List<? extends Node> getChildren() {
-            return Collections.emptyList();
-        }
-
-        @Override
-        public List<? extends Node> searchByPatterns(Pat... patterns) {
-            return Collections.emptyList();
-        }
-    }
-
-    /**
-     * Accesses fields by name.
-     */
-    private static class NamedFieldGetter<T> {
-        private final List<Field> fields = new ArrayList<Field>();
-        private final ColumnMetaData.StructType structType;
-
-        public NamedFieldGetter(Class<T> clazz, List<ColumnMetaData> columns, String... names) {
-            init(clazz, names, fields);
-            structType = ColumnMetaData.struct(columns);
-        }
-
-        private void init(Class<T> clazz, String[] names, List<Field> fields) {
-            for (String name : names) {
-                final String fieldName = Util.toCamelCase(name);
-                final Field field;
-                try {
-                    field = clazz.getField(fieldName);
-                } catch (NoSuchFieldException e) {
-                    throw new RuntimeException(e);
-                }
-                fields.add(field);
-            }
-        }
-
-        Object get(Object o, int columnIndex) {
-            try {
-                return fields.get(columnIndex).get(o);
-            } catch (IllegalArgumentException e) {
-                throw new RuntimeException(e);
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        public Cursor cursor(Enumerator<T> enumerator) {
-            // noinspection unchecked
-            return new EnumeratorCursor<T>(enumerator) {
-                protected Getter createGetter(final int ordinal) {
-                    return new Getter() {
-                        public Object getObject() {
-                            return get(current(), ordinal);
-                        }
-
-                        public boolean wasNull() {
-                            return getObject() == null;
-                        }
-                    };
-                }
-            };
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepare.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepare.java b/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepare.java
deleted file mode 100644
index a19b1b1..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepare.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc;
-
-import java.util.List;
-
-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;
-
-/**
- * Interface of kylin prepare statement implementation
- * 
- * @author xduo
- * 
- */
-public interface KylinPrepare {
-
-    PrepareResult prepare(String sql);
-
-    /**
-     * The result of preparing a query. It gives the Avatica driver framework
-     * the information it needs to create a prepared statement, or to execute a
-     * statement directly, without an explicit prepare step.
-     */
-    public static class PrepareResult implements AvaticaPrepareResult {
-        public final String sql; // for debug
-        public final ColumnMetaData.StructType structType;
-        public final Enumerator<Object[]> enumerator;
-        public final List<AvaticaParameter> parameterList;
-
-        public PrepareResult(String sql, List<AvaticaParameter> parameterList, Enumerator<Object[]> enumerator, ColumnMetaData.StructType structType) {
-            super();
-            this.sql = sql;
-            this.parameterList = parameterList;
-            this.enumerator = enumerator;
-            this.structType = structType;
-        }
-
-        public Cursor createCursor() {
-            return new EnumeratorCursor<Object[]>(enumerator) {
-                @Override
-                protected Getter createGetter(int ordinal) {
-                    return new ArrayEnumeratorGetter(ordinal);
-                }
-
-                /**
-                 * Row field accessor via index
-                 */
-                class ArrayEnumeratorGetter extends AbstractGetter {
-                    protected final int field;
-
-                    public ArrayEnumeratorGetter(int field) {
-                        this.field = field;
-                    }
-
-                    public Object getObject() {
-                        Object o = current()[field];
-                        wasNull[0] = o == null;
-                        return o;
-                    }
-                }
-            };
-        }
-
-        public List<ColumnMetaData> getColumnList() {
-            return structType.columns;
-        }
-
-        public List<AvaticaParameter> getParameterList() {
-            return parameterList;
-        }
-
-        public String getSql() {
-            return sql;
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepareImpl.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepareImpl.java b/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepareImpl.java
deleted file mode 100644
index 3e1d5ce..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepareImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.hydromatic.avatica.AvaticaParameter;
-import net.hydromatic.avatica.ColumnMetaData;
-
-/**
- * @author xduo
- * 
- */
-public class KylinPrepareImpl implements KylinPrepare {
-
-    @Override
-    public PrepareResult prepare(String sql) {
-        List<AvaticaParameter> aps = new ArrayList<AvaticaParameter>();
-
-        int startIndex = 0;
-        while (sql.indexOf("?", startIndex) >= 0) {
-            AvaticaParameter ap = new AvaticaParameter(false, 0, 0, 0, null, null, null);
-            aps.add(ap);
-            startIndex = sql.indexOf("?", startIndex) + 1;
-        }
-
-        return new KylinPrepare.PrepareResult(sql, aps, null, ColumnMetaData.struct(new ArrayList<ColumnMetaData>()));
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepareStatementImpl.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepareStatementImpl.java b/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepareStatementImpl.java
deleted file mode 100644
index 648c806..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/KylinPrepareStatementImpl.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.sql.NClob;
-import java.sql.ResultSet;
-import java.sql.RowId;
-import java.sql.SQLException;
-import java.sql.SQLXML;
-import java.util.Collections;
-import java.util.List;
-
-import net.hydromatic.avatica.AvaticaConnection;
-import net.hydromatic.avatica.AvaticaPrepareResult;
-import net.hydromatic.avatica.AvaticaPreparedStatement;
-import net.hydromatic.avatica.AvaticaResultSet;
-
-/**
- * Kylin prepare statement. <br>
- * Supported operations:
- * <ul>
- * <li>setString</li>
- * <li>setInt</li>
- * <li>setShort</li>
- * <li>setLong</li>
- * <li>setFloat</li>
- * <li>setDouble</li>
- * <li>setBoolean</li>
- * <li>setByte</li>
- * <li>setDate</li>
- * <li>setTime</li>
- * <li>setTimestamp</li>
- * </ul>
- * 
- * @author xduo
- * 
- */
-public abstract class KylinPrepareStatementImpl extends AvaticaPreparedStatement {
-
-    /**
-     * Before real query,
-     */
-    protected AvaticaPrepareResult prequeryResult;
-
-    protected KylinPrepareStatementImpl(AvaticaConnection connection, AvaticaPrepareResult prepareResult, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
-        super(connection, prepareResult, resultSetType, resultSetConcurrency, resultSetHoldability);
-
-        this.prequeryResult = prepareResult;
-    }
-
-    @Override
-    public ResultSet executeQuery() throws SQLException {
-        AvaticaPrepareResult queriedResult = ((KylinConnectionImpl) this.connection).getMeta().prepare(this, this.prequeryResult.getSql());
-
-        return executeQueryInternal(queriedResult);
-    }
-
-    @Override
-    protected void close_() {
-        if (!closed) {
-            closed = true;
-            final KylinConnectionImpl connection_ = (KylinConnectionImpl) connection;
-            connection_.statements.remove(this);
-            if (openResultSet != null) {
-                AvaticaResultSet c = openResultSet;
-                openResultSet = null;
-                c.close();
-            }
-            // If onStatementClose throws, this method will throw an
-            // exception (later
-            // converted to SQLException), but this statement still gets
-            // closed.
-            connection_.getDriver().handler.onStatementClose(this);
-        }
-    }
-
-    public List<Object> getParameterValues() {
-        return (List<Object>) Collections.unmodifiableList(super.getParameterValues());
-    }
-
-    public void setRowId(int parameterIndex, RowId x) throws SQLException {
-        getParameter(parameterIndex).setRowId(x);
-    }
-
-    public void setNString(int parameterIndex, String value) throws SQLException {
-        getParameter(parameterIndex).setNString(value);
-    }
-
-    public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException {
-        getParameter(parameterIndex).setNCharacterStream(value, length);
-    }
-
-    public void setNClob(int parameterIndex, NClob value) throws SQLException {
-        getParameter(parameterIndex).setNClob(value);
-    }
-
-    public void setClob(int parameterIndex, Reader reader, long length) throws SQLException {
-        getParameter(parameterIndex).setClob(reader, length);
-    }
-
-    public void setBlob(int parameterIndex, InputStream inputStream, long length) throws SQLException {
-        getParameter(parameterIndex).setBlob(inputStream, length);
-    }
-
-    public void setNClob(int parameterIndex, Reader reader, long length) throws SQLException {
-        getParameter(parameterIndex).setNClob(reader, length);
-    }
-
-    public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException {
-        getParameter(parameterIndex).setSQLXML(xmlObject);
-    }
-
-    public void setAsciiStream(int parameterIndex, InputStream x, long length) throws SQLException {
-        getParameter(parameterIndex).setAsciiStream(x, length);
-    }
-
-    public void setBinaryStream(int parameterIndex, InputStream x, long length) throws SQLException {
-        getParameter(parameterIndex).setBinaryStream(x, length);
-    }
-
-    public void setCharacterStream(int parameterIndex, Reader reader, long length) throws SQLException {
-        getParameter(parameterIndex).setCharacterStream(reader, length);
-    }
-
-    public void setAsciiStream(int parameterIndex, InputStream x) throws SQLException {
-        getParameter(parameterIndex).setAsciiStream(x);
-    }
-
-    public void setBinaryStream(int parameterIndex, InputStream x) throws SQLException {
-        getParameter(parameterIndex).setBinaryStream(x);
-    }
-
-    public void setCharacterStream(int parameterIndex, Reader reader) throws SQLException {
-        getParameter(parameterIndex).setCharacterStream(reader);
-    }
-
-    public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException {
-        getParameter(parameterIndex).setNCharacterStream(value);
-    }
-
-    public void setClob(int parameterIndex, Reader reader) throws SQLException {
-        getParameter(parameterIndex).setClob(reader);
-    }
-
-    public void setBlob(int parameterIndex, InputStream inputStream) throws SQLException {
-        getParameter(parameterIndex).setBlob(inputStream);
-    }
-
-    public void setNClob(int parameterIndex, Reader reader) throws SQLException {
-        getParameter(parameterIndex).setNClob(reader);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/KylinResultSet.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/KylinResultSet.java b/jdbc/src/main/java/com/kylinolap/jdbc/KylinResultSet.java
deleted file mode 100644
index c73cc96..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/KylinResultSet.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.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 com.kylinolap.jdbc.KylinPrepare.PrepareResult;
-
-/**
- * Kylin query result set
- * 
- * @author xduo
- * 
- */
-public class KylinResultSet extends AvaticaResultSet {
-
-    public KylinResultSet(AvaticaStatement statement, AvaticaPrepareResult prepareResult, ResultSetMetaData resultSetMetaData, TimeZone timeZone) {
-        super(statement, prepareResult, resultSetMetaData, timeZone);
-    }
-
-    public KylinPrepare.PrepareResult getPrepareResult() {
-        return (PrepareResult) prepareResult;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/KylinStatementImpl.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/KylinStatementImpl.java b/jdbc/src/main/java/com/kylinolap/jdbc/KylinStatementImpl.java
deleted file mode 100644
index 1dcef83..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/KylinStatementImpl.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Softwarimport net.hydromatic.avatica.AvaticaConnection;
-import net.hydromatic.avatica.AvaticaResultSet;
-import net.hydromatic.avatica.AvaticaStatement;
-ense.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc;
-
-import net.hydromatic.avatica.AvaticaConnection;
-import net.hydromatic.avatica.AvaticaResultSet;
-import net.hydromatic.avatica.AvaticaStatement;
-
-/**
- * Kylin statement implementation
- * 
- * @author xduo
- * 
- */
-public abstract class KylinStatementImpl extends AvaticaStatement {
-
-    protected KylinStatementImpl(AvaticaConnection connection, int resultSetType, int resultSetConcurrency, int resultSetHoldability) {
-        super(connection, resultSetType, resultSetConcurrency, resultSetHoldability);
-    }
-
-    @Override
-    protected void close_() {
-        if (!closed) {
-            closed = true;
-            final KylinConnectionImpl connection_ = (KylinConnectionImpl) connection;
-            connection_.statements.remove(this);
-            if (openResultSet != null) {
-                AvaticaResultSet c = openResultSet;
-                openResultSet = null;
-                c.close();
-            }
-            // If onStatementClose throws, this method will throw an exception
-            // (later
-            // converted to SQLException), but this statement still gets closed.
-            connection_.getDriver().handler.onStatementClose(this);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/stub/ConnectionException.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/stub/ConnectionException.java b/jdbc/src/main/java/com/kylinolap/jdbc/stub/ConnectionException.java
deleted file mode 100644
index bce8280..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/stub/ConnectionException.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc.stub;
-
-/**
- * @author xduo
- * 
- */
-public class ConnectionException extends Exception {
-
-    private static final long serialVersionUID = 1L;
-
-    public ConnectionException() {
-        super();
-    }
-
-    /**
-     * @param message
-     * @param cause
-     */
-    public ConnectionException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    /**
-     * @param message
-     */
-    public ConnectionException(String message) {
-        super(message);
-    }
-
-    /**
-     * @param cause
-     */
-    public ConnectionException(Throwable cause) {
-        super(cause);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/a4fd4268/jdbc/src/main/java/com/kylinolap/jdbc/stub/DataSet.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/com/kylinolap/jdbc/stub/DataSet.java b/jdbc/src/main/java/com/kylinolap/jdbc/stub/DataSet.java
deleted file mode 100644
index f717234..0000000
--- a/jdbc/src/main/java/com/kylinolap/jdbc/stub/DataSet.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.jdbc.stub;
-
-import java.util.List;
-
-import net.hydromatic.avatica.ColumnMetaData;
-import net.hydromatic.linq4j.Enumerator;
-
-/**
- * Data set wrapper.
- * 
- * @author xduo
- * 
- */
-public class DataSet<E> {
-
-    private final List<ColumnMetaData> meta;
-
-    private final Enumerator<E> enumerator;
-
-    /**
-     * @param meta
-     * @param enumerator
-     */
-    public DataSet(List<ColumnMetaData> meta, Enumerator<E> enumerator) {
-        this.meta = meta;
-        this.enumerator = enumerator;
-    }
-
-    public List<ColumnMetaData> getMeta() {
-        return meta;
-    }
-
-    public Enumerator<E> getEnumerator() {
-        return enumerator;
-    }
-
-}