use of datawave.query.config.ShardQueryConfiguration in project datawave by NationalSecurityAgency.
the class WhindexVisitorTest method reverseOneToManyIntersectsTest.
@Test
public void reverseOneToManyIntersectsTest() throws ParseException {
String query = "(TOPPINGS == 'HOT_FUDGE' || TOPPINGS == 'BANANA') && geowave:intersects(ICE_CREAM, 'POLYGON((-10 -10, 10 -10, 10 10, -10 10, -10 -10))')";
ShardQueryConfiguration config = new ShardQueryConfiguration();
config.setWhindexMappingFields(mappingFields);
config.setWhindexFieldMappings(multipleFieldMapping);
ASTJexlScript jexlScript = JexlASTHelper.parseJexlQuery(query);
jexlScript = WhindexVisitor.apply(jexlScript, config, new Date(), metadataHelper);
Assert.assertEquals("geowave:intersects(HOT_FUDGE_SUNDAE, 'POLYGON((-10 -10, 10 -10, 10 10, -10 10, -10 -10))') || geowave:intersects(BANANA_SPLIT, 'POLYGON((-10 -10, 10 -10, 10 10, -10 10, -10 -10))')", JexlStringBuildingVisitor.buildQuery(jexlScript));
}
use of datawave.query.config.ShardQueryConfiguration in project datawave by NationalSecurityAgency.
the class WhindexVisitorTest method reverseManyToManyMultipleIntersectsTest.
@Test
public void reverseManyToManyMultipleIntersectsTest() throws ParseException {
String query = "(TOPPINGS == 'HOT_FUDGE' || TOPPINGS == 'BANANA') && TOPPINGS == 'PEANUT' && geowave:intersects((ICE_CREAM || SHERBERT), 'POLYGON((-10 -10, 10 -10, 10 10, -10 10, -10 -10))')";
ShardQueryConfiguration config = new ShardQueryConfiguration();
config.setWhindexMappingFields(mappingFields);
config.setWhindexFieldMappings(multipleFieldMapping);
ASTJexlScript jexlScript = JexlASTHelper.parseJexlQuery(query);
jexlScript = WhindexVisitor.apply(jexlScript, config, new Date(), metadataHelper);
Assert.assertEquals("(TOPPINGS == 'PEANUT' && ((TOPPINGS == 'HOT_FUDGE' && geowave:intersects(SHERBERT, 'POLYGON((-10 -10, 10 -10, 10 10, -10 10, -10 -10))')) || geowave:intersects(HOT_FUDGE_SUNDAE, 'POLYGON((-10 -10, 10 -10, 10 10, -10 10, -10 -10))'))) || (TOPPINGS == 'PEANUT' && ((TOPPINGS == 'BANANA' && geowave:intersects(SHERBERT, 'POLYGON((-10 -10, 10 -10, 10 10, -10 10, -10 -10))')) || geowave:intersects(BANANA_SPLIT, 'POLYGON((-10 -10, 10 -10, 10 10, -10 10, -10 -10))')))", JexlStringBuildingVisitor.buildQuery(jexlScript));
}
use of datawave.query.config.ShardQueryConfiguration in project datawave by NationalSecurityAgency.
the class VisitorFunctionTest method setup.
@Before
public void setup() {
config = new ShardQueryConfiguration();
helper = createMock(MetadataHelper.class);
}
use of datawave.query.config.ShardQueryConfiguration in project datawave by NationalSecurityAgency.
the class ExecutableExpansionVisitorTest method testSingleOrNonExecutableCantFix.
@Test
public void testSingleOrNonExecutableCantFix() throws Exception {
ASTJexlScript queryTree = JexlASTHelper.parseJexlQuery("BIRTH_DATE =='123' && (filter:includeRegex(QUOTE, '.*kind.*') || BIRTH_DATE == '234')");
// grab the reference to the QUOTE=='kind' eqnode
JexlNode quoteNode = queryTree.jjtGetChild(0).jjtGetChild(1).jjtGetChild(0).jjtGetChild(0).jjtGetChild(0);
ASTOrNode newOr = new ASTOrNode(ParserTreeConstants.JJTORNODE);
newOr.jjtAddChild(quoteNode, 0);
quoteNode.jjtSetParent(newOr);
// attach the new or node
queryTree.jjtGetChild(0).jjtGetChild(1).jjtGetChild(0).jjtAddChild(newOr, 0);
newOr.jjtSetParent(queryTree.jjtGetChild(0).jjtGetChild(1).jjtGetChild(0));
ShardQueryConfiguration config = EasyMock.createMock(ShardQueryConfiguration.class);
MetadataHelper helper = EasyMock.createMock(MetadataHelper.class);
HashSet<String> indexedFields = new HashSet<>();
indexedFields.add("UUID");
indexedFields.add("QUOTE");
EasyMock.expect(config.getIndexedFields()).andReturn(indexedFields).anyTimes();
EasyMock.replay(config, helper);
ASTJexlScript newTree = ExecutableExpansionVisitor.expand(queryTree, config, helper);
EasyMock.verify(config, helper);
// starts executable
Assert.assertFalse(ExecutableDeterminationVisitor.isExecutable(queryTree, config, helper));
// what came out is executable
Assert.assertFalse(ExecutableDeterminationVisitor.isExecutable(newTree, config, helper));
// the visitor changed nothing
Assert.assertTrue(JexlStringBuildingVisitor.buildQuery(newTree), JexlStringBuildingVisitor.buildQuery(newTree).equals(JexlStringBuildingVisitor.buildQuery(queryTree)));
}
use of datawave.query.config.ShardQueryConfiguration in project datawave by NationalSecurityAgency.
the class ExecutableExpansionVisitorTest method testExceededThresholdExpansionExternal.
@Test
public void testExceededThresholdExpansionExternal() throws Exception {
ASTJexlScript queryTree = JexlASTHelper.parseJexlQuery("UUID == 'capone' && (filter:includeRegex(QUOTE,'.*kind.*') || QUOTE == 'kind' || BIRTH_DATE == '123')");
// update the generated queryTree to have an ExceededThreshold marker
JexlNode child = new ExceededValueThresholdMarkerJexlNode(queryTree.jjtGetChild(0).jjtGetChild(0));
// unlink the old node
queryTree.jjtGetChild(0).jjtGetChild(0).jjtSetParent(null);
// overwrite the old UUID==capone with the ExceededThreshold marker
queryTree.jjtGetChild(0).jjtAddChild(child, 0);
ShardQueryConfiguration config = EasyMock.createMock(ShardQueryConfiguration.class);
MetadataHelper helper = EasyMock.createMock(MetadataHelper.class);
HashSet<String> indexedFields = new HashSet<>();
indexedFields.add("UUID");
indexedFields.add("QUOTE");
EasyMock.expect(config.getIndexedFields()).andReturn(indexedFields).anyTimes();
EasyMock.replay(config, helper);
ASTJexlScript newTree = ExecutableExpansionVisitor.expand(queryTree, config, helper);
EasyMock.verify(config, helper);
// included ExceededValueThresholdMarker before
Assert.assertTrue(JexlStringBuildingVisitor.buildQuery(queryTree), JexlStringBuildingVisitor.buildQuery(queryTree).equals("((_Value_ = true) && (UUID == 'capone')) && (filter:includeRegex(QUOTE, '.*kind.*') || QUOTE == 'kind' || BIRTH_DATE == '123')"));
// not executable
Assert.assertFalse(ExecutableDeterminationVisitor.isExecutable(queryTree, config, helper));
// what came out is executable
Assert.assertTrue(ExecutableDeterminationVisitor.isExecutable(newTree, config, helper));
// it looks like what we'd expect
String expected = "(QUOTE == 'kind' && ((_Value_ = true) && (UUID == 'capone'))) || " + "((filter:includeRegex(QUOTE, '.*kind.*') || BIRTH_DATE == '123') && ((_Value_ = true) && (UUID == 'capone')))";
Assert.assertEquals(expected, JexlStringBuildingVisitor.buildQueryWithoutParse(newTree));
}
Aggregations