no versions found for ApplicationFrameworkReferences / Utility/Database/AlierDB/aliertable / en

AlierTable

概要


AlierTable はデータベースの物理テーブル (physical table)または SELECT 文から得られる仮想テーブル (virtual table)を表すオブジェクトのクラスです。

AlierTable のインスタンスは以下のいずれかの方法で生成されます:

いずれの方法でも返値として AlierTable が得られます。ただし、AlierTable.join() は常に、派生クラスであるVirtualAlierTable のインスタンスを返します。また、AlierDB.get() の引数 columns として選択するカラム名のリストを指定した場合、その結果としてVirtualAlierTable のインスタンスが返ります。これらはオブジェクトの表す対象が物理テーブルではなく仮想テーブルであることを反映しています。

AlierTable を介したテーブルの操作およびデータの問い合わせは、REST 風のインタフェースを介して行えます。すなわち、

  • データの問い合わせ(SELECT)には get() メソッドを使います
  • データの挿入(INSERT)には post() メソッドを使います
  • データの更新(UPDATE)には put() メソッドを使います
  • データの削除(DELETE)には delete() メソッドを使います

またテーブルの結合には join() メソッドを使います。

SQL 式のスクリプト上での表現

WHERE 句および ON 句に指定する条件式として SQL 式の文字列を指定することができます。

これらの条件式は AlierTable から、 WHERE 句について get()put()delete() メソッドの引数 filter として、ON 句について、join() メソッドの引数 on として指定できます。

SQL式の記述に関する注意点

SQL式の中に固定値の文字列を埋め込む場合、それは SQL の文字列リテラルとして記述する必要があります。 つまり単引用符(')または二重引用符(")で囲まれた文字列であり、文字列中の引用符は連続する単引用符('' / "") としてエスケープされていなければなりません(例:'Maxwell''s Silver Hammer')。

note
  • どちらの引用符を使うかは対向のデータベースおよびその設定に依存します
  • JavaScript において単引用符から始まる文字列リテラルを使う場合、内部の単引用符はバックスラッシュ(\)でエスケープされる必要があるため、全体としては 'Song.title = \'Maxwell\'\'s Silver Hammer\'' のような記述になります。
    • 単引用符だけが問題であれば、これは文字列を二重引用符(")で開始することで回避できます。
    • 二重引用符も使用されるケースでは逆引用符(`)で囲みテンプレートリテラルとして扱うことで回避できます。

SQL式の中に下線および英数字(/[_a-zA-Z0-9]/)で表せない識別子を埋め込む場合、その識別子は二重引用符(")または逆引用符(`)で囲まれていなければなりません。

note
  • どちらの引用符を使うかは対向のデータベースおよびその設定に依存します
  • 識別子に含まれる引用符は連続する引用符 ("" / ``) としてエスケープされている必要があります(例:"COUNT(""My Number"")")。
    • JavaScript において二重引用符から始まる文字列リテラルを使う場合、内部の二重引用符はバックスラッシュ(\)でエスケープされる必要があるため、全体としては "\"COUNT(\"\"My Number\"\")\"" のような記述になります。
      • バックスラッシュによるエスケープの回避方法は単引用符の場合と同様です。
      • テンプレートリテラル内で引用符として逆引用符(`)を使う場合、同様にバックスラッシュによるエスケープが必要です(`\`CaseSensitiveName\``)。

JavaScript風記法

AlierTable が提供するメソッドの中では、SQL 式そのものではなく JavaScript 風の記法を使うこともできます。

WHERE 句について get()put()delete() メソッドの引数 filter として、ON 句について、join() メソッドの引数 on として指定できます。

以下に示す JavaScript 風の演算は対応する SQL 式に置き換えられます。

置換前 置換後
:------: :------:
== null IS NULL
=== null IS NULL
== undefined IS NULL
=== undefined IS NULL
!= null IS NOT NULL
!== null IS NOT NULL
!= undefined IS NOT NULL
!== undefined IS NOT NULL
== <null / undefined 以外の単語> = <null / undefined 以外の単語>
=== <null / undefined 以外の単語> = <null / undefined 以外の単語>
&& AND
|| OR
! <"=" 以外の文字> NOT <"=" 以外の文字>
warning
  • カラム名などに undefined を使用する場合、注意が必要です。 JavaScript 風の(否定)等価演算子の右項として undefined を記述すると意図しない動作をします。 この問題を回避するには "undefined" のように二重引用符で囲むか UNDEFINED のように大文字を含める必要があります。
    • 同様の問題は null に関しては生じません。これは SQL のキーワードは大文字小文字の区別がなく、かつ NULL が予約語であるため、null という名前のカラムやテーブルを定義できないためです。
  • ヨーダ記法はサポートされていません。例えば null == xx IS NULL置換されませんnull との比較は常に右辺に null が置かれるように注意してください(undefined も同様)。
    • また同様に、テンプレートリテラルなどを用いて値や識別子を埋め込む際は null / undefined でないことを事前に保証する必要があります。

メソッド


get()

  • 対象のテーブルからレコードを取得します。

put()

  • 対象のテーブルから条件に合致するレコードの値を変更します。

post()

  • 対象のテーブルにレコードを追加します。

delete()

  • 対象のテーブルから、条件に合致するレコードを削除します。

join()

  • 対象のテーブルを与えられたテーブルと結合します。

isJoined()

  • 対象が結合テーブルかどうかを検査します。

プロパティ


name

テーブル名を表す文字列です。

string

alias

テーブルの別名を表す文字列です。

AlierDB.get() の引数 alias を与えた場合にのみ設定されます。

string | null

columns

取得対象のカラム名のリストです。

AlierDB.get() の引数 columns を与えた場合にのみ設定されます。

Array<string> | null