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