4.5.7 スカラー式表現の構文規則

値は,スカラー式によって表現できます。スカラー式で表現できる値は,プロパティの指定,ルーチン起動,数値関数および集合関数によって得られる値です。

<この項の構成>
(1) 形式
(2) <プロパティ指定>
(3) <要素参照>
(4) <フィールド参照>
(5) <ルーチンの起動>
(6) <数値関数>
(7) <集合関数>
(8) <値式>

(1) 形式

!! <プロパティ指定>の形式
<プロパティ指定> ::= 〔<プロパティ修飾子> <ピリオド>〕 <プロパティ名>
<プロパティ修飾子> ::= <相関名>     !! <相関名>による修飾
           |<クラス指定> !! <クラス指定>による修飾
 
!! <要素参照>の形式
<要素参照> ::= <一次子>
               <左角括弧> ANY <右角括弧>
 
!! <フィールド参照>の形式
<フィールド参照> ::= <要素参照> <ピリオド> <フィールド名>
<フィールド名> ::= <プロパティ名>
 
!! <ルーチンの起動>の形式
<ルーチンの起動> ::= <ルーチン名> <引数リスト>
<引数リスト> ::= <左括弧> 〔 <引数>
          〔 { <コンマ> <引数> }... 〕 〕 <右括弧>
<引数> ::=  <値式>
     |<値式> AS <データ型指定>
<ルーチン名> ::= <関数指定>
 
<データ型指定> ::= INT
         |INTEGER
         |BOOL
         |BOOLEAN
         |STRING <左括弧> <符号なし数値> <右括弧>
         |BINARY <左括弧> <バイナリ長> <右括弧>
 
<バイナリ長> ::=  <符号なし数値>
        |<バイナリ長トークン>
 
!! <数値関数>の形式
<数値関数> ::= <絶対値関数>
<絶対値関数> ::= ABS <左括弧> <値式> <右括弧>
 
!! <集合関数>の形式
<集合関数> ::= COUNT <左括弧> <アスタリスク> <右括弧>
       |<一般集合関数>
<一般集合関数> ::= <集合関数種別>
          <左括弧> 〔 <集合指定子> 〕 <値式> <右括弧>
<集合関数種別> ::= COUNT
<集合指定子> ::= DISTINCT|ALL
 
!! <値式>の形式
<値式> ::= <一次子>
     |<符号> <一次子>
     |<値式> <+符号> <値式>
     |<値式> <-符号> <値式>
     |<値式> <アスタリスク> <値式>
     |<値式> <斜線> <値式>
     |<値式> <文字列連結演算子> <値式>
<一次子> ::= <左括弧> <値式> <右括弧>
      |<プロパティ指定>
      |<符号なし値指定>
      |<集合関数>
      |<数値関数>
      |<ルーチンの起動>
      |<フィールド参照>
<符号なし値指定> ::= <符号なし数値リテラル>
          |<文字列リテラル>
          |<疑問符>
          |<論理リテラル>
<値指定> ::= 〔<符号>〕<符号なし数値リテラル>
      |<文字列リテラル>
      |<疑問符>
      |<論理リテラル>

(2) <プロパティ指定>

形式

<プロパティ指定> ::= 〔<プロパティ修飾子> <ピリオド>〕 <プロパティ名>
<プロパティ修飾子> ::= <相関名>     !! <相関名>による修飾
           |<クラス指定> !! <クラス指定>による修飾

<プロパティ指定>についての規則
  • 同じ名称のプロパティを持つクラスを結合する場合など,<プロパティ名>だけではプロパティを一意に識別できない場合は,<プロパティ修飾子>を指定して<プロパティ指定>が一意になるようにしてください。
<プロパティ修飾子>についての規則
  • <相関名>および<クラス指定>として指定できるのは,<FROM句>に指定したものだけです。

<プロパティ指定>の指定例を,次の表に示します。

表4-36 <プロパティ指定>の指定例

指定例説明
myProp_Foo<識別子>によって<プロパティ名>だけを指定しています。
ID'FA7DA34B-CFF3-11d3-A03E-00A0C9967923​'<ID文字列>によって<プロパティ名>だけを指定しています。
myClass_XX.myProp_Foo<プロパティ名>を<クラス名>によって修飾して指定しています。
P0.myProp_Foo<プロパティ名>を<相関名>によって修飾して指定しています。
myClass_XX.ID'FA7DA34B-CFF3-11d3-A03E-00A0C9967923​'<ID文字列>によって表現した<プロパティ名>を,<クラス名>によって修飾して指定しています。

(3) <要素参照>

<要素参照>には,VariableArray型プロパティの要素を参照するための表現を指定します。

形式

<要素参照> ::= <一次子>
               <左角括弧> ANY <右角括弧>

<要素参照>についての規則
  • <要素参照>は,<WHERE句>だけで指定できます。
  • <要素参照>は,必ず<フィールド参照>とともに指定してください。
  • 要素を指定する値には,「ANY」以外の要素は指定できません。
  • <一次子>には,<プロパティ指定>だけが指定できます。

(4) <フィールド参照>

<フィールド参照>では,VariableArray型プロパティの要素を参照する時の,フィールドの参照を表現します。

形式

<フィールド参照> ::= <要素参照> <ピリオド> <フィールド名>
<フィールド名> ::= <プロパティ名>

<フィールド参照>についての規則
  • <フィールド参照>は,VariableArray型プロパティの要素を参照する場合だけ指定します。
  • <フィールド名>には,VariableArray型プロパティの<プロパティ名>を指定します。

例えば,「VariableArray型プロパティAuthorsの要素Ageが30である」という指定は,次のように記述します。

Authors[ANY].Age = 30

(5) <ルーチンの起動>

<ルーチンの起動>には,edmSQLで提供する関数を起動するための表現を指定します。

edmSQLで使用するルーチンは,関数だけです。

edmSQLによって起動する関数を次に示します。なお,これらの関数名はすべて,<予約されないキーワード>として登録されています。

全文検索を実行するための関数
  • contains関数
  • contains_with_score関数
  • score関数
  • extracts関数
概念検索を実行するための関数
  • concept_with_score関数
  • score_concept関数
変換関数
  • oiidstr関数
  • objref関数
  • oiid関数

それぞれの関数の詳細については,「4.5.9 関数指定の構文規則」を参照してください。

形式

<ルーチンの起動> ::= <ルーチン名> <引数リスト>
<ルーチン名> ::= <関数指定>
<引数リスト> ::= <左括弧> 〔 <引数>
        〔 { <コンマ> <引数> }... 〕 〕 <右括弧>
<引数> ::= <値式>
     |<値式> AS <データ型指定>
 
<データ型指定> ::= INT
         |INTEGER
         |BOOL
         |BOOLEAN
         |STRING <左括弧> <符号なし数値> <右括弧>
         |BINARY <左括弧> <バイナリ長> <右括弧>
 
<バイナリ長> ::= <符号なし数値>
        |<バイナリ長トークン>
!!<バイナリ長トークン>については,「4.5.4(4)<トークン>」を
!!参照してください。

<ルーチンの起動>についての規則
  • 関数の<引数リスト>に指定できる引数の数は,<ルーチン名>に指定した,それぞれの関数の仕様に従います。
  • <引数>に指定できる<一次子>は,<ルーチン名>に指定した関数の仕様に従います。各引数は,関数に規定された順序で指定する必要があります。
  • <引数リスト>に<一次子>として<?パラメタ>を指定する場合は,AS<データ型指定>によって,データ型を明示してください。
    また,<?パラメタ>以外の<一次子>に対してAS<データ型指定>を指定することはできません。
AS<データ型指定>についての規則
  • AS<データ型指定>に指定できるデータ型について説明します。関数の仕様に従って,適切なデータ型を指定してください。また,String型およびBinary型を指定する場合には,定義長も指定してください。
    AS<データ型指定>に指定できる値と指定例を,次の表に示します。

    表4-37 AS<データ型指定>に指定できる値と指定例

     指定例
    Boolean型の引数BOOL
    BOOLEAN
    ? AS BOOL
    ? AS BOOLEAN
    Integer32型の引数INT
    INTEGER
    ? AS INT
    ? AS INTEGER
    String型の引数STRING(n1)? AS STRING(3200)
    定義長3200バイトのString型データ
    Binary型の引数BINARY(n2)? AS BINARY(256)
     定義長256バイトのBinary型データ
    ? AS BINARY(256k)
     定義長が256キロバイトのBinary型データ
    ? AS BINARY(256m)
     定義長が256メガバイトのBinary型データ
    ? AS BINARY(2g)
     定義長が2ギガバイトのBinary型データ
    注※1
    String型データの定義長を指定します。単位はバイトです。
    注※2
    Binary型データの定義長を指定します。次の単位が指定できます。
    (省略):バイト
    k:キロバイト
    m:メガバイト
    g:ギガバイト
    数字と単位の間に<区切り文字>を入れることはできません。

(6) <数値関数>

<数値関数>としては,絶対値関数(ABS関数)があります。<数値関数>は,<結合条件>には指定できません。また,<SELECT句>には指定できません。

<数値関数>は,次の形式で定義されています。

<数値関数> ::= <絶対値関数>
<絶対値関数> ::= ABS <左括弧> <値式> <右括弧>

(a) 絶対値関数

<絶対値関数>の詳細について示します。

関数名
ABS
形式
ABS <左括弧> <値式> <右括弧>
引数
<値式>
Integer32型の値を指定します。
機能
<値式>の値の絶対値を算出します。
被演算子のデータ型
Integer32型
評価値
整数値(Integer32型)

(7) <集合関数>

<集合関数>には,検索結果集合に対する演算を実行するための表現を指定します。

形式

<集合関数> ::= COUNT <左括弧> <アスタリスク> <右括弧>
      |<一般集合関数>
<一般集合関数> ::= <集合関数種別><左括弧> 〔 <集合指定子> 〕
          <値式> <右括弧>
<集合関数種別> ::= COUNT
<集合指定子> ::= DISTINCT|ALL

<集合関数>についての規則
<集合関数>には,次の2種類があります。
  • COUNT(*)
    検索結果の個数を算出します。
  • COUNT
    検索結果のプロパティのキー数を算出します。
<集合指定子>についての規則
  • <集合指定子>では,演算対象である集合の要素に対して,同じ要素がある場合に,重複排除を実施するかどうかを指定します。DISTINCTかALLを指定します。
  • DISTINCTを指定した場合,演算の対象である要素に対して,重複排除が実施されてから,演算が実行されます。
  • ALLを指定した場合,重複排除は実施されません。
  • <集合指定子>を省略した場合は,「ALL」が仮定されます。
    「COUNT(*)」を指定した場合には,「DISTINCT」の指定は無視されます。
  • <集合指定子>に「DISTINCT」を指定した場合,データベースによっては,この集合関数を選択項目とする問い合わせ指定の<集合指定子>指定が制限されることがあります。
  • アクセス制御機能を使用している場合,主問い合わせの選択項目に集合関数は指定できません。
(a) COUNT(*)関数

COUNT(*)関数の詳細について説明します

関数名
COUNT(*)
形式
COUNT <左括弧> <アスタリスク> <右括弧>
引数
なし(アスタリスク)
機能
検索結果集合の要素の数を算出します。
評価値
整数値(Integer32型)
属性
この関数は,<SELECT句>に指定できます。
また,<ORDER BY句>のソートキーとして指定できます。
(b) COUNT関数

COUNT関数の詳細について説明します。

関数名
COUNT
形式
COUNT <左括弧> 〔<集合指定子>〕 <値式> <右括弧>
引数
<値式>
Integer32型,String型,Boolean型の<プロパティ指定>だけが指定できます。
機能
検索結果集合から,<値式>に指定した要素の数を算出します。
評価値
整数値(Integer32型)
属性
この関数は,<SELECT句>に指定できます。
また,<ORDER BY句>のソートキーとして指定できます。

(8) <値式>

<値式>とは,評価として値を得ることができる式の定義です。

形式

<値式> ::= <一次子>
     |<符号> <一次子>
     |<値式> <+符号> <値式>
     |<値式> <-符号> <値式>
     |<値式> <アスタリスク> <値式>
     |<値式> <斜線> <値式>
     |<値式> <文字列連結演算子> <値式>
<一次子> ::= <左括弧> <値式> <右括弧>
      |<プロパティ指定>
      |<符号なし値指定>|<集合関数>|<数値関数>
      |<要素参照>
      |<ルーチンの起動>|<フィールド参照>
<符号なし値指定> ::= <符号なし数値リテラル>
         |<文字列リテラル>
         |<疑問符>
         |<論理リテラル>
<値指定> ::= 〔<符号>〕<符号なし数値リテラル>
      |<文字列リテラル>|<疑問符>|<論理リテラル>

<値式>についての規則
  • <値式>内の演算子は,次の順序で評価されます。
演算子の評価順序
  1. 括弧内
  2. 単項演算子<符号>の<+符号>または<-符号>
  3. <アスタリスク>または<斜線>
  4. 二項演算子の<+符号>,<-符号>または<結合演算子>
  • 演算子の両側に指定する<値式>には,同じデータ型のものを指定してください。
  • 演算の途中でオーバフローが発生したり,0で除算を実行したりした場合,NULL値が返却されるかエラーが発生するかについては,データベースに依存します。
  • 指定できる演算子のネストの深さは,データベースの制限に従います。
  • <値指定>と<符号なし値指定>の違いは,符号が付けられるかどうかです。<値式>で指定できるのは,<符号なし値指定>です。符号を付ける場合は,<値式>を<符号>と<符号なし値指定>で構成してください。
    <値指定>は,<In述語>などで使用します。
演算子の詳細
<値式>で指定する演算子の詳細を,次の表に示します。

表4-38 <値式>で指定する演算子の詳細

演算子意味被演算子の
データ型
評価値
<符号>
(単項演算子+)
値に正符号を付けます。評価値に変化はありません。Integer32型整数値(Integer32型)
<符号>
(単項演算子-)
値の符号を反転します。Integer32型整数値(Integer32型)
<+符号>
(+)
被演算子を加算します。Integer32型整数値(Integer32型)
<-符号>
(-)
左辺の被演算子から右辺の被演算子を減算します。Integer32型整数値(Integer32型)
<アスタリスク>
(*)
被演算子を乗算します。Integer32型整数値(Integer32型)
<斜線>
(/)
左辺の被演算子を右辺の被演算子で除算します。Integer32型整数値(Integer32型)
<文字列連結演算子>
(||)
文字列を連結します。String型文字列値(String型)
注※
edmSQLの<+符号>および<アスタリスク>では多項演算は実行できません。このため,多項演算と同じ演算を実行したい場合は,2項演算を組み合わせてください。