Compare commits

...

1 Commits

Author SHA1 Message Date
hwang
89fd17b3d9 bugfix(TUP-27199):DB version of sybase isn't hide for other database on
tCreateTable
2020-05-20 10:38:47 +08:00
2 changed files with 13 additions and 32 deletions

View File

@@ -93,18 +93,14 @@ public final class Expression {
private static Pattern orPattern;
private static Pattern pattern;
static {
Perl5Compiler compiler = new Perl5Compiler();
// example for the reg exp: (.*)[')][ ]*or[ ]*[\w(](.*)
String prefixReg = "(.*)[') ][ ]*"; //$NON-NLS-1$
String suffixReg = "[ ]*[ (](.*)"; //$NON-NLS-1$
String reg = "[^a-zA-Z]"; //$NON-NLS-1$
try {
andPattern = compiler.compile(prefixReg + AND + suffixReg);
orPattern = compiler.compile(prefixReg + OR + suffixReg);
pattern = compiler.compile(reg);
} catch (MalformedPatternException e) {
throw new RuntimeException(e);
}
@@ -189,32 +185,17 @@ public final class Expression {
if(!expression.contains(condition)) {
return false;
}
String[] exs = expression.split(condition);
for(int i = 0; i<exs.length; i++){
if((i&1)==1) {
String ex0 = exs[i-1];
String ex1 = exs[i];
if(conditionMatcher.matches(String.valueOf(ex0.charAt(ex0.length() - 1)), pattern) &&
conditionMatcher.matches(String.valueOf(ex1.charAt(0)), pattern)) {
return true;
}
if(i+1<exs.length) {
String ex2 = exs[i+1];
if(conditionMatcher.matches(String.valueOf(ex2.charAt(0)), pattern) &&
conditionMatcher.matches(String.valueOf(ex1.charAt(ex1.length() - 1)), pattern)) {
return true;
}
}
}
}
if (expression.contains(StringUtils.wrap(condition, StringUtils.SPACE)) || expression.contains(")" + condition + "(")) {
// also exclude those like 'standard', "story" )or( )and(
return true;
}
return false;
}
protected static boolean isThereCondition(String expression, String condition) {
expression = expression.toLowerCase();
if(!isAndOr(expression, condition)) {
return false;
}

View File

@@ -286,19 +286,19 @@ public class ExpressionTest {
@Test
public void testIsAndOr() {
assertTrue(Expression.isAndOr("(a=1)and(b=2)", "and"));
assertTrue(Expression.isAndOr("{A=1}AND{B=2}", "and"));
assertFalse(Expression.isAndOr("1or8=2", "and"));
assertTrue(Expression.isAndOr("(A=1)AND(B=2)", "and"));
assertTrue(Expression.isAndOr("(A=1) AND (B=2)", "and"));
assertTrue(Expression.isAndOr("(a=1)and(b=2)and(c=3)", "and"));
assertTrue(Expression.isAndOr("stand(a=1)and(b=2)and(c=3)", "and"));
assertFalse(Expression.isAndOr("standard='aaa'", "and"));
assertFalse(Expression.isAndOr("story='aaa'", "or"));
assertTrue(Expression.isAndOr("&a=1%or#b=2-", "or"));
assertTrue(Expression.isAndOr("A=1_OR!B=2", "or"));
assertFalse(Expression.isAndOr("a=1=and9b=2", "or"));
assertTrue(Expression.isAndOr("strory&a=1%or#b=2-or#c=3-", "or"));
assertTrue(Expression.isAndOr("&a=1%or#b=2-or#c=3-", "or"));
assertTrue(Expression.isAndOr("(a=1)or(b=2)", "or"));
assertTrue(Expression.isAndOr("(A=1)OR(B=2)", "or"));
assertTrue(Expression.isAndOr("(A=1) OR (B=2)", "or"));
assertTrue(Expression.isAndOr("(a=1)or(b=2)or(c=3)", "or"));
assertTrue(Expression.isAndOr("stand(a=1)or(b=2)or(c=3)", "or"));
}
}