BNF grammar description for the deployment descriptor file

The structure of the deployment descriptor file can be described using the Backus–Naur Form as shown here.

deploymentDescriptor ::= <SQLACTIONS> <EQL> <LBRACE> <DQUOTE> actionGroup <DOUBLE_QUOTE> <RBRACE>

actionGroup ::= installActions | removeActions

installActions ::= <BEGIN> <INSTALL> ddl <END> <INSTALL>

removeActions ::= <BEGIN> <REMOVE> <END> <REMOVE>

ddl ::= SQLInvokedRoutine ( SQLInvokedRoutine )*

SQLInvokedRoutine ::=
  ( <CREATE> SQLInvokedFunction | <CREATE> SQLInvokedAggregate | <CREATE> SQLInvokedProcedure )
  <SEMICOLON>

SQLInvokedFunction ::=
  <FUNCTION> SchemaQualifiedRoutineName SQLParameterDeclarationList ReturnsClause
  ( ResultCast )? RoutineCharacteristics ( RoutineCharacteristics )* RoutineBody

SQLInvokedAggregate ::=
  <AGGREGATE> SchemaQualifiedRoutineName SQLParameterDeclarationList ReturnsClause
  ( ResultCast )? RoutineCharacteristics ( RoutineCharacteristics )* RoutineBody

SQLInvokedProcedure ::=
  <PROCEDURE> SchemaQualifiedRoutineName SQLParameterDeclarationList ( ReturnsClause )?
  RoutineCharacteristics ( RoutineCharacteristics )* RoutineBody

SchemaQualifiedRoutineName ::= QualifiedIdentifier ReturnsClause ::= <RETURNS> DataType

ResultCast ::= <CAST> <FROM> DataType

RoutineCharacteristics ::=
    LanguageClause
  | ParameterStyleClause
  | NullCallClause
  | ReturnedResultSets
  | DeterministicCharacteristic
  | SQLDataAccessIndication
  
LanguageClause ::= <LANGUAGE> ( <JAVA> | <SQL> | <IDENTIFIER> )

arameterStyleClause ::= <PARAMETER> <STYLE> ( <JAVA> | <SQL> | <GENERAL> )

NullCallClause ::= <RETURNS> <NULL> <ON> <NULL> <INPUT> | <CALLED> <ON> <NULL> <INPUT>

ReturnedResultSets ::= <DYNAMIC> <RESULT> <SETS> <INTEGER_LITERAL>

DeterministicCharacteristic ::= <DETERMINISTIC> | <NOT> <DETERMINISTIC>

SQLDataAccessIndication ::=
  <NO> <SQL> | <CONTAINS> <SQL> | <READS> <SQL> <DATA> | <MODIFIES> <SQL> <DATA>

RoutineBody ::= ( SQLRoutineBody | ExternalBodyReference )

SQLRoutineBody ::= <RETURN> ( expression | CursorOrCallSpecification )

ExternalBodyReference ::= <EXTERNAL> <NAME> <STRING_LITERAL>

SQLParameterDeclarationList ::=
  <LPAREN> (
    [ SQLParameterDeclaration ( <COMMA> SQLParameterDeclaration )* ]
    [ … ]
  )? <RPAREN>

SQLParameterDeclaration ::= ( ParameterMode )? Identifier DataType ( <AS> <LOCATOR> )? ( <RESULT> )?

ParameterMode ::= ( <IN> | <OUT> | <INOUT> )

Identifier ::= <IDENTIFIER>

DataType ::= ( ArrayType | MultisetType | SimpleType )

SimpleType ::= (
    CharacterStringType
  | BinaryStringType
  | NumericType
  | IntervalType
  | DateTimeType
  | BooleanType
  | RowType
  | StructType
  | BlobType
  | ObjectType
  | XmlType
  | DataLinkType
  | PeriodType
  | NullType
  | AnyType
)

MultisetType ::= SimpleType <MULTISET>

RowType ::= (
    <ROW> <LPAREN> Field ( <COMMA> Field )* <RPAREN>
  | <TABLE> ( <LPAREN> Field ( <COMMA> Field )* <RPAREN> )?
)

StructType ::= <STRUCT> <LES> Field ( <COMMA> Field )* <GRT>

Field ::= Identifier DataType

CharacterStringType ::=
  ( <CHARACTER> | <CHAR> ) <VARYING> ( <LPAREN> IntegerValue <RPAREN> )?
  | ( <CHARACTER> | <CHAR> ) ( <LPAREN> IntegerValue <RPAREN> )?
  | <VARCHAR> ( <LPAREN> IntegerValue <RPAREN> )?
  | ( <NCHAR> | ( <NATIONAL> ( <CHARACTER> | <CHAR> ) ) ) <VARYING>
  ( <LPAREN> IntegerValue <RPAREN> )?
  | ( <NCHAR> | ( <NATIONAL> ( <CHARACTER> | <CHAR> ) ) ) ( <LPAREN> IntegerValue <RPAREN> )?
  | <NVARCHAR> ( <LPAREN> IntegerValue <RPAREN> )? | <STRING>

BinaryStringType ::=
    <BINARY> ( <LPAREN> IntegerValue <RPAREN> )?
  | <BINARY> <VARYING> <LPAREN> IntegerValue <RPAREN>
  | <VARBINARY> <LPAREN> IntegerValue <RPAREN>

NumericType ::=
    ( <DEC> | <DECIMAL> | <NUMERIC> )
      ( <LPAREN> IntegerValue ( <COMMA> IntegerValue )? <RPAREN> )?
  | <SMALLINT>
  | ( <INTEGER> | <INT> ) ( <LPAREN> IntegerValue <RPAREN> )?
  | <BIGINT>
  | ( <FLOAT> | <REAL> ) ( <LPAREN> IntegerValue <RPAREN> )?
  | <DOUBLE> ( <PRECISION> )?
  | <NUMBER>

IntervalType ::=
  <INTERVAL> ( ( DatetimeField ( <LPAREN> IntegerValue <RPAREN> )?
  ( <TO> ( DatetimeField | <SECOND> ( <LPAREN> IntegerValue <RPAREN> )? ) )?
    | <SECOND> ( <LPAREN> IntegerValue ( <COMMA> IntegerValue )? <RPAREN> )? ) )?

DateTimeType ::=
    <DATE>
  | <TIME> ( <LPAREN> IntegerValue <RPAREN> )? <WITH> <TIME> <ZONE>
  | <TIME> ( <LPAREN> IntegerValue <RPAREN> )?
  | <TIMESTAMP> ( <LPAREN> IntegerValue <RPAREN> )? <WITH> <TIME> <ZONE>
  | <TIMESTAMP> ( <LPAREN> IntegerValue <RPAREN> )?

DatetimeField ::= <YEAR> | <MONTH> | <DAY> | <HOUR> | <MINUTE>

BooleanType ::= <BOOLEAN>

ArrayType ::= SimpleType <ARRAY_CONSTRUCTOR_START> IntegerValue ( <RBRACKET> | <RBRACKET_TRIGRAPH> )

BlobType ::= <BLOB> | <CLOB>

ObjectType ::= <JAVA_OBJECT> XmlType ::= <XML>

DataLinkType ::= <DATALINK> PeriodType ::= <PERIOD> <LPAREN> DateTimeType <RPAREN>

NullType ::= <NULL> AnyType ::= <ANYTYPE>