METAMODEL-1111: Fixed

Fixes #123

Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/d2eee32d
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/d2eee32d
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/d2eee32d

Branch: refs/heads/5.x
Commit: d2eee32dea67ae5e373ce8a3ca37ec4e794f2cd0
Parents: 7e355a1
Author: Jakub Horcicka <jakub.horci...@humaninference.com>
Authored: Tue Aug 9 08:29:53 2016 -0700
Committer: kaspersorensen <i.am.kasper.soren...@gmail.com>
Committed: Tue Aug 9 08:29:53 2016 -0700

----------------------------------------------------------------------
 CHANGES.md                                      |  4 ++
 .../jdbc/dialects/OracleQueryRewriter.java      | 11 ++++++
 .../jdbc/dialects/OracleQueryRewriterTest.java  | 41 ++++++++++++++++++++
 3 files changed, 56 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/d2eee32d/CHANGES.md
----------------------------------------------------------------------
diff --git a/CHANGES.md b/CHANGES.md
index d3d7506..a27fa50 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,7 @@
+### Apache MetaModel 4.5.5
+
+ * [METAMODEL-1111] - Added WHERE rewrite for Oracle when empty strings are 
considered as NULL.
+
 ### Apache MetaModel 4.5.4
 
  * [METAMODEL-1099] - Created a new DataContextFactory SPI and a extensible 
registry of implementations based on ServiceLoader.

http://git-wip-us.apache.org/repos/asf/metamodel/blob/d2eee32d/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
index cad357b..305dbb8 100644
--- 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
+++ 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
@@ -19,6 +19,7 @@
 package org.apache.metamodel.jdbc.dialects;
 
 import org.apache.metamodel.jdbc.JdbcDataContext;
+import org.apache.metamodel.query.FilterItem;
 import org.apache.metamodel.schema.ColumnType;
 
 /**
@@ -77,4 +78,14 @@ public class OracleQueryRewriter extends 
DefaultQueryRewriter {
         }
         return super.rewriteColumnType(columnType, columnSize);
     }
+
+    @Override
+    public String rewriteFilterItem(final FilterItem item) {
+        if (item.getOperand() instanceof String && 
item.getOperand().equals("")) {
+            // In Oracle empty strings are treated as null. Typical SQL 
constructs with an empty string do not work.
+            return super.rewriteFilterItem(new 
FilterItem(item.getSelectItem(), item.getOperator(), null));
+        } else {
+            return super.rewriteFilterItem(item);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/d2eee32d/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriterTest.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriterTest.java
 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriterTest.java
new file mode 100644
index 0000000..88f0a50
--- /dev/null
+++ 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriterTest.java
@@ -0,0 +1,41 @@
+/**
+ * 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.query.FilterItem;
+import org.apache.metamodel.query.OperatorType;
+import org.apache.metamodel.query.SelectItem;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class OracleQueryRewriterTest {
+
+    @Test
+    public void testReplaceEmptyStringWithNull() throws Exception {
+        final OracleQueryRewriter rewriter = new OracleQueryRewriter(null);
+        final String alias = "alias";
+        SelectItem selectItem = new SelectItem("expression", alias);
+        final FilterItem filterItem = new FilterItem(selectItem, 
OperatorType.DIFFERENT_FROM, "");
+        final String rewrittenValue = rewriter.rewriteFilterItem(filterItem);
+        final String expectedValue = alias + " IS NOT NULL";
+        
+        assertEquals(expectedValue, rewrittenValue);
+    }
+}
\ No newline at end of file

Reply via email to