/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * Licensed 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.jkiss.dbeaver.model.sql.eval; import org.apache.commons.jexl2.Expression; import org.apache.commons.jexl2.JexlEngine; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.model.sql.SQLScriptContext; /** * ScriptVariablesContext */ public class ScriptEvaluateEngine { private final SQLScriptContext scriptContext; private final JexlEngine jexlEngine; private final ScriptVariablesContext variablesContext; private ScriptEvaluateEngine(SQLScriptContext scriptContext) { this.scriptContext = scriptContext; jexlEngine = new JexlEngine(null, null, null, null); jexlEngine.setCache(100); variablesContext = new ScriptVariablesContext(scriptContext); } public Object evaluateExpression(String exprString) throws DBException { try { Expression expression = jexlEngine.createExpression(exprString); return expression.evaluate(variablesContext); } catch (Exception e) { throw new DBException("Error evaluating expression [" + exprString + "]", e); } } public static ScriptEvaluateEngine getEngine(SQLScriptContext scriptContext) { ScriptEvaluateEngine engine = (ScriptEvaluateEngine) scriptContext.getData("evalEngine"); if (engine == null) { engine = new ScriptEvaluateEngine(scriptContext); scriptContext.setData("evalEngine", engine); } return engine; } }