Mercurial Hosting > luan
comparison src/luan/lib/queryparser/SaneQueryParser.java @ 1362:77f2d091f17f
minor - SaneQueryParser
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 26 May 2019 12:42:08 -0600 |
parents | dc2af9d5463b |
children |
comparison
equal
deleted
inserted
replaced
1361:9eba6bf0163b | 1362:77f2d091f17f |
---|---|
28 public static Sort parseSort(FieldParser fieldParser,String sort) throws ParseException { | 28 public static Sort parseSort(FieldParser fieldParser,String sort) throws ParseException { |
29 return new SaneQueryParser(fieldParser,sort).parseSort(); | 29 return new SaneQueryParser(fieldParser,sort).parseSort(); |
30 } | 30 } |
31 | 31 |
32 | 32 |
33 private static final String NOT_IN_TERM = " \t\r\n\":[]{}^+-()"; | 33 private static final String NOT_IN_RANGE = " \t\r\n\":[]{}^+()"; |
34 private static final String NOT_IN_TERM = NOT_IN_RANGE + "-"; | |
34 private static final String NOT_IN_FIELD = NOT_IN_TERM + ","; | 35 private static final String NOT_IN_FIELD = NOT_IN_TERM + ","; |
35 private final FieldParser fieldParser; | 36 private final FieldParser fieldParser; |
36 private final Parser parser; | 37 private final Parser parser; |
37 | 38 |
38 private SaneQueryParser(FieldParser fieldParser,String query) { | 39 private SaneQueryParser(FieldParser fieldParser,String query) { |
89 Query query = NestedTerm(field); | 90 Query query = NestedTerm(field); |
90 if( query == null ) | 91 if( query == null ) |
91 query = RangeTerm(field); | 92 query = RangeTerm(field); |
92 if( query == null ) { | 93 if( query == null ) { |
93 parser.begin(); | 94 parser.begin(); |
94 String match = SimpleTerm(); | 95 String match = SimpleTerm(NOT_IN_TERM); |
95 query = fieldParser.getQuery(this,field,match); | 96 query = fieldParser.getQuery(this,field,match); |
96 parser.success(); | 97 parser.success(); |
97 } | 98 } |
98 if( parser.match('^') ) { | 99 if( parser.match('^') ) { |
99 Spaces(); | 100 Spaces(); |
143 parser.begin(); | 144 parser.begin(); |
144 if( !parser.anyOf("[{") ) | 145 if( !parser.anyOf("[{") ) |
145 return parser.failure(null); | 146 return parser.failure(null); |
146 boolean includeMin = parser.lastChar() == '['; | 147 boolean includeMin = parser.lastChar() == '['; |
147 Spaces(); | 148 Spaces(); |
148 String minQuery = SimpleTerm(); | 149 String minQuery = SimpleTerm(NOT_IN_RANGE); |
149 TO(); | 150 TO(); |
150 String maxQuery = SimpleTerm(); | 151 String maxQuery = SimpleTerm(NOT_IN_RANGE); |
151 if( !parser.anyOf("]}") ) | 152 if( !parser.anyOf("]}") ) |
152 throw exception("unclosed range"); | 153 throw exception("unclosed range"); |
153 boolean includeMax = parser.lastChar() == ']'; | 154 boolean includeMax = parser.lastChar() == ']'; |
154 Spaces(); | 155 Spaces(); |
155 Query query = fieldParser.getRangeQuery(this,field,minQuery,maxQuery,includeMin,includeMax); | 156 Query query = fieldParser.getRangeQuery(this,field,minQuery,maxQuery,includeMin,includeMax); |
162 throw exception("'TO' expected"); | 163 throw exception("'TO' expected"); |
163 Spaces(); | 164 Spaces(); |
164 parser.success(); | 165 parser.success(); |
165 } | 166 } |
166 | 167 |
167 private String SimpleTerm() throws ParseException { | 168 private String SimpleTerm(String exclude) throws ParseException { |
168 parser.begin(); | 169 parser.begin(); |
169 String match; | 170 String match; |
170 if( parser.match('"') ) { | 171 if( parser.match('"') ) { |
171 int start = parser.currentIndex() - 1; | 172 int start = parser.currentIndex() - 1; |
172 while( !parser.match('"') ) { | 173 while( !parser.match('"') ) { |
176 checkEscape(); | 177 checkEscape(); |
177 } | 178 } |
178 match = parser.textFrom(start); | 179 match = parser.textFrom(start); |
179 Spaces(); | 180 Spaces(); |
180 } else { | 181 } else { |
181 match = Unquoted(NOT_IN_TERM); | 182 match = Unquoted(exclude); |
182 } | 183 } |
183 if( match.length() == 0 ) | 184 if( match.length() == 0 ) |
184 throw exception("invalid input"); | 185 throw exception("invalid input"); |
185 return parser.success(match); | 186 return parser.success(match); |
186 } | 187 } |