Repository: asterixdb Updated Branches: refs/heads/master 4756d1ca0 -> 32905418e
[NO ISSUE][TEST] Store a query output for subsequent test calls - user model changes: no - storage format changes: no - interface changes: no Details: - With this change, the test framework allow for a query to store its output for access by subsequent calls. The change also allow for a query to validate its output against a previous query. - This change also fixes a bug in Function datasource field access. Change-Id: Iab329fbdf4def5b46686a61c9399520ae71518c4 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2235 Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Contrib: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Reviewed-by: abdullah alamoudi <bamou...@gmail.com> Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/32905418 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/32905418 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/32905418 Branch: refs/heads/master Commit: 32905418e6560496aa33df25ad497075605cfdae Parents: 4756d1c Author: Abdullah Alamoudi <bamou...@gmail.com> Authored: Thu Jan 4 04:30:49 2018 +0300 Committer: abdullah alamoudi <bamou...@gmail.com> Committed: Thu Jan 4 08:32:02 2018 -0800 ---------------------------------------------------------------------- .../optimizer/rules/PushFieldAccessRule.java | 23 ++-- .../app/function/StorageComponentsFunction.java | 2 +- .../app/function/StorageComponentsReader.java | 6 +- .../asterix/test/common/TestExecutor.java | 112 +++++++++++++------ .../validate-expected.1.store.sqlpp | 21 ++++ .../validate-expected.2.validate.sqlpp | 20 ++++ .../resources/runtimets/testsuite_sqlpp.xml | 5 + 7 files changed, 140 insertions(+), 49 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/32905418/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java index e0fb1db..1766010 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java @@ -99,8 +99,8 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule { @SuppressWarnings("unchecked") private boolean isAccessToIndexedField(AssignOperator assign, IOptimizationContext context) throws AlgebricksException { - AbstractFunctionCallExpression accessFun = (AbstractFunctionCallExpression) assign.getExpressions().get(0) - .getValue(); + AbstractFunctionCallExpression accessFun = + (AbstractFunctionCallExpression) assign.getExpressions().get(0).getValue(); ILogicalExpression e0 = accessFun.getArguments().get(0).getValue(); if (e0.getExpressionTag() != LogicalExpressionTag.VARIABLE) { return false; @@ -161,8 +161,7 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule { if (op2.getOperatorTag() != LogicalOperatorTag.SELECT) { return false; } - ILogicalExpression e1 = (ILogicalExpression) access.getAnnotations() - .get(OperatorAnnotation.FIELD_ACCESS); + ILogicalExpression e1 = (ILogicalExpression) access.getAnnotations().get(OperatorAnnotation.FIELD_ACCESS); if (e1 == null) { return false; } @@ -215,8 +214,7 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule { pushItDown = true; } else if (op2.getOperatorTag() == LogicalOperatorTag.GROUP) { GroupByOperator g = (GroupByOperator) op2; - List<Pair<LogicalVariable, LogicalVariable>> varMappings = - new ArrayList<>(); + List<Pair<LogicalVariable, LogicalVariable>> varMappings = new ArrayList<>(); for (Pair<LogicalVariable, Mutable<ILogicalExpression>> p : g.getDecorList()) { ILogicalExpression e = p.second.getValue(); if (e.getExpressionTag() == LogicalExpressionTag.VARIABLE) { @@ -249,8 +247,8 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule { } if (pushItDown) { if (op2.getOperatorTag() == LogicalOperatorTag.NESTEDTUPLESOURCE) { - Mutable<ILogicalOperator> childOfSubplan = ((NestedTupleSourceOperator) op2).getDataSourceReference() - .getValue().getInputs().get(0); + Mutable<ILogicalOperator> childOfSubplan = + ((NestedTupleSourceOperator) op2).getDataSourceReference().getValue().getInputs().get(0); pushAccessDown(opRef, op2, childOfSubplan, context, finalAnnot); return true; } @@ -289,8 +287,8 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule { DataSourceScanOperator scan = (DataSourceScanOperator) op2; int n = scan.getVariables().size(); LogicalVariable scanRecordVar = scan.getVariables().get(n - 1); - AbstractFunctionCallExpression accessFun = (AbstractFunctionCallExpression) access.getExpressions() - .get(0).getValue(); + AbstractFunctionCallExpression accessFun = + (AbstractFunctionCallExpression) access.getExpressions().get(0).getValue(); ILogicalExpression e0 = accessFun.getArguments().get(0).getValue(); LogicalExpressionTag tag = e0.getExpressionTag(); if (tag == LogicalExpressionTag.VARIABLE) { @@ -300,7 +298,8 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule { if (e1.getExpressionTag() == LogicalExpressionTag.CONSTANT) { IDataSource<DataSourceId> dataSource = (IDataSource<DataSourceId>) scan.getDataSource(); byte dsType = ((DataSource) dataSource).getDatasourceType(); - if (dsType == DataSource.Type.FEED || dsType == DataSource.Type.LOADABLE) { + if (dsType == DataSource.Type.FEED || dsType == DataSource.Type.LOADABLE + || dsType == DataSource.Type.FUNCTION) { return false; } DataSourceId asid = dataSource.getId(); @@ -375,7 +374,7 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule { fldAccessOpRef.setValue(op2); List<Mutable<ILogicalOperator>> faInpList = fieldAccessOp.getInputs(); faInpList.clear(); - faInpList.add(new MutableObject<ILogicalOperator>(inputOfOp2.getValue())); + faInpList.add(new MutableObject<>(inputOfOp2.getValue())); inputOfOp2.setValue(fieldAccessOp); // typing context.computeAndSetTypeEnvironmentForOperator(fieldAccessOp); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/32905418/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsFunction.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsFunction.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsFunction.java index 73b2d0e..1a461a5 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsFunction.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsFunction.java @@ -45,7 +45,7 @@ public class StorageComponentsFunction extends AbstractDatasourceFunction { INcApplicationContext appCtx = (INcApplicationContext) serviceCtx.getApplicationContext(); DatasetLifecycleManager dsLifecycleMgr = (DatasetLifecycleManager) appCtx.getDatasetLifecycleManager(); DatasetResource dsr = dsLifecycleMgr.getDatasetLifecycle(datasetId); - return new StorageComponentsReader(dsr); + return new StorageComponentsReader(ctx.getJobletContext().getServiceContext().getNodeId(), dsr); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/32905418/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsReader.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsReader.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsReader.java index 4958d14..81f680d 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsReader.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsReader.java @@ -40,7 +40,7 @@ public class StorageComponentsReader extends FunctionReader { private final Iterator<String> it; private final CharArrayRecord record; - public StorageComponentsReader(DatasetResource dsr) throws HyracksDataException { + public StorageComponentsReader(String nodeId, DatasetResource dsr) throws HyracksDataException { components = new ArrayList<>(); if (dsr != null && dsr.isOpen()) { Map<Long, IndexInfo> indexes = dsr.getIndexes(); @@ -51,7 +51,9 @@ public class StorageComponentsReader extends FunctionReader { ILSMIndex index = value.getIndex(); String path = value.getLocalResource().getPath(); strBuilder.append('{'); - strBuilder.append("\"path\":\""); + strBuilder.append("\"node\":\""); + strBuilder.append(nodeId); + strBuilder.append("\", \"path\":\""); strBuilder.append(path); strBuilder.append("\", \"components\":["); // syncronize over the opTracker http://git-wip-us.apache.org/repos/asf/asterixdb/blob/32905418/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java index d66c2e9..0b3a135 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java @@ -108,13 +108,13 @@ public class TestExecutor { // see // https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers/417184 private static final long MAX_URL_LENGTH = 2000l; - private static final Pattern JAVA_BLOCK_COMMENT_PATTERN = Pattern.compile("/\\*.*\\*/", - Pattern.MULTILINE | Pattern.DOTALL); - private static final Pattern JAVA_SHELL_SQL_LINE_COMMENT_PATTERN = Pattern.compile("^(//|#|--).*$", - Pattern.MULTILINE); + private static final Pattern JAVA_BLOCK_COMMENT_PATTERN = + Pattern.compile("/\\*.*\\*/", Pattern.MULTILINE | Pattern.DOTALL); + private static final Pattern JAVA_SHELL_SQL_LINE_COMMENT_PATTERN = + Pattern.compile("^(//|#|--).*$", Pattern.MULTILINE); private static final Pattern REGEX_LINES_PATTERN = Pattern.compile("^(-)?/(.*)/([im]*)$"); - private static final Pattern POLL_TIMEOUT_PATTERN = Pattern.compile("polltimeoutsecs=(\\d+)(\\D|$)", - Pattern.MULTILINE); + private static final Pattern POLL_TIMEOUT_PATTERN = + Pattern.compile("polltimeoutsecs=(\\d+)(\\D|$)", Pattern.MULTILINE); private static final Pattern POLL_DELAY_PATTERN = Pattern.compile("polldelaysecs=(\\d+)(\\D|$)", Pattern.MULTILINE); private static final Pattern HANDLE_VARIABLE_PATTERN = Pattern.compile("handlevariable=(\\w+)"); private static final Pattern VARIABLE_REF_PATTERN = Pattern.compile("\\$(\\w+)"); @@ -130,7 +130,6 @@ public class TestExecutor { public static final String DIAGNOSE = "diagnose"; private static final String METRICS_QUERY_TYPE = "metrics"; - private static final HashMap<Integer, ITestServer> runningTestServers = new HashMap<>(); private static Map<String, InetSocketAddress> ncEndPoints; private static Map<String, InetSocketAddress> replicationAddress; @@ -188,10 +187,10 @@ public class TestExecutor { public void runScriptAndCompareWithResult(File scriptFile, PrintWriter print, File expectedFile, File actualFile, ComparisonEnum compare) throws Exception { System.err.println("Expected results file: " + expectedFile.toString()); - BufferedReader readerExpected = new BufferedReader( - new InputStreamReader(new FileInputStream(expectedFile), "UTF-8")); - BufferedReader readerActual = new BufferedReader( - new InputStreamReader(new FileInputStream(actualFile), "UTF-8")); + BufferedReader readerExpected = + new BufferedReader(new InputStreamReader(new FileInputStream(expectedFile), "UTF-8")); + BufferedReader readerActual = + new BufferedReader(new InputStreamReader(new FileInputStream(actualFile), "UTF-8")); boolean regex = false; try { if (ComparisonEnum.BINARY.equals(compare)) { @@ -374,10 +373,10 @@ public class TestExecutor { public void runScriptAndCompareWithResultRegex(File scriptFile, File expectedFile, File actualFile) throws Exception { String lineExpected, lineActual; - try (BufferedReader readerExpected = new BufferedReader( - new InputStreamReader(new FileInputStream(expectedFile), "UTF-8")); - BufferedReader readerActual = new BufferedReader( - new InputStreamReader(new FileInputStream(actualFile), "UTF-8"))) { + try (BufferedReader readerExpected = + new BufferedReader(new InputStreamReader(new FileInputStream(expectedFile), "UTF-8")); + BufferedReader readerActual = + new BufferedReader(new InputStreamReader(new FileInputStream(actualFile), "UTF-8"))) { StringBuilder actual = new StringBuilder(); while ((lineActual = readerActual.readLine()) != null) { actual.append(lineActual).append('\n'); @@ -721,8 +720,8 @@ public class TestExecutor { // Insert and Delete statements are executed here public void executeUpdate(String str, URI uri) throws Exception { // Create a method instance. - HttpUriRequest request = RequestBuilder.post(uri).setEntity(new StringEntity(str, StandardCharsets.UTF_8)) - .build(); + HttpUriRequest request = + RequestBuilder.post(uri).setEntity(new StringEntity(str, StandardCharsets.UTF_8)).build(); // Execute the method. executeAndCheckHttpRequest(request); @@ -732,10 +731,10 @@ public class TestExecutor { public InputStream executeAnyAQLAsync(String statement, boolean defer, OutputFormat fmt, URI uri, Map<String, Object> variableCtx) throws Exception { // Create a method instance. - HttpUriRequest request = RequestBuilder.post(uri) - .addParameter("mode", defer ? "asynchronous-deferred" : "asynchronous") - .setEntity(new StringEntity(statement, StandardCharsets.UTF_8)).setHeader("Accept", fmt.mimeType()) - .build(); + HttpUriRequest request = + RequestBuilder.post(uri).addParameter("mode", defer ? "asynchronous-deferred" : "asynchronous") + .setEntity(new StringEntity(statement, StandardCharsets.UTF_8)) + .setHeader("Accept", fmt.mimeType()).build(); String handleVar = getHandleVariable(statement); @@ -761,8 +760,8 @@ public class TestExecutor { // create function statement public void executeDDL(String str, URI uri) throws Exception { // Create a method instance. - HttpUriRequest request = RequestBuilder.post(uri).setEntity(new StringEntity(str, StandardCharsets.UTF_8)) - .build(); + HttpUriRequest request = + RequestBuilder.post(uri).setEntity(new StringEntity(str, StandardCharsets.UTF_8)).build(); // Execute the method. executeAndCheckHttpRequest(request); @@ -772,8 +771,8 @@ public class TestExecutor { // and returns the contents as a string // This string is later passed to REST API for execution. public String readTestFile(File testFile) throws Exception { - BufferedReader reader = new BufferedReader( - new InputStreamReader(new FileInputStream(testFile), StandardCharsets.UTF_8)); + BufferedReader reader = + new BufferedReader(new InputStreamReader(new FileInputStream(testFile), StandardCharsets.UTF_8)); String line; StringBuilder stringBuilder = new StringBuilder(); String ls = System.getProperty("line.separator"); @@ -803,8 +802,8 @@ public class TestExecutor { private static String getProcessOutput(Process p) throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); - Future<Integer> future = Executors.newSingleThreadExecutor() - .submit(() -> IOUtils.copy(p.getInputStream(), new OutputStream() { + Future<Integer> future = + Executors.newSingleThreadExecutor().submit(() -> IOUtils.copy(p.getInputStream(), new OutputStream() { @Override public void write(int b) throws IOException { baos.write(b); @@ -899,6 +898,32 @@ public class TestExecutor { expectedResultFile, actualResultFile, queryCount, expectedResultFileCtxs.size(), cUnit.getParameter(), ComparisonEnum.TEXT); break; + case "store": + // This is a query that returns the expected output of a subsequent query + String key = getKey(statement); + if (variableCtx.containsKey(key)) { + throw new IllegalStateException("There exist already a stored result with the key: " + key); + } + actualResultFile = new File(actualPath, testCaseCtx.getTestCase().getFilePath() + File.separatorChar + + cUnit.getName() + '.' + ctx.getSeqNum() + ".adm"); + executeQuery(OutputFormat.forCompilationUnit(cUnit), statement, variableCtx, ctx.getType(), testFile, + null, actualResultFile, queryCount, expectedResultFileCtxs.size(), cUnit.getParameter(), + ComparisonEnum.TEXT); + variableCtx.put(key, actualResultFile); + break; + case "validate": + // This is a query that validates the output against a previously executed query + key = getKey(statement); + expectedResultFile = (File) variableCtx.remove(key); + if (expectedResultFile == null) { + throw new IllegalStateException("There is no stored result with the key: " + key); + } + actualResultFile = new File(actualPath, testCaseCtx.getTestCase().getFilePath() + File.separatorChar + + cUnit.getName() + '.' + ctx.getSeqNum() + ".adm"); + executeQuery(OutputFormat.forCompilationUnit(cUnit), statement, variableCtx, ctx.getType(), testFile, + expectedResultFile, actualResultFile, queryCount, expectedResultFileCtxs.size(), + cUnit.getParameter(), ComparisonEnum.TEXT); + break; case "txnqbc": // qbc represents query before crash InputStream resultStream = executeQuery(statement, OutputFormat.forCompilationUnit(cUnit), getEndpoint(Servlets.AQL_QUERY), cUnit.getParameter()); @@ -963,7 +988,7 @@ public class TestExecutor { case "delete": expectedResultFile = (queryCount.intValue() < 0 || queryCount.intValue() >= expectedResultFileCtxs.size()) ? null - : expectedResultFileCtxs.get(queryCount.intValue()).getFile(); + : expectedResultFileCtxs.get(queryCount.intValue()).getFile(); actualResultFile = expectedResultFile == null ? null : testCaseCtx.getActualResultFile(cUnit, expectedResultFile, new File(actualPath)); executeHttpRequest(OutputFormat.forCompilationUnit(cUnit), statement, variableCtx, ctx.getType(), @@ -1213,15 +1238,20 @@ public class TestExecutor { } else { writeOutputToFile(actualResultFile, resultStream); if (expectedResultFile == null) { + if (reqType.equals("store")) { + return; + } Assert.fail("no result file for " + testFile.toString() + "; queryCount: " + queryCount + ", filectxs.size: " + numResultFiles); } - runScriptAndCompareWithResult(testFile, new PrintWriter(System.err), expectedResultFile, actualResultFile, - compare); + } + runScriptAndCompareWithResult(testFile, new PrintWriter(System.err), expectedResultFile, actualResultFile, + compare); + if (!reqType.equals("validate")) { queryCount.increment(); - // Deletes the matched result file. - actualResultFile.getParentFile().delete(); } + // Deletes the matched result file. + actualResultFile.getParentFile().delete(); } private void poll(TestCaseContext testCaseCtx, TestFileContext ctx, Map<String, Object> variableCtx, @@ -1319,6 +1349,21 @@ public class TestExecutor { } } + public static String getKey(String statement) { + String key = "key="; + String[] lines = statement.split("\n"); + for (String line : lines) { + if (line.contains(key)) { + String value = line.substring(line.indexOf(key) + key.length()).trim(); + if (value.length() == 0) { + break; + } + return value; + } + } + throw new IllegalArgumentException("ERROR: key=<KEY> must be present in store/validate file"); + } + public static int getRetryDelaySecs(String statement) { final Matcher retryDelayMatcher = POLL_DELAY_PATTERN.matcher(statement); return retryDelayMatcher.find() ? Integer.parseInt(retryDelayMatcher.group(1)) : 1; @@ -1604,8 +1649,7 @@ public class TestExecutor { } if (!toBeDropped.isEmpty()) { badtestcases.add(testCase); - LOGGER.warn( - "Last test left some garbage. Dropping dataverses: " + StringUtils.join(toBeDropped, ',')); + LOGGER.warn("Last test left some garbage. Dropping dataverses: " + StringUtils.join(toBeDropped, ',')); StringBuilder dropStatement = new StringBuilder(); for (String dv : toBeDropped) { dropStatement.append("drop dataverse "); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/32905418/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/validate-expected/validate-expected.1.store.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/validate-expected/validate-expected.1.store.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/validate-expected/validate-expected.1.store.sqlpp new file mode 100644 index 0000000..894837d --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/validate-expected/validate-expected.1.store.sqlpp @@ -0,0 +1,21 @@ +/* + * 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. + */ +-- key=someKey +select * from `Metadata`.`Index`; + http://git-wip-us.apache.org/repos/asf/asterixdb/blob/32905418/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/validate-expected/validate-expected.2.validate.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/validate-expected/validate-expected.2.validate.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/validate-expected/validate-expected.2.validate.sqlpp new file mode 100644 index 0000000..d257e9c --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/validate-expected/validate-expected.2.validate.sqlpp @@ -0,0 +1,20 @@ +/* + * 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. + */ +-- key=someKey +select * from `Metadata`.`Index`; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/32905418/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml index 2c3d855..fd47766 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@ -3445,6 +3445,11 @@ </test-group> <test-group name="misc"> <test-case FilePath="misc"> + <compilation-unit name="validate-expected"> + <output-dir compare="Text">validate-expected</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="misc"> <compilation-unit name="dataset-resources"> <output-dir compare="Text">dataset-resources</output-dir> </compilation-unit>