Return-Path: X-Original-To: apmail-hbase-commits-archive@www.apache.org Delivered-To: apmail-hbase-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3236710999 for ; Tue, 1 Apr 2014 01:52:39 +0000 (UTC) Received: (qmail 84786 invoked by uid 500); 1 Apr 2014 01:52:38 -0000 Delivered-To: apmail-hbase-commits-archive@hbase.apache.org Received: (qmail 84755 invoked by uid 500); 1 Apr 2014 01:52:38 -0000 Mailing-List: contact commits-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hbase.apache.org Delivered-To: mailing list commits@hbase.apache.org Received: (qmail 84747 invoked by uid 99); 1 Apr 2014 01:52:38 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Apr 2014 01:52:38 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Apr 2014 01:52:36 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 92BCE238890D; Tue, 1 Apr 2014 01:52:13 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1583510 - in /hbase/branches/0.98: hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ hbase-server/src/test/java/org/apache/hadoop/hbase/filter/ Date: Tue, 01 Apr 2014 01:52:13 -0000 To: commits@hbase.apache.org From: tedyu@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140401015213.92BCE238890D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: tedyu Date: Tue Apr 1 01:52:12 2014 New Revision: 1583510 URL: http://svn.apache.org/r1583510 Log: HBASE-10848 Filter SingleColumnValueFilter combined with NullComparator does not work Added: hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestNullComparator.java Modified: hbase/branches/0.98/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/NullComparator.java hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.java Modified: hbase/branches/0.98/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/NullComparator.java URL: http://svn.apache.org/viewvc/hbase/branches/0.98/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/NullComparator.java?rev=1583510&r1=1583509&r2=1583510&view=diff ============================================================================== --- hbase/branches/0.98/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/NullComparator.java (original) +++ hbase/branches/0.98/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/NullComparator.java Tue Apr 1 01:52:12 2014 @@ -56,7 +56,7 @@ public class NullComparator extends Byte @Override public int compareTo(byte[] value, int offset, int length) { - throw new UnsupportedOperationException(); + return compareTo(value); } /** Added: hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestNullComparator.java URL: http://svn.apache.org/viewvc/hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestNullComparator.java?rev=1583510&view=auto ============================================================================== --- hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestNullComparator.java (added) +++ hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestNullComparator.java Tue Apr 1 01:52:12 2014 @@ -0,0 +1,73 @@ +/** + * + * 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. + * under the License. + */ + +package org.apache.hadoop.hbase.filter; + +import org.apache.hadoop.hbase.SmallTests; +import org.junit.Assert; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Category(SmallTests.class) +public class TestNullComparator { + + @Test + public void testNullValue() + { + // given + byte[] value = null; + NullComparator comparator = new NullComparator(); + + // when + int comp1 = comparator.compareTo(value); + int comp2 = comparator.compareTo(value, 5, 15); + + // then + Assert.assertEquals(0, comp1); + Assert.assertEquals(0, comp2); + } + + @Test + public void testNonNullValue() { + // given + byte[] value = new byte[] { 0, 1, 2, 3, 4, 5 }; + NullComparator comparator = new NullComparator(); + + // when + int comp1 = comparator.compareTo(value); + int comp2 = comparator.compareTo(value, 1, 3); + + // then + Assert.assertEquals(1, comp1); + Assert.assertEquals(1, comp2); + } + + @Test + public void testEmptyValue() { + // given + byte[] value = new byte[] { 0 }; + NullComparator comparator = new NullComparator(); + + // when + int comp1 = comparator.compareTo(value); + int comp2 = comparator.compareTo(value, 1, 3); + + // then + Assert.assertEquals(1, comp1); + Assert.assertEquals(1, comp2); + } + +} Modified: hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.java URL: http://svn.apache.org/viewvc/hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.java?rev=1583510&r1=1583509&r2=1583510&view=diff ============================================================================== --- hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.java (original) +++ hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.java Tue Apr 1 01:52:12 2014 @@ -18,23 +18,19 @@ */ package org.apache.hadoop.hbase.filter; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import java.util.regex.Pattern; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.SmallTests; import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; import org.apache.hadoop.hbase.util.Bytes; - import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; -import static org.junit.Assert.*; - /** * Tests the value filter */ @@ -56,6 +52,7 @@ public class TestSingleColumnValueFilter private static final Pattern QUICK_PATTERN = Pattern.compile("QuIcK", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); Filter basicFilter; + Filter nullFilter; Filter substrFilter; Filter regexFilter; Filter regexPatternFilter; @@ -63,6 +60,7 @@ public class TestSingleColumnValueFilter @Before public void setUp() throws Exception { basicFilter = basicFilterNew(); + nullFilter = nullFilterNew(); substrFilter = substrFilterNew(); regexFilter = regexFilterNew(); regexPatternFilter = regexFilterNew(QUICK_PATTERN); @@ -73,6 +71,11 @@ public class TestSingleColumnValueFilter CompareOp.GREATER_OR_EQUAL, VAL_2); } + private Filter nullFilterNew() { + return new SingleColumnValueFilter(COLUMN_FAMILY, COLUMN_QUALIFIER, CompareOp.NOT_EQUAL, + new NullComparator()); + } + private Filter substrFilterNew() { return new SingleColumnValueFilter(COLUMN_FAMILY, COLUMN_QUALIFIER, CompareOp.EQUAL, @@ -116,6 +119,17 @@ public class TestSingleColumnValueFilter assertFalse("basicFilterNotNull", filter.filterRow()); } + private void nullFilterTests(Filter filter) throws Exception { + ((SingleColumnValueFilter) filter).setFilterIfMissing(true); + KeyValue kv = new KeyValue(ROW, COLUMN_FAMILY, COLUMN_QUALIFIER, FULLSTRING_1); + assertTrue("null1", filter.filterKeyValue(kv) == Filter.ReturnCode.INCLUDE); + assertFalse("null1FilterRow", filter.filterRow()); + filter.reset(); + kv = new KeyValue(ROW, COLUMN_FAMILY, Bytes.toBytes("qual2"), FULLSTRING_2); + assertTrue("null2", filter.filterKeyValue(kv) == Filter.ReturnCode.INCLUDE); + assertTrue("null2FilterRow", filter.filterRow()); + } + private void substrFilterTests(Filter filter) throws Exception { KeyValue kv = new KeyValue(ROW, COLUMN_FAMILY, COLUMN_QUALIFIER, @@ -168,7 +182,8 @@ public class TestSingleColumnValueFilter */ @Test public void testStop() throws Exception { - basicFilterTests((SingleColumnValueFilter)basicFilter); + basicFilterTests((SingleColumnValueFilter) basicFilter); + nullFilterTests(nullFilter); substrFilterTests(substrFilter); regexFilterTests(regexFilter); regexPatternFilterTests(regexPatternFilter); @@ -182,6 +197,8 @@ public class TestSingleColumnValueFilter public void testSerialization() throws Exception { Filter newFilter = serializationTest(basicFilter); basicFilterTests((SingleColumnValueFilter)newFilter); + newFilter = serializationTest(nullFilter); + nullFilterTests(newFilter); newFilter = serializationTest(substrFilter); substrFilterTests(newFilter); newFilter = serializationTest(regexFilter);