AlierTable: get()
対象のテーブルからレコードを取得します。
この関数は非同期関数です。
構文
alierTable.get() => Promise<object>
alierTable.get({ filter }) => Promise<object>
alierTable.get({ sort }) => Promise<object>
alierTable.get({ sort, limit }) => Promise<object>
alierTable.get({ sort, offset }) => Promise<object>
alierTable.get({ sort, limit, offset }) => Promise<object>
alierTable.get({ aggregate }) => Promise<object>
alierTable.get({ aggregate, aggregateAs }) => Promise<object>
alierTable.get({ final }) => Promise<object>
alierTable.get({ aggregate, final }) => Promise<object>
alierTable.get({ aggregate, aggregateAs, final }) => Promise<object>
alierTable.get({ filter, sort }) => Promise<object>
alierTable.get({ filter, sort, limit }) => Promise<object>
alierTable.get({ filter, sort, offset }) => Promise<object>
alierTable.get({ filter, sort, limit, offset }) => Promise<object>
alierTable.get({ filter, aggregate }) => Promise<object>
alierTable.get({ filter, aggregate, aggregateAs }) => Promise<object>
alierTable.get({ filter, final }) => Promise<object>
alierTable.get({ filter, aggregate, final }) => Promise<object>
alierTable.get({ filter, aggregate, aggregateAs, final }) => Promise<object>
引数
単一の、以下のプロパティを持つオブジェクトです。 このオブジェクトの指定は任意です。指定がない場合、以下のすべてのプロパティについて既定の値が使われます。
-
filter:string|undefined(省略可)取得するレコードの条件式です(
WHERE)。 指定した場合、対象のテーブルから条件式を満たすレコードだけが取得できます。WHERE句の条件を表すSQL式を、文字列として指定します。 条件式の記法についてはSQL 式のスクリプト上での表現を参照してください。このプロパティの指定は任意です。指定がない場合、すべてのレコードを取得します(
WHERE句を指定しません)。 -
sort:string|Array<string>|undefined(省略可)レコードの並べ替えのキーとして用いるカラム名のリストです(
ORDER BY)。カラム名のリストは、カラム名の配列またはカンマ区切り文字列として指定します。
特殊な記法として、カラム名の先頭に
!をつけることで、そのカラムに対して降順で並べ替えが行われます(先頭に!がない場合、昇順で並べ替えが行われます)。このプロパティの指定は任意です。指定がない場合、並べ替えを行いません。
-
aggregate:function|object|undefined(省略可)関数または組み込みの集計関数を利用するためのオブジェクトです。
aggregateに関数が指定された場合、取得した各レコードに対して呼び出されます。 また、指定された関数は以下の引数を受け取ります:record:objectindex番目のレコードを表すオブジェクトです。
index:number- 取得したレコード配列の 0 始まりの添え字です。
aggregateに指定された関数がPromiseを返す場合、取得したすべてのレコードに対する呼び出しが行われた後、すべてのPromiseに対して待ち合わせをします。ただし、いずれかのPromiseが棄却された場合、他のPromiseを待たずにget()の呼び出しは失敗します。aggregateにオブジェクトが指定された場合、そのオブジェクトは以下のプロパティを持たなければなりません:-
aggregate:string組み込みの集計関数とその引数の組です。
-
group:string|string[]|undefined(省略可)レコードのグループ化に使うカラム名のリストです(
GROUP BY)。カラム名のリストには、カラム名の配列、またはカンマ区切り文字列が指定できます。 リストが空の場合、レコードはグループ化されません。
get()の引数にプロパティfilterが指定されている場合、filterに指定した条件を満たすレコードに対してグループ化が行われます。このプロパティの指定は任意です。指定がない場合、レコードはグループ化されません。
-
having:string|undefined(省略可)グループ化されたレコードに対する条件式です(
HAVING)。get()の引数にプロパティfilterが指定されている場合、filterに指定した条件を満たすレコードに対してグループ化が行われ、その後にhavingに指定した条件でグループ化されたレコードがフィルタされます。このプロパティの指定は任意です。指定がない場合、すべてのグループ化されたレコードを取得します。
aggregateに指定するオブジェクトは以下の関数から生成できます:$count()COUNT集計関数を使用する際に使います。
$sum()SUM集計関数を使用する際に使います。
$avg()AVG集計関数を使用する際に使います。
$max()MAX集計関数を使用する際に使います。
$min()を参照。MIN集計関数を使用する際に使います。
このプロパティの指定は任意です。指定がない場合、集計処理は行われません。
-
aggregateAs:string|undefined(省略可)引数のプロパティ
aggregateで指定した集計操作の結果に与える別名です。このプロパティは引数のプロパティ
aggregateにオブジェクトを指定した場合にのみ意味を持ちます。それ以外の場合には単に無視されます。このプロパティの指定は任意です。指定がない場合、組み込みの集計関数の名前が使用されます。
-
final:function(省略可)レコード取得と集計操作が完了した後に呼ばれるコールバック関数です。
コールバック関数には以下の引数が与えられます。
-
count:number取得したレコードの個数です。
コールバック関数が
Promiseを返した場合、その履行を待ち合わせます。レコードの取得や集計操作に失敗した場合、このコールバック関数は呼び出されません。
-
-
limit:number(省略可)取得するレコード数の上限です。
レコード数の上限として、0 以上の整数を指定できます(0, 1, 2, ...)。
0 以上の整数以外の数値を与えた場合、以下のように動作します:
-
無限大(
Infinity/-Infinity)、非数 (NaN) または負の値を指定した場合、それは無視されます(レコード数は制限されません)。 -
小数部が 0 でない数値を与えた場合、小数部を切り捨てた結果がレコード数の上限となります。
特に 0 から 1 未満の値を指定した場合(
0 <= limit && limit < 1)、レコードは取得されません。
プロパティ
limitは必ずsortとともに指定する必要があります。sortによりソートキーが与えられていない場合、limitは効果を持ちません(無視されます)。Arrayの最大長(32ビット符号なし整数の最大値)を超える値を指定した場合、limitの値はArrayの最大長に丸められます。これはlimitを指定しなかった場合と同じ結果を与えます。このプロパティの指定は任意です。指定がない場合、
limitの値はArrayの最大長(32ビット符号なし整数の最大値)として扱われます。 -
-
offset:number(省略可)取得する先頭レコードの位置です。 条件に一致したレコードのうち、先頭の
offset個のレコードは結果に含まれません。レコードの先頭位置として、0 以上の整数を指定できます(0, 1, 2, ...)。
0 以上の整数以外の数値を与えた場合、以下のように動作します:
-
無限大(
Infinity/-Infinity)、非数 (NaN) 、負の値または 0 を指定した場合(offset <= 0)、それは無視されます(条件に一致した最初のレコードから取得します)。 -
小数部が 0 でない数値を与えた場合、小数部を切り捨てた結果がレコードの先頭位置となります。
特に 0 から 1 未満の値を指定した場合(
0 <= offset && offset < 1)、条件に一致した最初のレコードから取得します。
offsetとしてNumber.MAX_SAFE_INTEGERを超える値を指定した場合、offsetの値はNumber.MAX_SAFE_INTEGERに丸められます。offsetは必ずsortとともに指定する必要があります。sortによりソートキーが与えられていない場合、offsetは効果を持ちません(無視されます)。このプロパティの指定は任意です。指定がなかった場合、
offsetの値は 0 として扱われます。 -
sortの指定がない限り、レコードの順序は不定です。そのため、limitおよびoffsetはsortの指定がない場合、効果を持ちません。
limitおよびoffsetを指定に関する挙動はバックエンドのデータベースの仕様とは必ずしも一致しません。- 例えば SQLite において
OFFSETを単独で使用することはできず、常にLIMIT <limit> OFFSET <offset>の形で使用なければなりませんが、AlierTableから生成されるSQL文はこの制約を回避するように行われます(<limit>に有効な値が指定できない場合、JavaScript のArrayクラスで扱える配列の最大長が代わりに指定されます。<offset>に関しても同様に、有効な値が指定できない場合には 0 が代わりに指定されます)。
- 例えば SQLite において
limitの最大値は JavaScript のArrayクラスで扱える配列の最大長に起因します。offsetの最大値は以下の理由により指定されます:- JavaScript において
Number型では 53 ビットを超える長さの整数を精確に扱えないため - 対向のデータベースが扱える数値型の制約に違反しないため
- JavaScript において
返値: Promise<object>
実行結果 のオブジェクトを与える Promise です。
成功時には実行結果オブジェクトのプロパティ records として、取得したレコードの配列が設定されます。
レコードはカラム名と同名のプロパティを持つオブジェクトとして与えられます。
対象が単一のテーブルである場合、レコードのプロパティ名は対象のテーブルのカラム名が使われます。
対象が複数のテーブルの結合である場合、各テーブル名またはその別名とカラム名を下線(_)でつなげた名前(tablename_columname)がプロパティ名に使われます。
また引数のプロパティ aggregate として集計用オブジェクトを与えた場合、その集計結果は引数のプロパティ aggregateAs で指定した名前か、aggregateAs が指定されていない場合、集計用オブジェクトによって実行される組み込みの集計関数の名前がレコードのプロパティ名に使われます。
解説
対象のテーブルからレコードを取得します。
使用例は実行例を参照してください。