MCPcopy Create free account
hub / github.com/Restream/reindexer / parseDWithin

Method parseDWithin

cpp_src/core/query/sql/sqlparser.cc:1334–1396  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1332}
1333
1334void SQLParser::parseDWithin(Tokenizer& parser, OpType nextOp) {
1335 auto tok = parser.NextToken();
1336 if (tok.Text() != "("sv) {
1337 const auto range = parser.Where(tok);
1338 throw SqlParserError(range, "Expected '(', but found '{}', {}", tok.Text(), range);
1339 }
1340
1341 std::ignore = peekSqlToken(parser, GeomFieldSqlToken);
1342 tok = parser.NextToken();
1343
1344 Point point;
1345 std::string field;
1346 if (iequals(tok.Text(), "st_geomfromtext"sv)) {
1347 point = parseGeomFromText(parser);
1348 } else {
1349 field = std::string(tok.Text());
1350 }
1351
1352 tok = parser.NextToken();
1353 if (tok.Text() != ","sv) {
1354 const auto range = parser.Where(tok);
1355 throw SqlParserError(range, "Expected ',', but found '{}', {}", tok.Text(), range);
1356 }
1357
1358 std::ignore = peekSqlToken(parser, GeomFieldSqlToken);
1359 tok = parser.NextToken();
1360 if (iequals(tok.Text(), "st_geomfromtext"sv)) {
1361 if (field.empty()) {
1362 const auto range = parser.Where(tok);
1363 throw SqlParserError(range, "Expected field name, but found '{}', {}", tok.Text(), range);
1364 }
1365 point = parseGeomFromText(parser);
1366 } else {
1367 if (!field.empty()) {
1368 const auto range = parser.Where(tok);
1369 throw SqlParserError(range, "Expected geometry object, but found '{}', {}", tok.Text(), range);
1370 }
1371 field = std::string(tok.Text());
1372 }
1373
1374 tok = parser.NextToken();
1375 if (tok.Text() != ","sv) {
1376 const auto range = parser.Where(tok);
1377 throw SqlParserError(range, "Expected ',', but found '{}', {}", tok.Text(), range);
1378 }
1379
1380 tok = parser.NextToken();
1381 const auto distance = Token2kv(tok, parser, CompositeAllowed_False, FieldAllowed_False, NullAllowed_False);
1382 distance.Type().EvaluateOneOf(
1383 [](concepts::OneOf<KeyValueType::Int, KeyValueType::Int64, KeyValueType::Double, KeyValueType::Float> auto) noexcept {},
1384 [&](concepts::OneOf<KeyValueType::Bool, KeyValueType::String, KeyValueType::Null, KeyValueType::Tuple, KeyValueType::Composite,
1385 KeyValueType::Undefined, KeyValueType::Uuid, KeyValueType::FloatVector> auto) {
1386 const auto range = parser.Where(tok);
1387 throw SqlParserError(range, "Expected number, but found '{}', {}", tok.Text(), range);
1388 });
1389
1390 tok = parser.NextToken();
1391 if (tok.Text() != ")"sv) {

Callers

nothing calls this directly

Calls 11

SqlParserErrorClass · 0.85
iequalsFunction · 0.85
Token2kvFunction · 0.85
EvaluateOneOfMethod · 0.80
NextOpMethod · 0.80
As<double>Method · 0.80
TypeMethod · 0.65
NextTokenMethod · 0.45
WhereMethod · 0.45
emptyMethod · 0.45
DWithinMethod · 0.45

Tested by

no test coverage detected