/** * Perform our visit of the query once for efficiency */ private QueryVisitor visitParsedQuery( final ParsedQuery parsedQuery ) { QueryVisitor v = new EsQueryVistor(); if ( parsedQuery.getRootOperand() != null ) { try { parsedQuery.getRootOperand().visit( v ); } catch ( IndexException ex ) { throw new RuntimeException( "Error building ElasticSearch query", ex ); } } return v; }
int queryPredicatesSize = parsedQuery.getSortPredicates().size(); int queryOperandCount = getTotalChildCount(parsedQuery.getRootOperand()); if(parsedQuery.getSelectFieldMappings().size() < 1 && !parsedQuery.getOriginalQuery().toLowerCase().contains("where") && parsedQuery.getSortPredicates().size() > 0 ){
if (parsedQuery.isDirectQuery() && parsedQuery.getDirectQueryItemCount() > indexFig.directQueryMaxItems()) { throw new TooManyDirectEntitiesException(parsedQuery.getDirectQueryItemCount(), indexFig.directQueryMaxItems()); for (SortPredicate sortPredicate : parsedQuery.getSortPredicates() ){ hasGeoSortPredicates = visitor.getGeoSorts().contains(sortPredicate.getPropertyName()); throw new QueryAnalyzerEnforcementException(violations, parsedQuery.getOriginalQuery()); }else if (violations.size() > 0){ logger.warn( QueryAnalyzer.violationsAsString(violations, parsedQuery.getOriginalQuery()) ); throw new QueryAnalyzerException(violations, parsedQuery.getOriginalQuery(), applicationScope.getApplication().getUuid()); .getBuilder( searchEdge, searchTypes, visitor, limit, offset, parsedQuery.getSortPredicates(), fieldsWithType ) .setTimeout(TimeValue.timeValueMillis(queryTimeout)); throw new QueryReturnException(parsedQuery.getOriginalQuery(), srb.toString(), applicationScope.getApplication().getUuid());
/** * Parse the results and return the candidate results */ private CandidateResults parseResults( final SearchResponse searchResponse, final ParsedQuery query, final int limit, final int from, boolean hasGeoSortPredicates ) { final SearchHits searchHits = searchResponse.getHits(); final SearchHit[] hits = searchHits.getHits(); if (logger.isTraceEnabled()) { logger.trace(" Hit count: {} Total hits: {}", hits.length, searchHits.getTotalHits()); } List<CandidateResult> candidates = new ArrayList<>( hits.length ); for ( SearchHit hit : hits ) { CandidateResult candidateResult; candidateResult = parseIndexDocId( hit, hasGeoSortPredicates ); candidates.add( candidateResult ); } final CandidateResults candidateResults = new CandidateResults( candidates, query.getSelectFieldMappings()); // >= seems odd. However if we get an overflow, we need to account for it. if ( hits.length >= limit ) { candidateResults.initializeOffset( from + limit ); } return candidateResults; }
public PipelineContext( final ApplicationScope applicationScope, final RequestCursor requestCursor, final int limit, final int id, boolean keepStaleEntries, String query ) { this.applicationScope = applicationScope; this.id = id; this.keepStaleEntries = keepStaleEntries; this.query = query; this.parsedQuery = ParsedQueryBuilder.build(query); if (parsedQuery != null && parsedQuery.isDirectQuery()) { // for direct query, use no limit or cursor this.limit = MAX_LIMIT + 1; this.requestCursor = new RequestCursor(Optional.absent()); } else { this.limit = limit; this.requestCursor = requestCursor; } }
@Test public void orderByGrammar() throws QueryParseException { String s = "select * where name = 'bob' order by name asc"; ParsedQuery query = ParsedQueryBuilder.build( s ); assertEquals( 1, query.getSortPredicates().size() ); }
/** * Use this when the user does a "select id:mynewidname " in the select clause of the grammar * @param select * @param output * @return */ public ParsedQuery addSelect( final String select, final String output ) { final String normalizedSelect = getSelect( select ); if ( normalizedSelect == null ) { return this; } final String normalizedOutput = getSelect( output ); if ( normalizedOutput == null ) { return this; } fieldMappings.put( select, new SelectFieldMapping( normalizedSelect, normalizedOutput ) ); return this; }
public final CpQueryFilterParser.select_subject_return select_subject() throws RecognitionException { CpQueryFilterParser.select_subject_return retval = new CpQueryFilterParser.select_subject_return(); retval.start = input.LT(1); Object root_0 = null; Token ID77=null; Object ID77_tree=null; try { // org/apache/usergrid/persistence/index/query/tree/CpQueryFilter.g:350:3: ( ID ) // org/apache/usergrid/persistence/index/query/tree/CpQueryFilter.g:350:5: ID { root_0 = (Object)adaptor.nil(); ID77=(Token)match(input,ID,FOLLOW_ID_in_select_subject1609); ID77_tree = (Object)adaptor.create(ID77); adaptor.addChild(root_0, ID77_tree); parsedQuery.addSelect((ID77!=null?ID77.getText():null)); } retval.stop = input.LT(-1); retval.tree = (Object)adaptor.rulePostProcessing(root_0); adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } finally { // do for sure before leaving } return retval; } // $ANTLR end "select_subject"
public boolean isGeoQuery(){ return getOriginalQuery().contains("location") && getOriginalQuery().contains("within"); }
query.setOriginalQuery( ql ); return query;
parsedQuery.addSort(new SortPredicate(property, direction));
/** * Build CandidateResults from direct query */ private CandidateResults buildCandidateResultsForDirectQuery(final List<Identifier> directIdentifiers, final ParsedQuery query, final SearchTypes searchTypes) { Preconditions.checkArgument(searchTypes.getTypes().length > 0, "Search type required"); String entityType = searchTypes.getTypes()[0]; List<CandidateResult> candidates = new ArrayList<>(directIdentifiers.size()); for (Identifier id : directIdentifiers) { CandidateResult candidateResult = null; if (id.isUUID()) { candidateResult = new CandidateResult(entityType, id.getUUID()); } else if (id.isName()) { candidateResult = new CandidateResult(entityType, id.getName()); } candidates.add(candidateResult); } return new CandidateResults(candidates, query.getSelectFieldMappings(), true); }
String query = pipelineContext.getQuery(); ParsedQuery parsedQuery = pipelineContext.getParsedQuery(); boolean isDirectQuery = parsedQuery == null ? false : parsedQuery.isDirectQuery();
/** * Possiblly add a single select to our results */ public ParsedQuery addSelect( final String select ) { final String normalizedSelect = getSelect( select ); if ( normalizedSelect == null ) { return this; } fieldMappings.put( select, new SelectFieldMapping( normalizedSelect, normalizedSelect ) ); return this; }
parsedQuery.addSelect((target!=null?target.getText():null), (source!=null?source.getText():null));
@Test public void partialGrammar() throws Exception{ String queryString; TokenRewriteStream tokens; ParsedQuery query; CpQueryFilterParser parser; CpQueryFilterLexer lexer; ANTLRStringStream in; Operand root; queryString = "where a gte 5"; in = new ANTLRStringStream( queryString ); lexer = new CpQueryFilterLexer( in ); tokens = new TokenRewriteStream( lexer ); parser = new CpQueryFilterParser( tokens ); query = parser.ql().parsedQuery; root = query.getRootOperand(); queryString = "where name = 'bob'"; in = new ANTLRStringStream( queryString ); lexer = new CpQueryFilterLexer( in ); tokens = new TokenRewriteStream( lexer ); parser = new CpQueryFilterParser( tokens ); query = parser.ql().parsedQuery; root = query.getRootOperand(); }
/** Test basic || expression */ @Test public void selectAll() throws RecognitionException { String queryString = "select * where a = 1 or b > 2"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Collection<SelectFieldMapping> identifiers = query.getSelectFieldMappings(); assertEquals( 0, identifiers.size() ); }
@Test public void uuidParse() throws RecognitionException { String queryString = "select * where title = c6ee8a1c-3ef4-11e2-8861-02e81adcf3d0"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Equal rootNode = ( Equal ) query.getRootOperand(); assertEquals( "title", rootNode.getProperty().getValue() ); assertEquals( UUID.fromString( "c6ee8a1c-3ef4-11e2-8861-02e81adcf3d0" ), ( ( UUIDLiteral ) rootNode.getLiteral() ).getValue() ); }
@Test public void selectRename() throws RecognitionException { String queryString = "select {source:target} where a = 1 or b > 2"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Collection<SelectFieldMapping> identifiers = query.getSelectFieldMappings(); final SelectFieldMapping fieldMapping = identifiers.iterator().next(); assertEquals( "source", fieldMapping.getSourceFieldName() ); assertEquals( "target", fieldMapping.getTargetFieldName() ); }
/** Simple test that constructs and AST from the ANTLR generated files */ @Test public void equality() throws RecognitionException { String queryString = "select * where a = 5"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Operand root = query.getRootOperand(); Equal equal = ( Equal ) root; assertEquals( "a", equal.getProperty().getValue() ); assertEquals( 5, ( ( LongLiteral ) equal.getLiteral() ).getValue().intValue() ); }