public FunctionDecl getFunctionDecl(Function function) throws CompilationException { if (!function.getLanguage().equals(Function.LANGUAGE_SQLPP)) { throw new CompilationException(ErrorCode.COMPILATION_INCOMPATIBLE_FUNCTION_LANGUAGE, Function.LANGUAGE_SQLPP, function.getLanguage()); } String functionBody = function.getFunctionBody(); List<String> params = function.getArguments(); StringBuilder builder = new StringBuilder(); builder.append(" use " + function.getDataverseName() + ";"); builder.append(" declare function " + function.getName().split("@")[0]); builder.append("("); for (String param : params) { VarIdentifier varId = SqlppVariableUtil.toUserDefinedVariableName(param); builder.append(varId); builder.append(","); } if (params.size() > 0) { builder.delete(builder.length() - 1, builder.length()); } builder.append(")"); builder.append("{"); builder.append("\n"); builder.append(functionBody); builder.append("\n"); builder.append("};"); IParser parser = parserFactory.createParser(new StringReader(new String(builder))); List<Statement> statements = parser.parse(); FunctionDecl decl = (FunctionDecl) statements.get(1); return decl; }
public FunctionDecl getFunctionDecl(Function function) throws CompilationException { if (!function.getLanguage().equals(Function.LANGUAGE_AQL)) { throw new CompilationException(ErrorCode.COMPILATION_INCOMPATIBLE_FUNCTION_LANGUAGE, Function.LANGUAGE_AQL, function.getLanguage()); } String functionBody = function.getFunctionBody(); List<String> arguments = function.getArguments(); List<VarIdentifier> varIdentifiers = new ArrayList<VarIdentifier>(); StringBuilder builder = new StringBuilder(); builder.append(" use dataverse " + function.getDataverseName() + ";"); builder.append(" declare function " + function.getName().split("@")[0]); builder.append("("); boolean first = true; for (String argument : arguments) { VarIdentifier varId = new VarIdentifier(argument); varIdentifiers.add(varId); if (first) { first = false; } else { builder.append(","); } builder.append(argument); } builder.append("){\n").append(functionBody).append("\n}"); IParser parser = parserFactory.createParser(new CharSequenceReader(builder)); List<Statement> statements = parser.parse(); FunctionDecl decl = (FunctionDecl) statements.get(1); return decl; }
@Test public void testAQL() throws UnsupportedEncodingException, FileNotFoundException, ParseException, AsterixException, AlgebricksException { Reader reader = new BufferedReader(new InputStreamReader(new FileInputStream(queryFile), "UTF-8")); IParser parser = aqlParserFactory.createParser(reader); GlobalConfig.ASTERIX_LOGGER.info(queryFile.toString()); try { parser.parse(); } catch (Exception e) { GlobalConfig.ASTERIX_LOGGER.warn("Failed while testing file " + reader); StringWriter sw = new StringWriter(); PrintWriter writer = new PrintWriter(sw); e.printStackTrace(writer); GlobalConfig.ASTERIX_LOGGER.warn(sw.toString()); throw new ParseException("Parsing " + queryFile.toString()); } } }
protected ResultUtil.ParseOnlyResult parseStatement(String statementsText) throws CompilationException { IParserFactory factory = compilationProvider.getParserFactory(); IParser parser = factory.createParser(statementsText); List<Statement> stmts = parser.parse(); QueryTranslator.validateStatements(stmts); Query query = (Query) stmts.get(stmts.size() - 1); Set<VariableExpr> extVars = compilationProvider.getRewriterFactory().createQueryRewriter().getExternalVariables(query.getBody()); ResultUtil.ParseOnlyResult parseOnlyResult = new ResultUtil.ParseOnlyResult(extVars); return parseOnlyResult; }
public void compile(boolean optimize, boolean printRewrittenExpressions, boolean printLogicalPlan, boolean printOptimizedPlan, boolean printPhysicalOpsOnly, boolean generateBinaryRuntime, boolean printJob, PlanFormat pformat) throws Exception { queryJobSpec = null; dmlJobs = null; if (queryText == null) { return; } int ch; StringBuilder builder = new StringBuilder(); while ((ch = queryText.read()) != -1) { builder.append((char) ch); } IParser parser = parserFactory.createParser(builder.toString()); List<Statement> statements = parser.parse(); MetadataManager.INSTANCE.init(); SessionConfig conf = new SessionConfig(OutputFormat.ADM, optimize, true, generateBinaryRuntime, pformat); conf.setOOBData(false, printRewrittenExpressions, printLogicalPlan, printOptimizedPlan, printJob); if (printPhysicalOpsOnly) { conf.set(SessionConfig.FORMAT_ONLY_PHYSICAL_OPS, true); } SessionOutput output = new SessionOutput(conf, writer); IStatementExecutor translator = statementExecutorFactory.create(appCtx, statements, output, compilationProvider, storageComponentProvider); final IRequestParameters requestParameters = new RequestParameters(null, new ResultProperties(IStatementExecutor.ResultDelivery.IMMEDIATE), new IStatementExecutor.Stats(), null, null, null, statementParams, true); translator.compileAndExecute(hcc, null, requestParameters); writer.flush(); }
public static RangeMap parseHint(IParser parser) throws CompilationException { ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); DataOutput out = abvs.getDataOutput(); abvs.reset(); List<Statement> hintStatements = parser.parse(); if (hintStatements.size() != 1) { throw new CompilationException("Only one range statement is allowed for the range hint."); } // Translate the query into a Range Map if (hintStatements.get(0).getKind() != Statement.Kind.QUERY) { throw new CompilationException("Not a proper query for the range hint."); } Query q = (Query) hintStatements.get(0); if (q.getBody().getKind() != Kind.LIST_CONSTRUCTOR_EXPRESSION) { throw new CompilationException("The range hint must be a list."); } List<Expression> el = ((ListConstructor) q.getBody()).getExprList(); int[] offsets = new int[el.size()]; // Loop over list of literals for (int i = 0; i < el.size(); ++i) { Expression item = el.get(i); if (item.getKind() == Kind.LITERAL_EXPRESSION) { parseLiteralToBytes(item, out); offsets[i] = abvs.getLength(); } // TODO Add support for composite fields. } return new RangeMap(1, abvs.getByteArray(), offsets); }
GlobalConfig.ASTERIX_LOGGER.info(queryFile.toString()); try { List<Statement> statements = parser.parse(); List<FunctionDecl> functions = getDeclaredFunctions(statements); String dvName = getDefaultDataverse(statements);
private void doHandle(IServletResponse response, String query, SessionOutput sessionOutput, ResultDelivery resultDelivery) throws JsonProcessingException { try { response.setStatus(HttpResponseStatus.OK); IHyracksClientConnection hcc = (IHyracksClientConnection) ctx.get(HYRACKS_CONNECTION_ATTR); IParser parser = parserFactory.createParser(query); List<Statement> statements = parser.parse(); validate(statements); MetadataManager.INSTANCE.init(); IStatementExecutor translator = statementExecutorFactory.create(appCtx, statements, sessionOutput, compilationProvider, componentProvider); final IResultSet resultSet = ServletUtil.getResultSet(hcc, appCtx, ctx); final IRequestParameters requestParameters = new RequestParameters(resultSet, new ResultProperties(resultDelivery), new IStatementExecutor.Stats(), null, null, null, null, true); translator.compileAndExecute(hcc, null, requestParameters); } catch (AsterixException | TokenMgrError | org.apache.asterix.aqlplus.parser.TokenMgrError pe) { response.setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR); GlobalConfig.ASTERIX_LOGGER.log(Level.ERROR, pe.getMessage(), pe); String errorMessage = ResultUtil.buildParseExceptionMessage(pe, query); ObjectNode errorResp = ResultUtil.getErrorResponse(2, errorMessage, "", ResultUtil.extractFullStackTrace(pe)); sessionOutput.out().write(OBJECT_MAPPER.writeValueAsString(errorResp)); } catch (Exception e) { GlobalConfig.ASTERIX_LOGGER.log(Level.ERROR, e.getMessage(), e); response.setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR); ResultUtil.apiErrorHandler(sessionOutput.out(), e); } }
public void init() throws IOException, ParseException, ACIDException, AlgebricksException { FileReader aql = new FileReader(schemaFile); IParser parser = parserFactory.createParser(aql); List<Statement> statements = parser.parse(); aql.close(); // TODO: Need to fix how to use transactions here. MetadataTransactionContext mdTxnCtx = new MetadataTransactionContext(new TxnId(-1)); ADGenDmlTranslator dmlt = new ADGenDmlTranslator(mdTxnCtx, statements); dmlt.translate(); typeMap = dmlt.getTypeMap(); typeAnnotMap = dmlt.getTypeDataGenMap(); dgCtx = new DataGeneratorContext(); }
protected void executeStatement(String statementsText, SessionOutput sessionOutput, ResultProperties resultProperties, Stats stats, QueryServiceRequestParameters param, RequestExecutionState execution, Map<String, String> optionalParameters, Map<String, byte[]> statementParameters) throws Exception { IClusterManagementWork.ClusterState clusterState = ((ICcApplicationContext) appCtx).getClusterStateManager().getState(); if (clusterState != IClusterManagementWork.ClusterState.ACTIVE) { // using a plain IllegalStateException here to get into the right catch clause for a 500 throw new IllegalStateException("Cannot execute request, cluster is " + clusterState); } IParser parser = compilationProvider.getParserFactory().createParser(statementsText); List<Statement> statements = parser.parse(); MetadataManager.INSTANCE.init(); IStatementExecutor translator = statementExecutorFactory.create((ICcApplicationContext) appCtx, statements, sessionOutput, compilationProvider, componentProvider); execution.start(); Map<String, IAObject> stmtParams = org.apache.asterix.app.translator.RequestParameters.deserializeParameterValues(statementParameters); IRequestParameters requestParameters = new org.apache.asterix.app.translator.RequestParameters(getResultSet(), resultProperties, stats, null, param.getClientContextID(), optionalParameters, stmtParams, param.isMultiStatement()); translator.compileAndExecute(getHyracksClientConnection(), queryCtx, requestParameters); execution.end(); printExecutionPlans(sessionOutput, translator.getExecutionPlans()); }
IResultSet resultSet = ServletUtil.getResultSet(hcc, appCtx, ctx); IParser parser = parserFactory.createParser(query); List<Statement> statements = parser.parse(); SessionConfig sessionConfig = new SessionConfig(format, true, isSet(executeQuery), true, planFormat); sessionConfig.set(SessionConfig.FORMAT_HTML, true);
IParserFactory sqlppParserFactory = new SqlppParserFactory(); IParser sqlppParser = sqlppParserFactory.createParser(whereClauseExpr); List<Statement> stmts = sqlppParser.parse(); if (stmts.size() != 1) { throw new CompilationException("Exceptions happened in processing where clause.");
try { IParser parser = compilationProvider.getParserFactory().createParser(statementsText); List<Statement> statements = parser.parse(); StringWriter outWriter = new StringWriter(256); PrintWriter outPrinter = new PrintWriter(outWriter);