Clover coverage report - brownies library - 1.0-beta-1 Coverage timestamp: 月 8 16 2004 17:14:42 GMT+09:00 FRAMES NO FRAMES |
file stats: | LOC: | 256 |  | Methods: | 11
| NCLOC: | 201 |  | Classes: | 1
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover
Source file | Conditionals | Statements | Methods | TOTAL
BasicSqlBuilder.java | 62.8% | 78.9% | 100% | 73.7% |

1 |  |
     /*
2 |  |
      * Joey and its relative products are published under the terms
3 |  |
      * of the Apache Software License.
4 |  |
      */
5 |  |
     /*
6 |  |
      * Created on 2004/03/01
7 |  |
      */
8 |  |
     package org.asyrinx.brownie.core.sql2;
9 |  |
10 |  |
     import java.util.Collection;
11 |  |
     import java.util.Iterator;
12 |  |
13 |  |
     import org.apache.commons.collections.IteratorUtils;
14 |  |
     import org.asyrinx.brownie.core.lang.ArrayUtils;
15 |  |
     import org.asyrinx.brownie.core.lang.StringUtils;
16 |  |
     import org.asyrinx.brownie.core.sql.Operator;
17 |  |
18 |  |
     /**
19 |  |
      * @author akima
20 |  |
      */
21 |  |
     public class BasicSqlBuilder implements Visitor, SqlBuilder {
22 |  |
23 |  |
         /**
24 |  |
          *
25 |  |
          */
26 | 6 |
         public BasicSqlBuilder() {
27 | 6 |
             super();
28 |  |
         }
29 |  |
30 |  |
         private StringBuffer result = null;
31 |  |
32 |  |
         private StringBuffer work = null;
33 |  |
34 |  |
         /**
35 |  |
          * @see org.asyrinx.brownie.core.sql2.SqlBuilder#toSql(org.asyrinx.brownie.core.sql2.Select)
36 |  |
          */
37 | 6 |
         public String toSql(Select select) {
38 | 6 |
             select.accept(this);
39 | 6 |
             return result.toString();
40 |  |
         }
41 |  |
42 |  |
         /**
43 |  |
          * @see org.asyrinx.brownie.core.sql2.Visitor#visit(org.asyrinx.brownie.core.sql2.Select)
44 |  |
          */
45 | 6 |
         public void visit(Select select) {
46 | 6 |
             result = new StringBuffer();
47 | 6 |
             work = new StringBuffer();
48 | 6 |
             select.getSelectFields().accept(this);
49 | 6 |
             if (work.length() > 0) {
50 | 5 |
                 result.append("select ");
51 | 5 |
                 if (select.isDistinct())
52 | 0 |
                     result.append("distinct ");
53 | 5 |
                 result.append(work);
54 |  |
             }
55 | 6 |
             work = new StringBuffer();
56 | 6 |
             select.getFromTables().accept(this);
57 | 6 |
             if (work.length() > 0) {
58 | 6 |
                 if (result.length() > 0)
59 | 5 |
                     result.append(" ");
60 | 6 |
                 result.append("from ");
61 | 6 |
                 result.append(work);
62 |  |
             }
63 | 6 |
             work = new StringBuffer();
64 | 6 |
             select.getWhereConditions().accept(this);
65 | 6 |
             if (work.length() > 0) {
66 | 6 |
                 if (result.length() > 0)
67 | 6 |
                     result.append(" ");
68 | 6 |
                 result.append("where ");
69 | 6 |
                 result.append(work);
70 |  |
             }
71 | 6 |
             work = new StringBuffer();
72 | 6 |
             select.getGroupByFields().accept(this);
73 | 6 |
             if (work.length() > 0) {
74 | 0 |
                 if (result.length() > 0)
75 | 0 |
                     result.append(" ");
76 | 0 |
                 result.append("group by ");
77 | 0 |
                 result.append(work);
78 |  |
             }
79 | 6 |
             work = new StringBuffer();
80 | 6 |
             select.getHavingConditions().accept(this);
81 | 6 |
             if (work.length() > 0) {
82 | 0 |
                 if (result.length() > 0)
83 | 0 |
                     result.append(" ");
84 | 0 |
                 result.append("having ");
85 | 0 |
                 result.append(work);
86 |  |
             }
87 | 6 |
             work = new StringBuffer();
88 | 6 |
             select.getOrderByFields().accept(this);
89 | 6 |
             if (work.length() > 0) {
90 | 0 |
                 if (result.length() > 0)
91 | 0 |
                     result.append(" ");
92 | 0 |
                 result.append("order by ");
93 | 0 |
                 result.append(work);
94 |  |
             }
95 |  |
         }
96 |  |
97 | 40 |
         protected String toString(Object value) {
98 | 40 |
             if (value instanceof String) {
99 | 9 |
                 return StringUtils.toQuoted((String) value, '\'');
100 | 31 |
             } else if (value instanceof Character) {
101 | 6 |
                 return StringUtils.toQuoted(value + "", '\'');
102 | 25 |
             } else if (value.getClass().isArray()) {
103 | 6 |
                 if (value.getClass().getComponentType().isPrimitive()) {
104 | 4 |
                     return toString(IteratorUtils.arrayIterator(ArrayUtils
105 |  |
                             .toObjectArray(value)));
106 |  |
                 } else {
107 | 2 |
                     return toString(IteratorUtils.arrayIterator((Object[]) value));
108 |  |
                 }
109 | 19 |
             } else if (value instanceof Collection) {
110 | 0 |
                 final Collection collection = (Collection) value;
111 | 0 |
                 if (collection.isEmpty())
112 | 0 |
                     return null;
113 |  |
                 else
114 | 0 |
                     return toString(((Collection) value).iterator());
115 | 19 |
             } else if (value instanceof Iterator) {
116 | 0 |
                 return toString((Iterator) value);
117 |  |
             } else {
118 | 19 |
                 return String.valueOf(value);
119 |  |
             }
120 |  |
         }
121 |  |
122 | 6 |
         protected String toString(Iterator iterator) {
123 | 6 |
             boolean isFirst = true;
124 | 6 |
             final StringBuffer buf = new StringBuffer();
125 | 6 |
             while (iterator.hasNext()) {
126 | 14 |
                 if (isFirst)
127 | 5 |
                     isFirst = false;
128 |  |
                 else
129 | 9 |
                     buf.append(", ");
130 | 14 |
                 Object value = iterator.next();
131 | 14 |
                 buf.append(toString(value));
132 |  |
             }
133 | 6 |
             final String res = buf.toString();
134 | 6 |
             if ("".equals(res))
135 | 1 |
                 return null;
136 |  |
             else
137 | 5 |
                 return res;
138 |  |
         }
139 |  |
140 |  |
         /**
141 |  |
          * @see org.asyrinx.brownie.core.sql2.Visitor#visit(org.asyrinx.brownie.core.sql2.Condition)
142 |  |
          */
143 | 26 |
         public void visit(Condition condition) {
144 | 26 |
             final String value = toString(condition.getValue());
145 | 26 |
             if (value == null)
146 | 1 |
                 return;
147 | 25 |
             if (work.length() > 0)
148 | 11 |
                 work.append(" ").append(condition.getConnection()).append(" ");
149 | 25 |
             if (StringUtils.isNotEmpty(condition.getFieldName()))
150 | 25 |
                 work.append(condition.getFieldName()).append(" ");
151 | 25 |
             work.append(condition.getOperator()).append(" ");
152 | 25 |
             if (condition.getOperator() == Operator.IN)
153 | 5 |
                 work.append("(");
154 | 25 |
             work.append(value);
155 | 25 |
             if (condition.getOperator() == Operator.IN)
156 | 5 |
                 work.append(")");
157 |  |
         }
158 |  |
159 |  |
         /**
160 |  |
          * @see org.asyrinx.brownie.core.sql2.Visitor#visit(org.asyrinx.brownie.core.sql2.Conditions)
161 |  |
          */
162 | 20 |
         public void visit(Conditions conditions) {
163 | 20 |
             final Iterator iterator = conditions.iterator();
164 | 20 |
             while (iterator.hasNext()) {
165 | 34 |
                 final Object object = iterator.next();
166 | 34 |
                 if (object instanceof Condition) {
167 | 26 |
                     ((Condition) object).accept(this);
168 | 8 |
                 } else if (object instanceof Conditions) {
169 | 8 |
                     final StringBuffer workBakup = work;
170 | 8 |
                     work = new StringBuffer();
171 | 8 |
                     try {
172 | 8 |
                         ((Conditions) object).accept(this);
173 |  |
                     } finally {
174 | 8 |
                         if (work.length() > 0) {
175 | 8 |
                             if (workBakup.length() > 0)
176 | 8 |
                                 workBakup.append(" ").append(
177 |  |
                                         conditions.getConnection()).append(" ");
178 | 8 |
                             workBakup.append("(");
179 | 8 |
                             workBakup.append(work);
180 | 8 |
                             workBakup.append(")");
181 |  |
                         }
182 | 8 |
                         work = workBakup;
183 |  |
                     }
184 |  |
                 }
185 |  |
             }
186 |  |
         }
187 |  |
188 |  |
         /**
189 |  |
          * @see org.asyrinx.brownie.core.sql2.Visitor#visit(org.asyrinx.brownie.core.sql2.Field)
190 |  |
          */
191 | 15 |
         public void visit(Field field) {
192 | 15 |
             if (StringUtils.isNotEmpty(field.getFunctionName()))
193 | 0 |
                 work.append(field.getFunctionName()).append("(");
194 | 15 |
             if (StringUtils.isNotEmpty(field.getTableAlias()))
195 | 0 |
                 work.append(field.getTableAlias()).append(".");
196 | 15 |
             work.append(field.getFieldName());
197 | 15 |
             if (StringUtils.isNotEmpty(field.getFunctionName()))
198 | 0 |
                 work.append(")");
199 | 15 |
             if (StringUtils.isNotEmpty(field.getAliasName()))
200 | 0 |
                 work.append(" as ").append(field.getAliasName());
201 |  |
         }
202 |  |
203 |  |
         /**
204 |  |
          * @see org.asyrinx.brownie.core.sql2.Visitor#visit(org.asyrinx.brownie.core.sql2.Fields)
205 |  |
          */
206 | 18 |
         public void visit(Fields fields) {
207 | 18 |
             boolean isFirst = true;
208 | 18 |
             final Iterator iterator = fields.iterator();
209 | 18 |
             while (iterator.hasNext()) {
210 | 15 |
                 if (!isFirst)
211 | 10 |
                     work.append(", ");
212 |  |
                 else
213 | 5 |
                     isFirst = false;
214 | 15 |
                 final Object object = iterator.next();
215 | 15 |
                 if (object instanceof Field) {
216 | 15 |
                     ((Field) object).accept(this);
217 | 0 |
                 } else if (object instanceof Fields) {
218 | 0 |
                     ((Fields) object).accept(this);
219 |  |
                 }
220 |  |
             }
221 |  |
         }
222 |  |
223 |  |
         /**
224 |  |
          * @see org.asyrinx.brownie.core.sql2.Visitor#visit(org.asyrinx.brownie.core.sql2.Table)
225 |  |
          */
226 | 6 |
         public void visit(Table table) {
227 | 6 |
             if (StringUtils.isNotEmpty(table.getTablePrefix()))
228 | 0 |
                 work.append(table.getTablePrefix()).append(".");
229 | 6 |
             work.append(table.getTableName());
230 | 6 |
             if (StringUtils.isNotEmpty(table.getTableAlias()))
231 | 0 |
                 work.append(" as ").append(table.getTableAlias());
232 | 6 |
             if (StringUtils.isNotEmpty(table.getIndexName()))
233 | 0 |
                 work.append("(INDEX ").append(table.getIndexName()).append(")");
234 |  |
         }
235 |  |
236 |  |
         /**
237 |  |
          * @see org.asyrinx.brownie.core.sql2.Visitor#visit(org.asyrinx.brownie.core.sql2.Tables)
238 |  |
          */
239 | 6 |
         public void visit(Tables tables) {
240 | 6 |
             boolean isFirst = true;
241 | 6 |
             final Iterator iterator = tables.iterator();
242 | 6 |
             while (iterator.hasNext()) {
243 | 6 |
                 if (!isFirst)
244 | 0 |
                     work.append(", ");
245 |  |
                 else
246 | 6 |
                     isFirst = false;
247 | 6 |
                 final Object object = iterator.next();
248 | 6 |
                 if (object instanceof Table) {
249 | 6 |
                     ((Table) object).accept(this);
250 | 0 |
                 } else if (object instanceof Tables) {
251 | 0 |
                     ((Tables) object).accept(this);
252 |  |
                 }
253 |  |
             }
254 |  |
         }
255 |  |
256 |  |
     }