| /* |
| * 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. |
| */ |
| |
| //package org.apache.rya.accumulo; |
| |
| // |
| //import com.google.common.io.ByteArrayDataOutput; |
| //import com.google.common.io.ByteStreams; |
| //import org.apache.rya.api.RdfCloudTripleStoreUtils; |
| //import org.apache.rya.api.domain.RangeValue; |
| //import org.apache.accumulo.core.data.Range; |
| //import org.apache.hadoop.io.Text; |
| //import org.eclipse.rdf4j.model.Value; |
| //import org.eclipse.rdf4j.model.ValueFactory; |
| //import org.eclipse.rdf4j.model.impl.ValueFactoryImpl; |
| // |
| //import java.io.IOException; |
| //import java.util.Map; |
| // |
| //import static org.apache.rya.api.RdfCloudTripleStoreConstants.*; |
| //import static org.apache.rya.api.RdfCloudTripleStoreUtils.CustomEntry; |
| // |
| ///** |
| // * Class DefineTripleQueryRangeFactory |
| // * Date: Jun 2, 2011 |
| // * Time: 10:35:43 AM |
| // */ |
| //public class DefineTripleQueryRangeFactory { |
| // |
| // ValueFactory vf = ValueFactoryImpl.getInstance(); |
| // |
| // protected void fillRange(ByteArrayDataOutput startRowOut, ByteArrayDataOutput endRowOut, Value val, boolean empty) |
| // throws IOException { |
| // if(!empty) { |
| // startRowOut.write(DELIM_BYTES); |
| // endRowOut.write(DELIM_BYTES); |
| // } |
| // //null check? |
| // if(val instanceof RangeValue) { |
| // RangeValue rangeValue = (RangeValue) val; |
| // Value start = rangeValue.getStart(); |
| // Value end = rangeValue.getEnd(); |
| // byte[] start_val_bytes = RdfCloudTripleStoreUtils.writeValue(start); |
| // byte[] end_val_bytes = RdfCloudTripleStoreUtils.writeValue(end); |
| // startRowOut.write(start_val_bytes); |
| // endRowOut.write(end_val_bytes); |
| // } else { |
| // byte[] val_bytes = RdfCloudTripleStoreUtils.writeValue(val); |
| // startRowOut.write(val_bytes); |
| // endRowOut.write(val_bytes); |
| // } |
| // } |
| // |
| // public Map.Entry<TABLE_LAYOUT, Range> defineRange(Value subject, Value predicate, Value object, AccumuloRdfConfiguration conf) |
| // throws IOException { |
| // |
| // byte[] startrow, stoprow; |
| // ByteArrayDataOutput startRowOut = ByteStreams.newDataOutput(); |
| // ByteArrayDataOutput stopRowOut = ByteStreams.newDataOutput(); |
| // Range range; |
| // TABLE_LAYOUT tableLayout; |
| // |
| // if (subject != null) { |
| // /** |
| // * Case: s |
| // * Table: spo |
| // * Want this to be the first if statement since it will be most likely the most asked for table |
| // */ |
| // tableLayout = TABLE_LAYOUT.SPO; |
| // fillRange(startRowOut, stopRowOut, subject, true); |
| // if (predicate != null) { |
| // /** |
| // * Case: sp |
| // * Table: spo |
| // */ |
| // fillRange(startRowOut, stopRowOut, predicate, false); |
| // if (object != null) { |
| // /** |
| // * Case: spo |
| // * Table: spo |
| // */ |
| // fillRange(startRowOut, stopRowOut, object, false); |
| // } |
| // } else if (object != null) { |
| // /** |
| // * Case: so |
| // * Table: osp |
| // * Very rare case. Could have put this in the OSP if clause, but I wanted to reorder the if statement |
| // * for best performance. The SPO table probably gets the most scans, so I want it to be the first if |
| // * statement in the branch. |
| // */ |
| // tableLayout = TABLE_LAYOUT.OSP; |
| // startRowOut = ByteStreams.newDataOutput(); |
| // stopRowOut = ByteStreams.newDataOutput(); |
| // fillRange(startRowOut, stopRowOut, object, true); |
| // fillRange(startRowOut, stopRowOut, subject, false); |
| // } |
| // } else if (predicate != null) { |
| // /** |
| // * Case: p |
| // * Table: po |
| // * Wanted this to be the second if statement, since it will be the second most asked for table |
| // */ |
| // tableLayout = TABLE_LAYOUT.PO; |
| // fillRange(startRowOut, stopRowOut, predicate, true); |
| // if (object != null) { |
| // /** |
| // * Case: po |
| // * Table: po |
| // */ |
| // fillRange(startRowOut, stopRowOut, object, false); |
| // } |
| // } else if (object != null) { |
| // /** |
| // * Case: o |
| // * Table: osp |
| // * Probably a pretty rare scenario |
| // */ |
| // tableLayout = TABLE_LAYOUT.OSP; |
| // fillRange(startRowOut, stopRowOut, object, true); |
| // } else { |
| // tableLayout = TABLE_LAYOUT.SPO; |
| // stopRowOut.write(Byte.MAX_VALUE); |
| // } |
| // |
| // startrow = startRowOut.toByteArray(); |
| // stopRowOut.write(DELIM_STOP_BYTES); |
| // stoprow = stopRowOut.toByteArray(); |
| // Text startRowTxt = new Text(startrow); |
| // Text stopRowTxt = new Text(stoprow); |
| // range = new Range(startRowTxt, stopRowTxt); |
| // |
| // return new CustomEntry<TABLE_LAYOUT, Range>(tableLayout, range); |
| // } |
| // |
| //} |