| /** |
| * 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.pig.newplan.logical.relational; |
| |
| import org.apache.pig.SortInfo; |
| import org.apache.pig.StoreFuncInterface; |
| import org.apache.pig.impl.io.FileSpec; |
| import org.apache.pig.impl.logicalLayer.FrontendException; |
| import org.apache.pig.newplan.Operator; |
| import org.apache.pig.newplan.PlanVisitor; |
| |
| public class LOStore extends LogicalRelationalOperator { |
| |
| private final FileSpec output; |
| |
| // If we know how to reload the store, here's how. The lFile |
| // FileSpec is set in PigServer.postProcess. It can be used to |
| // reload this store, if the optimizer has the need. |
| private FileSpec mInputSpec; |
| private final String signature; |
| private boolean isTmpStore; |
| private SortInfo sortInfo; |
| private final StoreFuncInterface storeFunc; |
| private boolean disambiguationEnabled = true; |
| |
| public LOStore(LogicalPlan plan, FileSpec outputFileSpec, StoreFuncInterface storeFunc, String signature) { |
| super("LOStore", plan); |
| this.output = outputFileSpec; |
| this.storeFunc = storeFunc; |
| this.signature = signature; |
| } |
| |
| public LOStore(LogicalPlan plan, FileSpec outputFileSpec, StoreFuncInterface storeFunc, String signature, |
| boolean disambiguationEnabled) { |
| this(plan, outputFileSpec, storeFunc, signature); |
| this.disambiguationEnabled = disambiguationEnabled; |
| } |
| |
| public FileSpec getOutputSpec() { |
| return output; |
| } |
| |
| public StoreFuncInterface getStoreFunc() { |
| return storeFunc; |
| } |
| |
| @Override |
| public LogicalSchema getSchema() throws FrontendException { |
| schema = ((LogicalRelationalOperator)plan.getPredecessors(this).get(0)).getSchema(); |
| |
| if (!disambiguationEnabled && schema != null && schema.getFields() != null) { |
| //If requested try and remove parent alias substring including colon(s) |
| for (LogicalSchema.LogicalFieldSchema field : schema.getFields()) { |
| if (field.alias == null || !field.alias.contains(":")) { |
| continue; |
| } |
| field.alias = field.alias.substring(field.alias.lastIndexOf(":") + 1); |
| } |
| } |
| |
| return schema; |
| } |
| |
| @Override |
| public void accept(PlanVisitor v) throws FrontendException { |
| if (!(v instanceof LogicalRelationalNodesVisitor)) { |
| throw new FrontendException("Expected LogicalPlanVisitor", 2223); |
| } |
| ((LogicalRelationalNodesVisitor)v).visit(this); |
| } |
| |
| @Override |
| public boolean isEqual(Operator other) throws FrontendException { |
| if (other != null && other instanceof LOStore) { |
| LOStore os = (LOStore)other; |
| if (!checkEquality(os)) return false; |
| // No need to test that storeFunc is equal, since it's |
| // being instantiated from output |
| if (output == null && os.output == null) { |
| return true; |
| } else if (output == null || os.output == null) { |
| return false; |
| } else { |
| return output.equals(os.output); |
| } |
| } else { |
| return false; |
| } |
| } |
| |
| public SortInfo getSortInfo() { |
| return sortInfo; |
| } |
| |
| public void setSortInfo(SortInfo sortInfo) { |
| this.sortInfo = sortInfo; |
| } |
| |
| public boolean isTmpStore() { |
| return isTmpStore; |
| } |
| |
| public void setTmpStore(boolean isTmpStore) { |
| this.isTmpStore = isTmpStore; |
| } |
| |
| public void setInputSpec(FileSpec in) { |
| mInputSpec = in; |
| } |
| |
| public FileSpec getInputSpec() { |
| return mInputSpec; |
| } |
| |
| public String getSignature() { |
| return signature; |
| } |
| |
| public FileSpec getFileSpec() { |
| return output; |
| } |
| |
| } |