In this section, the grammar of the SIRA_PRISE commands is presented in BNF form. For a detailed treatment of the individual commands, please see the language reference and tutorial. The following preliminary notes on interpreting the grammar apply :
STRING(\(\)\\)
denotes the three-character string '()\' . <SiraPriseCommand>
:= <Add>|<Delete>|<Update>|<Inquire>|<MultipleAssignment>+
<MultipleAssignment>
:= CMD(<Add>|<Delete>|<Update>)
<Inquire>
:= INQUIRE|SELECT <RelationalExpression>[,(<AttributeName>+,)]
<Add>
:= ASSERT|ADD|CREATE <RelvarName>,<RelationalExpression>
<Delete>
:= UNASSERT|DELETE|REMOVE <RelvarName>,<RelationalExpression>
<Update>
:= UPDATE|MODIFY <RelvarName>,<RelationalExpression>,(<ScalarUpdateExpression>+)
<ScalarUpdateExpression>
:=
<AttributeName>(<ScalarExpression>)
<Expression>
:= <RelationalExpression>|<ScalarExpression>
<RelationalExpression>
:= <RelvarName>|<AttributeName>|<NamedRelationValueSelector>|<UnNamedRelationValueSelector|<RelationalOperatorExpression>
<NamedRelationValueSelector>
:= <RelvarName>(<TupleValueSelector>*)
<UnNamedRelationValueSelector>
:= RELATION(HEADING(<HeadingAttribute>*)BODY(<TupleValueSelector>*))
<HeadingAttribute>
:= <SHeadingAttribute>|<RHeadingAttribute>
<SHeadingAttribute>
:= <AttributeName>(<TypeName>)
<RHeadingAttribute>
:= <AttributeName>(RELATION(HEADING(<HeadingAttribute>*)))
<TupleValueSelector>
:=
TUPLE(<AttributeValueSelector>*)
<AttributeValueSelector>
:=
<AttributeName>(<Expression>)
<RelationalOperatorExpression>
:= <ROjoin>
| <ROunion>
| <ROintersect>
| <ROminus>
| <ROsemiminus>
| <ROsemijoin>
| <ROrename>
| <ROproject>
| <ROrestrict>
| <ROtclose>
| <ROdivideby>
| <ROextend>
| <ROgroup>
| <ROungroup>
| <ROaggregate>
| <ROSummarizeBy>
| <ROTransform>
| <ROleftjoin>
| <ROxminus>
<ROjoin>
:= JOIN(<RelationalExpression>,<RelationalExpression>+,)
<ROunion>
:= UNION(<RelationalExpression>,<RelationalExpression>+,)
<ROintersect>
:= INTERSECT(<RelationalExpression>,<RelationalExpression>+,)
<ROxminus>
:= XMINUS(<RelationalExpression>,<RelationalExpression>+,)
<ROminus>
:= MINUS(<RelationalExpression>,<RelationalExpression>)
<ROsemijoin>
:= SEMIJOIN(<RelationalExpression>,<RelationalExpression>)
<ROleftjoin>
:= LEFTJOIN(<RelationalExpression>,<RelationalExpression>,(<AttributeValueSelector>*))
<ROsemiminus>
:= SEMIMINUS(<RelationalExpression>,<RelationalExpression>)
<ROrename>
:= RENAME(<RelationalExpression>,(<AttributeNamePair>+,))
<AttributeNamePair>
:= <AttributeName>,<AttributeName>
<ROproject>
:= PROJECT(<RelationalExpression>,(<AttributeName>*))
<ROrestrict>
:= RESTRICT(<RelationalExpression>,<ScalarExpression>)
<ROtclose>
:= TCLOSE(<RelationalExpression>,(<AttributeNamePair>+,))
<ROdivideby>
:= DIVIDEBYPER(<RelationalExpression>,<RelationalExpression>,<RelationalExpression>)
<ROextend>
:= EXTEND(<RelationalExpression>,(<ExtendDef>+))
<ExtendDef>
:= <AttributeName>(<Expression>)
<ROgroup>
:= GROUP(<RelationalExpression>,(<GroupDef>+))
<GroupDef>
:= <AttributeName>(<AttributeName>+,)
<ROungroup>
:= UNGROUP(<RelationalExpression>,(<AttributeName>+,))
<ROaggregate>
:= AGGREGATE(<RelationalExpression>,(<AggregationDef>+))
<AggregationDef>
:= <AttributeName>(<OperatorName>(<Expression>))
<ROSummarizeBy>
:= SUMMARIZEBY(<RelationalExpression>,(<AttributeName>*,),(<AggregationDef>+))
<ROTransform>
:= TRANSFORM(<RelationalExpression>,(<TransformDef>*,))
<TransformDef>
:= <AttributeName>[(<Expression>)]
<ScalarExpression>
:= <ScalarValueSelector>|<AttributeName>|<ScalarOperatorExpression>
<ScalarValueSelector>
:= <TypeName>(<LiteralValue>|<PossRepComponent>+)
<PossRepComponent>
:= <PossRepComponentName>(<LiteralValue>|<ScalarExpression>)
<ScalarOperatorExpression>
:= <OperatorName>(<Expression>*,)
The following constructs are not explicitly defined in this grammar :
<RelvarName>
<AttributeName>
<TypeName>
<PossRepComponentName>
<OperatorName>
<LiteralValue>
The first five of these are names, and should obey the rules for valid SIRA_PRISE names :
The <LiteralValue> element is, obviously, subjected only to the rule that it must represent a valid value of the type of the value selector that it appears in.
<CommitCommand>
has
been dropped. Commit and rollback have been integrated with
the
transaction control features available to the client (which is where
they really belong). Please consult the
appropriate message types in the SIRA_PRISE
communication
scenario documentation.