001: package org.obe.test.standalone;
002:
003: import java.io.IOException;
004: import java.io.StringReader;
005: import java.io.StringWriter;
006: import java.math.BigDecimal;
007: import java.math.BigInteger;
008: import java.util.Date;
009: import junit.framework.Test;
010: import junit.framework.TestCase;
011: import junit.framework.TestSuite;
012: import org.apache.commons.logging.Log;
013: import org.apache.commons.logging.LogFactory;
014: import org.obe.sql.Node;
015: import org.obe.sql.ParseException;
016: import org.obe.sql.SQLParser;
017:
018: /**
019: * @author Adrian Price
020: */
021: public class SQLParserTest extends TestCase {
022: private static final Log _logger = LogFactory
023: .getLog(SQLParserTest.class);
024: private static final String[] _tests = { "testStatement",
025: "testWhere" };
026: private static final String STATEMENT_1 = "SELECT a,b,c FROM D WHERE a = 1 AND b <> 2;";
027: private static final String SQL_OR_EXPR_1 = "i = 456 AND str = 'hello'";
028: private static final String SQL_OR_EXPR_2 = "str='hello' AND i=456 AND (l = 0 OR l = 789)";
029: private static final String SQL_OR_EXPR_3 = "processInstanceId = '0' AND ownerId = '0' AND ownerType = 0 AND (type = 0 OR type = 2)";
030: private static final String SQL_OR_EXPR_4 = "ownerId = '0' AND ownerType = 1 AND (type = 0 OR type = 2)";
031: // private static final String SQL_OR_EXPR_4 = "type = 0 OR type = 2";
032: private static final String SQL_OR_EXPR_5 = "ownerId = '0' AND ownerType = 2 AND (type = 0 OR type = 2)";
033:
034: public static class TestBean {
035: private boolean _b;
036: private byte _z;
037: private char _c;
038: private short _s;
039: private int _i;
040: private long _l;
041: private float _f;
042: private double _d;
043: private BigDecimal _bd;
044: private BigInteger _bi;
045: private String _str;
046: private Date _date;
047:
048: public TestBean() {
049: }
050:
051: public TestBean(boolean b, byte z, char c, short s, int i,
052: long l, float f, double d, BigDecimal bd,
053: BigInteger bi, String str, Date date) {
054:
055: _b = b;
056: _z = z;
057: _c = c;
058: _s = s;
059: _i = i;
060: _l = l;
061: _f = f;
062: _d = d;
063: _bd = bd;
064: _bi = bi;
065: _str = str;
066: _date = date;
067: }
068:
069: public boolean isB() {
070: return _b;
071: }
072:
073: public byte getZ() {
074: return _z;
075: }
076:
077: public char getC() {
078: return _c;
079: }
080:
081: public short getS() {
082: return _s;
083: }
084:
085: public int getI() {
086: return _i;
087: }
088:
089: public long getL() {
090: return _l;
091: }
092:
093: public float getF() {
094: return _f;
095: }
096:
097: public double getD() {
098: return _d;
099: }
100:
101: public BigDecimal getBd() {
102: return _bd;
103: }
104:
105: public BigInteger getBi() {
106: return _bi;
107: }
108:
109: public String getStr() {
110: return _str;
111: }
112:
113: public Date getDate() {
114: return _date;
115: }
116: }
117:
118: public static Test suite() {
119: TestSuite suite = new TestSuite();
120: for (int i = 0; i < _tests.length; i++)
121: suite.addTest(new SQLParserTest(_tests[i]));
122: return suite;
123: }
124:
125: public SQLParserTest(String name) {
126: super (name);
127: }
128:
129: public void testStatement() throws IOException, ParseException {
130: SQLParser parser = new SQLParser(new StringReader(STATEMENT_1));
131: Node root = parser.SQLStatement();
132: _logger.info("STATEMENT_1 parsed to: " + unparse(root));
133: }
134:
135: public void testWhere() throws IOException, ParseException {
136: Date now = new Date();
137: Object bean = new TestBean(true, (byte) 0x01, 'c', (short) 123,
138: 456, 789L, (float) 3.14159, 2.7182814, new BigDecimal(
139: "123456789012345678911234567892.123456789"),
140: new BigInteger("123456789012345678911234567892"),
141: "hello", now);
142:
143: SQLParser parser = new SQLParser(
144: new StringReader(SQL_OR_EXPR_1));
145: Node root = parser.SQLOrExpr();
146: _logger.info("SQL_OR_EXPR_1 parsed to: " + unparse(root));
147: Object result = root.execute(bean);
148: assertEquals("Incorrect result;", Boolean.TRUE, result);
149:
150: parser = new SQLParser(new StringReader(SQL_OR_EXPR_2));
151: root = parser.SQLOrExpr();
152: _logger.info("SQL_OR_EXPR_2 parsed to: " + unparse(root));
153: result = root.execute(bean);
154: assertEquals("Incorrect result;", Boolean.TRUE, result);
155:
156: parser = new SQLParser(new StringReader(SQL_OR_EXPR_3));
157: root = parser.SQLOrExpr();
158: _logger.info("SQL_OR_EXPR_3 parsed to: " + unparse(root));
159:
160: parser = new SQLParser(new StringReader(SQL_OR_EXPR_4));
161: root = parser.SQLOrExpr();
162: _logger.info("SQL_OR_EXPR_4 parsed to: " + unparse(root));
163:
164: parser = new SQLParser(new StringReader(SQL_OR_EXPR_5));
165: root = parser.SQLOrExpr();
166: _logger.info("SQL_OR_EXPR_5 parsed to: " + unparse(root));
167: }
168:
169: private String unparse(Node node) throws IOException {
170: StringWriter out = new StringWriter();
171: node.write(out);
172: return out.toString();
173: }
174: }
|