Revision 44748 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
38 38
import org.gvsig.expressionevaluator.impl.DefaultStatement.ArgsBuilderFromNames;
39 39
import org.gvsig.expressionevaluator.impl.function.dataaccess.ExistsFunction;
40 40
import org.gvsig.expressionevaluator.spi.AbstractGrammarFactory;
41
import static org.gvsig.fmap.dal.DataManager.FUNCTION_FOREING_VALUE;
42
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
43
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT;
41 44

  
42 45
/**
43 46
 *
......
49 52

  
50 53
    private class ExistsStatementBuilder extends DefaultStatement.StatementBuilderBase {
51 54

  
52
        private final String ListID;
55
        private final String listID;
56
        private final String existsID;
53 57

  
54
        public ExistsStatementBuilder(String ListID) {
55
            super(ExistsFunction.NAME, new ArgsBuilderFromNames(ListID));
56
            this.ListID = ListID;
58
        public ExistsStatementBuilder(String listID, String existsID) {
59
            super(ExistsFunction.NAME, new ArgsBuilderFromNames(listID,existsID));
60
            this.listID = listID;
61
            this.existsID = existsID;
57 62
        }
58 63

  
59 64
        @Override
60 65
        public Code build(StatementContext context) {
61
            UUID x = UUID.randomUUID();
62
            String exists_id = x.toString().replaceAll("-", "");
63 66

  
64 67
            CodeBuilder codeBuilder = context.getCodeBuilder();
65 68
            Caller code = (Caller) super.build(context);
66 69
            BaseCodes args = (BaseCodes) code.parameters();
67
            args.add("EXISTS_ID", codeBuilder.constant(exists_id));
70
            if( args.size()<2 || args.get("ID")==null  ) {
71
              String exists_id = "EXISTS"+UUID.randomUUID().toString().replaceAll("-", "");
72
              args.add("ID", codeBuilder.constant(exists_id));
73
            }
68 74
            code = codeBuilder.function(ExistsFunction.NAME, args);
69 75
            return code;
70 76
        }
......
93 99
            
94 100
            stmt = theGrammar.createStatement("EXISTS");
95 101
            stmt.addRule(stmt.require_any_token("EXISTS"));
102
            stmt.addRule(stmt.require_any_token("("));
96 103
            stmt.addRule(stmt.require_expression("LIST"));
97
            stmt.builder(new ExistsStatementBuilder("LIST"));
104
            stmt.addRule(stmt.optional_any_token(",")
105
                    .addRuleOnTrue(stmt.require_expression("ID"))
106
            );
107
            stmt.addRule(stmt.require_any_token(")"));
108
            stmt.builder(new ExistsStatementBuilder("LIST","ID"));
98 109
            theGrammar.addStatement(stmt);
99 110

  
100 111
            stmt = theGrammar.createStatement("FOREING_VALUE");
......
103 114
            stmt.addRule(stmt.require_any_token("FROM"));
104 115
            stmt.addRule(stmt.require_identifiers("IDENTIFIERS","."));
105 116
            stmt.code(
106
                    DALFunctions.FUNCTION_FOREING_VALUE,
117
                    FUNCTION_FOREING_VALUE,
107 118
                    stmt.args_names("IDENTIFIERS")
108 119
            ); 
109 120
            theGrammar.addStatement(stmt);
......
144 155
            );
145 156
            stmt.addRule(stmt.require_any_token(";"));
146 157
            stmt.code(
147
                    DALFunctions.FUNCTION_SELECT,
158
                    FUNCTION_SELECT,
148 159
                    stmt.args_names("TABLE","WHERE","ORDER#","ORDER_MODE#","LIMIT")
149 160
            ); 
150 161
            theGrammar.addStatement(stmt);
......
162 173
            );
163 174
            stmt.addRule(stmt.require_any_token(";"));
164 175
            stmt.code(
165
                    DALFunctions.FUNCTION_SELECT_COUNT,
176
                    FUNCTION_SELECT_COUNT,
166 177
                    stmt.args_names("TABLE","WHERE")
167 178
            ); 
168 179
            theGrammar.addStatement(stmt);

Also available in: Unified diff