This is an automated email from the ASF dual-hosted git repository. kaspersor pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/metamodel.git
commit cbe3bdb9cac7bd59599610ea6acccdbed6e7a583 Author: 李小保 <[email protected]> AuthorDate: Tue Feb 26 20:04:07 2019 +0800 Apache Impala support.Because this is no public repo for Impala jdbc,so I cannot add Impala dependency in pom.xml --- .../org/apache/metamodel/jdbc/JdbcDataContext.java | 6 ++- .../jdbc/dialects/ImpalaQueryRewriter.java | 32 ++++++++++++ .../dialects/ImpalaQueryRewriterTest.java | 60 ++++++++++++++++++++++ 3 files changed, 97 insertions(+), 1 deletion(-) diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java index 4329179..f868a74 100644 --- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java +++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java @@ -52,6 +52,7 @@ import org.apache.metamodel.jdbc.dialects.Hive2QueryRewriter; import org.apache.metamodel.jdbc.dialects.HiveQueryRewriter; import org.apache.metamodel.jdbc.dialects.HsqldbQueryRewriter; import org.apache.metamodel.jdbc.dialects.IQueryRewriter; +import org.apache.metamodel.jdbc.dialects.ImpalaQueryRewriter; import org.apache.metamodel.jdbc.dialects.MysqlQueryRewriter; import org.apache.metamodel.jdbc.dialects.OracleQueryRewriter; import org.apache.metamodel.jdbc.dialects.PostgresqlQueryRewriter; @@ -95,6 +96,7 @@ public class JdbcDataContext extends AbstractDataContext implements UpdateableDa public static final String DATABASE_PRODUCT_ORACLE = "Oracle"; public static final String DATABASE_PRODUCT_HIVE = "Apache Hive"; public static final String DATABASE_PRODUCT_SQLITE = "SQLite"; + public static final String DATABASE_PRODUCT_IMPALA = "Impala"; public static final ColumnType COLUMN_TYPE_CLOB_AS_STRING = new ColumnTypeImpl("CLOB", SuperColumnType.LITERAL_TYPE, String.class, true); @@ -255,7 +257,9 @@ public class JdbcDataContext extends AbstractDataContext implements UpdateableDa } } else if (DATABASE_PRODUCT_SQLITE.equals(_databaseProductName)) { setQueryRewriter(new SQLiteQueryRewriter(this)); - } else { + } else if (DATABASE_PRODUCT_IMPALA.equals(_databaseProductName)) { + setQueryRewriter(new ImpalaQueryRewriter(this)); + }else { setQueryRewriter(new DefaultQueryRewriter(this)); } diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/ImpalaQueryRewriter.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/ImpalaQueryRewriter.java new file mode 100644 index 0000000..8dc8976 --- /dev/null +++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/ImpalaQueryRewriter.java @@ -0,0 +1,32 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.metamodel.jdbc.dialects; + +import org.apache.metamodel.jdbc.JdbcDataContext; + +/** + * Query rewriter for Apache Impala + **/ +public class ImpalaQueryRewriter extends Hive2QueryRewriter{ + + public ImpalaQueryRewriter(JdbcDataContext dataContext) { + super(dataContext); + } +} + diff --git a/jdbc/src/test/java/org/apache/metamodel/dialects/ImpalaQueryRewriterTest.java b/jdbc/src/test/java/org/apache/metamodel/dialects/ImpalaQueryRewriterTest.java new file mode 100644 index 0000000..8aff060 --- /dev/null +++ b/jdbc/src/test/java/org/apache/metamodel/dialects/ImpalaQueryRewriterTest.java @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.metamodel.dialects; + +import static junit.framework.TestCase.assertEquals; +import static org.apache.metamodel.jdbc.JdbcDataContext.DATABASE_PRODUCT_HIVE; +import static org.apache.metamodel.jdbc.JdbcDataContext.DATABASE_PRODUCT_IMPALA; + +import junit.framework.TestCase; +import org.apache.metamodel.jdbc.JdbcDataContext; +import org.apache.metamodel.jdbc.dialects.Hive2QueryRewriter; +import org.apache.metamodel.jdbc.dialects.ImpalaQueryRewriter; +import org.apache.metamodel.query.OperatorType; +import org.apache.metamodel.query.Query; +import org.apache.metamodel.schema.MutableColumn; +import org.apache.metamodel.schema.MutableTable; +import org.easymock.EasyMock; + +public class ImpalaQueryRewriterTest extends TestCase { + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + public void testImpalaQuery() { + + final JdbcDataContext mockContext = EasyMock.createMock(JdbcDataContext.class); + EasyMock.expect(mockContext.getDatabaseProductName()).andReturn(DATABASE_PRODUCT_IMPALA).anyTimes(); + EasyMock.expect(mockContext.getDatabaseVersion()).andReturn("3.0.0").anyTimes(); + EasyMock.expect(mockContext.getIdentifierQuoteString()).andReturn("quoteString").anyTimes(); + + EasyMock.replay(mockContext); + ImpalaQueryRewriter qr = new ImpalaQueryRewriter(mockContext); + + MutableColumn col1 = new MutableColumn("kkbh"); + MutableColumn col2 = new MutableColumn("kkmc"); + Query q = new Query().from(new MutableTable("5_t_kk_kkxx")).select(col1).select(col2) + .where(col1, OperatorType.EQUALS_TO, "5207281832").orderBy(col1).setFirstRow(5).setMaxRows(9); + String sql = qr.rewriteQuery(q); + + assertEquals(sql,"SELECT kkbh, kkmc FROM 5_t_kk_kkxx WHERE kkbh = '5207281832' ORDER BY kkbh ASC LIMIT 9 OFFSET 4"); + } +}
