Revision 46100 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
46 46
import org.gvsig.fmap.dal.DataManager;
47 47
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CREATE_TABLE;
48 48
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CREATE_TABLE_STRUCTURE;
49
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT_FROM_SELECTION;
50
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_FROM_SELECTION;
49 51

  
50 52
/**
51 53
 *
......
238 240
            theGrammar.addStatement(createSelectCountStatement(theGrammar));
239 241
            theGrammar.addStatement(createSelectStatement(theGrammar));
240 242
//            theGrammar.addStatement(createUpdateStatement(theGrammar));
243
            theGrammar.addStatement(createSelectCountFromSelectionStatement(theGrammar));
244
            theGrammar.addStatement(createSelectFromSelectionStatement(theGrammar));
241 245

  
242 246
            this.grammar = theGrammar;
243 247
        }
......
368 372
        return stmt;
369 373
    }
370 374

  
375
    private Statement createSelectFromSelectionStatement(Grammar theGrammar) {
376
        Statement stmt;
377
//
378
//      SELECT * | (column1, column2,...) 
379
//          FROM SELECTION OF table_name
380
//          WHERE expression
381
//        
382
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
383
        CodeBuilder codeBuilder = manager.createCodeBuilder();
371 384

  
385
        stmt = theGrammar.createStatement("SELECTFROMSELECTION");
386
        stmt.addRule(stmt.require_any_token("SELECT"));
387
        stmt.addRule(stmt.optional_any_token("*")
388
                .addRuleOnTrue(stmt.set_expression("COLUMNS", codeBuilder.tuple()))
389
                .addRuleOnFalse(stmt.require_identifiers(",").capture_as("COLUMNS"))
390
        );
391
        stmt.addRule(stmt.require_any_token("FROM"));
392
        stmt.addRule(stmt.require_any_token("SELECTION"));
393
        stmt.addRule(stmt.optional_any_token("IF")
394
                .addRuleOnTrue(stmt.require_tokens("NOT", "EMPTY").capture_as("IF_NOT_EMPTY"))
395
        );
396
        stmt.addRule(stmt.optional_any_token("OF"));
397
        stmt.addRule(stmt.require_expression().capture_as("TABLE"));
398
        stmt.addRule(stmt.optional_any_token("WHERE")
399
                .addRuleOnTrue(stmt.require_expression().capture_as("WHERE"))
400
        );
401
        stmt.addRule(stmt.optional_any_token("LIMIT")
402
                .addRuleOnTrue(stmt.require_expression().capture_as("LIMIT"))
403
        );
404
        stmt.addRule(stmt.optional_any_token(";"));
405
        stmt.code(
406
                FUNCTION_SELECT_FROM_SELECTION,
407
                stmt.args_names("COLUMNS", "TABLE", "WHERE", "LIMIT","IF_NOT_EMPTY")
408
        );
409

  
410
        return stmt;
411
    }
412

  
372 413
    private Statement createInsertIntoTableSelectStatement(Grammar theGrammar) {
373 414
        Statement stmt;
374 415
//
......
461 502
        return stmt;
462 503
    }
463 504

  
505
    private Statement createSelectCountFromSelectionStatement(Grammar theGrammar) {
506
        Statement stmt;
507
//
508
//      SELECT COUNT(*) FROM SELECTION IF NOT IS EMPTY OF table_name WHERE expression
509
//        
510
        stmt = theGrammar.createStatement("SELECT_COUNT_FROM_SELECTION");
511
        stmt.addRule(stmt.require_any_token("SELECT"));
512
        stmt.addRule(stmt.require_any_token("COUNT"));
513
        stmt.addRule(stmt.require_any_token("("));
514
        stmt.addRule(stmt.require_any_token("*"));
515
        stmt.addRule(stmt.require_any_token(")"));
516
        stmt.addRule(stmt.require_any_token("FROM"));
517
        stmt.addRule(stmt.require_any_token("SELECTION"));
518
        stmt.addRule(stmt.optional_any_token("IF")
519
                .addRuleOnTrue(stmt.require_tokens("NOT", "EMPTY").capture_as("IF_NOT_EMPTY"))
520
        );
521
        stmt.addRule(stmt.require_any_token("OF"));
522
        stmt.addRule(stmt.require_expression().capture_as("TABLE"));
523
        stmt.addRule(stmt.optional_any_token("WHERE")
524
                .addRuleOnTrue(stmt.require_expression().capture_as("WHERE"))
525
        );
526
        stmt.addRule(stmt.require_any_token(";"));
527
        stmt.code(
528
                FUNCTION_SELECT_COUNT_FROM_SELECTION,
529
                stmt.args_names("TABLE", "WHERE", "IF_NOT_EMPTY")
530
        );
531
        return stmt;
532
    }
533

  
464 534
    private Statement createCreateTableStatement(Grammar theGrammar) {
465 535
        Statement stmt;
466 536
//

Also available in: Unified diff