/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // $ANTLR 3.1.3 Mar 17, 2009 19:23:44 org/usergrid/persistence/query/QueryFilter.g 2012-03-07 22:54:28 package org.apache.usergrid.mq; import org.antlr.runtime.BitSet; import org.antlr.runtime.MismatchedSetException; import org.antlr.runtime.NoViableAltException; import org.antlr.runtime.Parser; import org.antlr.runtime.ParserRuleReturnScope; import org.antlr.runtime.RecognitionException; import org.antlr.runtime.RecognizerSharedState; import org.antlr.runtime.Token; import org.antlr.runtime.TokenStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.usergrid.mq.Query.FilterPredicate; import org.apache.usergrid.mq.Query.SortPredicate; public class QueryFilterParser extends Parser { public static final String[] tokenNames = new String[] { "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ID", "INT", "EXPONENT", "FLOAT", "ESC_SEQ", "STRING", "BOOLEAN", "HEX_DIGIT", "UUID", "UNICODE_ESC", "OCTAL_ESC", "WS", "'<'", "'<='", "'='", "'>'", "'>='", "'in'", "'eq'", "'lt'", "'gt'", "'lte'", "'gte'", "'contains'", "'within'", "','", "'of'", "':'", "'asc'", "'desc'", "'*'", "'{'", "'}'", "'select'", "'where'", "'and'", "'order by'" }; public static final int T__40 = 40; public static final int EXPONENT = 6; public static final int T__29 = 29; public static final int T__28 = 28; public static final int T__27 = 27; public static final int T__26 = 26; public static final int UUID = 12; public static final int T__25 = 25; public static final int T__24 = 24; public static final int T__23 = 23; public static final int T__22 = 22; public static final int T__21 = 21; public static final int UNICODE_ESC = 13; public static final int T__20 = 20; public static final int OCTAL_ESC = 14; public static final int HEX_DIGIT = 11; public static final int FLOAT = 7; public static final int INT = 5; public static final int ID = 4; public static final int EOF = -1; public static final int T__19 = 19; public static final int T__30 = 30; public static final int T__31 = 31; public static final int T__32 = 32; public static final int WS = 15; public static final int BOOLEAN = 10; public static final int ESC_SEQ = 8; public static final int T__33 = 33; public static final int T__16 = 16; public static final int T__34 = 34; public static final int T__35 = 35; public static final int T__18 = 18; public static final int T__36 = 36; public static final int T__17 = 17; public static final int T__37 = 37; public static final int T__38 = 38; public static final int T__39 = 39; public static final int STRING = 9; // delegates // delegators public QueryFilterParser( TokenStream input ) { this( input, new RecognizerSharedState() ); } public QueryFilterParser( TokenStream input, RecognizerSharedState state ) { super( input, state ); } public String[] getTokenNames() { return QueryFilterParser.tokenNames; } public String getGrammarFileName() { return "org/usergrid/persistence/query/QueryFilter.g"; } Query query = new Query(); private static final Logger logger = LoggerFactory.getLogger( QueryFilterLexer.class ); @Override public void emitErrorMessage( String msg ) { logger.info( msg ); } public static class property_return extends ParserRuleReturnScope {} // $ANTLR start "property" // org/usergrid/persistence/query/QueryFilter.g:101:1: property : ( ID ) ; public final QueryFilterParser.property_return property() throws RecognitionException { QueryFilterParser.property_return retval = new QueryFilterParser.property_return(); retval.start = input.LT( 1 ); try { // org/usergrid/persistence/query/QueryFilter.g:102:2: ( ( ID ) ) // org/usergrid/persistence/query/QueryFilter.g:102:5: ( ID ) { // org/usergrid/persistence/query/QueryFilter.g:102:5: ( ID ) // org/usergrid/persistence/query/QueryFilter.g:102:6: ID { match( input, ID, FOLLOW_ID_in_property597 ); } } retval.stop = input.LT( -1 ); } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return retval; } // $ANTLR end "property" public static class operator_return extends ParserRuleReturnScope {} // $ANTLR start "operator" // org/usergrid/persistence/query/QueryFilter.g:104:1: operator : ( '<' | '<=' | '=' | '>' | '>=' | 'in' | 'eq' | // 'lt' | 'gt' | 'lte' | 'gte' | 'contains' | 'within' ) ; public final QueryFilterParser.operator_return operator() throws RecognitionException { QueryFilterParser.operator_return retval = new QueryFilterParser.operator_return(); retval.start = input.LT( 1 ); try { // org/usergrid/persistence/query/QueryFilter.g:105:2: ( ( '<' | '<=' | '=' | '>' | '>=' | 'in' | 'eq' | // 'lt' | 'gt' | 'lte' | 'gte' | 'contains' | 'within' ) ) // org/usergrid/persistence/query/QueryFilter.g:105:4: ( '<' | '<=' | '=' | '>' | '>=' | 'in' | 'eq' | // 'lt' | 'gt' | 'lte' | 'gte' | 'contains' | 'within' ) { if ( ( input.LA( 1 ) >= 16 && input.LA( 1 ) <= 28 ) ) { input.consume(); state.errorRecovery = false; } else { MismatchedSetException mse = new MismatchedSetException( null, input ); throw mse; } } retval.stop = input.LT( -1 ); } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return retval; } // $ANTLR end "operator" public static class value_return extends ParserRuleReturnScope {} // $ANTLR start "value" // org/usergrid/persistence/query/QueryFilter.g:107:1: value : ( BOOLEAN | STRING | INT | FLOAT | UUID ) ; public final QueryFilterParser.value_return value() throws RecognitionException { QueryFilterParser.value_return retval = new QueryFilterParser.value_return(); retval.start = input.LT( 1 ); try { // org/usergrid/persistence/query/QueryFilter.g:107:8: ( ( BOOLEAN | STRING | INT | FLOAT | UUID ) ) // org/usergrid/persistence/query/QueryFilter.g:107:10: ( BOOLEAN | STRING | INT | FLOAT | UUID ) { if ( input.LA( 1 ) == INT || input.LA( 1 ) == FLOAT || ( input.LA( 1 ) >= STRING && input.LA( 1 ) <= BOOLEAN ) || input.LA( 1 ) == UUID ) { input.consume(); state.errorRecovery = false; } else { MismatchedSetException mse = new MismatchedSetException( null, input ); throw mse; } } retval.stop = input.LT( -1 ); } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return retval; } // $ANTLR end "value" public static class second_value_return extends ParserRuleReturnScope {} // $ANTLR start "second_value" // org/usergrid/persistence/query/QueryFilter.g:109:1: second_value : ( BOOLEAN | STRING | INT | FLOAT | UUID ) ; public final QueryFilterParser.second_value_return second_value() throws RecognitionException { QueryFilterParser.second_value_return retval = new QueryFilterParser.second_value_return(); retval.start = input.LT( 1 ); try { // org/usergrid/persistence/query/QueryFilter.g:109:15: ( ( BOOLEAN | STRING | INT | FLOAT | UUID ) ) // org/usergrid/persistence/query/QueryFilter.g:109:17: ( BOOLEAN | STRING | INT | FLOAT | UUID ) { if ( input.LA( 1 ) == INT || input.LA( 1 ) == FLOAT || ( input.LA( 1 ) >= STRING && input.LA( 1 ) <= BOOLEAN ) || input.LA( 1 ) == UUID ) { input.consume(); state.errorRecovery = false; } else { MismatchedSetException mse = new MismatchedSetException( null, input ); throw mse; } } retval.stop = input.LT( -1 ); } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return retval; } // $ANTLR end "second_value" public static class third_value_return extends ParserRuleReturnScope {} // $ANTLR start "third_value" // org/usergrid/persistence/query/QueryFilter.g:111:1: third_value : ( BOOLEAN | STRING | INT | FLOAT | UUID ) ; public final QueryFilterParser.third_value_return third_value() throws RecognitionException { QueryFilterParser.third_value_return retval = new QueryFilterParser.third_value_return(); retval.start = input.LT( 1 ); try { // org/usergrid/persistence/query/QueryFilter.g:111:14: ( ( BOOLEAN | STRING | INT | FLOAT | UUID ) ) // org/usergrid/persistence/query/QueryFilter.g:111:16: ( BOOLEAN | STRING | INT | FLOAT | UUID ) { if ( input.LA( 1 ) == INT || input.LA( 1 ) == FLOAT || ( input.LA( 1 ) >= STRING && input.LA( 1 ) <= BOOLEAN ) || input.LA( 1 ) == UUID ) { input.consume(); state.errorRecovery = false; } else { MismatchedSetException mse = new MismatchedSetException( null, input ); throw mse; } } retval.stop = input.LT( -1 ); } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return retval; } // $ANTLR end "third_value" // $ANTLR start "filter" // org/usergrid/persistence/query/QueryFilter.g:113:1: filter returns [FilterPredicate filter] : property // operator value ( ( ',' | 'of' ) second_value ( ',' third_value )? )? EOF ; public final FilterPredicate filter() throws RecognitionException { FilterPredicate filter = null; QueryFilterParser.property_return property1 = null; QueryFilterParser.operator_return operator2 = null; QueryFilterParser.value_return value3 = null; QueryFilterParser.second_value_return second_value4 = null; QueryFilterParser.third_value_return third_value5 = null; try { // org/usergrid/persistence/query/QueryFilter.g:114:5: ( property operator value ( ( ', // ' | 'of' ) second_value ( ',' third_value )? )? EOF ) // org/usergrid/persistence/query/QueryFilter.g:114:9: property operator value ( ( ', // ' | 'of' ) second_value ( ',' third_value )? )? EOF { pushFollow( FOLLOW_property_in_filter759 ); property1 = property(); state._fsp--; pushFollow( FOLLOW_operator_in_filter761 ); operator2 = operator(); state._fsp--; pushFollow( FOLLOW_value_in_filter763 ); value3 = value(); state._fsp--; // org/usergrid/persistence/query/QueryFilter.g:114:33: ( ( ',' | 'of' ) second_value ( ', // ' third_value )? )? int alt2 = 2; int LA2_0 = input.LA( 1 ); if ( ( ( LA2_0 >= 29 && LA2_0 <= 30 ) ) ) { alt2 = 1; } switch ( alt2 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:114:34: ( ',' | 'of' ) second_value ( ', // ' third_value )? { if ( ( input.LA( 1 ) >= 29 && input.LA( 1 ) <= 30 ) ) { input.consume(); state.errorRecovery = false; } else { MismatchedSetException mse = new MismatchedSetException( null, input ); throw mse; } pushFollow( FOLLOW_second_value_in_filter774 ); second_value4 = second_value(); state._fsp--; // org/usergrid/persistence/query/QueryFilter.g:114:60: ( ',' third_value )? int alt1 = 2; int LA1_0 = input.LA( 1 ); if ( ( LA1_0 == 29 ) ) { alt1 = 1; } switch ( alt1 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:114:62: ',' third_value { match( input, 29, FOLLOW_29_in_filter778 ); pushFollow( FOLLOW_third_value_in_filter780 ); third_value5 = third_value(); state._fsp--; } break; } } break; } String property = ( property1 != null ? input.toString( property1.start, property1.stop ) : null ); String operator = ( operator2 != null ? input.toString( operator2.start, operator2.stop ) : null ); String value = ( value3 != null ? input.toString( value3.start, value3.stop ) : null ); String second_value = ( second_value4 != null ? input.toString( second_value4.start, second_value4.stop ) : null ); String third_value = ( third_value5 != null ? input.toString( third_value5.start, third_value5.stop ) : null ); filter = new FilterPredicate( property, operator, value, second_value, third_value ); //System.out.println("Parsed query filter: " + property + " " + operator + " " + value + " " + // second_value); match( input, EOF, FOLLOW_EOF_in_filter789 ); } } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return filter; } // $ANTLR end "filter" public static class select_subject_return extends ParserRuleReturnScope {} // $ANTLR start "select_subject" // org/usergrid/persistence/query/QueryFilter.g:127:1: select_subject : ID ; public final QueryFilterParser.select_subject_return select_subject() throws RecognitionException { QueryFilterParser.select_subject_return retval = new QueryFilterParser.select_subject_return(); retval.start = input.LT( 1 ); try { // org/usergrid/persistence/query/QueryFilter.g:128:2: ( ID ) // org/usergrid/persistence/query/QueryFilter.g:128:4: ID { match( input, ID, FOLLOW_ID_in_select_subject800 ); query.addSelect( input.toString( retval.start, input.LT( -1 ) ) ); } retval.stop = input.LT( -1 ); } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return retval; } // $ANTLR end "select_subject" public static class select_assign_target_return extends ParserRuleReturnScope {} // $ANTLR start "select_assign_target" // org/usergrid/persistence/query/QueryFilter.g:134:1: select_assign_target : ID ; public final QueryFilterParser.select_assign_target_return select_assign_target() throws RecognitionException { QueryFilterParser.select_assign_target_return retval = new QueryFilterParser.select_assign_target_return(); retval.start = input.LT( 1 ); try { // org/usergrid/persistence/query/QueryFilter.g:135:2: ( ID ) // org/usergrid/persistence/query/QueryFilter.g:135:4: ID { match( input, ID, FOLLOW_ID_in_select_assign_target812 ); } retval.stop = input.LT( -1 ); } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return retval; } // $ANTLR end "select_assign_target" public static class select_assign_source_return extends ParserRuleReturnScope {} // $ANTLR start "select_assign_source" // org/usergrid/persistence/query/QueryFilter.g:137:1: select_assign_source : ID ; public final QueryFilterParser.select_assign_source_return select_assign_source() throws RecognitionException { QueryFilterParser.select_assign_source_return retval = new QueryFilterParser.select_assign_source_return(); retval.start = input.LT( 1 ); try { // org/usergrid/persistence/query/QueryFilter.g:138:2: ( ID ) // org/usergrid/persistence/query/QueryFilter.g:138:4: ID { match( input, ID, FOLLOW_ID_in_select_assign_source823 ); } retval.stop = input.LT( -1 ); } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return retval; } // $ANTLR end "select_assign_source" // $ANTLR start "select_assign" // org/usergrid/persistence/query/QueryFilter.g:140:1: select_assign : select_assign_target ':' // select_assign_source ; public final void select_assign() throws RecognitionException { QueryFilterParser.select_assign_source_return select_assign_source6 = null; QueryFilterParser.select_assign_target_return select_assign_target7 = null; try { // org/usergrid/persistence/query/QueryFilter.g:141:2: ( select_assign_target ':' select_assign_source ) // org/usergrid/persistence/query/QueryFilter.g:141:4: select_assign_target ':' select_assign_source { pushFollow( FOLLOW_select_assign_target_in_select_assign836 ); select_assign_target7 = select_assign_target(); state._fsp--; match( input, 31, FOLLOW_31_in_select_assign838 ); pushFollow( FOLLOW_select_assign_source_in_select_assign840 ); select_assign_source6 = select_assign_source(); state._fsp--; query.addSelect( ( select_assign_source6 != null ? input.toString( select_assign_source6.start, select_assign_source6.stop ) : null ), ( select_assign_target7 != null ? input.toString( select_assign_target7.start, select_assign_target7.stop ) : null ) ); } } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return; } // $ANTLR end "select_assign" // $ANTLR start "where" // org/usergrid/persistence/query/QueryFilter.g:148:1: where : ( property operator value ( ( ', // ' | 'of' ) second_value ( ',' third_value )? )? ) ; public final void where() throws RecognitionException { QueryFilterParser.property_return property8 = null; QueryFilterParser.operator_return operator9 = null; QueryFilterParser.value_return value10 = null; QueryFilterParser.second_value_return second_value11 = null; QueryFilterParser.third_value_return third_value12 = null; try { // org/usergrid/persistence/query/QueryFilter.g:149:2: ( ( property operator value ( ( ', // ' | 'of' ) second_value ( ',' third_value )? )? ) ) // org/usergrid/persistence/query/QueryFilter.g:149:4: ( property operator value ( ( ', // ' | 'of' ) second_value ( ',' third_value )? )? ) { // org/usergrid/persistence/query/QueryFilter.g:149:4: ( property operator value ( ( ', // ' | 'of' ) second_value ( ',' third_value )? )? ) // org/usergrid/persistence/query/QueryFilter.g:149:5: property operator value ( ( ', // ' | 'of' ) second_value ( ',' third_value )? )? { pushFollow( FOLLOW_property_in_where855 ); property8 = property(); state._fsp--; pushFollow( FOLLOW_operator_in_where857 ); operator9 = operator(); state._fsp--; pushFollow( FOLLOW_value_in_where859 ); value10 = value(); state._fsp--; // org/usergrid/persistence/query/QueryFilter.g:149:29: ( ( ',' | 'of' ) second_value ( ', // ' third_value )? )? int alt4 = 2; int LA4_0 = input.LA( 1 ); if ( ( ( LA4_0 >= 29 && LA4_0 <= 30 ) ) ) { alt4 = 1; } switch ( alt4 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:149:30: ( ',' | 'of' ) second_value ( ', // ' third_value )? { if ( ( input.LA( 1 ) >= 29 && input.LA( 1 ) <= 30 ) ) { input.consume(); state.errorRecovery = false; } else { MismatchedSetException mse = new MismatchedSetException( null, input ); throw mse; } pushFollow( FOLLOW_second_value_in_where870 ); second_value11 = second_value(); state._fsp--; // org/usergrid/persistence/query/QueryFilter.g:149:56: ( ',' third_value )? int alt3 = 2; int LA3_0 = input.LA( 1 ); if ( ( LA3_0 == 29 ) ) { alt3 = 1; } switch ( alt3 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:149:58: ',' third_value { match( input, 29, FOLLOW_29_in_where874 ); pushFollow( FOLLOW_third_value_in_where876 ); third_value12 = third_value(); state._fsp--; } break; } } break; } String property = ( property8 != null ? input.toString( property8.start, property8.stop ) : null ); String operator = ( operator9 != null ? input.toString( operator9.start, operator9.stop ) : null ); String value = ( value10 != null ? input.toString( value10.start, value10.stop ) : null ); int value_type = ( value10 != null ? ( ( Token ) value10.start ) : null ) != null ? ( value10 != null ? ( ( Token ) value10.start ) : null ).getType() : 0; String second_value = ( second_value11 != null ? input.toString( second_value11.start, second_value11.stop ) : null ); int second_value_type = ( second_value11 != null ? ( ( Token ) second_value11.start ) : null ) != null ? ( second_value11 != null ? ( ( Token ) second_value11.start ) : null ).getType() : 0; String third_value = ( third_value12 != null ? input.toString( third_value12.start, third_value12.stop ) : null ); int third_value_type = ( third_value12 != null ? ( ( Token ) third_value12.start ) : null ) != null ? ( third_value12 != null ? ( ( Token ) third_value12.start ) : null ).getType() : 0; FilterPredicate filter = new FilterPredicate( property, operator, value, value_type, second_value, second_value_type, third_value, third_value_type ); query.addFilter( filter ); //System.out.println("Parsed query filter: " + property + " " + operator + " " + value + " " + // second_value); } } } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return; } // $ANTLR end "where" public static class direction_return extends ParserRuleReturnScope {} // $ANTLR start "direction" // org/usergrid/persistence/query/QueryFilter.g:165:1: direction : ( 'asc' | 'desc' ) ; public final QueryFilterParser.direction_return direction() throws RecognitionException { QueryFilterParser.direction_return retval = new QueryFilterParser.direction_return(); retval.start = input.LT( 1 ); try { // org/usergrid/persistence/query/QueryFilter.g:165:12: ( ( 'asc' | 'desc' ) ) // org/usergrid/persistence/query/QueryFilter.g:165:14: ( 'asc' | 'desc' ) { if ( ( input.LA( 1 ) >= 32 && input.LA( 1 ) <= 33 ) ) { input.consume(); state.errorRecovery = false; } else { MismatchedSetException mse = new MismatchedSetException( null, input ); throw mse; } } retval.stop = input.LT( -1 ); } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return retval; } // $ANTLR end "direction" // $ANTLR start "order" // org/usergrid/persistence/query/QueryFilter.g:167:1: order : ( property ( direction )? ) ; public final void order() throws RecognitionException { QueryFilterParser.property_return property13 = null; QueryFilterParser.direction_return direction14 = null; try { // org/usergrid/persistence/query/QueryFilter.g:168:2: ( ( property ( direction )? ) ) // org/usergrid/persistence/query/QueryFilter.g:168:4: ( property ( direction )? ) { // org/usergrid/persistence/query/QueryFilter.g:168:4: ( property ( direction )? ) // org/usergrid/persistence/query/QueryFilter.g:168:5: property ( direction )? { pushFollow( FOLLOW_property_in_order909 ); property13 = property(); state._fsp--; // org/usergrid/persistence/query/QueryFilter.g:168:14: ( direction )? int alt5 = 2; int LA5_0 = input.LA( 1 ); if ( ( ( LA5_0 >= 32 && LA5_0 <= 33 ) ) ) { alt5 = 1; } switch ( alt5 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:168:14: direction { pushFollow( FOLLOW_direction_in_order911 ); direction14 = direction(); state._fsp--; } break; } } String property = ( property13 != null ? input.toString( property13.start, property13.stop ) : null ); String direction = ( direction14 != null ? input.toString( direction14.start, direction14.stop ) : null ); SortPredicate sort = new SortPredicate( property, direction ); query.addSort( sort ); System.out.println( "Parsed query order: " + property + " " + direction ); } } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return; } // $ANTLR end "order" // $ANTLR start "select_expr" // org/usergrid/persistence/query/QueryFilter.g:178:1: select_expr : ( '*' | select_subject ( ', // ' select_subject )* | '{' select_assign ( ',' select_assign )* '}' ) ; public final void select_expr() throws RecognitionException { try { // org/usergrid/persistence/query/QueryFilter.g:179:2: ( ( '*' | select_subject ( ', // ' select_subject )* | '{' select_assign ( ',' select_assign )* '}' ) ) // org/usergrid/persistence/query/QueryFilter.g:179:4: ( '*' | select_subject ( ', // ' select_subject )* | '{' select_assign ( ',' select_assign )* '}' ) { // org/usergrid/persistence/query/QueryFilter.g:179:4: ( '*' | select_subject ( ', // ' select_subject )* | '{' select_assign ( ',' select_assign )* '}' ) int alt8 = 3; switch ( input.LA( 1 ) ) { case 34: { alt8 = 1; } break; case ID: { alt8 = 2; } break; case 35: { alt8 = 3; } break; default: NoViableAltException nvae = new NoViableAltException( "", 8, 0, input ); throw nvae; } switch ( alt8 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:179:5: '*' { match( input, 34, FOLLOW_34_in_select_expr925 ); } break; case 2: // org/usergrid/persistence/query/QueryFilter.g:179:11: select_subject ( ',' select_subject )* { pushFollow( FOLLOW_select_subject_in_select_expr929 ); select_subject(); state._fsp--; // org/usergrid/persistence/query/QueryFilter.g:179:26: ( ',' select_subject )* loop6: do { int alt6 = 2; int LA6_0 = input.LA( 1 ); if ( ( LA6_0 == 29 ) ) { alt6 = 1; } switch ( alt6 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:179:27: ',' select_subject { match( input, 29, FOLLOW_29_in_select_expr932 ); pushFollow( FOLLOW_select_subject_in_select_expr934 ); select_subject(); state._fsp--; } break; default: break loop6; } } while ( true ); } break; case 3: // org/usergrid/persistence/query/QueryFilter.g:179:51: '{' select_assign ( ', // ' select_assign )* '}' { match( input, 35, FOLLOW_35_in_select_expr941 ); pushFollow( FOLLOW_select_assign_in_select_expr943 ); select_assign(); state._fsp--; // org/usergrid/persistence/query/QueryFilter.g:179:69: ( ',' select_assign )* loop7: do { int alt7 = 2; int LA7_0 = input.LA( 1 ); if ( ( LA7_0 == 29 ) ) { alt7 = 1; } switch ( alt7 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:179:70: ',' select_assign { match( input, 29, FOLLOW_29_in_select_expr946 ); pushFollow( FOLLOW_select_assign_in_select_expr948 ); select_assign(); state._fsp--; } break; default: break loop7; } } while ( true ); match( input, 36, FOLLOW_36_in_select_expr953 ); } break; } } } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return; } // $ANTLR end "select_expr" // $ANTLR start "ql" // org/usergrid/persistence/query/QueryFilter.g:181:1: ql returns [Query q] : 'select' select_expr ( 'where' // where ( 'and' where )* )? ( 'order by' order ( ',' order )* )? ; public final Query ql() throws RecognitionException { Query q = null; try { // org/usergrid/persistence/query/QueryFilter.g:182:2: ( 'select' select_expr ( 'where' where ( 'and' // where )* )? ( 'order by' order ( ',' order )* )? ) // org/usergrid/persistence/query/QueryFilter.g:182:4: 'select' select_expr ( 'where' where ( 'and' where // )* )? ( 'order by' order ( ',' order )* )? { match( input, 37, FOLLOW_37_in_ql970 ); pushFollow( FOLLOW_select_expr_in_ql972 ); select_expr(); state._fsp--; // org/usergrid/persistence/query/QueryFilter.g:182:25: ( 'where' where ( 'and' where )* )? int alt10 = 2; int LA10_0 = input.LA( 1 ); if ( ( LA10_0 == 38 ) ) { alt10 = 1; } switch ( alt10 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:182:26: 'where' where ( 'and' where )* { match( input, 38, FOLLOW_38_in_ql975 ); pushFollow( FOLLOW_where_in_ql977 ); where(); state._fsp--; // org/usergrid/persistence/query/QueryFilter.g:182:40: ( 'and' where )* loop9: do { int alt9 = 2; int LA9_0 = input.LA( 1 ); if ( ( LA9_0 == 39 ) ) { alt9 = 1; } switch ( alt9 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:182:41: 'and' where { match( input, 39, FOLLOW_39_in_ql980 ); pushFollow( FOLLOW_where_in_ql982 ); where(); state._fsp--; } break; default: break loop9; } } while ( true ); } break; } // org/usergrid/persistence/query/QueryFilter.g:182:57: ( 'order by' order ( ',' order )* )? int alt12 = 2; int LA12_0 = input.LA( 1 ); if ( ( LA12_0 == 40 ) ) { alt12 = 1; } switch ( alt12 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:182:58: 'order by' order ( ',' order )* { match( input, 40, FOLLOW_40_in_ql989 ); pushFollow( FOLLOW_order_in_ql991 ); order(); state._fsp--; // org/usergrid/persistence/query/QueryFilter.g:182:75: ( ',' order )* loop11: do { int alt11 = 2; int LA11_0 = input.LA( 1 ); if ( ( LA11_0 == 29 ) ) { alt11 = 1; } switch ( alt11 ) { case 1: // org/usergrid/persistence/query/QueryFilter.g:182:76: ',' order { match( input, 29, FOLLOW_29_in_ql994 ); pushFollow( FOLLOW_order_in_ql996 ); order(); state._fsp--; } break; default: break loop11; } } while ( true ); } break; } q = query; } } catch ( RecognitionException re ) { reportError( re ); recover( input, re ); } finally { } return q; } // $ANTLR end "ql" // Delegated rules public static final BitSet FOLLOW_ID_in_property597 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_set_in_operator609 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_set_in_value668 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_set_in_second_value695 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_set_in_third_value722 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_property_in_filter759 = new BitSet( new long[] { 0x000000001FFF0000L } ); public static final BitSet FOLLOW_operator_in_filter761 = new BitSet( new long[] { 0x00000000000016A0L } ); public static final BitSet FOLLOW_value_in_filter763 = new BitSet( new long[] { 0x0000000060000000L } ); public static final BitSet FOLLOW_set_in_filter766 = new BitSet( new long[] { 0x00000000000016A0L } ); public static final BitSet FOLLOW_second_value_in_filter774 = new BitSet( new long[] { 0x0000000020000000L } ); public static final BitSet FOLLOW_29_in_filter778 = new BitSet( new long[] { 0x00000000000016A0L } ); public static final BitSet FOLLOW_third_value_in_filter780 = new BitSet( new long[] { 0x0000000000000000L } ); public static final BitSet FOLLOW_EOF_in_filter789 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_ID_in_select_subject800 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_ID_in_select_assign_target812 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_ID_in_select_assign_source823 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_select_assign_target_in_select_assign836 = new BitSet( new long[] { 0x0000000080000000L } ); public static final BitSet FOLLOW_31_in_select_assign838 = new BitSet( new long[] { 0x0000000000000010L } ); public static final BitSet FOLLOW_select_assign_source_in_select_assign840 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_property_in_where855 = new BitSet( new long[] { 0x000000001FFF0000L } ); public static final BitSet FOLLOW_operator_in_where857 = new BitSet( new long[] { 0x00000000000016A0L } ); public static final BitSet FOLLOW_value_in_where859 = new BitSet( new long[] { 0x0000000060000002L } ); public static final BitSet FOLLOW_set_in_where862 = new BitSet( new long[] { 0x00000000000016A0L } ); public static final BitSet FOLLOW_second_value_in_where870 = new BitSet( new long[] { 0x0000000020000002L } ); public static final BitSet FOLLOW_29_in_where874 = new BitSet( new long[] { 0x00000000000016A0L } ); public static final BitSet FOLLOW_third_value_in_where876 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_set_in_direction893 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_property_in_order909 = new BitSet( new long[] { 0x0000000300000002L } ); public static final BitSet FOLLOW_direction_in_order911 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_34_in_select_expr925 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_select_subject_in_select_expr929 = new BitSet( new long[] { 0x0000000020000002L } ); public static final BitSet FOLLOW_29_in_select_expr932 = new BitSet( new long[] { 0x0000000000000010L } ); public static final BitSet FOLLOW_select_subject_in_select_expr934 = new BitSet( new long[] { 0x0000000020000002L } ); public static final BitSet FOLLOW_35_in_select_expr941 = new BitSet( new long[] { 0x0000000000000010L } ); public static final BitSet FOLLOW_select_assign_in_select_expr943 = new BitSet( new long[] { 0x0000001020000000L } ); public static final BitSet FOLLOW_29_in_select_expr946 = new BitSet( new long[] { 0x0000000000000010L } ); public static final BitSet FOLLOW_select_assign_in_select_expr948 = new BitSet( new long[] { 0x0000001020000000L } ); public static final BitSet FOLLOW_36_in_select_expr953 = new BitSet( new long[] { 0x0000000000000002L } ); public static final BitSet FOLLOW_37_in_ql970 = new BitSet( new long[] { 0x0000000C00000010L } ); public static final BitSet FOLLOW_select_expr_in_ql972 = new BitSet( new long[] { 0x0000014000000002L } ); public static final BitSet FOLLOW_38_in_ql975 = new BitSet( new long[] { 0x0000000000000010L } ); public static final BitSet FOLLOW_where_in_ql977 = new BitSet( new long[] { 0x0000018000000002L } ); public static final BitSet FOLLOW_39_in_ql980 = new BitSet( new long[] { 0x0000000000000010L } ); public static final BitSet FOLLOW_where_in_ql982 = new BitSet( new long[] { 0x0000018000000002L } ); public static final BitSet FOLLOW_40_in_ql989 = new BitSet( new long[] { 0x0000000000000010L } ); public static final BitSet FOLLOW_order_in_ql991 = new BitSet( new long[] { 0x0000000020000002L } ); public static final BitSet FOLLOW_29_in_ql994 = new BitSet( new long[] { 0x0000000000000010L } ); public static final BitSet FOLLOW_order_in_ql996 = new BitSet( new long[] { 0x0000000020000002L } ); }