/* * 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.tajo.plan.function.python; import org.apache.hadoop.conf.Configuration; import org.apache.tajo.datum.Datum; import org.apache.tajo.plan.function.FunctionContext; import org.apache.tajo.storage.Tuple; import java.io.*; import java.net.URI; /** * Abstract class of script engine */ public abstract class TajoScriptEngine { protected boolean firstPhase = false; protected boolean lastPhase = false; /** * Open a stream load a script locally or in the classpath * @param scriptPath the path of the script * @return a stream (it is the responsibility of the caller to close it) * @throws IllegalStateException if we could not open a stream */ protected static InputStream getScriptAsStream(URI scriptPath) { InputStream is = null; File file; try { file = new File(scriptPath); } catch (IllegalArgumentException e) { throw new IllegalArgumentException("path: " + scriptPath, e); } if (file.exists()) { try { is = new FileInputStream(file); } catch (FileNotFoundException e) { throw new IllegalStateException("could not find existing file "+scriptPath, e); } } if (is == null) { throw new IllegalStateException( "Could not initialize interpreter (from file system or classpath) with " + scriptPath); } return is; } /** * Start TajoScriptEngine. * * @param systemConf * @throws IOException */ public abstract void start(Configuration systemConf) throws IOException; /** * Shutdown TajoScriptEngine. * @throws IOException */ public abstract void shutdown(); /** * Evaluate the input tuple. * * @param input * @return */ public abstract Datum callScalarFunc(Tuple input); public abstract void callAggFunc(FunctionContext functionContext, Tuple input); public abstract String getPartialResult(FunctionContext functionContext); public abstract Datum getFinalResult(FunctionContext functionContext); public void setFirstPhase(boolean flag) { this.firstPhase = flag; } public void setLastPhase(boolean flag) { this.lastPhase = flag; } }