[plsql] Fix CollectionTypeName parsing

This commit is contained in:
Andreas Dangel
2024-07-25 11:42:22 +02:00
parent 87b0c4f851
commit 6a242f019d
3 changed files with 27 additions and 13 deletions

View File

@ -871,6 +871,9 @@ ASTCompilationDataType CompilationDataType() :
}
}
/**
* https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/CREATE-TYPE-statement.html#GUID-389D603D-FBD0-452A-8414-240BBBC57034__OBJECT_BASE_TYPE_DEF-DE2DD0FF
*/
ASTCollectionTypeName CollectionTypeName() :
{ PLSQLNode size=null, precision=null;
StringBuilder sb = new StringBuilder();
@ -886,8 +889,8 @@ ASTCollectionTypeName CollectionTypeName() :
sb.append(token.getImage());
}
}
(LOOKAHEAD(2) "(" size=NumericLiteral() {sb.append( "(" + size);}
["," precision=NumericLiteral() {sb.append( "," + precision);}]
(LOOKAHEAD(2) "(" size = NumericLiteral() { sb.append("(").append(size.getImage()); }
["," precision = NumericLiteral() { sb.append(",").append(precision.getImage()); }]
[ <CHAR> {sb.append( " CHAR") ;}]
[ <BYTE> {sb.append( " BYTE") ;}]
")" {sb.append( ")");})?

View File

@ -6,3 +6,6 @@ CREATE or REPLACE PACKAGE x as
type last_run_duration is interval day(9) to second(6);
end x;
/
CREATE TYPE phone_list_typ_demo AS VARRAY(5) OF VARCHAR2(25);
/

View File

@ -1,13 +1,21 @@
+- Input[@CanonicalImage = null, @ExcludedLinesCount = 0, @ExcludedRangesCount = 0]
+- PackageSpecification[@CanonicalImage = "X", @Image = "x", @ObjectName = "x"]
+- ObjectNameDeclaration[@CanonicalImage = "X", @Image = "x"]
| +- ID[@CanonicalImage = "X", @Image = "x"]
+- DeclarativeSection[@CanonicalImage = null]
| +- DeclarativeUnit[@CanonicalImage = null]
| +- SubTypeDefinition[@CanonicalImage = "LAST_RUN_DURATION", @Image = "last_run_duration"]
| +- QualifiedID[@CanonicalImage = "LAST_RUN_DURATION", @Image = "last_run_duration"]
| +- Datatype[@CanonicalImage = "INTERVAL DAY(9) TO SECOND(6)", @Image = "INTERVAL DAY(9) TO SECOND(6)", @TypeImage = "INTERVAL DAY(9) TO SECOND(6)"]
| +- ScalarDataTypeName[@CanonicalImage = "INTERVAL DAY(9) TO SECOND(6)", @Image = "INTERVAL DAY(9) TO SECOND(6)"]
| +- NumericLiteral[@CanonicalImage = "9", @Image = "9"]
| +- NumericLiteral[@CanonicalImage = "6", @Image = "6"]
+- ID[@CanonicalImage = "X", @Image = "x"]
| +- ObjectNameDeclaration[@CanonicalImage = "X", @Image = "x"]
| | +- ID[@CanonicalImage = "X", @Image = "x"]
| +- DeclarativeSection[@CanonicalImage = null]
| | +- DeclarativeUnit[@CanonicalImage = null]
| | +- SubTypeDefinition[@CanonicalImage = "LAST_RUN_DURATION", @Image = "last_run_duration"]
| | +- QualifiedID[@CanonicalImage = "LAST_RUN_DURATION", @Image = "last_run_duration"]
| | +- Datatype[@CanonicalImage = "INTERVAL DAY(9) TO SECOND(6)", @Image = "INTERVAL DAY(9) TO SECOND(6)", @TypeImage = "INTERVAL DAY(9) TO SECOND(6)"]
| | +- ScalarDataTypeName[@CanonicalImage = "INTERVAL DAY(9) TO SECOND(6)", @Image = "INTERVAL DAY(9) TO SECOND(6)"]
| | +- NumericLiteral[@CanonicalImage = "9", @Image = "9"]
| | +- NumericLiteral[@CanonicalImage = "6", @Image = "6"]
| +- ID[@CanonicalImage = "X", @Image = "x"]
+- TypeSpecification[@CanonicalImage = "PHONE_LIST_TYP_DEMO", @Image = "phone_list_typ_demo", @ObjectName = "phone_list_typ_demo"]
+- ObjectNameDeclaration[@CanonicalImage = "PHONE_LIST_TYP_DEMO", @Image = "phone_list_typ_demo"]
| +- ID[@CanonicalImage = "PHONE_LIST_TYP_DEMO", @Image = "phone_list_typ_demo"]
+- CollectionTypeName[@CanonicalImage = "VARRAY(5)", @Image = "VARRAY(5)"]
| +- NumericLiteral[@CanonicalImage = "5", @Image = "5"]
+- Datatype[@CanonicalImage = "VARCHAR2(25)", @Image = "VARCHAR2(25)", @TypeImage = "VARCHAR2(25)"]
+- ScalarDataTypeName[@CanonicalImage = "VARCHAR2(25)", @Image = "VARCHAR2(25)"]
+- NumericLiteral[@CanonicalImage = "25", @Image = "25"]