1+ package lambda2sql ;
2+
3+ import static com .trigersoft .jaque .expression .ExpressionType .Equal ;
4+ import static com .trigersoft .jaque .expression .ExpressionType .LogicalAnd ;
5+ import static com .trigersoft .jaque .expression .ExpressionType .LogicalOr ;
6+
7+ import com .trigersoft .jaque .expression .*;
8+
9+ public class ToSqlVisitor implements ExpressionVisitor <String > {
10+
11+ boolean top = true ;
12+
13+
14+ @ Override
15+ public String visit (BinaryExpression e ) {
16+ boolean quote = !top && e .getExpressionType () == LogicalOr ;
17+ top = false ;
18+
19+ StringBuilder sb = new StringBuilder ();
20+ if ( quote ) sb .append ('(' );
21+
22+ String first = e .getFirst ().accept (this );
23+ String second = e .getSecond ().accept (this );
24+
25+ sb .append (first ).append (' ' ).append (toSqlOp (e .getExpressionType ())).append (' ' ).append (second );
26+
27+ if ( quote ) sb .append (')' );
28+
29+ return sb .toString ();
30+ }
31+
32+ public static String toSqlOp (int expressionType ) {
33+ switch (expressionType ) {
34+ case Equal : return "=" ;
35+ case LogicalAnd : return "AND" ;
36+ case LogicalOr : return "OR" ;
37+ }
38+ return ExpressionType .toString (expressionType );
39+ }
40+
41+ @ Override
42+ public String visit (ConstantExpression e ) {
43+ return e .getValue ().toString ();
44+ }
45+
46+ @ Override
47+ public String visit (InvocationExpression e ) {
48+ return e .getTarget ().accept (this );
49+ }
50+
51+ @ Override
52+ public String visit (LambdaExpression <?> e ) {
53+ return e .getBody ().accept (this );
54+ }
55+
56+ @ Override
57+ public String visit (MemberExpression e ) {
58+ String name = e .getMember ().getName ();
59+ return name .replaceAll ("^(get|is)" , "" ).toLowerCase ();
60+ }
61+
62+ @ Override
63+ public String visit (ParameterExpression e ) {
64+ return "" ;
65+ }
66+
67+ @ Override
68+ public String visit (UnaryExpression e ) {
69+ String first = e .getFirst ().accept (this );
70+ return ExpressionType .toString (e .getExpressionType ()) + first ;
71+ }
72+
73+ }
0 commit comments