Return-Path: X-Original-To: apmail-asterixdb-commits-archive@minotaur.apache.org Delivered-To: apmail-asterixdb-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 4D39C18352 for ; Fri, 30 Oct 2015 23:16:49 +0000 (UTC) Received: (qmail 93976 invoked by uid 500); 30 Oct 2015 23:16:49 -0000 Delivered-To: apmail-asterixdb-commits-archive@asterixdb.apache.org Received: (qmail 93942 invoked by uid 500); 30 Oct 2015 23:16:49 -0000 Mailing-List: contact commits-help@asterixdb.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@asterixdb.incubator.apache.org Delivered-To: mailing list commits@asterixdb.incubator.apache.org Received: (qmail 93933 invoked by uid 99); 30 Oct 2015 23:16:49 -0000 Received: from Unknown (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 30 Oct 2015 23:16:49 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id 95709C0044 for ; Fri, 30 Oct 2015 23:16:48 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.771 X-Spam-Level: X-Spam-Status: No, score=0.771 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-us-east.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id 4dUOoRnmtT7E for ; Fri, 30 Oct 2015 23:16:26 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-us-east.apache.org (ASF Mail Server at mx1-us-east.apache.org) with SMTP id E36F7444C4 for ; Fri, 30 Oct 2015 23:16:12 +0000 (UTC) Received: (qmail 91347 invoked by uid 99); 30 Oct 2015 23:16:11 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 30 Oct 2015 23:16:11 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 6EA38E05DB; Fri, 30 Oct 2015 23:16:11 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: buyingyi@apache.org To: commits@asterixdb.incubator.apache.org Date: Fri, 30 Oct 2015 23:16:54 -0000 Message-Id: <9a2dc6296fa542c69f98f84dc6e24248@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [46/51] [partial] incubator-asterixdb git commit: SQL++ parser: 1. refactored asterix-aql to become asterix-lang-common and asterix-lang-aql, where the former is the common part for different languages; 2. added asterix-lang-sqlpp on top of asterix-lang- http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java b/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java index e13ac8e..be17229 100644 --- a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java +++ b/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java @@ -30,25 +30,24 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.commons.io.IOUtils; -import org.json.JSONObject; - import org.apache.asterix.api.common.SessionConfig; import org.apache.asterix.api.common.SessionConfig.OutputFormat; -import org.apache.asterix.aql.base.Statement; -import org.apache.asterix.aql.base.Statement.Kind; -import org.apache.asterix.aql.parser.AQLParser; -import org.apache.asterix.aql.parser.ParseException; -import org.apache.asterix.aql.parser.TokenMgrError; import org.apache.asterix.aql.translator.AqlTranslator; import org.apache.asterix.common.config.GlobalConfig; import org.apache.asterix.common.exceptions.AsterixException; +import org.apache.asterix.lang.aql.parser.AQLParser; +import org.apache.asterix.lang.aql.parser.TokenMgrError; +import org.apache.asterix.lang.aql.util.AQLFormatPrintUtil; +import org.apache.asterix.lang.common.base.Statement; +import org.apache.asterix.lang.common.base.Statement.Kind; import org.apache.asterix.metadata.MetadataManager; import org.apache.asterix.result.ResultReader; import org.apache.asterix.result.ResultUtils; +import org.apache.commons.io.IOUtils; import org.apache.hyracks.api.client.IHyracksClientConnection; import org.apache.hyracks.api.dataset.IHyracksDataset; import org.apache.hyracks.client.dataset.HyracksDataset; +import org.json.JSONObject; abstract class RESTAPIServlet extends HttpServlet { private static final long serialVersionUID = 1L; @@ -62,8 +61,7 @@ abstract class RESTAPIServlet extends HttpServlet { * SessionConfig with the appropriate output writer and output-format * based on the Accept: header and other servlet parameters. */ - static SessionConfig initResponse(HttpServletRequest request, HttpServletResponse response) - throws IOException { + static SessionConfig initResponse(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setCharacterEncoding("utf-8"); // CLEAN_JSON output is the default; most generally useful for a @@ -76,12 +74,10 @@ abstract class RESTAPIServlet extends HttpServlet { if (output != null) { if (output.equals("CSV")) { format = OutputFormat.CSV; - } - else if (output.equals("ADM")) { + } else if (output.equals("ADM")) { format = OutputFormat.ADM; } - } - else { + } else { // Second check the Accept: HTTP header. if (accept != null) { if (accept.contains("application/x-adm")) { @@ -93,9 +89,9 @@ abstract class RESTAPIServlet extends HttpServlet { } // If it's JSON, check for the "lossless" flag - if (format == OutputFormat.CLEAN_JSON && - ("true".equals(request.getParameter("lossless")) || - (accept != null && accept.contains("lossless=true")))) { + if (format == OutputFormat.CLEAN_JSON + && ("true".equals(request.getParameter("lossless")) || (accept != null && accept + .contains("lossless=true")))) { format = OutputFormat.LOSSLESS_JSON; } @@ -113,12 +109,11 @@ abstract class RESTAPIServlet extends HttpServlet { break; case CSV: { // Check for header parameter or in Accept:. - if ("present".equals(request.getParameter("header")) || - (accept != null && accept.contains("header=present"))) { + if ("present".equals(request.getParameter("header")) + || (accept != null && accept.contains("header=present"))) { response.setContentType("text/csv; header=present"); sessionConfig.set(SessionConfig.FORMAT_CSV_HEADER, true); - } - else { + } else { response.setContentType("text/csv; header=absent"); } } @@ -168,7 +163,7 @@ abstract class RESTAPIServlet extends HttpServlet { AqlTranslator aqlTranslator = new AqlTranslator(aqlStatements, sessionConfig); aqlTranslator.compileAndExecute(hcc, hds, resultDelivery); } - } catch (ParseException | TokenMgrError | org.apache.asterix.aqlplus.parser.TokenMgrError pe) { + } catch (AsterixException | TokenMgrError | org.apache.asterix.aqlplus.parser.TokenMgrError pe) { GlobalConfig.ASTERIX_LOGGER.log(Level.SEVERE, pe.getMessage(), pe); String errorMessage = ResultUtils.buildParseExceptionMessage(pe, query); JSONObject errorResp = ResultUtils.getErrorResponse(2, errorMessage, "", ""); http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/UpdateAPIServlet.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/UpdateAPIServlet.java b/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/UpdateAPIServlet.java index b436061..d08134f 100644 --- a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/UpdateAPIServlet.java +++ b/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/UpdateAPIServlet.java @@ -23,8 +23,8 @@ import java.util.List; import javax.servlet.http.HttpServletRequest; -import org.apache.asterix.aql.base.Statement; -import org.apache.asterix.aql.base.Statement.Kind; +import org.apache.asterix.lang.common.base.Statement; +import org.apache.asterix.lang.common.base.Statement.Kind; public class UpdateAPIServlet extends RESTAPIServlet { private static final long serialVersionUID = 1L; http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java b/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java index 3276a60..a9b012d 100644 --- a/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java +++ b/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java @@ -26,11 +26,9 @@ import org.apache.asterix.api.common.APIFramework; import org.apache.asterix.api.common.Job; import org.apache.asterix.api.common.SessionConfig; import org.apache.asterix.api.common.SessionConfig.OutputFormat; -import org.apache.asterix.aql.base.Statement; -import org.apache.asterix.aql.parser.AQLParser; -import org.apache.asterix.aql.parser.ParseException; import org.apache.asterix.aql.translator.AqlTranslator; -import org.apache.asterix.common.exceptions.AsterixException; +import org.apache.asterix.lang.aql.parser.AQLParser; +import org.apache.asterix.lang.common.base.Statement; import org.apache.asterix.metadata.MetadataManager; import org.apache.hyracks.api.client.IHyracksClientConnection; import org.apache.hyracks.api.job.JobSpecification; @@ -59,7 +57,7 @@ public class AsterixJavaClient { public void compile(boolean optimize, boolean printRewrittenExpressions, boolean printLogicalPlan, boolean printOptimizedPlan, boolean printPhysicalOpsOnly, boolean generateBinaryRuntime, boolean printJob) - throws Exception { + throws Exception { queryJobSpec = null; dmlJobs = null; @@ -72,17 +70,11 @@ public class AsterixJavaClient { builder.append((char) ch); } AQLParser parser = new AQLParser(builder.toString()); - List aqlStatements; - try { - aqlStatements = parser.parse(); - } catch (ParseException pe) { - throw new AsterixException(pe); - } + List aqlStatements = parser.parse(); MetadataManager.INSTANCE.init(); SessionConfig conf = new SessionConfig(writer, OutputFormat.ADM, optimize, true, generateBinaryRuntime); - conf.setOOBData(false, printRewrittenExpressions, printLogicalPlan, - printOptimizedPlan, printJob); + conf.setOOBData(false, printRewrittenExpressions, printLogicalPlan, printOptimizedPlan, printJob); if (printPhysicalOpsOnly) { conf.set(SessionConfig.FORMAT_ONLY_PHYSICAL_OPS, true); } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/main/java/org/apache/asterix/aql/translator/AqlTranslator.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/main/java/org/apache/asterix/aql/translator/AqlTranslator.java b/asterix-app/src/main/java/org/apache/asterix/aql/translator/AqlTranslator.java index dcfbc98..8029e0d 100644 --- a/asterix-app/src/main/java/org/apache/asterix/aql/translator/AqlTranslator.java +++ b/asterix-app/src/main/java/org/apache/asterix/aql/translator/AqlTranslator.java @@ -43,50 +43,10 @@ import org.apache.commons.lang3.StringUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; - import org.apache.asterix.api.common.APIFramework; import org.apache.asterix.api.common.Job; import org.apache.asterix.api.common.SessionConfig; import org.apache.asterix.api.common.SessionConfig.OutputFormat; -import org.apache.asterix.aql.base.Statement; -import org.apache.asterix.aql.expression.CompactStatement; -import org.apache.asterix.aql.expression.ConnectFeedStatement; -import org.apache.asterix.aql.expression.CreateDataverseStatement; -import org.apache.asterix.aql.expression.CreateFeedPolicyStatement; -import org.apache.asterix.aql.expression.CreateFeedStatement; -import org.apache.asterix.aql.expression.CreateFunctionStatement; -import org.apache.asterix.aql.expression.CreateIndexStatement; -import org.apache.asterix.aql.expression.CreatePrimaryFeedStatement; -import org.apache.asterix.aql.expression.CreateSecondaryFeedStatement; -import org.apache.asterix.aql.expression.DatasetDecl; -import org.apache.asterix.aql.expression.DataverseDecl; -import org.apache.asterix.aql.expression.DataverseDropStatement; -import org.apache.asterix.aql.expression.DeleteStatement; -import org.apache.asterix.aql.expression.DisconnectFeedStatement; -import org.apache.asterix.aql.expression.DropStatement; -import org.apache.asterix.aql.expression.ExternalDetailsDecl; -import org.apache.asterix.aql.expression.FeedDropStatement; -import org.apache.asterix.aql.expression.FeedPolicyDropStatement; -import org.apache.asterix.aql.expression.FunctionDecl; -import org.apache.asterix.aql.expression.FunctionDropStatement; -import org.apache.asterix.aql.expression.IDatasetDetailsDecl; -import org.apache.asterix.aql.expression.Identifier; -import org.apache.asterix.aql.expression.IndexDropStatement; -import org.apache.asterix.aql.expression.InsertStatement; -import org.apache.asterix.aql.expression.InternalDetailsDecl; -import org.apache.asterix.aql.expression.LoadStatement; -import org.apache.asterix.aql.expression.NodeGroupDropStatement; -import org.apache.asterix.aql.expression.NodegroupDecl; -import org.apache.asterix.aql.expression.Query; -import org.apache.asterix.aql.expression.RefreshExternalDatasetStatement; -import org.apache.asterix.aql.expression.RunStatement; -import org.apache.asterix.aql.expression.SetStatement; -import org.apache.asterix.aql.expression.SubscribeFeedStatement; -import org.apache.asterix.aql.expression.TypeDecl; -import org.apache.asterix.aql.expression.TypeDropStatement; -import org.apache.asterix.aql.expression.TypeExpression; -import org.apache.asterix.aql.expression.WriteStatement; -import org.apache.asterix.aql.util.FunctionUtils; import org.apache.asterix.common.config.AsterixCompilerProperties; import org.apache.asterix.common.config.DatasetConfig.DatasetType; import org.apache.asterix.common.config.DatasetConfig.ExternalDatasetTransactionState; @@ -116,6 +76,45 @@ import org.apache.asterix.file.ExternalIndexingOperations; import org.apache.asterix.file.FeedOperations; import org.apache.asterix.file.IndexOperations; import org.apache.asterix.formats.nontagged.AqlTypeTraitProvider; +import org.apache.asterix.lang.aql.statement.SubscribeFeedStatement; +import org.apache.asterix.lang.aql.util.FunctionUtils; +import org.apache.asterix.lang.common.base.Statement; +import org.apache.asterix.lang.common.expression.TypeExpression; +import org.apache.asterix.lang.common.statement.CompactStatement; +import org.apache.asterix.lang.common.statement.ConnectFeedStatement; +import org.apache.asterix.lang.common.statement.CreateDataverseStatement; +import org.apache.asterix.lang.common.statement.CreateFeedPolicyStatement; +import org.apache.asterix.lang.common.statement.CreateFeedStatement; +import org.apache.asterix.lang.common.statement.CreateFunctionStatement; +import org.apache.asterix.lang.common.statement.CreateIndexStatement; +import org.apache.asterix.lang.common.statement.CreatePrimaryFeedStatement; +import org.apache.asterix.lang.common.statement.CreateSecondaryFeedStatement; +import org.apache.asterix.lang.common.statement.DatasetDecl; +import org.apache.asterix.lang.common.statement.DataverseDecl; +import org.apache.asterix.lang.common.statement.DataverseDropStatement; +import org.apache.asterix.lang.common.statement.DeleteStatement; +import org.apache.asterix.lang.common.statement.DisconnectFeedStatement; +import org.apache.asterix.lang.common.statement.DropStatement; +import org.apache.asterix.lang.common.statement.ExternalDetailsDecl; +import org.apache.asterix.lang.common.statement.FeedDropStatement; +import org.apache.asterix.lang.common.statement.FeedPolicyDropStatement; +import org.apache.asterix.lang.common.statement.FunctionDecl; +import org.apache.asterix.lang.common.statement.FunctionDropStatement; +import org.apache.asterix.lang.common.statement.IDatasetDetailsDecl; +import org.apache.asterix.lang.common.statement.IndexDropStatement; +import org.apache.asterix.lang.common.statement.InsertStatement; +import org.apache.asterix.lang.common.statement.InternalDetailsDecl; +import org.apache.asterix.lang.common.statement.LoadStatement; +import org.apache.asterix.lang.common.statement.NodeGroupDropStatement; +import org.apache.asterix.lang.common.statement.NodegroupDecl; +import org.apache.asterix.lang.common.statement.Query; +import org.apache.asterix.lang.common.statement.RefreshExternalDatasetStatement; +import org.apache.asterix.lang.common.statement.RunStatement; +import org.apache.asterix.lang.common.statement.SetStatement; +import org.apache.asterix.lang.common.statement.TypeDecl; +import org.apache.asterix.lang.common.statement.TypeDropStatement; +import org.apache.asterix.lang.common.statement.WriteStatement; +import org.apache.asterix.lang.common.struct.Identifier; import org.apache.asterix.metadata.IDatasetDetails; import org.apache.asterix.metadata.MetadataException; import org.apache.asterix.metadata.MetadataManager; http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/main/java/org/apache/asterix/feeds/CentralFeedManager.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/main/java/org/apache/asterix/feeds/CentralFeedManager.java b/asterix-app/src/main/java/org/apache/asterix/feeds/CentralFeedManager.java index 1945353..8183a06 100644 --- a/asterix-app/src/main/java/org/apache/asterix/feeds/CentralFeedManager.java +++ b/asterix-app/src/main/java/org/apache/asterix/feeds/CentralFeedManager.java @@ -25,13 +25,13 @@ import java.util.List; import org.apache.asterix.api.common.SessionConfig; import org.apache.asterix.api.common.SessionConfig.OutputFormat; -import org.apache.asterix.aql.base.Statement; -import org.apache.asterix.aql.parser.AQLParser; import org.apache.asterix.aql.translator.AqlTranslator; import org.apache.asterix.common.exceptions.AsterixException; import org.apache.asterix.common.feeds.api.ICentralFeedManager; import org.apache.asterix.common.feeds.api.IFeedLoadManager; import org.apache.asterix.common.feeds.api.IFeedTrackingManager; +import org.apache.asterix.lang.aql.parser.AQLParser; +import org.apache.asterix.lang.common.base.Statement; import org.apache.asterix.metadata.feeds.SocketMessageListener; import org.apache.asterix.om.util.AsterixAppContextInfo; import org.apache.hyracks.api.client.IHyracksClientConnection; @@ -97,7 +97,8 @@ public class CentralFeedManager implements ICentralFeedManager { statements = parser.Statement(); SessionConfig pc = new SessionConfig(out, OutputFormat.ADM); AqlTranslator translator = new AqlTranslator(statements, pc); - translator.compileAndExecute(AsterixAppContextInfo.getInstance().getHcc(), null, AqlTranslator.ResultDelivery.SYNC); + translator.compileAndExecute(AsterixAppContextInfo.getInstance().getHcc(), null, + AqlTranslator.ResultDelivery.SYNC); } } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/main/java/org/apache/asterix/feeds/FeedLifecycleListener.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/main/java/org/apache/asterix/feeds/FeedLifecycleListener.java b/asterix-app/src/main/java/org/apache/asterix/feeds/FeedLifecycleListener.java index d7da85e..4ca9961 100644 --- a/asterix-app/src/main/java/org/apache/asterix/feeds/FeedLifecycleListener.java +++ b/asterix-app/src/main/java/org/apache/asterix/feeds/FeedLifecycleListener.java @@ -35,10 +35,6 @@ import java.util.logging.Logger; import org.apache.asterix.api.common.SessionConfig; import org.apache.asterix.api.common.SessionConfig.OutputFormat; -import org.apache.asterix.aql.base.Statement; -import org.apache.asterix.aql.expression.DataverseDecl; -import org.apache.asterix.aql.expression.DisconnectFeedStatement; -import org.apache.asterix.aql.expression.Identifier; import org.apache.asterix.aql.translator.AqlTranslator; import org.apache.asterix.common.api.IClusterManagementWork; import org.apache.asterix.common.api.IClusterManagementWork.ClusterState; @@ -56,6 +52,10 @@ import org.apache.asterix.common.feeds.api.IFeedLifecycleEventSubscriber; import org.apache.asterix.common.feeds.api.IFeedLifecycleListener; import org.apache.asterix.common.feeds.api.IIntakeProgressTracker; import org.apache.asterix.common.feeds.message.StorageReportFeedMessage; +import org.apache.asterix.lang.common.base.Statement; +import org.apache.asterix.lang.common.statement.DataverseDecl; +import org.apache.asterix.lang.common.statement.DisconnectFeedStatement; +import org.apache.asterix.lang.common.struct.Identifier; import org.apache.asterix.metadata.MetadataManager; import org.apache.asterix.metadata.MetadataTransactionContext; import org.apache.asterix.metadata.cluster.AddNodeWork; http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/main/java/org/apache/asterix/feeds/FeedsActivator.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/main/java/org/apache/asterix/feeds/FeedsActivator.java b/asterix-app/src/main/java/org/apache/asterix/feeds/FeedsActivator.java index ea40d9b..9e8864c 100644 --- a/asterix-app/src/main/java/org/apache/asterix/feeds/FeedsActivator.java +++ b/asterix-app/src/main/java/org/apache/asterix/feeds/FeedsActivator.java @@ -26,11 +26,11 @@ import java.util.logging.Logger; import org.apache.asterix.api.common.SessionConfig; import org.apache.asterix.api.common.SessionConfig.OutputFormat; -import org.apache.asterix.aql.base.Statement; -import org.apache.asterix.aql.expression.ConnectFeedStatement; -import org.apache.asterix.aql.expression.DataverseDecl; -import org.apache.asterix.aql.expression.Identifier; import org.apache.asterix.aql.translator.AqlTranslator; +import org.apache.asterix.lang.common.base.Statement; +import org.apache.asterix.lang.common.statement.ConnectFeedStatement; +import org.apache.asterix.lang.common.statement.DataverseDecl; +import org.apache.asterix.lang.common.struct.Identifier; import org.apache.asterix.om.util.AsterixAppContextInfo; import org.apache.hyracks.api.job.JobId; http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/java/org/apache/asterix/test/aql/AQLTestCase.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/java/org/apache/asterix/test/aql/AQLTestCase.java b/asterix-app/src/test/java/org/apache/asterix/test/aql/AQLTestCase.java index fd56664..618faf6 100644 --- a/asterix-app/src/test/java/org/apache/asterix/test/aql/AQLTestCase.java +++ b/asterix-app/src/test/java/org/apache/asterix/test/aql/AQLTestCase.java @@ -27,18 +27,15 @@ import java.io.PrintWriter; import java.io.Reader; import java.io.StringWriter; import java.io.UnsupportedEncodingException; -import java.util.List; -import junit.framework.TestCase; - -import org.junit.Test; - -import org.apache.asterix.aql.base.Statement; -import org.apache.asterix.aql.parser.AQLParser; -import org.apache.asterix.aql.parser.ParseException; import org.apache.asterix.common.config.GlobalConfig; import org.apache.asterix.common.exceptions.AsterixException; +import org.apache.asterix.lang.aql.parser.AQLParser; +import org.apache.asterix.lang.aql.parser.ParseException; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.junit.Test; + +import junit.framework.TestCase; public class AQLTestCase extends TestCase { @@ -54,11 +51,10 @@ public class AQLTestCase extends TestCase { AlgebricksException { Reader fis = new BufferedReader(new InputStreamReader(new FileInputStream(queryFile), "UTF-8")); AQLParser parser = new AQLParser(fis); - List statements; GlobalConfig.ASTERIX_LOGGER.info(queryFile.toString()); try { - statements = parser.parse(); - } catch (ParseException e) { + parser.parse(); + } catch (Exception e) { GlobalConfig.ASTERIX_LOGGER.warning("Failed while testing file " + fis); StringWriter sw = new StringWriter(); PrintWriter writer = new PrintWriter(sw); http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/java/org/apache/asterix/test/aql/AQLTestSuite.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/java/org/apache/asterix/test/aql/AQLTestSuite.java b/asterix-app/src/test/java/org/apache/asterix/test/aql/AQLTestSuite.java index cef70f2..57a446a 100644 --- a/asterix-app/src/test/java/org/apache/asterix/test/aql/AQLTestSuite.java +++ b/asterix-app/src/test/java/org/apache/asterix/test/aql/AQLTestSuite.java @@ -25,14 +25,13 @@ import java.io.UnsupportedEncodingException; import junit.framework.Test; import junit.framework.TestSuite; +import org.apache.asterix.lang.aql.parser.ParseException; import org.apache.commons.lang3.StringUtils; -import org.apache.asterix.aql.parser.ParseException; - public class AQLTestSuite extends TestSuite { - private static String AQLTS_PATH = StringUtils.join(new String[] { "src", "test", "resources", "AQLTS", + private static String AQLTS_PATH = StringUtils.join(new String[] { "src", "test", "resources", "parserts", "queries" + File.separator }, File.separator); - private static String AQLTS_SQL_LIKE_PATH = StringUtils.join(new String[] { "src", "test", "resources", "AQLTS", + private static String AQLTS_SQL_LIKE_PATH = StringUtils.join(new String[] { "src", "test", "resources", "parserts", "queries-sql-like" + File.separator }, File.separator); public static Test suite() throws ParseException, UnsupportedEncodingException, FileNotFoundException { @@ -51,9 +50,7 @@ public class AQLTestSuite extends TestSuite { testSuite.addTest(new AQLTestCase(file)); } } - return testSuite; - } public static void main(String args[]) throws Throwable { http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java b/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java index 63ac149..fdd4bc2 100644 --- a/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java +++ b/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java @@ -25,13 +25,12 @@ import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.Reader; -import org.junit.Test; - import org.apache.asterix.api.common.AsterixHyracksIntegrationUtil; import org.apache.asterix.api.java.AsterixJavaClient; import org.apache.asterix.common.exceptions.AsterixException; -import org.apache.asterix.test.aql.TestsUtils; +import org.apache.asterix.test.aql.TestExecutor; import org.apache.asterix.test.base.AsterixTestHelper; +import org.junit.Test; public class DmlTest { @@ -40,12 +39,11 @@ public class DmlTest { private static final String SEPARATOR = File.separator; private static final String PATH_BASE = "src" + SEPARATOR + "test" + SEPARATOR + "resources" + SEPARATOR + "dmlts" + SEPARATOR; - private static final String PATH_EXPECTED = PATH_BASE + "results" + SEPARATOR; private static final String PATH_SCRIPTS = PATH_BASE + "scripts" + SEPARATOR; private static final String LOAD_FOR_ENLIST_FILE = PATH_SCRIPTS + "load-cust.aql"; - private static final String ENLIST_FILE = PATH_SCRIPTS + "enlist-scan-cust.aql"; private static final PrintWriter ERR = new PrintWriter(System.err); + private final TestExecutor testExecutor = new TestExecutor(); @Test public void enlistTest() throws Exception { @@ -68,18 +66,10 @@ public class DmlTest { loadReader.close(); } asterixLoad.execute(); - File enlistFile = new File(ENLIST_FILE); - int dot = enlistFile.getName().lastIndexOf('.'); - String resultFileName = enlistFile.getName().substring(0, dot + 1) + ".adm"; - File expectedFile = new File(PATH_EXPECTED + SEPARATOR + resultFileName); - File actualFile = new File(PATH_ACTUAL + SEPARATOR + resultFileName); - // Khurram - //TestsUtils.runScriptAndCompareWithResult(AsterixHyracksIntegrationUtil.getHyracksClientConnection(), - //enlistFile, ERR, expectedFile, actualFile); AsterixHyracksIntegrationUtil.deinit(); for (String d : ASTERIX_DATA_DIRS) { - TestsUtils.deleteRec(new File(d)); + testExecutor.deleteRec(new File(d)); } outdir.delete(); } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTest.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTest.java b/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTest.java index 29db874..3788606 100644 --- a/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTest.java +++ b/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTest.java @@ -22,6 +22,12 @@ import java.io.File; import java.util.ArrayList; import java.util.Collection; +import org.apache.asterix.api.common.AsterixHyracksIntegrationUtil; +import org.apache.asterix.common.config.AsterixPropertiesAccessor; +import org.apache.asterix.common.config.AsterixTransactionProperties; +import org.apache.asterix.common.config.GlobalConfig; +import org.apache.asterix.test.aql.TestExecutor; +import org.apache.asterix.testframework.context.TestCaseContext; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.junit.AfterClass; @@ -31,13 +37,6 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; -import org.apache.asterix.api.common.AsterixHyracksIntegrationUtil; -import org.apache.asterix.common.config.AsterixPropertiesAccessor; -import org.apache.asterix.common.config.AsterixTransactionProperties; -import org.apache.asterix.common.config.GlobalConfig; -import org.apache.asterix.test.aql.TestsUtils; -import org.apache.asterix.testframework.context.TestCaseContext; - /** * Executes the Metadata tests. */ @@ -47,11 +46,12 @@ public class MetadataTest { private TestCaseContext tcCtx; private static final String PATH_ACTUAL = "mdtest" + File.separator; - private static final String PATH_BASE = StringUtils.join(new String[] { "src", "test", "resources", - "metadata" + File.separator }, File.separator); + private static final String PATH_BASE = StringUtils + .join(new String[] { "src", "test", "resources", "metadata" + File.separator }, File.separator); private static final String TEST_CONFIG_FILE_NAME = "asterix-build-configuration.xml"; private static AsterixTransactionProperties txnProperties; + private static final TestExecutor testExecutor = new TestExecutor(); @BeforeClass public static void setUp() throws Exception { @@ -78,7 +78,7 @@ public class MetadataTest { // clean up the files written by the ASTERIX storage manager for (String d : AsterixHyracksIntegrationUtil.getDataDirs()) { - TestsUtils.deleteRec(new File(d)); + testExecutor.deleteRec(new File(d)); } } @@ -107,7 +107,7 @@ public class MetadataTest { @Test public void test() throws Exception { - TestsUtils.executeTest(PATH_ACTUAL, tcCtx, null, false); + testExecutor.executeTest(PATH_ACTUAL, tcCtx, null, false); } } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/java/org/apache/asterix/test/querygen/AQLToSQLPPConverter.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/java/org/apache/asterix/test/querygen/AQLToSQLPPConverter.java b/asterix-app/src/test/java/org/apache/asterix/test/querygen/AQLToSQLPPConverter.java new file mode 100644 index 0000000..ede621b --- /dev/null +++ b/asterix-app/src/test/java/org/apache/asterix/test/querygen/AQLToSQLPPConverter.java @@ -0,0 +1,107 @@ +/* + * 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.asterix.test.querygen; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.List; + +import org.apache.asterix.lang.aql.parser.AQLParser; +import org.apache.asterix.lang.aql.util.AQLFormatPrintUtil; +import org.apache.asterix.lang.common.base.Statement; +import org.apache.asterix.lang.sqlpp.parser.SQLPPParser; +import org.apache.commons.io.FileUtils; + +public class AQLToSQLPPConverter { + + public static void convert(String dirName) throws Exception { + File dir = new File(dirName); + File target = new File(dirName + "_sqlpp"); + FileUtils.deleteQuietly(target); + FileUtils.forceMkdir(target); + convert(dir, target); + } + + private static void convert(File src, File dest) throws Exception { + if (src.isFile()) { + DataInputStream dis = new DataInputStream(new FileInputStream(src)); + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(src))); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dest))); + try { + String line = null; + while ((line = reader.readLine()) != null) { + if (line.startsWith("/*") || line.startsWith(" *") || line.startsWith("*")) { + writer.write(line + "\n"); + } else { + break; + } + } + writer.write("\n"); + AQLParser parser = new AQLParser(dis); + List statements = parser.parse(); + dis.close(); + String sqlString = AQLFormatPrintUtil.toSQLPPString(statements); + writer.write(sqlString); + } catch (Exception e) { + System.out.println("AQL parser fails at: " + src.getAbsolutePath()); + //e.printStackTrace(); + } finally { + dis.close(); + reader.close(); + writer.close(); + } + + BufferedReader sqlReader = new BufferedReader(new InputStreamReader(new FileInputStream(dest))); + try { + SQLPPParser sqlParser = new SQLPPParser(sqlReader); + sqlParser.parse(); + } catch (Exception e) { + System.out.println("SQL++ parser cannot parse: "); + System.out.println(dest.getAbsolutePath()); + e.printStackTrace(); + } finally { + sqlReader.close(); + } + return; + } + for (File child : src.listFiles()) { + String lastName = child.getName(); + lastName = lastName.replaceAll("\\.aql", "\\.sqlpp"); + File targetChild = new File(dest, lastName); + if (child.isDirectory()) { + FileUtils.forceMkdir(targetChild); + } else { + targetChild.createNewFile(); + } + convert(child, targetChild); + } + } + + public static void main(String[] args) throws Exception { + convert("src/test/resources/runtimets/queries"); + convert("src/test/resources/optimizerts/queries"); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/java/org/apache/asterix/test/runtime/ExecutionTest.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/java/org/apache/asterix/test/runtime/ExecutionTest.java b/asterix-app/src/test/java/org/apache/asterix/test/runtime/ExecutionTest.java index 9524e0d..2cba6c8 100644 --- a/asterix-app/src/test/java/org/apache/asterix/test/runtime/ExecutionTest.java +++ b/asterix-app/src/test/java/org/apache/asterix/test/runtime/ExecutionTest.java @@ -31,6 +31,7 @@ import org.apache.asterix.common.config.AsterixTransactionProperties; import org.apache.asterix.common.config.GlobalConfig; import org.apache.asterix.external.dataset.adapter.FileSystemBasedAdapter; import org.apache.asterix.external.util.IdentitiyResolverFactory; +import org.apache.asterix.test.aql.TestExecutor; import org.apache.asterix.test.aql.TestsUtils; import org.apache.asterix.testframework.context.TestCaseContext; import org.apache.asterix.testframework.xml.TestGroup; @@ -53,12 +54,13 @@ public class ExecutionTest { protected static final Logger LOGGER = Logger.getLogger(ExecutionTest.class.getName()); protected static final String PATH_ACTUAL = "rttest" + File.separator; - protected static final String PATH_BASE = StringUtils.join( - new String[] { "src", "test", "resources", "runtimets" }, File.separator); + protected static final String PATH_BASE = StringUtils.join(new String[] { "src", "test", "resources", "runtimets" }, + File.separator); protected static final String TEST_CONFIG_FILE_NAME = "asterix-build-configuration.xml"; protected static AsterixTransactionProperties txnProperties; + private final static TestExecutor testExecutor = new TestExecutor(); protected static TestGroup FailedGroup; @@ -88,7 +90,8 @@ public class ExecutionTest { HDFSCluster.getInstance().setup(); - // Set the node resolver to be the identity resolver that expects node names + // Set the node resolver to be the identity resolver that expects node + // names // to be node controller ids; a valid assumption in test environment. System.setProperty(FileSystemBasedAdapter.NODE_RESOLVER_FACTORY_PROPERTY, IdentitiyResolverFactory.class.getName()); @@ -107,7 +110,7 @@ public class ExecutionTest { } // clean up the files written by the ASTERIX storage manager for (String d : AsterixHyracksIntegrationUtil.getDataDirs()) { - TestsUtils.deleteRec(new File(d)); + testExecutor.deleteRec(new File(d)); } HDFSCluster.getInstance().cleanup(); @@ -123,10 +126,9 @@ public class ExecutionTest { failedSuite.setQueryOffsetPath("queries"); failedSuite.getTestGroup().add(FailedGroup); marshaller.marshal(failedSuite, temp); - System.err.println("The failed.xml is written to :" + temp.getAbsolutePath() + - ". You can copy it to only.xml by the following cmd:" + - "\rcp " + temp.getAbsolutePath() + " " + - Paths.get("./src/test/resources/runtimets/only.xml").toAbsolutePath()); + System.err.println("The failed.xml is written to :" + temp.getAbsolutePath() + + ". You can copy it to only.xml by the following cmd:" + "\rcp " + temp.getAbsolutePath() + " " + + Paths.get("./src/test/resources/runtimets/only.xml").toAbsolutePath()); } } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/java/org/apache/asterix/test/runtime/RepeatedTest.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/java/org/apache/asterix/test/runtime/RepeatedTest.java b/asterix-app/src/test/java/org/apache/asterix/test/runtime/RepeatedTest.java index 370b8a1..edb05d4 100644 --- a/asterix-app/src/test/java/org/apache/asterix/test/runtime/RepeatedTest.java +++ b/asterix-app/src/test/java/org/apache/asterix/test/runtime/RepeatedTest.java @@ -32,13 +32,12 @@ import org.junit.runners.Parameterized.Parameters; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.Statement; -import org.apache.asterix.test.aql.TestsUtils; +import org.apache.asterix.test.aql.TestExecutor; import org.apache.asterix.test.runtime.RepeatRule.Repeat; import org.apache.asterix.testframework.context.TestCaseContext; /** * Runs runtime test cases that have been identified in the repeatedtestsuite.xml. - * * Each test is run 10000 times. */ class RepeatRule implements MethodRule { @@ -85,7 +84,8 @@ class RepeatRule implements MethodRule { public class RepeatedTest extends ExecutionTest { private int count; - + private final TestExecutor testExecutor = new TestExecutor(); + @Parameters public static Collection tests() throws Exception { Collection testArgs = buildTestsInXml(TestCaseContext.DEFAULT_REPEADED_TESTSUITE_XML_NAME); @@ -104,6 +104,6 @@ public class RepeatedTest extends ExecutionTest { @Repeat(times = 10000) public void test() throws Exception { System.err.println("***** Test Count: " + (++count) + " ******"); - TestsUtils.executeTest(PATH_ACTUAL, tcCtx, null, false); + testExecutor.executeTest(PATH_ACTUAL, tcCtx, null, false); } } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/OptimizerParserTest.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/OptimizerParserTest.java b/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/OptimizerParserTest.java new file mode 100644 index 0000000..61c6064 --- /dev/null +++ b/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/OptimizerParserTest.java @@ -0,0 +1,133 @@ +/* + * 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.asterix.test.sqlpp; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collection; +import java.util.logging.Logger; + +import org.apache.asterix.test.base.AsterixTestHelper; +import org.apache.asterix.test.common.TestHelper; +import org.junit.AfterClass; +import org.junit.Assume; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.internal.AssumptionViolatedException; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +@RunWith(Parameterized.class) +public class OptimizerParserTest { + + private static final Logger LOGGER = Logger.getLogger(OptimizerParserTest.class.getName()); + + private static final String SEPARATOR = File.separator; + private static final String EXTENSION_QUERY = "sqlpp"; + private static final String EXTENSION_RESULT = "ast"; + private static final String FILENAME_IGNORE = "ignore.txt"; + private static final String FILENAME_ONLY = "only.txt"; + private static final String PATH_BASE = "src" + SEPARATOR + "test" + SEPARATOR + "resources" + SEPARATOR + + "optimizerts" + SEPARATOR; + private static final String PATH_QUERIES = PATH_BASE + "queries_sqlpp" + SEPARATOR; + private static final String PATH_EXPECTED = PATH_BASE + "results_parser_sqlpp" + SEPARATOR; + private static final String PATH_ACTUAL = "opt_parserts" + SEPARATOR; + + private static final ArrayList ignore = AsterixTestHelper.readFile(FILENAME_IGNORE, PATH_BASE); + private static final ArrayList only = AsterixTestHelper.readFile(FILENAME_ONLY, PATH_BASE); + + @BeforeClass + public static void setUp() throws Exception { + System.err.println("Starting SQL++ parser tests for runtime test queries"); + } + + @AfterClass + public static void tearDown() throws Exception { + File outdir = new File(PATH_ACTUAL); + File[] files = outdir.listFiles(); + if (files == null || files.length == 0) { + outdir.delete(); + } + } + + private static void suiteBuild(File dir, Collection testArgs, String path) { + for (File file : dir.listFiles()) { + if (file.isDirectory() && !file.getName().startsWith(".")) { + suiteBuild(file, testArgs, path + file.getName() + SEPARATOR); + } + if (file.isFile() && file.getName().endsWith(EXTENSION_QUERY)) { + String resultFileName = AsterixTestHelper.extToResExt(file.getName(), EXTENSION_RESULT); + File expectedFile = new File(PATH_EXPECTED + path + resultFileName); + File actualFile = new File(PATH_ACTUAL + SEPARATOR + path.replace(SEPARATOR, "_") + resultFileName); + testArgs.add(new Object[] { file, expectedFile, actualFile }); + } + } + } + + @Parameters + public static Collection tests() { + Collection testArgs = new ArrayList(); + suiteBuild(new File(PATH_QUERIES), testArgs, ""); + return testArgs; + } + + private File actualFile; + private File expectedFile; + private File queryFile; + + private ParserTestExecutor parserTestExecutor = new ParserTestExecutor(); + + public OptimizerParserTest(File queryFile, File expectedFile, File actualFile) { + this.queryFile = queryFile; + this.expectedFile = expectedFile; + this.actualFile = actualFile; + } + + @Test + public void test() throws Exception { + try { + String queryFileShort = queryFile.getPath().substring(PATH_QUERIES.length()).replace(SEPARATOR.charAt(0), + '/'); + if (!only.isEmpty()) { + boolean toRun = TestHelper.isInPrefixList(only, queryFileShort); + if (!toRun) { + LOGGER.info("SKIP TEST: \"" + queryFile.getPath() + + "\" \"only.txt\" not empty and not in \"only.txt\"."); + } + Assume.assumeTrue(toRun); + } + boolean skipped = TestHelper.isInPrefixList(ignore, queryFileShort); + if (skipped) { + LOGGER.info("SKIP TEST: \"" + queryFile.getPath() + "\" in \"ignore.txt\"."); + } + Assume.assumeTrue(!skipped); + + LOGGER.info("RUN TEST: \"" + queryFile.getPath() + "\""); + parserTestExecutor.testSQLPPParser(queryFile, actualFile, expectedFile); + } catch (Exception e) { + if (!(e instanceof AssumptionViolatedException)) { + LOGGER.severe("Test \"" + queryFile.getPath() + "\" FAILED!"); + throw new Exception("Test \"" + queryFile.getPath() + "\" FAILED!", e); + } else { + throw e; + } + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java b/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java new file mode 100644 index 0000000..79ad9ed --- /dev/null +++ b/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java @@ -0,0 +1,172 @@ +/* + * 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.asterix.test.sqlpp; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.io.Reader; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.asterix.common.config.GlobalConfig; +import org.apache.asterix.common.exceptions.AsterixException; +import org.apache.asterix.lang.common.base.Statement; +import org.apache.asterix.lang.common.base.Statement.Kind; +import org.apache.asterix.lang.common.statement.DataverseDecl; +import org.apache.asterix.lang.common.statement.FunctionDecl; +import org.apache.asterix.lang.common.statement.Query; +import org.apache.asterix.lang.sqlpp.parser.SQLPPParser; +import org.apache.asterix.lang.sqlpp.rewrites.SqlppRewriter; +import org.apache.asterix.lang.sqlpp.util.FunctionUtils; +import org.apache.asterix.lang.sqlpp.util.SqlppAstPrintUtil; +import org.apache.asterix.metadata.declared.AqlMetadataProvider; +import org.apache.asterix.test.aql.TestExecutor; +import org.apache.asterix.testframework.context.TestCaseContext; +import org.apache.asterix.testframework.context.TestFileContext; +import org.apache.asterix.testframework.xml.TestCase.CompilationUnit; +import org.apache.asterix.testframework.xml.TestGroup; + +import junit.extensions.PA; + +public class ParserTestExecutor extends TestExecutor { + + @Override + public void executeTest(String actualPath, TestCaseContext testCaseCtx, ProcessBuilder pb, + boolean isDmlRecoveryTest, TestGroup failedGroup) throws Exception { + int queryCount = 0; + List cUnits = testCaseCtx.getTestCase().getCompilationUnit(); + for (CompilationUnit cUnit : cUnits) { + LOGGER.info( + "Starting [TEST]: " + testCaseCtx.getTestCase().getFilePath() + "/" + cUnit.getName() + " ... "); + List testFileCtxs = testCaseCtx.getTestFiles(cUnit); + List expectedResultFileCtxs = testCaseCtx.getExpectedResultFiles(cUnit); + for (TestFileContext ctx : testFileCtxs) { + File testFile = ctx.getFile(); + try { + if (queryCount >= expectedResultFileCtxs.size()) { + throw new IllegalStateException("no result file for " + testFile.toString() + "; queryCount: " + + queryCount + ", filectxs.size: " + expectedResultFileCtxs.size()); + } + + // Runs the test query. + File actualResultFile = testCaseCtx.getActualResultFile(cUnit, new File(actualPath)); + File expectedResultFile = expectedResultFileCtxs.get(queryCount).getFile(); + testSQLPPParser(testFile, actualResultFile, expectedResultFile); + + LOGGER.info( + "[TEST]: " + testCaseCtx.getTestCase().getFilePath() + "/" + cUnit.getName() + " PASSED "); + queryCount++; + } catch (Exception e) { + System.err.println("testFile " + testFile.toString() + " raised an exception:"); + e.printStackTrace(); + if (cUnit.getExpectedError().isEmpty()) { + System.err.println("...Unexpected!"); + if (failedGroup != null) { + failedGroup.getTestCase().add(testCaseCtx.getTestCase()); + } + throw new Exception("Test \"" + testFile + "\" FAILED!", e); + } else { + LOGGER.info("[TEST]: " + testCaseCtx.getTestCase().getFilePath() + "/" + cUnit.getName() + + " failed as expected: " + e.getMessage()); + System.err.println("...but that was expected."); + } + } + } + } + + } + + // Tests the SQL++ parser. + public void testSQLPPParser(File queryFile, File actualResultFile, File expectedFile) throws Exception { + Reader reader = new BufferedReader(new InputStreamReader(new FileInputStream(queryFile), "UTF-8")); + actualResultFile.getParentFile().mkdirs(); + PrintWriter writer = new PrintWriter(new FileOutputStream(actualResultFile)); + SQLPPParser parser = new SQLPPParser(reader); + GlobalConfig.ASTERIX_LOGGER.info(queryFile.toString()); + try { + List statements = parser.parse(); + List functions = getDeclaredFunctions(statements); + String dvName = getDefaultDataverse(statements); + AqlMetadataProvider aqlMetadataProvider = mock(AqlMetadataProvider.class); + + @SuppressWarnings("unchecked") + Map config = mock(Map.class); + when(aqlMetadataProvider.getDefaultDataverseName()).thenReturn(dvName); + when(aqlMetadataProvider.getConfig()).thenReturn(config); + when(config.get(FunctionUtils.IMPORT_PRIVATE_FUNCTIONS)).thenReturn("true"); + + for (Statement st : statements) { + if (st.getKind() == Kind.QUERY) { + Query query = (Query) st; + SqlppRewriter rewriter = new SqlppRewriter(functions, query, aqlMetadataProvider); + rewrite(rewriter); + } + SqlppAstPrintUtil.print(st, writer); + } + writer.close(); + // Compares the actual result and the expected result. + runScriptAndCompareWithResult(queryFile, new PrintWriter(System.err), expectedFile, actualResultFile); + } catch (Exception e) { + GlobalConfig.ASTERIX_LOGGER.warning("Failed while testing file " + reader); + throw e; + } finally { + reader.close(); + writer.close(); + } + } + + // Extracts declared functions. + private List getDeclaredFunctions(List statements) { + List functionDecls = new ArrayList(); + for (Statement st : statements) { + if (st.getKind().equals(Statement.Kind.FUNCTION_DECL)) { + functionDecls.add((FunctionDecl) st); + } + } + return functionDecls; + } + + // Gets the default dataverse for the input statements. + private String getDefaultDataverse(List statements) { + for (Statement st : statements) { + if (st.getKind().equals(Statement.Kind.DATAVERSE_DECL)) { + DataverseDecl dv = (DataverseDecl) st; + return dv.getDataverseName().getValue(); + } + } + return null; + } + + // Rewrite queries. + // Note: we do not do inline function rewriting here because this needs real + // metadata access. + private void rewrite(SqlppRewriter rewriter) throws AsterixException { + PA.invokeMethod(rewriter, "inlineColumnAlias()"); + PA.invokeMethod(rewriter, "variableCheckAndRewrite()"); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/RuntimeParserTest.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/RuntimeParserTest.java b/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/RuntimeParserTest.java new file mode 100644 index 0000000..aca1e13 --- /dev/null +++ b/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/RuntimeParserTest.java @@ -0,0 +1,94 @@ +/* + * 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.asterix.test.sqlpp; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collection; +import java.util.logging.Logger; + +import org.apache.asterix.test.aql.TestExecutor; +import org.apache.asterix.testframework.context.TestCaseContext; +import org.apache.commons.lang3.StringUtils; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +/** + * Runs the runtime test cases under + * 'asterix-app/src/test/resources/runtimets/queries_sqlpp'. + */ +@RunWith(Parameterized.class) +public class RuntimeParserTest { + + protected static final Logger LOGGER = Logger.getLogger(RuntimeParserTest.class.getName()); + + protected static final String PATH_ACTUAL = "runtime_parserts" + File.separator; + protected static final String PATH_BASE = StringUtils.join(new String[] { "src", "test", "resources", "runtimets" }, + File.separator); + + private final TestExecutor testExecutor = new ParserTestExecutor(); + + @BeforeClass + public static void setUp() throws Exception { + System.err.println("Starting SQL++ parser tests for runtime test queries"); + } + + @AfterClass + public static void tearDown() throws Exception { + File outdir = new File(PATH_ACTUAL); + File[] files = outdir.listFiles(); + if (files == null || files.length == 0) { + outdir.delete(); + } + } + + @Parameters + public static Collection tests() throws Exception { + Collection testArgs = buildTestsInXml(TestCaseContext.ONLY_TESTSUITE_XML_NAME); + if (testArgs.size() == 0) { + testArgs = buildTestsInXml("testsuite_sqlpp_parser.xml"); + } + return testArgs; + } + + protected static Collection buildTestsInXml(String xmlfile) throws Exception { + Collection testArgs = new ArrayList(); + TestCaseContext.Builder b = new TestCaseContext.Builder(); + for (TestCaseContext ctx : b.build(new File(PATH_BASE), xmlfile)) { + testArgs.add(new Object[] { ctx }); + } + return testArgs; + } + + protected TestCaseContext tcCtx; + + public RuntimeParserTest(TestCaseContext tcCtx) { + this.tcCtx = tcCtx; + } + + @Test + public void test() throws Exception { + testExecutor.executeTest(PATH_ACTUAL, tcCtx, null, false); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/SmokeParserTest.java ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/SmokeParserTest.java b/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/SmokeParserTest.java new file mode 100644 index 0000000..a924d7c --- /dev/null +++ b/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/SmokeParserTest.java @@ -0,0 +1,133 @@ +/* + * 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.asterix.test.sqlpp; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collection; +import java.util.logging.Logger; + +import org.apache.asterix.test.base.AsterixTestHelper; +import org.apache.asterix.test.common.TestHelper; +import org.junit.AfterClass; +import org.junit.Assume; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.internal.AssumptionViolatedException; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +@RunWith(Parameterized.class) +public class SmokeParserTest { + + private static final Logger LOGGER = Logger.getLogger(SmokeParserTest.class.getName()); + + private static final String SEPARATOR = File.separator; + private static final String EXTENSION_QUERY = "sqlpp"; + private static final String EXTENSION_RESULT = "ast"; + private static final String FILENAME_IGNORE = "ignore.txt"; + private static final String FILENAME_ONLY = "only.txt"; + private static final String PATH_BASE = "src" + SEPARATOR + "test" + SEPARATOR + "resources" + SEPARATOR + + "parserts" + SEPARATOR; + private static final String PATH_QUERIES = PATH_BASE + "queries_sqlpp" + SEPARATOR; + private static final String PATH_EXPECTED = PATH_BASE + "results_parser_sqlpp" + SEPARATOR; + private static final String PATH_ACTUAL = "parserts" + SEPARATOR; + + private static final ArrayList ignore = AsterixTestHelper.readFile(FILENAME_IGNORE, PATH_BASE); + private static final ArrayList only = AsterixTestHelper.readFile(FILENAME_ONLY, PATH_BASE); + + @BeforeClass + public static void setUp() throws Exception { + System.err.println("Starting SQL++ parser smoke tests"); + } + + @AfterClass + public static void tearDown() throws Exception { + File outdir = new File(PATH_ACTUAL); + File[] files = outdir.listFiles(); + if (files == null || files.length == 0) { + outdir.delete(); + } + } + + private static void suiteBuild(File dir, Collection testArgs, String path) { + for (File file : dir.listFiles()) { + if (file.isDirectory() && !file.getName().startsWith(".")) { + suiteBuild(file, testArgs, path + file.getName() + SEPARATOR); + } + if (file.isFile() && file.getName().endsWith(EXTENSION_QUERY)) { + String resultFileName = AsterixTestHelper.extToResExt(file.getName(), EXTENSION_RESULT); + File expectedFile = new File(PATH_EXPECTED + path + resultFileName); + File actualFile = new File(PATH_ACTUAL + SEPARATOR + path.replace(SEPARATOR, "_") + resultFileName); + testArgs.add(new Object[] { file, expectedFile, actualFile }); + } + } + } + + @Parameters + public static Collection tests() { + Collection testArgs = new ArrayList(); + suiteBuild(new File(PATH_QUERIES), testArgs, ""); + return testArgs; + } + + private File actualFile; + private File expectedFile; + private File queryFile; + + private ParserTestExecutor parserTestExecutor = new ParserTestExecutor(); + + public SmokeParserTest(File queryFile, File expectedFile, File actualFile) { + this.queryFile = queryFile; + this.expectedFile = expectedFile; + this.actualFile = actualFile; + } + + @Test + public void test() throws Exception { + try { + String queryFileShort = queryFile.getPath().substring(PATH_QUERIES.length()).replace(SEPARATOR.charAt(0), + '/'); + if (!only.isEmpty()) { + boolean toRun = TestHelper.isInPrefixList(only, queryFileShort); + if (!toRun) { + LOGGER.info("SKIP TEST: \"" + queryFile.getPath() + + "\" \"only.txt\" not empty and not in \"only.txt\"."); + } + Assume.assumeTrue(toRun); + } + boolean skipped = TestHelper.isInPrefixList(ignore, queryFileShort); + if (skipped) { + LOGGER.info("SKIP TEST: \"" + queryFile.getPath() + "\" in \"ignore.txt\"."); + } + Assume.assumeTrue(!skipped); + + LOGGER.info("RUN TEST: \"" + queryFile.getPath() + "\""); + parserTestExecutor.testSQLPPParser(queryFile, actualFile, expectedFile); + } catch (Exception e) { + if (!(e instanceof AssumptionViolatedException)) { + LOGGER.severe("Test \"" + queryFile.getPath() + "\" FAILED!"); + throw new Exception("Test \"" + queryFile.getPath() + "\" FAILED!", e); + } else { + throw e; + } + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/1.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/1.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/1.aql deleted file mode 100644 index e13643a..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/1.aql +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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. - */ -from $user in dataset('User') -where some $i in $user.interests satisfies $i = "movies" -select { "name": $user.name } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/2.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/2.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/2.aql deleted file mode 100644 index 4571288..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/2.aql +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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. - */ -from $event in dataset('Event') -from $sponsor in $event.sponsoring_sigs -with $es := { "event": $event, "sponsor": $sponsor } -group by $sig_name := $sponsor.sig_name keeping $es -with $sig_sponsorship_count := count($es) -with $by_chapter := - from $e in $es - group by $chapter_name := $e.sponsor.chapter_name keeping $es - select { "chapter_name": $chapter_name, "escount" : count($es) } -order by $sig_sponsorship_count desc -limit 5 -select { "sig_name": $sig_name, "total_count": $sig_sponsorship_count, "chapter_breakdown": $by_chapter } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/4.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/4.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/4.aql deleted file mode 100644 index f60795b..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/4.aql +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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. - */ -from $sig in dataset('SIGroup') -where $sig.name = "Movie-Watchers" -with $similar_sigs := - from $similar_sig in dataset('SIGroup') - where $similar_sig != $sig - and $similar_sig.interests ~= $sig.interests - select { "sig_name" : $similar_sig.name } -select { "similar_sigs" : $similar_sigs } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/5.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/5.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/5.aql deleted file mode 100644 index 2687bf1..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/5.aql +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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. - */ -from $event in dataset('Event') -where $event.name = "The Night of the Ad Eaters, 29th edition" -with $collocated_events := - from $collocated_event in dataset('Events') - where $collocated_event.location.street ~= $event.location.street - and $collocated_event.location.city = $event.location.city - and $collocated_event.location.state = $event.location.state - and $collocated_event.location.zip = $event.location.zip - select { "event_name" : $collocated_event.name } -select { "collocated_evnets" : $collocated_events } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/6.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/6.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/6.aql deleted file mode 100644 index 1dd358f..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/6.aql +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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. - */ -from $user in dataset('Users') -with $similar_users := - from $similar_user in dataset('Users') - with $similarity := jaccard_similarity($user.interests, $similar_user.interests) - where $user != $similar_user - and $similarity >= .75 - order by $similarity desc - limit 10 - select { "user_name" : $similar_user.name, "similarity" : $similarity } -select { "user_name" : $user.name, "similar_users" : $similar_users } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/ANYInFieldAccessor.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/ANYInFieldAccessor.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/ANYInFieldAccessor.aql deleted file mode 100644 index 12e3f96..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/ANYInFieldAccessor.aql +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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. - */ -from $user in dataset('User') -from $mv in dataset('Movie') -where some $i in $user.interests satisfies $i.movie = $mv.movie[?] -select { "name": $user.name, "movie": $mv.movie } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/IfInFLOWGR.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/IfInFLOWGR.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/IfInFLOWGR.aql deleted file mode 100644 index cf65175..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/IfInFLOWGR.aql +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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. - */ -from $i in [1,2,30,40] -from $j in {{4,5,6}} -select if ($i>$j) then $i else $j http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/ListConstructor.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/ListConstructor.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/ListConstructor.aql deleted file mode 100644 index b4ced83..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/ListConstructor.aql +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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. - */ -from $i in [1,2,3] -from $j in {{4,5,6}} -select $i+$j http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/WithFrom.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/WithFrom.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/WithFrom.aql deleted file mode 100644 index a384e16..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/WithFrom.aql +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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. - */ -with $users := dataset('User') -from $user in $users -where some $i in $user.interests satisfies $i = "movies" -select { "name": $user.name } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/fieldAccessor.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/fieldAccessor.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/fieldAccessor.aql deleted file mode 100644 index 667821d..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/fieldAccessor.aql +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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. - */ -with $bla := { "name" : "value" } -return - $bla."name" = $bla.name http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/functionDecl1.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/functionDecl1.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/functionDecl1.aql deleted file mode 100644 index 6b0364c..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/functionDecl1.aql +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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. - */ -declare function calculate($events){ -from $event in $events -from $sponsor in $event.sponsoring_sigs -with $es := { "event": $event, "sponsor": $sponsor } -group by $sig_name := $sponsor.sig_name keeping $es -with $sig_sponsorship_count := count($es) -with $by_chapter := - from $e in $es - group by $chapter_name := $e.sponsor.chapter_name keeping $es - select { "chapter_name": $chapter_name, "escount" : count($es) } -order by $sig_sponsorship_count desc -limit 5 -select { "sig_name": $sig_name, "total_count": $sig_sponsorship_count, "chapter_breakdown": $by_chapter } -} - -with $result := calculate(dataset('Events')) -select $result http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR.aql deleted file mode 100644 index 95a0e22..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR.aql +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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. - */ -from $user in - with $data := dataset('User') - select $data -where some $i in $user.interests satisfies $i = "movies" -select { "name": $user.name } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR1.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR1.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR1.aql deleted file mode 100644 index db114e4..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR1.aql +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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. - */ -from $i in [1,2,30,40] -from $j in {{4,5,6}} -select - from $k in if ($i>$j) then $i else $j - where $k <10 - select $k http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/391f09e5/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR2.aql ---------------------------------------------------------------------- diff --git a/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR2.aql b/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR2.aql deleted file mode 100644 index c9d772e..0000000 --- a/asterix-app/src/test/resources/AQLTS/queries-sql-like/nestedFLWOGR2.aql +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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. - */ -from $i in [1,2,30,from $tmp in dataset('number') select $tmp] -from $j in {{4,5,6}} -select - from $k in if ($i>$j) then $i else $j - where $k <10 - select $k