>From Peeyush Gupta <[email protected]>: Peeyush Gupta has uploaded this change for review. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17803 )
Change subject: [NO ISSUE][COMP] NullPointerException with invalid PK specfication ...................................................................... [NO ISSUE][COMP] NullPointerException with invalid PK specfication - user model changes: no - storage format changes: no - interface changes: no Change-Id: Id76bbbbe9155c5b87ff6bd0419d0a29ffa3456da --- A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-negative/create-dataset-negative.01.ddl.sqlpp A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-negative/create-dataset-negative.02.ddl.sqlpp M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml 4 files changed, 97 insertions(+), 19 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/03/17803/1 diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-negative/create-dataset-negative.01.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-negative/create-dataset-negative.01.ddl.sqlpp new file mode 100644 index 0000000..bf78c3c --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-negative/create-dataset-negative.01.ddl.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. + */ + +drop dataverse test if exists; +create dataverse test; +use test; + +create dataset orders primary key my_id; + diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-negative/create-dataset-negative.02.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-negative/create-dataset-negative.02.ddl.sqlpp new file mode 100644 index 0000000..c7e7400 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-negative/create-dataset-negative.02.ddl.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. + */ + +drop dataverse test if exists; +create dataverse test; +use test; + +create type orderstype as {id:int}; +create dataset orders(orderstype) primary key (id:int); 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 ce3c3c1..7374028 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@ -4164,6 +4164,13 @@ </compilation-unit> </test-case> <test-case FilePath="ddl"> + <compilation-unit name="create-dataset-negative"> + <output-dir compare="Clean-JSON">create-dataset-negative</output-dir> + <expected-error>ASX1001: Syntax error: Invalid primary key specification</expected-error> + <expected-error>ASX1001: Syntax error: Invalid primary key specification</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="ddl"> <compilation-unit name="analyze-dataset-1"> <output-dir compare="Text">analyze-dataset-1</output-dir> </compilation-unit> diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj index df1d461..0c59323 100644 --- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj +++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj @@ -1162,26 +1162,34 @@ } if (typeExpr == null) { - InternalDetailsDecl idd = new InternalDetailsDecl(primaryKeyFieldsWithTypes.second, - primaryKeyFieldsWithTypes.first, autogenerated, filterField == null? null : filterField.first, - filterField == null? null : filterField.second, primaryKeyFieldsWithTypes.third); - final TypeReferenceExpression anyObjectReference = new TypeReferenceExpression( - new Pair(MetadataBuiltinEntities.ANY_OBJECT_DATATYPE.getDataverseName(), - new Identifier(MetadataBuiltinEntities.ANY_OBJECT_DATATYPE.getDatatypeName()))); - stmt = new DatasetDecl(nameComponents.first, nameComponents.second, anyObjectReference, null, hints, - DatasetType.INTERNAL, idd, withRecord, ifNotExists, query); - return addSourceLocation(stmt, startStmtToken); - } else { - InternalDetailsDecl idd = new InternalDetailsDecl(primaryKeyFields.second, primaryKeyFields.first, autogenerated, - filterField == null? null : filterField.first, filterField == null? null : filterField.second); - DatasetDeclParametersUtil.adjustInlineTypeDecl(typeExpr, primaryKeyFields.second, primaryKeyFields.first, false); - if (metaTypeExpr != null) { - DatasetDeclParametersUtil.adjustInlineTypeDecl(metaTypeExpr, primaryKeyFields.second, primaryKeyFields.first, - true); + if (primaryKeyFieldsWithTypes != null) { + InternalDetailsDecl idd = new InternalDetailsDecl(primaryKeyFieldsWithTypes.second, + primaryKeyFieldsWithTypes.first, autogenerated, filterField == null? null : filterField.first, + filterField == null? null : filterField.second, primaryKeyFieldsWithTypes.third); + final TypeReferenceExpression anyObjectReference = new TypeReferenceExpression( + new Pair(MetadataBuiltinEntities.ANY_OBJECT_DATATYPE.getDataverseName(), + new Identifier(MetadataBuiltinEntities.ANY_OBJECT_DATATYPE.getDatatypeName()))); + stmt = new DatasetDecl(nameComponents.first, nameComponents.second, anyObjectReference, null, hints, + DatasetType.INTERNAL, idd, withRecord, ifNotExists, query); + return addSourceLocation(stmt, startStmtToken); + } else { + throw new SqlppParseException(getSourceLocation(startStmtToken), "Invalid primary key specification."); } - stmt = new DatasetDecl(nameComponents.first, nameComponents.second, typeExpr, metaTypeExpr, hints, - DatasetType.INTERNAL, idd, withRecord, ifNotExists, query); - return addSourceLocation(stmt, startStmtToken); + } else { + if (primaryKeyFields != null) { + InternalDetailsDecl idd = new InternalDetailsDecl(primaryKeyFields.second, primaryKeyFields.first, autogenerated, + filterField == null? null : filterField.first, filterField == null? null : filterField.second); + DatasetDeclParametersUtil.adjustInlineTypeDecl(typeExpr, primaryKeyFields.second, primaryKeyFields.first, false); + if (metaTypeExpr != null) { + DatasetDeclParametersUtil.adjustInlineTypeDecl(metaTypeExpr, primaryKeyFields.second, primaryKeyFields.first, + true); + } + stmt = new DatasetDecl(nameComponents.first, nameComponents.second, typeExpr, metaTypeExpr, hints, + DatasetType.INTERNAL, idd, withRecord, ifNotExists, query); + return addSourceLocation(stmt, startStmtToken); + } else { + throw new SqlppParseException(getSourceLocation(startStmtToken), "Invalid primary key specification."); + } } } catch (CompilationException e) { throw new SqlppParseException(getSourceLocation(startStmtToken), e.getMessage()); -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17803 To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Change-Id: Id76bbbbe9155c5b87ff6bd0419d0a29ffa3456da Gerrit-Change-Number: 17803 Gerrit-PatchSet: 1 Gerrit-Owner: Peeyush Gupta <[email protected]> Gerrit-MessageType: newchange
