Sequence Types
A sequence type specifies the type of items that may appear in a sequence, as well as an indication of the cardinality of the sequence.
Syntax
sequence_type ::= type_definition
[quantifier]
quantifier := "*" | "+" | "?"
Semantics
subtype relationship
- The empty sequence is a subtype of all sequence types whose quantifier is * or ?
- A sequence type SUB is a subtype of another sequence type SUP (supertype) if SUB's item type is a subtype of SUP's item type, and SUB's quantifier is a subquantifier of SUP's quantifier, where the subquantifier relationship is defined by the following matrix.
Sup Q1 | Sub Q2 | one | ? | + | * |
one | true | false | false | false |
? | true | true | false | false |
+ | true | false | true | false |
* | true | true | true | true |
Note:
In the following sections, when we say that an expression must have (sequence) type T, what we mean is that when the expression is evaluated, the result sequence must have type T or any subtype of T. Similarly, the usual subtype-substitution rules apply to input sequences: if an expression expects as input a sequence of type T, any subtype of T may actually be used as input.If you want to follow along with the examples, create the airline application table and insert data as described in Tables used in the Examples.
Example 6-3 Fetch the details of passengers who fly from SFO/through SFO to any other location in an airline application
SELECT bag.fullname,
bag.bagInfo[].tagNum,
bag.bagInfo[].flightLegs[].fltRouteSrc
FROM BaggageInfo bag
WHERE bag.bagInfo[].flightLegs[].fltRouteSrc=any "SFO"
Explanation: In an airline application, you can get the details of all the passengers who have traveled from a specific station. The flightLegs
array in the bagInfo
field contains the source and destination stations for each travel leg. The bagInfo.flightLegs[].fltRouteSrc
is a string sequence that holds the source stations from where the passengers board the flight.
In this query, you compare the source stations with the input string, SFO, to fetch the list of passengers traveling from the SFO station. Since the comparison operators cannot operate on sequences of more than one item, you use the sequence comparison operator =any
to compare the bagInfo.flightLegs[].fltRouteSrc
sequence with the required station. For more details on sequence comparison, see Sequence Comparison Operators.
Here, the source station can either be the flights originating from SFO, or transiting through SFO station to any other destination. The bag
is a table alias for the Baggageinfo
table and essentially functions as a variable. The variables are bound to the context row as a whole and can be referenced inside the hierarchically structured data.
{"fullname":"Henry Jenkins","tagNum":"17657806216554","fltRouteSrc":["SFO","ORD"]}
{"fullname":"Michelle Payne","tagNum":"17657806247861","fltRouteSrc":["SFO","IST","ATH"]}
{"fullname":"Gerard Greene","tagNum":"1765780626568","fltRouteSrc":["SFO","IST","ATH"]}
{"fullname":"Lorenzo Phil","tagNum":["17657806240001","17657806340001"],"fltRouteSrc":["SFO","IST","ATH","SFO","IST","ATH"]}
{"fullname":"Lucinda Beckman","tagNum":"17657806240001","fltRouteSrc":["SFO","IST","ATH"]}