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
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