On 7/17/12 6:28 PM, Katherine Marsden wrote:
On 7/17/2012 8:54 AM, LUTTER, Steffen wrote:

Hello,

I have an issue with stored procedures in derby and like to ask for your confirmation. When querying the procedure columns, according to the JDBC standard we escape pattern characters, like _ and % if necessary. The escape character is here taken from the function getSearchStringEscape().

Derby returns an empty string for getSearchStringEscape() and the comments indicate we don't have a default escape value. I am not sure why. I am also not understanding where = comes in the picture according to the comment below:

/**
* This is the string that can be used to escape '_' or '%' in
* the string pattern style catalog search parameters.
we have no default escape value, so = is the end of the next line
* <P>The '_' character represents any single character.
* <P>The '%' character represents any sequence of zero or
* more characters.
* @return the string used to escape wildcard characters
*/
public String getSearchStringEscape() {
return "";
}

I think it would be worthwhile to file a Jira for Derby to allow escape of the wildcard characters in the pattern unless someone understands why we don't support it.

It may be significant that the special _ and % characters have the same meaning in the SQL LIKE predicate. See part 2 of the SQL Standard, section 8.5 (<like predicate>). There the Standard does not define an escape character either. Instead, it allows an optional ESCAPE clause so that applications can declare their own escape characters.

I don't think we can impose a default escape character without breaking backward compatibility. It would probably be sufficient to configure the escape character at the database (or higher) level by introducing a new Derby property. I have filed https://issues.apache.org/jira/browse/DERBY-5862 to track this issue.

Thanks,
-Rick



The problem is, that derby doesn’t seem to accept the escaping in case of _ (underscore), and uses the escape characters within the match which leads to the situation that the stored proc is not found.

Example:

We have a stored procedure MY_PROC.

getConnection ().getMetaData ().getProcedureColumns (null, null, ”MY\\_PROC” ,"%") => *Stored proc is not found*

getConnection ().getMetaData ().getProcedureColumns (null, null, ”MY_PROC” ,"%") => *Stored proc is found*

The first case is the problem, as the _ needs escaping. For the second case it works, even though theoretically also procedures called MY-PROC, MY+PROC, MYXPROC would match.

Have I overseen something? Can you confirm?

http://docs.oracle.com/javase/6/docs/api/java/sql/DatabaseMetaData.html

Many thanks in advance,

Steffen

_________________________________________________________________

*Steffen Lutter*| Developer | Semantic Layer | TIP BAT EIM | +33 1 41 25 38 68




Reply via email to