This is an automated email from the ASF dual-hosted git repository.
alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
The following commit(s) were added to refs/heads/master by this push:
new 85ed82a855 [NO ISSUE][OTH] Ensure supported chars in database object
names
85ed82a855 is described below
commit 85ed82a855e9a65475df5b009f44a73768cc55b2
Author: Ali Alsuliman <[email protected]>
AuthorDate: Mon Dec 18 20:52:40 2023 -0800
[NO ISSUE][OTH] Ensure supported chars in database object names
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
In cloud mode, the only chars allowed for database object
names are letters, digits, '-' and '_'. This is currently
ensured for DATABASE and DATAVERSE names. This patch is
to ensure the same thing for all other database objects.
Change-Id: Ib93d6c5b2364c96c049f07af511a44bc1adf4993
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18017
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Reviewed-by: Wail Alkowaileet <[email protected]>
---
.../apache/asterix/test/common/TestExecutor.java | 19 +++--
.../test.000.ddl.sqlpp} | 5 +-
.../test.001.ddl.sqlpp} | 6 +-
.../test.002.ddl.sqlpp} | 4 +-
.../test.003.ddl.sqlpp} | 6 +-
.../test.004.ddl.sqlpp} | 6 +-
.../test.999.ddl.sqlpp} | 4 +-
.../cloud_storage/special-chars/test.000.ddl.sqlpp | 2 +-
.../special-chars/test.001.update.sqlpp | 2 +-
.../special-chars/test.002.query.sqlpp | 2 +-
.../src/test/resources/runtimets/sqlpp_queries.xml | 94 +++++++++++-----------
.../runtimets/testsuite_cloud_storage.xml | 8 ++
.../metadata/declared/MetadataProvider.java | 3 +
.../src/main/resources/Catalog.xsd | 4 +-
14 files changed, 84 insertions(+), 81 deletions(-)
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 8641bd6c5a..9d62c5216e 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
@@ -2224,24 +2224,27 @@ public class TestExecutor {
String replacerId = executorId == null ? DEF_REPLACER : executorId;
List<CompilationUnit.ExpectedWarn> expectedWarns =
cUnit.getExpectedWarn();
- expectedWarns.stream().filter(w ->
!w.getReplacers().isEmpty()).forEach(w -> w.setValue(
- MessageFormat.format(w.getValue(), (Object[])
getReplacements(cUnit, replacerId, w.getReplacers()))));
+ expectedWarns.stream().filter(w -> w.getReplacers() != null &&
!w.getReplacers().isEmpty())
+ .forEach(w -> w.setValue(MessageFormat.format(w.getValue(),
+ (Object[]) getReplacements(cUnit, replacerId,
w.getReplacers()))));
List<CompilationUnit.ExpectedError> expectedErrors =
cUnit.getExpectedError();
- expectedErrors.stream().filter(e ->
!e.getReplacers().isEmpty()).forEach(e -> e.setValue(
- MessageFormat.format(e.getValue(), (Object[])
getReplacements(cUnit, replacerId, e.getReplacers()))));
+ expectedErrors.stream().filter(e -> e.getReplacers() != null &&
!e.getReplacers().isEmpty())
+ .forEach(e -> e.setValue(MessageFormat.format(e.getValue(),
+ (Object[]) getReplacements(cUnit, replacerId,
e.getReplacers()))));
}
- private static String[] getReplacements(CompilationUnit cUnit, String
replacerId, List<String> replacers) {
- Optional<String> replacements = replacers.stream().filter(s ->
s.startsWith(replacerId)).findFirst();
+ private static String[] getReplacements(CompilationUnit cUnit, String
replacerId, String replacersStr) {
+ String[] replacers = replacersStr.split("\\|");
+ Optional<String> replacements = Arrays.stream(replacers).filter(s ->
s.startsWith(replacerId)).findFirst();
if (replacements.isPresent()) {
return replacements.get().substring(replacerId.length() +
1).split(",");
}
LOGGER.error("Test '{}', could not find message replacements for '{}'
in replacements {}", cUnit.getName(),
- replacerId, replacers);
+ replacerId, replacersStr);
throw new RuntimeException(
String.format("Test '%s', could not find message replacements
for '%s' in replacements %s",
- cUnit.getName(), replacerId, replacers));
+ cUnit.getName(), replacerId, replacersStr));
}
private String applySubstitution(String statement, List<Parameter>
parameters) throws Exception {
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.000.ddl.sqlpp
similarity index 92%
copy from
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.000.ddl.sqlpp
index 15d9bbdf84..92836f1bbb 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.000.ddl.sqlpp
@@ -17,6 +17,5 @@
* under the License.
*/
-USE `part_1-`.`p_r-t2`;
-
-UPSERT INTO `some@dataset` {"id": 1};
\ No newline at end of file
+DROP DATABASE db1 IF EXISTS;
+CREATE DATABASE db1;
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.001.ddl.sqlpp
similarity index 89%
copy from
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.001.ddl.sqlpp
index 15d9bbdf84..4281c6c716 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.001.ddl.sqlpp
@@ -16,7 +16,5 @@
* specific language governing permissions and limitations
* under the License.
*/
-
-USE `part_1-`.`p_r-t2`;
-
-UPSERT INTO `some@dataset` {"id": 1};
\ No newline at end of file
+// should fail. only chars, letters, '-' and '_' are allowed
+CREATE DATAVERSE db1.`dv.with.dot`;
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.002.ddl.sqlpp
similarity index 92%
copy from
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.002.ddl.sqlpp
index 15d9bbdf84..5289b3dd83 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.002.ddl.sqlpp
@@ -17,6 +17,4 @@
* under the License.
*/
-USE `part_1-`.`p_r-t2`;
-
-UPSERT INTO `some@dataset` {"id": 1};
\ No newline at end of file
+CREATE DATAVERSE db1.dv1;
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.003.ddl.sqlpp
similarity index 86%
copy from
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.003.ddl.sqlpp
index 15d9bbdf84..fd83138029 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.003.ddl.sqlpp
@@ -16,7 +16,5 @@
* specific language governing permissions and limitations
* under the License.
*/
-
-USE `part_1-`.`p_r-t2`;
-
-UPSERT INTO `some@dataset` {"id": 1};
\ No newline at end of file
+// should fail. only chars, letters, '-' and '_' are allowed
+CREATE COLLECTION db1.dv1.`col.with.dot` PRIMARY KEY (id:int);
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.004.ddl.sqlpp
similarity index 89%
copy from
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.004.ddl.sqlpp
index 15d9bbdf84..4325a1bf02 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.004.ddl.sqlpp
@@ -16,7 +16,5 @@
* specific language governing permissions and limitations
* under the License.
*/
-
-USE `part_1-`.`p_r-t2`;
-
-UPSERT INTO `some@dataset` {"id": 1};
\ No newline at end of file
+// should fail. only chars, letters, '-' and '_' are allowed
+CREATE DATABASE `db.with.dot`;
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.999.ddl.sqlpp
similarity index 92%
copy from
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.999.ddl.sqlpp
index 15d9bbdf84..35487d3874 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/disallowed-chars/test.999.ddl.sqlpp
@@ -17,6 +17,4 @@
* under the License.
*/
-USE `part_1-`.`p_r-t2`;
-
-UPSERT INTO `some@dataset` {"id": 1};
\ No newline at end of file
+DROP DATABASE db1;
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.000.ddl.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.000.ddl.sqlpp
index d3915a8a71..874574884b 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.000.ddl.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.000.ddl.sqlpp
@@ -23,4 +23,4 @@ DROP DATAVERSE `part_1-`.`p_r-t2` IF EXISTS;
CREATE DATAVERSE `part_1-`.`p_r-t2`;
USE `part_1-`.`p_r-t2`;
-CREATE COLLECTION `some@dataset` PRIMARY KEY (id: int);
\ No newline at end of file
+CREATE COLLECTION `some_data-set` PRIMARY KEY (id: int);
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
index 15d9bbdf84..a22e37f363 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.001.update.sqlpp
@@ -19,4 +19,4 @@
USE `part_1-`.`p_r-t2`;
-UPSERT INTO `some@dataset` {"id": 1};
\ No newline at end of file
+UPSERT INTO `some_data-set` {"id": 1};
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.002.query.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.002.query.sqlpp
index 7019cabfa2..d6a925fcf7 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.002.query.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cloud_storage/special-chars/test.002.query.sqlpp
@@ -20,4 +20,4 @@
USE `part_1-`.`p_r-t2`;
SELECT VALUE COUNT(*)
-FROM `some@dataset`;
\ No newline at end of file
+FROM `some_data-set`;
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
index 9287df20c1..d6096a76f0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
@@ -50,7 +50,7 @@
<test-case FilePath="api" check-warnings="true">
<compilation-unit name="request-dataverse">
<output-dir compare="Text">request-dataverse</output-dir>
- <expected-warn replacers="cloud:Default.testUnknown
def:testUnknown">ASX1063: Cannot find dataverse with name {0}</expected-warn>
+ <expected-warn
replacers="cloud:Default.testUnknown|def:testUnknown">ASX1063: Cannot find
dataverse with name {0}</expected-warn>
<source-location>false</source-location>
</compilation-unit>
</test-case>
@@ -4010,7 +4010,7 @@
<test-case FilePath="custord">
<compilation-unit name="join_q_07">
<output-dir compare="Text">join_q_06</output-dir>
- <expected-error replacers="cloud:Default.test def:test">Cannot find
dataset c in dataverse {0} nor an alias with name c</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">Cannot find
dataset c in dataverse {0} nor an alias with name c</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="custord">
@@ -4084,7 +4084,7 @@
<test-case FilePath="dapd">
<compilation-unit name="q2-2-negative">
<output-dir compare="Text">q2</output-dir>
- <expected-error replacers="cloud:Default.test def:test">Cannot find
dataset e in dataverse {0} nor an alias with name e</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">Cannot find
dataset e in dataverse {0} nor an alias with name e</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="dapd">
@@ -4162,7 +4162,7 @@
<test-case FilePath="ddl">
<compilation-unit name="create-dataset-3">
<output-dir compare="Clean-JSON">create-dataset-3</output-dir>
- <expected-error replacers="cloud:Default.test def:test">ASX1077:
Cannot find dataset non_existent in dataverse {0} nor an alias with name
non_existent (in line 23, at column 21)</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">ASX1077:
Cannot find dataset non_existent in dataverse {0} nor an alias with name
non_existent (in line 23, at column 21)</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="ddl">
@@ -4219,8 +4219,8 @@
<test-case FilePath="ddl/create-index">
<compilation-unit name="create-index-6">
<output-dir compare="Text">none</output-dir>
- <expected-error replacers="cloud:Default.test def:test">ASX1050:
Cannot find dataset with name LineItemView1 in dataverse {0} (in line 55, at
column 1)</expected-error>
- <expected-error replacers="cloud:Default.test def:test">ASX1050:
Cannot find dataset with name LineItemView2 in dataverse {0} (in line 60, at
column 1)</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">ASX1050:
Cannot find dataset with name LineItemView1 in dataverse {0} (in line 55, at
column 1)</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">ASX1050:
Cannot find dataset with name LineItemView2 in dataverse {0} (in line 60, at
column 1)</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="ddl/create-index">
@@ -4231,7 +4231,7 @@
<test-case FilePath="ddl">
<compilation-unit name="bad-type-ddl">
<output-dir compare="Text">none</output-dir>
- <expected-error>ASX1079: Compilation error: Reserved type name
$x</expected-error>
+ <expected-error replacers="cloud:ASX1115: Invalid name for a database
object: '$x'|def:ASX1079: Compilation error: Reserved type name
$x">{0}</expected-error>
<expected-error>ASX0013: Duplicate field name 'c' (in line 29, at
column 19)</expected-error>
</compilation-unit>
</test-case>
@@ -4259,13 +4259,13 @@
<compilation-unit name="invalid-dataverse">
<output-dir compare="Text">invalid-dataverse</output-dir>
<source-location>false</source-location>
- <expected-warn replacers="cloud:Default.fakeDataverse
def:fakeDataverse">Cannot find dataverse with name {0} (in line 22, at column
1)</expected-warn>
- <expected-error replacers="cloud:Default.fakeDataverse
def:fakeDataverse">Cannot find dataverse with name {0} (in line 27, at column
1)</expected-error>
- <expected-warn replacers="cloud:Default.fakeDataverse
def:fakeDataverse">Cannot find dataverse with name {0} (in line 29, at column
1)</expected-warn>
- <expected-error replacers="cloud:Default.fakeDataverse
def:fakeDataverse">Cannot find dataverse with name {0} (in line 30, at column
1)</expected-error>
- <expected-error replacers="cloud:fakeDataverse
def:fakeDataverse">Cannot find datatype with name {0}.myType</expected-error>
- <expected-error replacers="cloud:Default.fakeDataverse
def:fakeDataverse">Cannot find dataverse with name {0} (in line 30, at column
1)</expected-error>
- <expected-error replacers="cloud:Default.fakeDataverse
def:fakeDataverse">Cannot find dataverse with name {0} (in line 32, at column
1)</expected-error>
+ <expected-warn
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">Cannot find dataverse
with name {0} (in line 22, at column 1)</expected-warn>
+ <expected-error
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">Cannot find dataverse
with name {0} (in line 27, at column 1)</expected-error>
+ <expected-warn
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">Cannot find dataverse
with name {0} (in line 29, at column 1)</expected-warn>
+ <expected-error
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">Cannot find dataverse
with name {0} (in line 30, at column 1)</expected-error>
+ <expected-error
replacers="cloud:fakeDataverse|def:fakeDataverse">Cannot find datatype with
name {0}.myType</expected-error>
+ <expected-error
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">Cannot find dataverse
with name {0} (in line 30, at column 1)</expected-error>
+ <expected-error
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">Cannot find dataverse
with name {0} (in line 32, at column 1)</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="ddl">
@@ -4364,14 +4364,14 @@
<test-case FilePath="ddl" check-warnings="true">
<compilation-unit name="drop_dataset_invalid_dataverse">
<output-dir compare="Text">drop_dataset_invalid_dataverse</output-dir>
- <expected-error replacers="cloud:Default.fakeDataverse
def:fakeDataverse">ASX1063: Cannot find dataverse with name {0} (in line 22, at
column 1)</expected-error>
- <expected-error replacers="cloud:Default.fakeDataverse
def:fakeDataverse">ASX1063: Cannot find dataverse with name {0} (in line 22, at
column 1)</expected-error>
- <expected-error replacers="cloud:Default.fakeDataverse
def:fakeDataverse">ASX1063: Cannot find dataverse with name {0} (in line 22, at
column 1)</expected-error>
- <expected-error replacers="cloud:Default.fakeDataverse
def:fakeDataverse">ASX1063: Cannot find dataverse with name {0} (in line 22, at
column 1)</expected-error>
- <expected-error replacers="cloud:Default.realDataverse
def:realDataverse">ASX1050: Cannot find dataset with name fakeDataset1 in
dataverse {0} (in line 22, at column 1)</expected-error>
- <expected-warn replacers="cloud:Default.fakeDataverse
def:fakeDataverse">ASX1063: Cannot find dataverse with name {0} (in line 22, at
column 1)</expected-warn>
- <expected-warn replacers="cloud:Default.fakeDataverse
def:fakeDataverse">ASX1063: Cannot find dataverse with name {0} (in line 22, at
column 1)</expected-warn>
- <expected-warn replacers="cloud:Default.fakeDataverse
def:fakeDataverse">ASX1063: Cannot find dataverse with name {0} (in line 22, at
column 1)</expected-warn>
+ <expected-error
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">ASX1063: Cannot find
dataverse with name {0} (in line 22, at column 1)</expected-error>
+ <expected-error
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">ASX1063: Cannot find
dataverse with name {0} (in line 22, at column 1)</expected-error>
+ <expected-error
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">ASX1063: Cannot find
dataverse with name {0} (in line 22, at column 1)</expected-error>
+ <expected-error
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">ASX1063: Cannot find
dataverse with name {0} (in line 22, at column 1)</expected-error>
+ <expected-error
replacers="cloud:Default.realDataverse|def:realDataverse">ASX1050: Cannot find
dataset with name fakeDataset1 in dataverse {0} (in line 22, at column
1)</expected-error>
+ <expected-warn
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">ASX1063: Cannot find
dataverse with name {0} (in line 22, at column 1)</expected-warn>
+ <expected-warn
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">ASX1063: Cannot find
dataverse with name {0} (in line 22, at column 1)</expected-warn>
+ <expected-warn
replacers="cloud:Default.fakeDataverse|def:fakeDataverse">ASX1063: Cannot find
dataverse with name {0} (in line 22, at column 1)</expected-warn>
</compilation-unit>
</test-case>
<test-case FilePath="ddl">
@@ -5955,13 +5955,13 @@
<test-case FilePath="group-by">
<compilation-unit name="core-01-error">
<output-dir compare="Text">none</output-dir>
- <expected-error replacers="cloud:Default.gby def:gby">Cannot find
dataset e in dataverse {0} nor an alias with name e</expected-error>
+ <expected-error replacers="cloud:Default.gby|def:gby">Cannot find
dataset e in dataverse {0} nor an alias with name e</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="group-by">
<compilation-unit name="core-02-error">
<output-dir compare="Text">none</output-dir>
- <expected-error replacers="cloud:Default.gby def:gby">Cannot find
dataset f in dataverse {0} nor an alias with name f</expected-error>
+ <expected-error replacers="cloud:Default.gby|def:gby">Cannot find
dataset f in dataverse {0} nor an alias with name f</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="group-by">
@@ -6720,7 +6720,7 @@
<test-case FilePath="join">
<compilation-unit name="cross-join-02-negative">
<output-dir compare="Text">none</output-dir>
- <expected-error replacers="cloud:Default.Default def:Default">ASX1077:
Cannot find dataset x in dataverse {0} nor an alias with name x (in line 26, at
column 39)</expected-error>
+ <expected-error replacers="cloud:Default.Default|def:Default">ASX1077:
Cannot find dataset x in dataverse {0} nor an alias with name x (in line 26, at
column 39)</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="join">
@@ -7105,8 +7105,8 @@
<compilation-unit name="partition-by-nonexistent-field">
<output-dir compare="Text">partition-by-nonexistent-field</output-dir>
<expected-error>Field 'id' is not found</expected-error>
- <expected-error replacers="cloud:Default.test def:test">Cannot find
dataset with name testds in dataverse {0}</expected-error>
- <expected-error replacers="cloud:Default.test def:test">Cannot find
dataset testds in dataverse {0} nor an alias with name testds</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">Cannot find
dataset with name testds in dataverse {0}</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">Cannot find
dataset testds in dataverse {0} nor an alias with name testds</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="misc">
@@ -7300,8 +7300,8 @@
<compilation-unit name="dump_index">
<output-dir compare="Text">dump_index</output-dir>
<expected-error>Cannot find index with name noindex</expected-error>
- <expected-error replacers="cloud:Default.test def:test">Cannot find
dataset with name nodataset in dataverse {0}</expected-error>
- <expected-error replacers="cloud:Default.nodataverse
def:nodataverse">Cannot find dataset with name ds in dataverse
{0}</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">Cannot find
dataset with name nodataset in dataverse {0}</expected-error>
+ <expected-error
replacers="cloud:Default.nodataverse|def:nodataverse">Cannot find dataset with
name ds in dataverse {0}</expected-error>
<expected-error>Unsupported type: dump-index cannot process input type
null</expected-error>
<expected-error>Unsupported type: dump-index cannot process input type
null</expected-error>
<expected-error>Unsupported type: dump-index cannot process input type
null</expected-error>
@@ -11656,7 +11656,7 @@
<test-case FilePath="synonym">
<compilation-unit name="synonym-02-negative">
<output-dir compare="Text">none</output-dir>
- <expected-error replacers="cloud:Default.UNKNOWN_DATAVERSE
def:UNKNOWN_DATAVERSE">ASX1063: Cannot find dataverse with name
{0}</expected-error>
+ <expected-error
replacers="cloud:Default.UNKNOWN_DATAVERSE|def:UNKNOWN_DATAVERSE">ASX1063:
Cannot find dataverse with name {0}</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="synonym">
@@ -13152,26 +13152,26 @@
<test-case FilePath="user-defined-functions">
<compilation-unit name="bad-function-ddl-1">
<output-dir compare="Text">bad-function-ddl-1</output-dir>
- <expected-error replacers="cloud:Default.experiments
def:experiments">Cannot find dataset TweetMessages in dataverse {0} nor an
alias with name TweetMessages</expected-error>
- <expected-error replacers="cloud:Default.experiments2
def:experiments2">Cannot find dataset TweetMessages2 in dataverse {0} nor an
alias with name TweetMessages2</expected-error>
+ <expected-error
replacers="cloud:Default.experiments|def:experiments">Cannot find dataset
TweetMessages in dataverse {0} nor an alias with name
TweetMessages</expected-error>
+ <expected-error
replacers="cloud:Default.experiments2|def:experiments2">Cannot find dataset
TweetMessages2 in dataverse {0} nor an alias with name
TweetMessages2</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
<compilation-unit name="bad-function-ddl-2">
<output-dir compare="Text">bad-function-ddl-2</output-dir>
- <expected-error replacers="cloud:Default.experiments2
def:experiments2">Cannot find dataset TweetMessages in dataverse {0} nor an
alias with name TweetMessages</expected-error>
+ <expected-error
replacers="cloud:Default.experiments2|def:experiments2">Cannot find dataset
TweetMessages in dataverse {0} nor an alias with name
TweetMessages</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
<compilation-unit name="bad-function-ddl-3">
<output-dir compare="Text">bad-function-ddl-3</output-dir>
- <expected-error replacers="cloud:Default.experiments
def:experiments">Cannot find dataset TweetMessages in dataverse {0} nor an
alias with name TweetMessages</expected-error>
+ <expected-error
replacers="cloud:Default.experiments|def:experiments">Cannot find dataset
TweetMessages in dataverse {0} nor an alias with name
TweetMessages</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
<compilation-unit name="bad-function-ddl-4">
<output-dir compare="Text">bad-function-ddl-4</output-dir>
- <expected-error replacers="cloud:Default.experients
def:experients">Cannot find dataset TweetMessages in dataverse {0} nor an alias
with name TweetMessages</expected-error>
+ <expected-error
replacers="cloud:Default.experients|def:experients">Cannot find dataset
TweetMessages in dataverse {0} nor an alias with name
TweetMessages</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
@@ -13190,13 +13190,13 @@
<test-case FilePath="user-defined-functions">
<compilation-unit name="bad-function-ddl-7">
<output-dir compare="Text">bad-function-ddl-7</output-dir>
- <expected-error replacers="cloud:Default.experiments
def:experiments">Cannot find dataset TweetMessaes in dataverse {0} nor an alias
with name TweetMessaes</expected-error>
+ <expected-error
replacers="cloud:Default.experiments|def:experiments">Cannot find dataset
TweetMessaes in dataverse {0} nor an alias with name
TweetMessaes</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
<compilation-unit name="bad-function-ddl-8">
<output-dir compare="Text">bad-function-ddl-8</output-dir>
- <expected-error replacers="cloud:Default.experiments
def:experiments">Cannot find dataset TweetMessaes in dataverse {0} nor an alias
with name TweetMessaes</expected-error>
+ <expected-error
replacers="cloud:Default.experiments|def:experiments">Cannot find dataset
TweetMessaes in dataverse {0} nor an alias with name
TweetMessaes</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
@@ -13308,7 +13308,7 @@
<test-case FilePath="user-defined-functions">
<compilation-unit name="query-ASTERIXDB-1652">
<output-dir compare="Text">query-ASTERIXDB-1652-2</output-dir>
- <expected-error replacers="cloud:Default.test def:test">ASX1063:
Cannot find dataverse with name {0}</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">ASX1063:
Cannot find dataverse with name {0}</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
@@ -13589,7 +13589,7 @@
<test-case FilePath="view">
<compilation-unit name="create-view-2-negative">
<output-dir compare="Text">none</output-dir>
- <expected-error replacers="cloud:Default.test def:test">ASX1063:
Cannot find dataverse with name {0} (in line 24, at column 1)</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">ASX1063:
Cannot find dataverse with name {0} (in line 24, at column 1)</expected-error>
<expected-error><![CDATA[ASX1001: Syntax error: In line 25 >>create
view test.v1 as select * from range(1,2) r order by;<< Encountered ";" at
column 59]]></expected-error>
<expected-error>ASX1081: Cannot find function with signature
test.undefined_range(2) (in line 25, at column 38)</expected-error>
<expected-error>ASX1160: A view with this name test.v1 already exists
(in line 26, at column 1)</expected-error>
@@ -13669,7 +13669,7 @@
<expected-error><![CDATA[ASX1166: Invalid foreign key definition:
foreign key does not match primary key of view test1.employee_v1 (in line 34,
at column 1)]]></expected-error>
<expected-error><![CDATA[ASX1166: Invalid foreign key definition:
foreign key does not match primary key of view test1.employee_v2 (in line 34,
at column 1)]]></expected-error>
<expected-error><![CDATA[ASX1164: Invalid foreign key definition (in
line 34, at column 1)]]></expected-error>
- <expected-error replacers="cloud:Default.test3
def:test3"><![CDATA[ASX1063: Cannot find dataverse with name {0} (in line 42,
at column 1)]]></expected-error>
+ <expected-error
replacers="cloud:Default.test3|def:test3"><![CDATA[ASX1063: Cannot find
dataverse with name {0} (in line 42, at column 1)]]></expected-error>
<expected-error><![CDATA[ASX1159: Cannot find view with name
test1.employee_v3 (in line 42, at column 1)]]></expected-error>
<expected-error><![CDATA[ASX1159: Cannot find view with name
test1.employee (in line 43, at column 1)]]></expected-error>
<expected-error><![CDATA[ASX1164: Invalid foreign key definition (in
line 43, at column 1)]]></expected-error>
@@ -13709,9 +13709,9 @@
<test-case FilePath="view">
<compilation-unit name="drop-view-2-negative">
<output-dir compare="Text">drop-view-2-negative</output-dir>
- <expected-error replacers="cloud:Default.test def:test">ASX1063:
Cannot find dataverse with name {0} (in line 24, at column 1)</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">ASX1063:
Cannot find dataverse with name {0} (in line 24, at column 1)</expected-error>
<expected-error>ASX1159: Cannot find view with name test.v1 (in line
25, at column 1)</expected-error>
- <expected-error replacers="cloud:Default.test def:test">ASX1050:
Cannot find dataset with name v1 in dataverse {0} (in line 27, at column
1)</expected-error>
+ <expected-error replacers="cloud:Default.test|def:test">ASX1050:
Cannot find dataset with name v1 in dataverse {0} (in line 27, at column
1)</expected-error>
<expected-error>ASX1159: Cannot find view with name test.ds1 (in line
30, at column 1)</expected-error>
<expected-error>ASX1148: Cannot drop dataset test2.ds2 being used by
view test1.v1</expected-error>
<expected-error>ASX1148: Cannot drop function test2.f2() being used by
view test1.v1</expected-error>
@@ -13730,9 +13730,9 @@
<test-case FilePath="view">
<compilation-unit name="view-2-negative">
<output-dir compare="Text">none</output-dir>
- <expected-error replacers="cloud:Default.test1 def:test1">ASX1050:
Cannot find dataset with name v1 in dataverse {0} (in line 24, at column
17)</expected-error>
- <expected-error replacers="cloud:Default.test1 def:test1">ASX1050:
Cannot find dataset with name v2 in dataverse {0} (in line 24, at column
17)</expected-error>
- <expected-error replacers="cloud:Default.test1 def:test1">ASX1050:
Cannot find dataset with name v3 in dataverse {0} (in line 24, at column
1)</expected-error>
+ <expected-error replacers="cloud:Default.test1|def:test1">ASX1050:
Cannot find dataset with name v1 in dataverse {0} (in line 24, at column
17)</expected-error>
+ <expected-error replacers="cloud:Default.test1|def:test1">ASX1050:
Cannot find dataset with name v2 in dataverse {0} (in line 24, at column
17)</expected-error>
+ <expected-error replacers="cloud:Default.test1|def:test1">ASX1050:
Cannot find dataset with name v3 in dataverse {0} (in line 24, at column
1)</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="view">
@@ -13821,7 +13821,7 @@
<test-case FilePath="load">
<compilation-unit name="issue650_query">
<output-dir compare="Text">none</output-dir>
- <expected-error replacers="cloud:Default.fuzzyjoin
def:fuzzyjoin">Cannot find dataset with name Users in dataverse
{0}</expected-error>
+ <expected-error
replacers="cloud:Default.fuzzyjoin|def:fuzzyjoin">Cannot find dataset with name
Users in dataverse {0}</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="load">
@@ -15105,7 +15105,7 @@
<test-case FilePath="union">
<compilation-unit name="union_negative">
<output-dir compare="Text">union</output-dir>
- <expected-error replacers="cloud:Default.TinySocial
def:TinySocial">Cannot find dataset t in dataverse {0} nor an alias with name
t</expected-error>
+ <expected-error
replacers="cloud:Default.TinySocial|def:TinySocial">Cannot find dataset t in
dataverse {0} nor an alias with name t</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="union">
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_cloud_storage.xml
b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_cloud_storage.xml
index a43d4f1a3a..6359d8a0ed 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_cloud_storage.xml
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_cloud_storage.xml
@@ -32,6 +32,14 @@
<output-dir compare="Text">special-chars</output-dir>
</compilation-unit>
</test-case>
+ <test-case FilePath="cloud_storage">
+ <compilation-unit name="disallowed-chars">
+ <output-dir compare="Text">disallowed-chars</output-dir>
+ <expected-error>ASX1115: Invalid name for a database object:
'dv.with.dot'</expected-error>
+ <expected-error>ASX1115: Invalid name for a database object:
'col.with.dot'</expected-error>
+ <expected-error>ASX1115: Invalid name for a database object:
'db.with.dot'</expected-error>
+ </compilation-unit>
+ </test-case>
</test-group>
&sqlpp_queries;
</test-suite>
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
index 0aa5f460c1..68a49faa8e 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
@@ -1928,6 +1928,9 @@ public class MetadataProvider implements
IMetadataProvider<DataSourceId, String>
validateNamespaceName(namespace, sourceLoc);
}
validateDatabaseObjectNameImpl(objectName, sourceLoc);
+ if (namespaceResolver.isUsingDatabase()) {
+ validateChars(objectName, sourceLoc);
+ }
}
private void validateDatabaseObjectNameImpl(String name, SourceLocation
sourceLoc) throws AlgebricksException {
diff --git a/asterixdb/asterix-test-framework/src/main/resources/Catalog.xsd
b/asterixdb/asterix-test-framework/src/main/resources/Catalog.xsd
index b3d27f4d0d..3d2de839cb 100644
--- a/asterixdb/asterix-test-framework/src/main/resources/Catalog.xsd
+++ b/asterixdb/asterix-test-framework/src/main/resources/Catalog.xsd
@@ -175,7 +175,7 @@
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
- <xs:attribute name="replacers"
type="test:str-list"/>
+ <xs:attribute name="replacers" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
@@ -192,7 +192,7 @@
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
- <xs:attribute name="replacers"
type="test:str-list"/>
+ <xs:attribute name="replacers" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>