eavl SQLBinaryExpr

This commit is contained in:
yanhuqing
2017-09-26 16:35:48 +08:00
parent aa957fab13
commit 5c2fa7aed6
3 changed files with 19 additions and 10 deletions
@@ -18,7 +18,7 @@ package com.alibaba.druid.sql.ast.expr;
import com.alibaba.druid.sql.ast.SQLExprImpl;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class SQLBinaryExpr extends SQLExprImpl implements SQLLiteralExpr, SQLValuableExpr {
public class SQLBinaryExpr extends SQLExprImpl implements SQLLiteralExpr {
private String value;
@@ -584,11 +584,11 @@ public class SQLEvalVisitorUtils {
String text = x.getValue();
long[] words = new long[text.length() / 64 + 1];
for (int i = 0; i < text.length(); ++i) {
for (int i = text.length()-1; i >= 0 ; --i) {
char ch = text.charAt(i);
if (ch == '1') {
int wordIndex = i >> 6;
words[wordIndex] |= (1L << i);
words[wordIndex] |= (1L << (text.length() - 1 - i));
}
}
@@ -600,7 +600,7 @@ public class SQLEvalVisitorUtils {
byte[] bytes = new byte[words.length * 8];
for (int i = 0; i < words.length; ++i) {
Utils.putLong(bytes, i * 8, words[i]);
Utils.putLong(bytes, (words.length-1-i) * 8, words[i]);
}
val = new BigInteger(bytes);
@@ -1,15 +1,16 @@
package com.alibaba.druid.bvt.sql.eval;
import com.alibaba.druid.sql.ast.expr.SQLBinaryExpr;
import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils;
import com.alibaba.druid.util.JdbcUtils;
import junit.framework.TestCase;
import org.junit.Assert;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import org.junit.Assert;
import junit.framework.TestCase;
import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils;
import com.alibaba.druid.util.JdbcUtils;
public class SQLEvalVisitorUtilsTest extends TestCase {
public void test_instance() throws Exception {
@@ -168,4 +169,12 @@ public class SQLEvalVisitorUtilsTest extends TestCase {
Assert.assertEquals(true, SQLEvalVisitorUtils.evalExpr(JdbcUtils.MYSQL, "? >= ?", Arrays.<Object> asList(3, 3)));
Assert.assertEquals(true, SQLEvalVisitorUtils.evalExpr(JdbcUtils.MYSQL, "? >= ?", Arrays.<Object> asList(4, 3)));
}
public void test_binary() throws Exception {
Assert.assertEquals(1L, SQLEvalVisitorUtils.eval(JdbcUtils.MYSQL, new SQLBinaryExpr("01"), new ArrayList<Object>()));
Assert.assertEquals(2L, SQLEvalVisitorUtils.eval(JdbcUtils.MYSQL, new SQLBinaryExpr("10"), new ArrayList<Object>()));
Assert.assertEquals(3L, SQLEvalVisitorUtils.eval(JdbcUtils.MYSQL, new SQLBinaryExpr("11"), new ArrayList<Object>()));
Assert.assertEquals(4L, SQLEvalVisitorUtils.eval(JdbcUtils.MYSQL, new SQLBinaryExpr("100"), new ArrayList<Object>()));
Assert.assertEquals(new BigInteger("36893488147419103231"), SQLEvalVisitorUtils.eval(JdbcUtils.MYSQL, new SQLBinaryExpr("11111111111111111111111111111111111111111111111111111111111111111"), new ArrayList<Object>()));
}
}