This is an automated email from the ASF dual-hosted git repository. peeyush 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 11bd6f6430 [ASTERIXDB-3302][COMP] Compilation error when creating index 11bd6f6430 is described below commit 11bd6f64300c2fa9a710ce2beb74a4695b98e2c7 Author: Peeyush Gupta <peeyush.gu...@couchbase.com> AuthorDate: Tue Nov 7 13:50:48 2023 -0800 [ASTERIXDB-3302][COMP] Compilation error when creating index - user model changes: no - storage format changes: no - interface changes: no Details: Allow index creation on a field having a closed-type when there type is provided in the index creation statement as long as the type provided is same as their closed-type. Change-Id: Ie662ce1276fa60493cf0a7623306cb19448a2133 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17930 Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Reviewed-by: Peeyush Gupta <peeyush.gu...@couchbase.com> Reviewed-by: Ali Alsuliman <ali.al.solai...@gmail.com> --- .../asterix/app/translator/QueryTranslator.java | 43 ++++++++++++---------- .../index-closed-type.000.ddl.sqlpp | 36 ++++++++++++++++++ .../index-closed-type.001.update.sqlpp | 22 +++++++++++ .../index-closed-type.002.ddl.sqlpp | 26 +++++++++++++ .../index-closed-type.003.ddl.sqlpp | 26 +++++++++++++ .../index-closed-type.004.ddl.sqlpp | 26 +++++++++++++ .../index-closed-type.005.query.sqlpp | 25 +++++++++++++ .../index-closed-type.006.query.sqlpp | 22 +++++++++++ .../index-closed-type.007.query.sqlpp | 25 +++++++++++++ .../index-closed-type.999.ddl.sqlpp | 20 ++++++++++ .../index-closed-type/index-closed-type.005.adm | 2 + .../index-closed-type/index-closed-type.006.adm | 1 + .../index-closed-type/index-closed-type.007.adm | 2 + .../src/test/resources/runtimets/sqlpp_queries.xml | 14 +++++-- 14 files changed, 267 insertions(+), 23 deletions(-) diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java index f0cc75b210..c2be64f4e3 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java @@ -1409,18 +1409,30 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen fieldTypeMissable = projectTypeMissable; } else { // the type of the indexed field is explicitly specified in the DDL + Map<TypeSignature, IAType> typeMap = TypeTranslator.computeTypes(databaseName, dataverseName, + indexName, projectTypeExpr.getType(), databaseName, dataverseName, mdTxnCtx); + TypeSignature typeSignature = new TypeSignature(databaseName, dataverseName, indexName); + fieldTypePrime = typeMap.get(typeSignature); + // BACK-COMPAT: keep prime type only if we're overriding field types + fieldTypeNullable = fieldTypeMissable = false; + overridesFieldTypes = true; + if (stmtCreateIndex.isEnforced()) { if (!projectTypeExpr.isUnknownable()) { throw new CompilationException(ErrorCode.INDEX_ILLEGAL_ENFORCED_NON_OPTIONAL, indexedElement.getSourceLocation(), LogRedactionUtil.userData(String.valueOf(projectPath))); } - // don't allow creating an enforced index on a closed-type field, fields that - // are part of schema get the field type, if it's not null, then the field is closed-type + // don't allow creating an enforced index on a closed-type field having field type different + // from the closed-type if (isFieldFromSchema) { - throw new CompilationException(ErrorCode.INDEX_ILLEGAL_ENFORCED_ON_CLOSED_FIELD, - indexedElement.getSourceLocation(), - LogRedactionUtil.userData(String.valueOf(projectPath))); + if (fieldTypePrime == null) { + throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, + indexedElement.getSourceLocation(), "cannot find type of field"); + } else if (!projectTypePrime.deepEqual(fieldTypePrime)) { + throw new CompilationException(ErrorCode.TYPE_MISMATCH_GENERIC, sourceLoc, + projectTypePrime.getTypeTag(), fieldTypePrime.getTypeTag()); + } } } else { if (indexType != IndexType.BTREE && indexType != IndexType.ARRAY) { @@ -1430,23 +1442,16 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen if (isFieldFromSchema) { // allow overriding the type of the closed-field only if CAST modifier is used if (!stmtCreateIndex.hasCastDefaultNull()) { - throw new CompilationException(ErrorCode.COMPILATION_ERROR, - indexedElement.getSourceLocation(), - "Typed index on '" - + LogRedactionUtil - .userData(RecordUtil.toFullyQualifiedName(projectPath)) - + "' field could be created only for open datatype"); + if (fieldTypePrime == null) { + throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, + indexedElement.getSourceLocation(), "cannot find type of field"); + } else if (!projectTypePrime.deepEqual(fieldTypePrime)) { + throw new CompilationException(ErrorCode.TYPE_MISMATCH_GENERIC, sourceLoc, + projectTypePrime.getTypeTag(), fieldTypePrime.getTypeTag()); + } } } } - - Map<TypeSignature, IAType> typeMap = TypeTranslator.computeTypes(databaseName, dataverseName, - indexName, projectTypeExpr.getType(), databaseName, dataverseName, mdTxnCtx); - TypeSignature typeSignature = new TypeSignature(databaseName, dataverseName, indexName); - fieldTypePrime = typeMap.get(typeSignature); - // BACK-COMPAT: keep prime type only if we're overriding field types - fieldTypeNullable = fieldTypeMissable = false; - overridesFieldTypes = true; } if (fieldTypePrime == null) { diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.000.ddl.sqlpp new file mode 100644 index 0000000000..524db48dcd --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.000.ddl.sqlpp @@ -0,0 +1,36 @@ +/* + * 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. + */ + +CREATE DATAVERSE test; +USE test; +CREATE TYPE t1 AS { id: int, name: string, phone:string }; + +CREATE DATASET ds1(t1) primary key id; +CREATE DATASET ds2 primary key (id:int, name:string); + +CREATE INDEX idx0 ON ds1(name); +CREATE INDEX idx1 ON ds1(name: string); +CREATE INDEX idx2 ON ds1(name: string, id:int); +CREATE INDEX idx3 ON ds2(name: string); +CREATE INDEX idx4 ON ds2(phone: string, id:int); +CREATE INDEX idx5 ON ds2(name); +CREATE INDEX idx6 ON ds2(phone:string, id); +CREATE INDEX idx7 ON ds2(name:string?) ENFORCED; +CREATE INDEX idx8 ON ds1(name:int) CAST (DEFAULT NULL); +CREATE INDEX idx9 ON ds2(name:int) CAST (DEFAULT NULL); \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.001.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.001.update.sqlpp new file mode 100644 index 0000000000..504477e549 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.001.update.sqlpp @@ -0,0 +1,22 @@ +/* + * 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. + */ + +USE test; +INSERT INTO ds1 [{"id": 1, "name": "John", "phone":"982819"}, {"id": 2, "name": "Jason", "phone":"982819"}]; +INSERT INTO ds2 [{"id": 1, "name": "John", "phone":982819}, {"id": 2, "name": "Jason", "phone":"982819"}]; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.002.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.002.ddl.sqlpp new file mode 100644 index 0000000000..67d4208174 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.002.ddl.sqlpp @@ -0,0 +1,26 @@ +/* + * 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. + */ +/* + * Description : Test secondary indexes bulk load where some tuples have malformed values in indexed fields + * Expected Res : Said tuples are not indexed + */ + +USE test; + +CREATE INDEX idxf1 ON ds1(name: int); diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.003.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.003.ddl.sqlpp new file mode 100644 index 0000000000..cc0ae73076 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.003.ddl.sqlpp @@ -0,0 +1,26 @@ +/* + * 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. + */ +/* + * Description : Test secondary indexes bulk load where some tuples have malformed values in indexed fields + * Expected Res : Said tuples are not indexed + */ + +USE test; + +CREATE INDEX idxf2 ON ds2(name: int); diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.004.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.004.ddl.sqlpp new file mode 100644 index 0000000000..508ec76d52 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.004.ddl.sqlpp @@ -0,0 +1,26 @@ +/* + * 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. + */ +/* + * Description : Test secondary indexes bulk load where some tuples have malformed values in indexed fields + * Expected Res : Said tuples are not indexed + */ + +USE test; + +CREATE INDEX idxf2 ON ds1(name: int?) ENFORCED; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.005.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.005.query.sqlpp new file mode 100644 index 0000000000..c1a403fc8f --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.005.query.sqlpp @@ -0,0 +1,25 @@ +/* + * 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. + */ + +USE test; + +SET `import-private-functions` `true`; +FROM DUMP_INDEX("test", "ds2", "idx4") AS v +SELECT VALUE v +ORDER BY v.values; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.006.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.006.query.sqlpp new file mode 100644 index 0000000000..aad3a3ef2b --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.006.query.sqlpp @@ -0,0 +1,22 @@ +/* + * 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. + */ + +USE test; + +SELECT (FROM ds1 SELECT VALUE ds1 ORDER BY id) AS r1, (FROM ds2 SELECT VALUE ds2 ORDER BY id) AS r2; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.007.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.007.query.sqlpp new file mode 100644 index 0000000000..14f2ebd623 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.007.query.sqlpp @@ -0,0 +1,25 @@ +/* + * 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. + */ + +USE test; + +SET `import-private-functions` `true`; +FROM DUMP_INDEX("test", "ds1", "idx1") AS v +SELECT VALUE v +ORDER BY v.values; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.999.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.999.ddl.sqlpp new file mode 100644 index 0000000000..86a1b59399 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/index-closed-type/index-closed-type.999.ddl.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. + */ + +DROP DATAVERSE test; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-closed-type/index-closed-type.005.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-closed-type/index-closed-type.005.adm new file mode 100644 index 0000000000..cc4f89259b --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-closed-type/index-closed-type.005.adm @@ -0,0 +1,2 @@ +{ "values": [ 1, 1, "John" ] } +{ "values": [ "982819", 2, 2, "Jason" ] } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-closed-type/index-closed-type.006.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-closed-type/index-closed-type.006.adm new file mode 100644 index 0000000000..9a5030412a --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-closed-type/index-closed-type.006.adm @@ -0,0 +1 @@ +{ "r1": [ { "id": 1, "name": "John", "phone": "982819" }, { "id": 2, "name": "Jason", "phone": "982819" } ], "r2": [ { "id": 1, "name": "John", "phone": 982819 }, { "id": 2, "name": "Jason", "phone": "982819" } ] } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-closed-type/index-closed-type.007.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-closed-type/index-closed-type.007.adm new file mode 100644 index 0000000000..45fbd093dc --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-closed-type/index-closed-type.007.adm @@ -0,0 +1,2 @@ +{ "values": [ "Jason", 2 ] } +{ "values": [ "John", 1 ] } \ 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 66286b04cc..c18075d75a 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml @@ -4402,7 +4402,6 @@ <expected-error>CAST modifier is only allowed for B-Tree indexes</expected-error> <expected-error>CAST modifier cannot be specified together with ENFORCED</expected-error> <expected-error>CAST modifier is used without specifying the type of the indexed field</expected-error> - <expected-error>Typed index on 'typed_f2' field could be created only for open datatype</expected-error> <expected-error>Parameter invalid_date cannot be set</expected-error> </compilation-unit> </test-case> @@ -4411,6 +4410,14 @@ <output-dir compare="Text">drop-anonymous-nested-types</output-dir> </compilation-unit> </test-case> + <test-case FilePath="ddl"> + <compilation-unit name="index-closed-type"> + <output-dir compare="Text">index-closed-type</output-dir> + <expected-error>ASX0037: Type mismatch: expected value of type string, but got the value of type bigint</expected-error> + <expected-error>ASX0037: Type mismatch: expected value of type string, but got the value of type bigint</expected-error> + <expected-error>ASX0037: Type mismatch: expected value of type string, but got the value of type bigint</expected-error> + </compilation-unit> + </test-case> </test-group> <test-group name="dml"> <test-case FilePath="dml"> @@ -7410,13 +7417,12 @@ <test-case FilePath="open-index-enforced/error-checking"> <compilation-unit name="enforced-field-name-collision"> <output-dir compare="Text">enforced-field-name-collision</output-dir> - <expected-error>Cannot create enforced index on '[value]' field. The field is closed type.</expected-error> </compilation-unit> </test-case> <test-case FilePath="open-index-enforced/error-checking"> <compilation-unit name="enforced-field-type-collision"> <output-dir compare="Text">enforced-field-type-collision</output-dir> - <expected-error>Cannot create enforced index on '[value]' field. The field is closed type.</expected-error> + <expected-error>ASX0037: Type mismatch: expected value of type string, but got the value of type integer</expected-error> </compilation-unit> </test-case> <test-case FilePath="open-index-enforced/error-checking"> @@ -7452,7 +7458,7 @@ <test-case FilePath="open-index-enforced/error-checking"> <compilation-unit name="object-type-collision"> <output-dir compare="Text">object-type-collision</output-dir> - <expected-error>ASX1051: Cannot create enforced index on '[value]' field. The field is closed type.</expected-error> + <expected-error>ASX0037: Type mismatch: expected value of type string, but got the value of type integer</expected-error> </compilation-unit> </test-case> </test-group>