| java.lang.Object com.mckoi.database.PatternSearch
PatternSearch | final public class PatternSearch (Code) | | This is a static class that performs the operations to do a pattern search
on a given column of a table. The pattern syntax is very simple and follows
that of the SQL standard.
It works as follows:
The '%' character represents any sequence of characters.
The '_' character represents some character.
Therefore, the pattern search 'Toby%' will find all rows that start with
the string 'Toby' and end with any sequence of characters. The pattern
'T% Downer%' will find all names starting with T and containing 'Downer'
somewhere in the end. The pattern '_at' will find all three letter words
ending with 'at'.
NOTE: A 'ab%' type search is faster than a '%bc' type search. If the start
of the search pattern is unknown then the entire contents of the column
need to be accessed.
author: Tobias Downer |
Method Summary | |
public static boolean | fullPatternMatch(String pattern, String str, char escape_char) Matches a pattern against a string and returns true if it matches or
false otherwise. | public static void | main(String[] args) | public static boolean | patternMatch(String pattern, String expression, char escape_char) This is the pattern match recurrsive method. | static boolean | regexMatch(TransactionSystem system, String pattern, String value) Matches a string against a regular expression pattern. | static IntegerVector | regexSearch(Table table, int column, String pattern) Matches a column of a table against a constant regular expression
pattern. | static IntegerVector | search(Table table, int column, String pattern) This is the search method. | static IntegerVector | search(Table table, int column, String pattern, char escape_char) This is the search method. | public static boolean | testSearch(String pattern, String expression, boolean result) |
fullPatternMatch | public static boolean fullPatternMatch(String pattern, String str, char escape_char)(Code) | | Matches a pattern against a string and returns true if it matches or
false otherwise. This matches patterns that do not necessarily start
with a wild card unlike the 'patternMatch' method.
|
patternMatch | public static boolean patternMatch(String pattern, String expression, char escape_char)(Code) | | This is the pattern match recurrsive method. It recurses on each wildcard
expression in the pattern which makes for slightly better efficiency than
a character recurse algorithm. However, patterns such as "_%_a" will
result in many recursive calls.
Returns true if the pattern matches.
NOTE: That "_%_" will be less efficient than "__%" and will produce the
same result.
NOTE: It requires that a wild card character is the first character in
the expression.
ISSUE: Pattern optimiser, we should optimise wild cards of type "%__" to
"__%", or "%__%_%_%" to "____%". Optimised forms are identical in
result and more efficient. This optimisation could be performed by the
client during parsing of the LIKE statement.
HACKING ISSUE: Badly formed wild cards may result in hogging of server
side resources.
|
regexMatch | static boolean regexMatch(TransactionSystem system, String pattern, String value)(Code) | | Matches a string against a regular expression pattern. We use the regex
library as specified in the DatabaseSystem configuration.
|
regexSearch | static IntegerVector regexSearch(Table table, int column, String pattern)(Code) | | Matches a column of a table against a constant regular expression
pattern. We use the regex library as specified in the DatabaseSystem
configuration.
|
search | static IntegerVector search(Table table, int column, String pattern)(Code) | | This is the search method. It requires a table to search, a column of the
table, and a pattern. It returns the rows in the table that match the
pattern if any. Pattern searching only works successfully on columns that
are of type Types.DB_STRING.
This works by first reducing the search to all cells that contain the
first section of text. ie. pattern = "Toby% ___ner" will first reduce
search to all rows between "Toby" and "Tobz". This makes for better
efficiency.
|
search | static IntegerVector search(Table table, int column, String pattern, char escape_char)(Code) | | This is the search method. It requires a table to search, a column of the
table, and a pattern. It returns the rows in the table that match the
pattern if any. Pattern searching only works successfully on columns that
are of type Types.DB_STRING.
This works by first reducing the search to all cells that contain the
first section of text. ie. pattern = "Toby% ___ner" will first reduce
search to all rows between "Toby" and "Tobz". This makes for better
efficiency.
|
testSearch | public static boolean testSearch(String pattern, String expression, boolean result)(Code) | | |
|
|