Revision 46954 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/grammars/DataAccessGrammarFactory.java

View differences:

DataAccessGrammarFactory.java
43 43
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
44 44
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT;
45 45
import org.gvsig.expressionevaluator.Code.Callable;
46
import static org.gvsig.expressionevaluator.impl.function.dataaccess.SelectAggregateFunction.FUNCTION_SELECT_AGGREGATE;
46 47
import org.gvsig.fmap.dal.DataManager;
47 48
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CREATE_TABLE;
48 49
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CREATE_TABLE_STRUCTURE;
......
221 222
        }
222 223

  
223 224
    }
225
    private static class SelectAggregateArgsBuilder implements ArgsBuilder {
224 226

  
227
        public SelectAggregateArgsBuilder() {
228
        }
229

  
230
        @Override
231
        public String toString() {
232
            return "select_aggregate_args()";
233
        }
234

  
235
        @Override
236
        public Codes build(StatementContext context) {
237
            context.trace(this.toString() + ".build");
238
            CodeBuilder codeBuilder = context.getCodeBuilder();
239
            BaseCodes args = (BaseCodes) codeBuilder.args();
240

  
241
            Code table = context.getCode("table");
242
            Code where = context.getCode("where");
243
            Code aggregateFunction = context.getCode("AGGREGATE_FUNCTION");
244
            Code aggregateColumn = context.getCode("AGGREGATE_COLUMN");
245

  
246
            args.add(table);
247

  
248
            if (where == null) {
249
                args.add(codeBuilder.constant(null));
250
            } else {
251
                args.add(where);
252
            }
253
            args.add(aggregateFunction);
254
            args.add(aggregateColumn);
255
            return args;
256
        }
257

  
258
    }
259

  
225 260
    public DataAccessGrammarFactory() {
226 261
        super(DALFunctions.GRAMMAR_NAME, true);
227 262
    }
......
239 274
            theGrammar.addStatement(createForeingValueStatement(theGrammar));
240 275
            theGrammar.addStatement(createInsertIntoTableSelectStatement(theGrammar));
241 276
            theGrammar.addStatement(createSelectCountStatement(theGrammar));
277
            theGrammar.addStatement(createSelectAggregateStatement(theGrammar));
242 278
            theGrammar.addStatement(createSelectStatement(theGrammar));
243 279
//            theGrammar.addStatement(createUpdateStatement(theGrammar));
244 280
            theGrammar.addStatement(createSelectCountFromSelectionStatement(theGrammar));
......
503 539
        return stmt;
504 540
    }
505 541

  
542
    private Statement createSelectAggregateStatement(Grammar theGrammar) {
543
        Statement stmt;
544
//
545
//      SELECT COUNT(*) FROM table_name WHERE expression
546
//        
547
        theGrammar.addReservedWord("SELECT");
548
        theGrammar.addReservedWord("FROM");
549
        theGrammar.addReservedWord("WHERE");
550

  
551
        stmt = theGrammar.createStatement("SELECT_COUNT");
552
        stmt.addRule(stmt.require_any_token("SELECT"));
553
        stmt.addRule(stmt.require_any_token("COUNT","SUM", "MIN","MAX", "AVG").capture_as("AGGREGATE_FUNCTION"));
554
        stmt.addRule(stmt.require_any_token("("));
555
        stmt.addRule(stmt.require_identifier().capture_as("AGGREGATE_COLUMN"));
556
        stmt.addRule(stmt.require_any_token(")"));
557
        stmt.addRule(stmt.require_any_token("FROM"));
558
        stmt.addRule(stmt.require_expression().capture_as("TABLE"));
559
        stmt.addRule(stmt.optional_any_token("WHERE")
560
                .addRuleOnTrue(stmt.require_expression().capture_as("WHERE"))
561
        );
562
        stmt.addRule(stmt.optional_any_token(";"));
563
        stmt.code(
564
                FUNCTION_SELECT_AGGREGATE,
565
                new SelectAggregateArgsBuilder()
566
        );
567
        return stmt;
568
    }
569

  
506 570
    private Statement createSelectCountFromSelectionStatement(Grammar theGrammar) {
507 571
        Statement stmt;
508 572
//

Also available in: Unified diff