org.apache.derby.iapi.types
Class Like

java.lang.Object
  extended by org.apache.derby.iapi.types.Like

public class Like
extends java.lang.Object

Like matching algorithm. Not too speedy for %s. SQL92 says the escape character can only and must be followed by itself, %, or _. So if you choose % or _ as the escape character, you can no longer do that sort of matching. Not the most recent Like -- missing the unit tests


Field Summary
private static char anyChar
           
private static char anyString
           
private static java.lang.String SUPER_STRING
           
 
Constructor Summary
private Like()
           
 
Method Summary
private static boolean checkEquality(char[] val, int vLoc, char[] pat, int pLoc, java.text.RuleBasedCollator collator)
          If the character in val matches the character in pat, then it does not matter if the database is UCS_BASIC or territory based, we simply return TRUE from the method.
(package private) static java.lang.Boolean checkLengths(int vLoc, int vEnd, int pLoc, char[] pat, int pEnd)
          checkLengths Returns null if we are not done.
(package private) static int getMinLen(char[] pattern, int pStart, int pEnd, boolean haveEsc, char escChar)
          Calculate the shortest length string that could match this pattern
private static java.lang.String greaterEqualString(java.lang.String pattern, char escChar)
          greaterEqualString -- for Escape clause only Walk the pattern character by character
static java.lang.String greaterEqualString(java.lang.String pattern, java.lang.String escape, int maxWidth)
          Return the substring from the pattern for the optimization >= clause.
static java.lang.String greaterEqualStringFromParameter(java.lang.String pattern, int maxWidth)
           
static java.lang.String greaterEqualStringFromParameterWithEsc(java.lang.String pattern, java.lang.String escape, int maxWidth)
           
static boolean isLikeComparisonNeeded(java.lang.String pattern)
          Return whether or not the like comparison is still needed after performing the like transformation on a constant string.
static boolean isOptimizable(java.lang.String pattern)
          Determine whether or not this LIKE can be transformed into optimizable clauses.
static java.lang.String lessThanString(java.lang.String pattern, java.lang.String escape, int maxWidth)
          Return the substring from the pattern for the < clause.
static java.lang.String lessThanStringFromParameter(java.lang.String pattern, int maxWidth)
           
static java.lang.String lessThanStringFromParameterWithEsc(java.lang.String pattern, java.lang.String escape, int maxWidth)
           
static java.lang.Boolean like(char[] val, int valLength, char[] pat, int patLength, char[] escape, int escapeLength, java.text.RuleBasedCollator collator)
          This method gets called for UCS_BASIC and territory based character string types to look for a pattern in a value string.
static java.lang.Boolean like(char[] value, int valueLength, char[] pattern, int patternLength, java.text.RuleBasedCollator collator)
           
private static java.lang.Boolean like(char[] val, int vLoc, int vEnd, char[] pat, int pLoc, int pEnd, char[] escape, int escapeLength, java.text.RuleBasedCollator collator)
           
private static boolean matchSpecial(int[] pat, int patStart, int patEnd, int[] specialInts)
          matchSpecial check the pattern against the various special character arrays.
private static java.lang.String padWithNulls(java.lang.String string, int len)
          Pad a string with null characters, in order to make it > and < comparable with SQLChar.
static java.lang.String stripEscapesNoPatternChars(java.lang.String pattern, char escChar)
          stripEscapesNoPatternChars
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

anyChar

private static final char anyChar
See Also:
Constant Field Values

anyString

private static final char anyString
See Also:
Constant Field Values

SUPER_STRING

private static final java.lang.String SUPER_STRING
See Also:
Constant Field Values
Constructor Detail

Like

private Like()
Method Detail

like

public static java.lang.Boolean like(char[] val,
                                     int valLength,
                                     char[] pat,
                                     int patLength,
                                     char[] escape,
                                     int escapeLength,
                                     java.text.RuleBasedCollator collator)
                              throws StandardException
This method gets called for UCS_BASIC and territory based character string types to look for a pattern in a value string. It also deals with escape character if user has provided one.

Parameters:
val - value to compare. if null, result is null.
valLength - length of val
pat - pattern to compare. if null, result is null.
patLength - length of pat
escape - escape character. Must be 1 char long. if null, no escape character is used.
escapeLength - length of escape
collator - null if we are dealing with UCS_BASIC character string types. If not null, then we use it to get collation elements for characters in val and non-metacharacters in pat to do the comparison.
Returns:
null if val or pat null, otherwise true if match and false if not.
Throws:
StandardException - thrown if data invalid

like

private static java.lang.Boolean like(char[] val,
                                      int vLoc,
                                      int vEnd,
                                      char[] pat,
                                      int pLoc,
                                      int pEnd,
                                      char[] escape,
                                      int escapeLength,
                                      java.text.RuleBasedCollator collator)
                               throws StandardException
Throws:
StandardException

checkEquality

private static boolean checkEquality(char[] val,
                                     int vLoc,
                                     char[] pat,
                                     int pLoc,
                                     java.text.RuleBasedCollator collator)
If the character in val matches the character in pat, then it does not matter if the database is UCS_BASIC or territory based, we simply return TRUE from the method. If the characters do not match and we are running with UCS_BASIC collation, then we will return FALSE. But if the database is territory based, then we want to use the Collator for the territory to determine if the Collator treats the 2 characters as equal (ie if their collation elements match, then the 2 characters are equal even if they are not the same character).

Parameters:
val - value to compare.
vLoc - character position in val.
pat - pattern to look for in val.
pLoc - character position in pat.
collator - null if we are dealing with UCS_BASIC character string types. If not null, then we use it to determine the equality of the 2 characters in pat and val if they are not same.
Returns:
TRUE if the character in val and vLoc match based on straight equality or collation element based equality. Otherwise we will return FALSE.

getMinLen

static int getMinLen(char[] pattern,
                     int pStart,
                     int pEnd,
                     boolean haveEsc,
                     char escChar)
Calculate the shortest length string that could match this pattern


checkLengths

static java.lang.Boolean checkLengths(int vLoc,
                                      int vEnd,
                                      int pLoc,
                                      char[] pat,
                                      int pEnd)
checkLengths Returns null if we are not done. Returns true if we are at the end of our value and pattern Returns false if there is more pattern left but out of input value

Parameters:
vLoc - current index into char[] val
vEnd - end index or our value
pLoc - current index into our char[] pattern
pat - pattern char []
pEnd - end index of our pattern []

matchSpecial

private static boolean matchSpecial(int[] pat,
                                    int patStart,
                                    int patEnd,
                                    int[] specialInts)
matchSpecial check the pattern against the various special character arrays. The array can be anyStringInts, anyCharInts or anyEscChars (always 1)


like

public static java.lang.Boolean like(char[] value,
                                     int valueLength,
                                     char[] pattern,
                                     int patternLength,
                                     java.text.RuleBasedCollator collator)
                              throws StandardException
Throws:
StandardException

isOptimizable

public static boolean isOptimizable(java.lang.String pattern)
Determine whether or not this LIKE can be transformed into optimizable clauses. It can if the pattern is non-null and if the length == 0 or the first character is not a wild card.

Parameters:
pattern - The right side of the LIKE
Returns:
Whether or not the LIKE can be transformed

greaterEqualStringFromParameter

public static java.lang.String greaterEqualStringFromParameter(java.lang.String pattern,
                                                               int maxWidth)
                                                        throws StandardException
Throws:
StandardException

greaterEqualStringFromParameterWithEsc

public static java.lang.String greaterEqualStringFromParameterWithEsc(java.lang.String pattern,
                                                                      java.lang.String escape,
                                                                      int maxWidth)
                                                               throws StandardException
Throws:
StandardException

greaterEqualString

public static java.lang.String greaterEqualString(java.lang.String pattern,
                                                  java.lang.String escape,
                                                  int maxWidth)
                                           throws StandardException
Return the substring from the pattern for the optimization >= clause.

Parameters:
pattern - The right side of the LIKE
escape - The escape clause
maxWidth - Maximum length of column, for null padding
Returns:
The String for the >= clause
Throws:
StandardException

greaterEqualString

private static java.lang.String greaterEqualString(java.lang.String pattern,
                                                   char escChar)
                                            throws StandardException
greaterEqualString -- for Escape clause only Walk the pattern character by character

Parameters:
pattern - like pattern to build from
escChar - the escape character in the pattern
Throws:
StandardException

stripEscapesNoPatternChars

public static java.lang.String stripEscapesNoPatternChars(java.lang.String pattern,
                                                          char escChar)
                                                   throws StandardException
stripEscapesNoPatternChars

Parameters:
pattern - pattern String to search
escChar - the escape character
Returns:
a stripped of ESC char string if no pattern chars, null otherwise
Throws:
StandardException - thrown if data invalid

lessThanStringFromParameter

public static java.lang.String lessThanStringFromParameter(java.lang.String pattern,
                                                           int maxWidth)
                                                    throws StandardException
Throws:
StandardException

lessThanStringFromParameterWithEsc

public static java.lang.String lessThanStringFromParameterWithEsc(java.lang.String pattern,
                                                                  java.lang.String escape,
                                                                  int maxWidth)
                                                           throws StandardException
Throws:
StandardException

lessThanString

public static java.lang.String lessThanString(java.lang.String pattern,
                                              java.lang.String escape,
                                              int maxWidth)
                                       throws StandardException
Return the substring from the pattern for the < clause.

Parameters:
pattern - The right side of the LIKE
escape - The escape clause
maxWidth - Maximum length of column, for null padding
Returns:
The String for the < clause
Throws:
StandardException - thrown if data invalid

isLikeComparisonNeeded

public static boolean isLikeComparisonNeeded(java.lang.String pattern)
Return whether or not the like comparison is still needed after performing the like transformation on a constant string. The comparison is not needed if the constant string is of the form: CONSTANT% (constant followed by a trailing %)

Parameters:
pattern - The right side of the LIKE
Returns:
Whether or not the like comparison is still needed.

padWithNulls

private static java.lang.String padWithNulls(java.lang.String string,
                                             int len)
Pad a string with null characters, in order to make it > and < comparable with SQLChar.

Parameters:
string - The string to pad
len - Max number of characters to pad to
Returns:
the string padded with 0s up to the given length

Built on Thu 2011-03-10 11:54:14+0000, from revision ???

Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.