9.2.9.Getting & Setting Member Values of Type Instances (member observers & mutators)
Let T
be a user defined type
that has a member A
of type
AT
. Let IT
be an instance of type T
.
Member Observers (Getting Values)
There are two alternative syntaxes (both scalar expressions):
SQL200n : A(<scalar_exp>) Virtuoso extension : <scalar_exp>.A
Both of the above will return a copy of the member's value of
the instance in <scalar_exp> when the scalar expression
<scalar_exp> has a compile time type of T
. If the compile time type is not
determined to be a user defined type T
the first one will be compiled as a call
to the SQL function A
and the
second will either generate a syntax error or the server will
consider it as reference to a scope variable (depending on the type
of <scalar_exp>).
These are also scalar expressions and have a compile time type
AT
.
To specify an explicit type of the scalar expression there is a third syntax:
(<scalar_exp> as T).A
This will force the server to compile a reference to the member
A
in user defined type
T
. Whether the
<scalar_exp> is indeed of type T
will be checked at runtime.
Member Mutators (Setting Values)
There are two alternative syntaxes (both scalar expressions):
SQL200n : A(<scalar_exp>, <new_value_scalar_exp>) Virtuoso extension : <scalar_exp>.A := <new_value_scalar_exp>
Both of the above will set the member's value of the instance in
<scalar_exp> to a copy of <new_value_scalar_exp> when
the scalar expression <scalar_exp> has a compile time type of
T
. If the compile time type is
not determined to be a user defined type T
the first one will be compiled as a call
to the SQL function A
and the
second will either generate a syntax error or the server will
consider it as reference to a scope variable (depending on the type
of <scalar_exp>).
These are also scalar expressions and have a compile time type
T
and return a copy of the
<scalar_exp>. To specify an explicit type of the scalar exp
there is a third syntax:
(<scalar_exp> as T).A := <new_value_scalar_exp>
This will force the server to compile a reference to the member
A
in user defined type
T
. Whether the
<scalar_exp> is indeed of type T
will be checked at runtime.
Example9.8.Member Construction
This will make a new object of type UDT_FR_BASE
by calling it's two int
parameters constructor and will return the member B
value of the instance stored in member
UDT_M
of UDT_FR_BASE
.
select new UDT_FR_BASE (1, 2).UDT_M.B;