You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by pv...@apache.org on 2017/08/03 08:00:17 UTC
nifi git commit: NIFI-4253: Add Oracle 12+ database adapter
Repository: nifi
Updated Branches:
refs/heads/master 2502b79ba -> 2d3358214
NIFI-4253: Add Oracle 12+ database adapter
Signed-off-by: Pierre Villard <pi...@gmail.com>
This closes #2048.
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/2d335821
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/2d335821
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/2d335821
Branch: refs/heads/master
Commit: 2d335821471ec10f48e3e586f66f3f14c2e0dd96
Parents: 2502b79
Author: Matt Burgess <ma...@apache.org>
Authored: Tue Aug 1 17:59:42 2017 -0400
Committer: Pierre Villard <pi...@gmail.com>
Committed: Thu Aug 3 09:59:29 2017 +0200
----------------------------------------------------------------------
.../db/impl/Oracle12DatabaseAdapter.java | 72 ++++++++++++++++++++
....nifi.processors.standard.db.DatabaseAdapter | 1 +
.../db/impl/TestOracle12DatabaseAdapter.java | 70 +++++++++++++++++++
3 files changed, 143 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/2d335821/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/db/impl/Oracle12DatabaseAdapter.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/db/impl/Oracle12DatabaseAdapter.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/db/impl/Oracle12DatabaseAdapter.java
new file mode 100644
index 0000000..77d92e1
--- /dev/null
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/db/impl/Oracle12DatabaseAdapter.java
@@ -0,0 +1,72 @@
+/*
+ * 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.nifi.processors.standard.db.impl;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.nifi.processors.standard.db.DatabaseAdapter;
+
+/**
+ * A database adapter that generates MS SQL Compatible SQL.
+ */
+public class Oracle12DatabaseAdapter implements DatabaseAdapter {
+ @Override
+ public String getName() {
+ return "Oracle 12+";
+ }
+
+ @Override
+ public String getDescription() {
+ return "Generates Oracle compliant SQL for version 12 or greater";
+ }
+
+ @Override
+ public String getSelectStatement(String tableName, String columnNames, String whereClause, String orderByClause, Long limit, Long offset) {
+ if (StringUtils.isEmpty(tableName)) {
+ throw new IllegalArgumentException("Table name cannot be null or empty");
+ }
+ final StringBuilder query = new StringBuilder("SELECT ");
+
+ if (StringUtils.isEmpty(columnNames) || columnNames.trim().equals("*")) {
+ query.append("*");
+ } else {
+ query.append(columnNames);
+ }
+ query.append(" FROM ");
+ query.append(tableName);
+
+ if (!StringUtils.isEmpty(whereClause)) {
+ query.append(" WHERE ");
+ query.append(whereClause);
+ }
+ if (!StringUtils.isEmpty(orderByClause)) {
+ query.append(" ORDER BY ");
+ query.append(orderByClause);
+ }
+ if (offset != null && offset > 0) {
+ query.append(" OFFSET ");
+ query.append(offset);
+ query.append(" ROWS");
+ }
+ if (limit != null) {
+ query.append(" FETCH NEXT ");
+ query.append(limit);
+ query.append(" ROWS ONLY");
+ }
+
+ return query.toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/nifi/blob/2d335821/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/META-INF/services/org.apache.nifi.processors.standard.db.DatabaseAdapter
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/META-INF/services/org.apache.nifi.processors.standard.db.DatabaseAdapter b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/META-INF/services/org.apache.nifi.processors.standard.db.DatabaseAdapter
index 33c7706..fe2df96 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/META-INF/services/org.apache.nifi.processors.standard.db.DatabaseAdapter
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/META-INF/services/org.apache.nifi.processors.standard.db.DatabaseAdapter
@@ -14,5 +14,6 @@
# limitations under the License.
org.apache.nifi.processors.standard.db.impl.GenericDatabaseAdapter
org.apache.nifi.processors.standard.db.impl.OracleDatabaseAdapter
+org.apache.nifi.processors.standard.db.impl.Oracle12DatabaseAdapter
org.apache.nifi.processors.standard.db.impl.MSSQLDatabaseAdapter
org.apache.nifi.processors.standard.db.impl.MSSQL2008DatabaseAdapter
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/nifi/blob/2d335821/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/db/impl/TestOracle12DatabaseAdapter.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/db/impl/TestOracle12DatabaseAdapter.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/db/impl/TestOracle12DatabaseAdapter.java
new file mode 100644
index 0000000..2a80ab2
--- /dev/null
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/db/impl/TestOracle12DatabaseAdapter.java
@@ -0,0 +1,70 @@
+/*
+ * 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.nifi.processors.standard.db.impl;
+
+import org.apache.nifi.processors.standard.db.DatabaseAdapter;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestOracle12DatabaseAdapter {
+
+ private final DatabaseAdapter db = new Oracle12DatabaseAdapter();
+
+ @Test
+ public void testGeneration() throws Exception {
+ String sql1 = db.getSelectStatement("database.tablename", "some(set),of(columns),that,might,contain,methods,a.*","","",null,null);
+ String expected1 = "SELECT some(set),of(columns),that,might,contain,methods,a.* FROM database.tablename";
+ Assert.assertEquals(sql1,expected1);
+
+ String sql2 = db.getSelectStatement("database.tablename", "some(set),of(columns),that,might,contain,methods,a.*","that=\'some\"\' value\'","",null,null);
+ String expected2 = "SELECT some(set),of(columns),that,might,contain,methods,a.* FROM database.tablename WHERE that=\'some\"\' value\'";
+ Assert.assertEquals(sql2,expected2);
+
+ String sql3 = db.getSelectStatement("database.tablename", "some(set),of(columns),that,might,contain,methods,a.*","that=\'some\"\' value\'","might DESC",null,null);
+ String expected3 = "SELECT some(set),of(columns),that,might,contain,methods,a.* FROM database.tablename WHERE that=\'some\"\' value\' ORDER BY might DESC";
+ Assert.assertEquals(sql3,expected3);
+
+ String sql4 = db.getSelectStatement("database.tablename", "","that=\'some\"\' value\'","might DESC",null,null);
+ String expected4 = "SELECT * FROM database.tablename WHERE that=\'some\"\' value\' ORDER BY might DESC";
+ Assert.assertEquals(sql4,expected4);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testNoTableName() throws Exception {
+ db.getSelectStatement("", "some(set),of(columns),that,might,contain,methods,a.*","","",null,null);
+ }
+
+ @Test
+ public void testPagingQuery() throws Exception {
+ String sql1 = db.getSelectStatement("database.tablename", "some(set),of(columns),that,might,contain,methods,a.*","","contain",100L,0L);
+ String expected1 = "SELECT some(set),of(columns),that,might,contain,methods,a.* FROM database.tablename ORDER BY contain FETCH NEXT 100 ROWS ONLY";
+ Assert.assertEquals(sql1,expected1);
+
+ String sql2 = db.getSelectStatement("database.tablename", "some(set),of(columns),that,might,contain,methods,a.*","","contain",10000L,123456L);
+ String expected2 = "SELECT some(set),of(columns),that,might,contain,methods,a.* FROM database.tablename ORDER BY contain OFFSET 123456 ROWS FETCH NEXT 10000 ROWS ONLY";
+ Assert.assertEquals(sql2,expected2);
+
+ String sql3 = db.getSelectStatement("database.tablename", "some(set),of(columns),that,might,contain,methods,a.*","methods='strange'","contain",10000L,123456L);
+ String expected3 = "SELECT some(set),of(columns),that,might,contain,methods,a.* FROM database.tablename WHERE methods='strange' ORDER BY contain OFFSET 123456 ROWS FETCH NEXT 10000 ROWS ONLY";
+ Assert.assertEquals(sql3,expected3);
+
+ String sql4 = db.getSelectStatement("database.tablename", "some(set),of(columns),that,might,contain,methods,a.*","","",100L,null);
+ String expected4 = "SELECT some(set),of(columns),that,might,contain,methods,a.* FROM database.tablename FETCH NEXT 100 ROWS ONLY";
+ Assert.assertEquals(sql4,expected4);
+ }
+
+}
\ No newline at end of file