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

Samarth Jain updated PHOENIX-1684:
----------------------------------
    Labels: 4.3.1  (was: )

> Functional Index using REGEXP_SUBSTR doesn't work correctly
> -----------------------------------------------------------
>
>                 Key: PHOENIX-1684
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1684
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.0.0, 5.0.0
>            Reporter: Thomas D'Silva
>            Assignee: Thomas D'Silva
>              Labels: 4.3.1
>
> If you create a function index using REGEXP_SUBSTR(column_name,'id:[0-9]+') , 
> the index is not used correctly. This is probably because of the special 
> characters in the regex. 
> {code}
> protected void helpTestFunctionWithArgs(boolean mutable, boolean localIndex) 
> throws Exception {
>               Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
>               Connection conn = DriverManager.getConnection(getUrl(), props);
>               try {
>                       conn.createStatement().execute(
>                                       "CREATE TABLE t (k VARCHAR NOT NULL 
> PRIMARY KEY, v VARCHAR) "
>                                                       + (mutable ? 
> "IMMUTABLE_ROWS=true" : ""));
>                       String query = "SELECT * FROM t";
>                       ResultSet rs = 
> conn.createStatement().executeQuery(query);
>                       assertFalse(rs.next());
>                       String ddl = "CREATE " + (localIndex ? "LOCAL" : "")
>                                       + " INDEX idx ON t 
> (REGEXP_SUBSTR(v,'id:[0-9]+'))";
>                       PreparedStatement stmt = conn.prepareStatement(ddl);
>                       stmt.execute();
>                       query = "SELECT * FROM idx";
>                       rs = conn.createStatement().executeQuery(query);
>                       assertFalse(rs.next());
>                       stmt = conn.prepareStatement("UPSERT INTO t 
> VALUES(?,?)");
>                       stmt.setString(1, "k1");
>                       stmt.setString(2, "v1");
>                       stmt.execute();
>                       stmt.setString(1, "k2");
>                       stmt.setString(2, "v2");
>                       stmt.execute();
>                       conn.commit();
>                       query = "SELECT k FROM t WHERE 
> REGEXP_SUBSTR(v,'id:[0-9]+') = '1'";
>                       rs = conn.createStatement().executeQuery("EXPLAIN " + 
> query);
>                       if (localIndex) {
>                               assertEquals(
>                                               "CLIENT PARALLEL 1-WAY RANGE 
> SCAN OVER IDX ['1']\n"
>                                                               + "    SERVER 
> FILTER BY FIRST KEY ONLY",
>                                               QueryUtil.getExplainPlan(rs));
>                       } else {
>                               assertEquals(
>                                               "CLIENT PARALLEL 1-WAY RANGE 
> SCAN OVER IDX ['1']\n"
>                                                               + "    SERVER 
> FILTER BY FIRST KEY ONLY",
>                                               QueryUtil.getExplainPlan(rs));
>                       }
>                       rs = conn.createStatement().executeQuery(query);
>                       assertTrue(rs.next());
>                       assertEquals("k1", rs.getString(1));
>                       assertFalse(rs.next());
>               } finally {
>                       conn.close();
>               }
>       }
> {code}



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

Reply via email to