[
https://issues.jboss.org/browse/TEIID-1401?page=com.atlassian.jira.plugin...
]
Mark Drilling commented on TEIID-1401:
--------------------------------------
Per Steve's look at the QueryRewriter code:
----------------
The simplest fix is to change the logic:
if(funcName.startsWith("parse")) { //$NON-NLS-1$
String type = funcName.substring(5);
inverseFunction = "format" + type; //$NON-NLS-1$
} else if(funcName.startsWith("format")) { //$NON-NLS-1$
String type = funcName.substring(6);
inverseFunction = "parse" + type; //$NON-NLS-1$
} else {
return crit;
}
to something more explicit:
private static final Set<String> PARSE_FORMAT_TYPES = new
HashSet<String>(Arrays.asList(DataTypeManager.DefaultDataTypes.TIME,
DataTypeManager.DefaultDataTypes.DATE,
DataTypeManager.DefaultDataTypes.TIMESTAMP, DataTypeManager.DefaultDataTypes.BIG_DECIMAL,
DataTypeManager.DefaultDataTypes.BIG_INTEGER,
DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.LONG,
DataTypeManager.DefaultDataTypes.FLOAT,
DataTypeManager.DefaultDataTypes.DOUBLE));
...
if(funcName.startsWith("parse")) { //$NON-NLS-1$
String type = funcName.substring(5);
if (!PARSE_FORMAT_TYPES.contains(type)) {
return crit;
}
inverseFunction = "format" + type; //$NON-NLS-1$
} else if(funcName.startsWith("format")) { //$NON-NLS-1$
String type = funcName.substring(6);
if (!PARSE_FORMAT_TYPES.contains(type)) {
return crit;
}
inverseFunction = "parse" + type; //$NON-NLS-1$
} else {
return crit;
}
----------------
QueryRewriter issue with certain UDFs
-------------------------------------
Key: TEIID-1401
URL:
https://issues.jboss.org/browse/TEIID-1401
Project: Teiid
Issue Type: Bug
Components: Query Engine
Affects Versions: 7.2
Reporter: Mark Drilling
Assignee: Steven Hawkins
Encountered NPE in QueryRewriter with the following stacktrace:
java.lang.ArrayIndexOutOfBoundsException: 1
at
com.metamatrix.query.rewriter.QueryRewriter.simplifyParseFormatFunction(QueryRewriter.java:1690)
at
com.metamatrix.query.rewriter.QueryRewriter.simplifyWithInverse(QueryRewriter.java:1368)
at com.metamatrix.query.rewriter.QueryRewriter.rewriteCriteria(QueryRewriter.java:1314)
at com.metamatrix.query.rewriter.QueryRewriter.rewriteCriteria(QueryRewriter.java:1112)
at com.metamatrix.query.rewriter.QueryRewriter.rewriteCriteria(QueryRewriter.java:1095)
at com.metamatrix.query.rewriter.QueryRewriter.rewriteCriteria(QueryRewriter.java:1091)
at
com.metamatrix.query.optimizer.relational.rules.FrameUtil.convertCriteria(FrameUtil.java:537)
The issue was traced back to usage of a UDF named 'parsedate_'. The
QueryRewriter makes assumption about function starting with the word 'parse'. see
next comment for more info.
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira