You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "James Taylor (JIRA)" <ji...@apache.org> on 2015/07/23 01:27:05 UTC

[jira] [Resolved] (PHOENIX-2139) LIKE '%' is not filtering out null columns

     [ https://issues.apache.org/jira/browse/PHOENIX-2139?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

James Taylor resolved PHOENIX-2139.
-----------------------------------
       Resolution: Fixed
    Fix Version/s: 4.5.0

> LIKE '%' is not filtering out null columns
> ------------------------------------------
>
>                 Key: PHOENIX-2139
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2139
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: James Taylor
>            Assignee: James Taylor
>             Fix For: 4.5.0
>
>         Attachments: PHOENIX-2139.patch, PHOENIX-2139_v2.patch
>
>
> Found based on PhoenixDatabaseMetaData.getColumns() not filtering when column name is null.
> This test should pass:
> {code}
>     @Test
>     public void testLikeEverythingExpression() throws Exception {
>         Connection conn = DriverManager.getConnection(getUrl());
>         String ddl = "CREATE TABLE t (k1 VARCHAR, k2 VARCHAR, CONSTRAINT pk PRIMARY KEY (k1,k2))";
>         conn.createStatement().execute(ddl);
>         conn.createStatement().execute("UPSERT INTO t VALUES('aa','bb')");
>         conn.createStatement().execute("UPSERT INTO t VALUES('ab','bc')");
>         conn.createStatement().execute("UPSERT INTO t VALUES(null,'cc')");
>         conn.createStatement().execute("UPSERT INTO t VALUES('dd',null)");
>         conn.commit();
>         
>         ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM t WHERE k1 LIKE '%'");
>         assertTrue(rs.next());
>         assertEquals("aa", rs.getString(1));
>         assertEquals("bb", rs.getString(2));
>         assertTrue(rs.next());
>         assertEquals("ab", rs.getString(1));
>         assertEquals("bc", rs.getString(2));
>         assertTrue(rs.next());
>         assertEquals("dd", rs.getString(1));
>         assertEquals(null, rs.getString(2));
>         assertFalse(rs.next());
>         
>         rs = conn.createStatement().executeQuery("SELECT * FROM t WHERE k2 LIKE '%'");
>         assertTrue(rs.next());
>         assertEquals(null, rs.getString(1));
>         assertEquals("cc", rs.getString(2));
>         assertTrue(rs.next());
>         assertEquals("aa", rs.getString(1));
>         assertEquals("bb", rs.getString(2));
>         assertTrue(rs.next());
>         assertEquals("ab", rs.getString(1));
>         assertEquals("bc", rs.getString(2));
>         assertFalse(rs.next());
>         
>         conn.close();
>     }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)