blob: bd96436593e216c6b6b5985a3bab0eec35c66a3a [file] [log] [blame]
package org.apache.rya.api.query.strategy;
/*
* 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.
*/
import static org.apache.rya.api.RdfCloudTripleStoreConstants.TABLE_LAYOUT.OSP;
import static org.apache.rya.api.RdfCloudTripleStoreConstants.TABLE_LAYOUT.PO;
import static org.apache.rya.api.RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.rya.api.RdfCloudTripleStoreConfiguration;
import org.apache.rya.api.RdfCloudTripleStoreConstants;
import org.apache.rya.api.domain.RyaStatement;
import org.apache.rya.api.domain.RyaType;
import org.apache.rya.api.domain.RyaURI;
import org.apache.rya.api.query.strategy.wholerow.OspWholeRowTriplePatternStrategy;
import org.apache.rya.api.query.strategy.wholerow.PoWholeRowTriplePatternStrategy;
import org.apache.rya.api.query.strategy.wholerow.SpoWholeRowTriplePatternStrategy;
import org.apache.rya.api.resolver.RyaContext;
import org.apache.rya.api.resolver.RyaTripleContext;
import org.apache.rya.api.resolver.triple.TripleRow;
import org.apache.rya.api.resolver.triple.TripleRowRegex;
import org.apache.rya.api.resolver.triple.impl.WholeRowTripleResolver;
import org.eclipse.rdf4j.model.vocabulary.XMLSchema;
import junit.framework.TestCase;
/**
* Date: 7/25/12
* Time: 11:41 AM
*/
public class AbstractTriplePatternStrategyTest extends TestCase {
public class MockRdfConfiguration extends RdfCloudTripleStoreConfiguration {
@Override
public RdfCloudTripleStoreConfiguration clone() {
return new MockRdfConfiguration();
}
}
public void testRegex() throws Exception {
RyaURI subj = new RyaURI("urn:test#1234");
RyaURI pred = new RyaURI("urn:test#pred");
RyaURI obj = new RyaURI("urn:test#obj");
RyaStatement ryaStatement = new RyaStatement(subj, pred, obj);
Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = new WholeRowTripleResolver().serialize(ryaStatement);
TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO);
String row = new String(tripleRow.getRow());
TriplePatternStrategy spoStrategy = new SpoWholeRowTriplePatternStrategy();
TriplePatternStrategy poStrategy = new PoWholeRowTriplePatternStrategy();
TriplePatternStrategy ospStrategy = new OspWholeRowTriplePatternStrategy();
//pred
TripleRowRegex tripleRowRegex = spoStrategy.buildRegex(null, pred.getData(), null, null, null);
Pattern p = Pattern.compile(tripleRowRegex.getRow());
Matcher matcher = p.matcher(row);
assertTrue(matcher.matches());
//subj
tripleRowRegex = spoStrategy.buildRegex(subj.getData(), null, null, null, null);
p = Pattern.compile(tripleRowRegex.getRow());
matcher = p.matcher(row);
assertTrue(matcher.matches());
//obj
tripleRowRegex = spoStrategy.buildRegex(null, null, obj.getData(), null, null);
p = Pattern.compile(tripleRowRegex.getRow());
matcher = p.matcher(row);
assertTrue(matcher.matches());
//po table
row = new String(serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.PO).getRow());
tripleRowRegex = poStrategy.buildRegex(null, pred.getData(), null, null, null);
p = Pattern.compile(tripleRowRegex.getRow());
matcher = p.matcher(row);
assertTrue(matcher.matches());
tripleRowRegex = poStrategy.buildRegex(null, pred.getData(), obj.getData(), null, null);
p = Pattern.compile(tripleRowRegex.getRow());
matcher = p.matcher(row);
assertTrue(matcher.matches());
tripleRowRegex = poStrategy.buildRegex(subj.getData(), pred.getData(), obj.getData(), null, null);
p = Pattern.compile(tripleRowRegex.getRow());
matcher = p.matcher(row);
assertTrue(matcher.matches());
//various regex
tripleRowRegex = poStrategy.buildRegex(null, "urn:test#pr[e|d]{2}", null, null, null);
p = Pattern.compile(tripleRowRegex.getRow());
matcher = p.matcher(row);
assertTrue(matcher.matches());
//does not match
tripleRowRegex = poStrategy.buildRegex(null, "hello", null, null, null);
p = Pattern.compile(tripleRowRegex.getRow());
matcher = p.matcher(row);
assertFalse(matcher.matches());
}
public void testObjectTypeInfo() throws Exception {
RyaURI subj = new RyaURI("urn:test#1234");
RyaURI pred = new RyaURI("urn:test#pred");
RyaType obj = new RyaType(XMLSchema.LONG, "10");
RyaStatement ryaStatement = new RyaStatement(subj, pred, obj);
Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = RyaTripleContext.getInstance(new MockRdfConfiguration()).serializeTriple(ryaStatement);
TripleRow tripleRow = serialize.get(SPO);
String row = new String(tripleRow.getRow());
TriplePatternStrategy spoStrategy = new SpoWholeRowTriplePatternStrategy();
//obj
byte[][] bytes = RyaContext.getInstance().serializeType(obj);
String objStr = new String(bytes[0]);
byte[] objectTypeInfo = bytes[1];
TripleRowRegex tripleRowRegex = spoStrategy.buildRegex(null, null,
objStr
, null, objectTypeInfo);
Pattern p = Pattern.compile(tripleRowRegex.getRow());
Matcher matcher = p.matcher(row);
assertTrue(matcher.matches());
//build row with same object str data
Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> dupTriple_str = RyaTripleContext.getInstance(new MockRdfConfiguration()).serializeTriple(
new RyaStatement(subj, pred, new RyaType(XMLSchema.STRING, objStr))
);
TripleRow tripleRow_dup_str = dupTriple_str.get(SPO);
row = new String(tripleRow_dup_str.getRow());
spoStrategy = new SpoWholeRowTriplePatternStrategy();
tripleRowRegex = spoStrategy.buildRegex(null, null,
objStr
, null, objectTypeInfo);
p = Pattern.compile(tripleRowRegex.getRow());
matcher = p.matcher(row);
assertFalse(matcher.matches());
//po table
TriplePatternStrategy poStrategy = new PoWholeRowTriplePatternStrategy();
tripleRowRegex = poStrategy.buildRegex(null, null,
objStr
, null, objectTypeInfo);
p = Pattern.compile(tripleRowRegex.getRow());
String po_row = new String(serialize.get(PO).getRow());
matcher = p.matcher(po_row);
assertTrue(matcher.matches());
tripleRowRegex = poStrategy.buildRegex(null, null,
objStr
, null, objectTypeInfo);
p = Pattern.compile(tripleRowRegex.getRow());
matcher = p.matcher(new String(dupTriple_str.get(PO).getRow()));
assertFalse(matcher.matches());
//osp table
TriplePatternStrategy ospStrategy = new OspWholeRowTriplePatternStrategy();
tripleRowRegex = ospStrategy.buildRegex(null, null,
objStr
, null, objectTypeInfo);
p = Pattern.compile(tripleRowRegex.getRow());
String osp_row = new String(serialize.get(OSP).getRow());
matcher = p.matcher(osp_row);
assertTrue(matcher.matches());
tripleRowRegex = ospStrategy.buildRegex(null, null,
objStr
, null, objectTypeInfo);
p = Pattern.compile(tripleRowRegex.getRow());
matcher = p.matcher(new String(dupTriple_str.get(OSP).getRow()));
assertFalse(matcher.matches());
}
}