翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ビルトインモジュール
モジュールはAPPSYNC_JS
ランタイムの一部であり、 JavaScript リゾルバーと関数の書き込みに役立つユーティリティを提供します。
DynamoDB モジュール関数
DynamoDB モジュール関数を使用すると、DynamoDB データソースを操作する際のエクスペリエンスが向上します。タイプマッピングを追加しなくても、関数を使用して DynamoDB データソースに対してリクエストを行うことができます。
モジュールは @aws-appsync/utils/dynamodb
を使用してインポートされます。
// Modules are imported using
@aws-appsync/utils/dynamodb
import * as ddb from '@aws-appsync/utils/dynamodb';
関数
-
get<T>(payload: GetInput): DynamoDBGetItemRequest
-
ヒント
の詳細については入力、「」を参照してください GetInput。
DynamoDB にGetItemリクエストを行う
DynamoDBGetItemRequest
オブジェクトを生成します。import { get } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { return get({ key: { id: ctx.args.id } }); }
-
put<T>(payload): DynamoDBPutItemRequest
-
DynamoDB にPutItemリクエストを行う
DynamoDBPutItemRequest
オブジェクトを生成します。import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { return ddb.put({ key: { id: util.autoId() }, item: ctx.args }); }
remove<T>(payload): DynamoDBDeleteItemRequest
-
DynamoDB にDeleteItemリクエストを行う
DynamoDBDeleteItemRequest
オブジェクトを生成します。import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { return ddb.remove({ key: { id: ctx.args.id } }); }
scan<T>(payload): DynamoDBScanRequest
-
DynamoDB に Scan リクエストを行うための
DynamoDBScanRequest
を生成します。import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const { limit = 10, nextToken } = ctx.args; return ddb.scan({ limit, nextToken }); }
sync<T>(payload): DynamoDBSyncRequest
-
Sync リクエストを行う
DynamoDBSyncRequest
オブジェクトを生成します。リクエストは、前回のクエリ (デルタ更新) 以降に変更されたデータのみを受け取ります。リクエストは、バージョン管理された DynamoDB データソースに対してのみ行うことができます。import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const { limit = 10, nextToken, lastSync } = ctx.args; return ddb.sync({ limit, nextToken, lastSync }); }
update<T>(payload): DynamoDBUpdateItemRequest
-
DynamoDB にUpdateItemリクエストを行う
DynamoDBUpdateItemRequest
オブジェクトを生成します。
オペレーション
オペレーションヘルパーを使用すると、更新中にデータの一部に対して特定のアクションを実行できます。はじめに、@aws-appsync/utils/dynamodb
から operations
をインポートしてください。
// Modules are imported using operations
import {operations} from '@aws-appsync/utils/dynamodb';
-
add<T>(payload)
-
DynamoDB を更新するときに新しい属性項目を追加するヘルパー関数。
例
ID 値を使用して既存の DynamoDB 項目に住所 (番地、市区町村、郵便番号) を追加するには
import { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const updateObj = { address: operations.add({ street1: '123 Main St', city: 'New York', zip: '10001', }), }; return update({ key: { id: 1 }, update: updateObj }); }
append <T>(payload)
-
DynamoDB の既存のリストにペイロードを追加するヘルパー関数。
例
更新中に新しく追加されたフレンド IDs (
newFriendIds
) を既存のフレンドリスト (friendsIds
) に追加するには:import { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const newFriendIds = [101, 104, 111]; const updateObj = { friendsIds: operations.append(newFriendIds), }; return update({ key: { id: 1 }, update: updateObj }); }
decrement (by?)
-
DynamoDB を更新するときに項目内の既存の属性値をデクリメントするヘルパー関数。
例
フレンドカウンター (
friendsCount
) を 10 ずつ減らすにはimport { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const updateObj = { friendsCount: operations.decrement(10), }; return update({ key: { id: 1 }, update: updateObj }); }
increment (by?)
-
DynamoDB を更新するときに項目内の既存の属性値をインクリメントするヘルパー関数。
例
フレンドカウンター (
friendsCount
) を 10 ずつ増やすには:import { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const updateObj = { friendsCount: operations.increment(10), }; return update({ key: { id: 1 }, update: updateObj }); }
prepend <T>(payload)
-
DynamoDB の既存のリストの前に追加するヘルパー関数。
例
更新中に新しく追加されたフレンド IDs (
newFriendIds
) を既存のフレンドリスト (friendsIds
) に追加するには:import { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const newFriendIds = [101, 104, 111]; const updateObj = { friendsIds: operations.prepend(newFriendIds), }; return update({ key: { id: 1 }, update: updateObj }); }
replace <T>(payload)
-
DynamoDB の項目を更新するときに既存の属性を置き換えるヘルパー関数。これは、ペイロードのキーだけでなく、属性のオブジェクトまたはサブオブジェクト全体を更新したい場合に便利です。
例
info
オブジェクト内の住所 (番地、市区町村、郵便番号) を置き換えるにはimport { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const updateObj = { info: { address: operations.replace({ street1: '123 Main St', city: 'New York', zip: '10001', }), }, }; return update({ key: { id: 1 }, update: updateObj }); }
updateListItem <T>(payload, index)
-
リスト内の項目を置き換えるヘルパー関数。
例
更新 (
newFriendIds
) のスコープで、この例ではfriendsIds
を使用してリスト (updateListItem
) の 2 番目の項目 (index:1
、new ID:102
) と 3 番目の項目 (index:2
、new ID:112
) の ID 値を更新しました。import { update, operations as ops } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const newFriendIds = [ ops.updateListItem('102', 1), ops.updateListItem('112', 2) ]; const updateObj = { friendsIds: newFriendIds }; return update({ key: { id: 1 }, update: updateObj }); }
入力
-
Type GetInput<T>
-
GetInput<T>: { consistentRead?: boolean; key: DynamoDBKey<T>; }
タイプ宣言
-
consistentRead?: boolean
(オプション)DynamoDB で強力な整合性のある読み込みを実行するかどうかを指定するオプションのブール値。
-
key: DynamoDBKey<T>
(必須)DynamoDB の項目のキーを指定する必須パラメータ。DynamoDB の項目には、単一のハッシュキーとソートキーが含まれています。
-
Type PutInput<T>
-
PutInput<T>: { _version?: number; condition?: DynamoDBFilterObject<T> | null; customPartitionKey?: string; item: Partial<T>; key: DynamoDBKey<T>; populateIndexFields?: boolean; }
タイプ宣言
-
_version?: number
(オプション) -
condition?: DynamoDBFilterObject<T> | null
(オプション)DynamoDB テーブルにオブジェクトを格納する際、オプションで条件式を指定することができます。この条件式は、操作を実行する前にすでに DynamoDB に格納されているオブジェクトの状態に基づいて、リクエストを成功させるかどうかを制御します。
-
customPartitionKey?: string
(オプション)有効にすると、この文字列値によって、バージョニングが有効になっているときにデルタ同期テーブルが使用する
ds_sk
およびds_pk
レコードの形式が変更されます。有効にすると、populateIndexFields
エントリの処理も有効になります。 -
item: Partial<T>
(必須)DynamoDB に配置される項目の残りの属性です。
-
key: DynamoDBKey<T>
(必須)Put が実行される DynamoDB 内の項目のキーを指定する必須パラメータ。DynamoDB の項目には、単一のハッシュキーとソートキーが含まれています。
-
populateIndexFields?: boolean
(オプション)ブール値で、
customPartitionKey
と一緒に有効にすると、差分同期テーブル、具体的にはgsi_ds_pk
とgsi_ds_sk
列のレコードごとに新しいエントリが作成されます。詳細については、「AWS AppSync デベロッパーガイド」の「構成項目の配信」を参照してください。
-
Type QueryInput<T>
-
QueryInput<T>: ScanInput<T> & { query: DynamoDBKeyCondition<Required<T>>; }
タイプ宣言
-
query: DynamoDBKeyCondition<Required<T>>
(必須)クエリする項目を記述するキー条件を指定します。特定のインデックスでは、パーティションキーの条件は等しく、ソートキーは比較または
beginsWith
(文字列の場合) でなければなりません。パーティションキーとソートキーでは、数値型と文字列型のみがサポートされています。例
以下の
User
タイプを考えてみてください。type User = { id: string; name: string; age: number; isVerified: boolean; friendsIds: string[] }
このクエリには
id
、name
、age
のフィールドのみを含めることができます。const query: QueryInput<User> = { name: { eq: 'John' }, age: { gt: 20 }, }
-
Type RemoveInput<T>
-
RemoveInput<T>: { _version?: number; condition?: DynamoDBFilterObject<T>; customPartitionKey?: string; key: DynamoDBKey<T>; populateIndexFields?: boolean; }
タイプ宣言
-
_version?: number
(オプション) -
condition?: DynamoDBFilterObject<T>
(オプション)DynamoDB テーブルにオブジェクトを格納する際、オプションで条件式を指定することができます。この条件式は、操作を実行する前にすでに DynamoDB に格納されているオブジェクトの状態に基づいて、リクエストを成功させるかどうかを制御します。
例
次の例は、ドキュメントの所有者がリクエストを行ったユーザーと一致する場合にのみ操作が成功することを許可する条件を含む
DeleteItem
式です。type Task = { id: string; title: string; description: string; owner: string; isComplete: boolean; } const condition: DynamoDBFilterObject<Task> = { owner: { eq: 'XXXXXXXXXXXXXXXX' }, } remove<Task>({ key: { id: 'XXXXXXXXXXXXXXXX', }, condition, });
-
customPartitionKey?: string
(オプション)有効にすると、
customPartitionKey
値によって、バージョニングが有効になっているときにデルタ同期テーブルが使用するds_sk
およびds_pk
レコードの形式が変更されます。有効にすると、populateIndexFields
エントリの処理も有効になります。 -
key: DynamoDBKey<T>
(必須)削除する DynamoDB 内の項目のキーを指定する必須パラメータ。DynamoDB の項目には、単一のハッシュキーとソートキーが含まれています。
例
User
がユーザーid
のハッシュキーしか持っていない場合、キーは次のようになります。type User = { id: number name: string age: number isVerified: boolean } const key: DynamoDBKey<User> = { id: 1, }
テーブルユーザーがハッシュキー (
id
) とソートキー (name
) を持っている場合、キーは以下のようになります。type User = { id: number name: string age: number isVerified: boolean friendsIds: string[] } const key: DynamoDBKey<User> = { id: 1, name: 'XXXXXXXXXX', }
-
populateIndexFields?: boolean
(オプション)ブール値で、
customPartitionKey
と一緒に有効にすると、差分同期テーブル、具体的にはgsi_ds_pk
とgsi_ds_sk
列のレコードごとに新しいエントリが作成されます。
-
Type ScanInput<T>
-
ScanInput<T>: { consistentRead?: boolean | null; filter?: DynamoDBFilterObject<T> | null; index?: string | null; limit?: number | null; nextToken?: string | null; scanIndexForward?: boolean | null; segment?: number; select?: DynamoDBSelectAttributes; totalSegments?: number; }
タイプ宣言
-
consistentRead?: boolean | null
(オプション)DynamoDB のクエリ時に一貫性のあるリードを示すオプションのブール値。デフォルト値は
false
です。 -
filter?: DynamoDBFilterObject<T> | null
(オプション)テーブルから結果を取得した後に結果に適用するオプションのフィルター。
-
index?: string | null
(オプション)スキャンするインデックスの名前。
-
limit?: number | null
(オプション)返される結果の最大数。
-
nextToken?: string | null
(オプション)前のクエリを継続するためのオプションのページ分割トークンです。これは前のクエリから取得されます。
-
scanIndexForward?: boolean | null
(オプション)クエリを昇順にするか、降順にするかを示すオプションのブール値。デフォルトでは、この値は
true
に設定されます。 -
segment?: number
(オプション) -
select?: DynamoDBSelectAttributes
(オプション)DynamoDB から返される属性。デフォルトでは、 AWS AppSync DynamoDB リゾルバーはインデックスに射影された属性のみを返します。サポートされている値には以下があります。
-
ALL_ATTRIBUTES
指定されたテーブルまたはインデックスのすべての項目の属性を返します。ローカルセカンダリインデックスに対してクエリを実行する場合、DynamoDB は、親のテーブルからインデックスの項目に一致したすべての項目をフェッチします。インデックスがすべての項目の属性を射影するように設定されている場合、すべてのデータはローカルセカンダリインデックスから取得されるため、フェッチは必要ありません。
-
ALL_PROJECTED_ATTRIBUTES
インデックスにプロジェクションされたすべての属性を取得します。インデックスがすべての属性を投射するように設定されている場合、この返り値は
ALL_ATTRIBUTES
を指定した場合と同等になります。 -
SPECIFIC_ATTRIBUTES
ProjectionExpression
にリストされている属性のみを返します。この戻り値は、AttributesToGet
の値を指定せずにProjectionExpression
を指定することと同じです。
-
-
totalSegments?: number
(オプション)
-
Type DynamoDBSyncInput<T>
-
DynamoDBSyncInput<T>: { basePartitionKey?: string; deltaIndexName?: string; filter?: DynamoDBFilterObject<T> | null; lastSync?: number; limit?: number | null; nextToken?: string | null; }
タイプ宣言
-
basePartitionKey?: string
(オプション)Sync 操作を実行するときに使用するベーステーブルのパーティションキー。このフィールドにより、テーブルがカスタムパーティションキーを使用している場合に Sync 操作を実行できます。
-
deltaIndexName?: string
(オプション)Sync 操作に使用されるインデックス。このインデックスは、テーブルがカスタムパーティションキーを使用する場合に、デルタストアテーブル全体で Sync 操作を有効にするために必要です。同期オペレーションは GSI (
gsi_ds_pk
と で作成) で実行されますgsi_ds_sk
。 -
filter?: DynamoDBFilterObject<T> | null
(オプション)テーブルから結果を取得した後に結果に適用するオプションのフィルター。
-
lastSync?: number
(オプション)最後に成功した Sync オペレーションが開始されたエポックミリ秒単位の時刻。指定すると、
lastSync
以降に変更された項目のみが返されます。このフィールドはオプションです。最初の Sync オペレーションからすべてのページを取得した後にのみ入力する必要があります。省略すると、ベーステーブルの結果が返されます。それ以外の場合は、差分テーブルの結果が返されます。 -
limit?: number | null
(オプション)一度に評価する項目の最大数です。省略した場合、デフォルトの制限は
100
項目に設定されます。このフィールドの最大値は1000
項目です。 -
nextToken?: string | null
(オプション)
-
Type DynamoDBUpdateInput<T>
-
DynamoDBUpdateInput<T>: { _version?: number; condition?: DynamoDBFilterObject<T>; customPartitionKey?: string; key: DynamoDBKey<T>; populateIndexFields?: boolean; update: DynamoDBUpdateObject<T>; }
タイプ宣言
-
_version?: number
(オプション) -
condition?: DynamoDBFilterObject<T>
(オプション)DynamoDB でオブジェクトを更新する場合、オプションで条件式を指定することができます。この条件式は、操作を実行する前にすでに DynamoDB にあるオブジェクトの状態に基づいて、リクエストを成功させるかどうかを制御します。
-
customPartitionKey?: string
(オプション)有効にすると、
customPartitionKey
値によって、バージョニングが有効になっているときにデルタ同期テーブルが使用するds_sk
およびds_pk
レコードの形式が変更されます。有効にすると、populateIndexFields
エントリの処理も有効になります。 -
key: DynamoDBKey<T>
(必須)更新中の DynamoDB 内の項目のキーを指定する必須パラメータ。DynamoDB の項目には、単一のハッシュキーとソートキーが含まれています。
-
populateIndexFields?: boolean
(オプション)ブール値で、
customPartitionKey
と一緒に有効にすると、差分同期テーブル、具体的にはgsi_ds_pk
とgsi_ds_sk
列のレコードごとに新しいエントリが作成されます。 -
update: DynamoDBUpdateObject<T>
更新する属性とその新しい値を指定するオブジェクト。更新オブジェクトは
add
、remove
、replace
、increment
、decrement
、append
、prepend
、updateListItem
と共に使用できます。
-
Amazon RDSモジュール関数
Amazon RDSモジュール関数は、Amazon RDS Data で設定されたデータベースを操作する際に、より高度なエクスペリエンスを提供しますAPI。モジュールは @aws-appsync/utils/rds
を使用してインポートされます。
import * as rds from '@aws-appsync/utils/rds';
関数は個別にインポートすることもできます。例えば、以下のインポートでは sql
を使用します。
import { sql } from '@aws-appsync/utils/rds';
関数
モジュールのユーティリティヘルパーを使用して AWS AppSync RDS、データベースとやり取りできます。
select
ユーティリティは、リレーショナルデータベースにクエリを実行する SELECT
ステートメントを作成します。
基本的な使用法
基本的な形式では、クエリを実行するテーブルを指定できます。
import { select, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { // Generates statement: // "SELECT * FROM "persons" return createPgStatement(select({table: 'persons'})); }
なお、テーブル識別子でスキーマを指定することもできます。
import { select, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { // Generates statement: // SELECT * FROM "private"."persons" return createPgStatement(select({table: 'private.persons'})); }
列の指定
columns
プロパティで列を指定できます。これを値に設定しない場合、デフォルトでは *
になります。
export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" return createPgStatement(select({ table: 'persons', columns: ['id', 'name'] })); }
また、列のテーブルも指定できます。
export function request(ctx) { // Generates statement: // SELECT "id", "persons"."name" // FROM "persons" return createPgStatement(select({ table: 'persons', columns: ['id', 'persons.name'] })); }
LIMIT と OFFSET
limit
と offset
をクエリに適用できます。
export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // LIMIT :limit // OFFSET :offset return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], limit: 10, offset: 40 })); }
ORDER BY
結果は orderBy
プロパティを使用してソートできます。列とオプションの dir
プロパティを指定するオブジェクトの配列を指定します。
export function request(ctx) { // Generates statement: // SELECT "id", "name" FROM "persons" // ORDER BY "name", "id" DESC return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], orderBy: [{column: 'name'}, {column: 'id', dir: 'DESC'}] })); }
フィルター
特殊条件オブジェクトを使用してフィルターを構築できます。
export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: {name: {eq: 'Stephane'}} })); }
以下のフィルターを組み合わせることもできます。
export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME and "id" > :ID return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: {name: {eq: 'Stephane'}, id: {gt: 10}} })); }
また、OR
ステートメントも作成できます。
export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME OR "id" > :ID return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: { or: [ { name: { eq: 'Stephane'} }, { id: { gt: 10 } } ]} })); }
not
を使用して条件を無効にすることもできます。
export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE NOT ("name" = :NAME AND "id" > :ID) return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: { not: [ { name: { eq: 'Stephane'} }, { id: { gt: 10 } } ]} })); }
以下の演算子を使用して、値を比較することもできます。
演算子 | 説明 | 可能な値型 |
---|---|---|
eq | Equal | 数値、文字列、ブール値 |
ne | Not equal | 数値、文字列、ブール値 |
le | Less than or equal | 番号、文字列 |
lt | Less than | 番号、文字列 |
ge | Greater than or equal | 番号、文字列 |
gt | Greater than | 番号、文字列 |
contains | いいね | string |
notContains | 好きではない | string |
beginsWith | プレフィックスで始まる | string |
次の間 | 2 つの値の間 | 番号、文字列 |
attributeExists | 属性が null ではありません | 数値、文字列、ブール値 |
size | 要素の長さを確認します | string |
insert
ユーティリティによって、INSERT
オペレーションを使用してデータベースに単一行の項目を簡単に挿入できます。
単一項目の挿入
項目を挿入するには、テーブルを指定して、値のオブジェクトを渡します。オブジェクトキーはテーブルの列にマッピングされます。列名は自動的にエスケープされ、値は変数マップを使用してデータベースに送信されます。
import { insert, createMySQLStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values }); // Generates statement: // INSERT INTO `persons`(`name`) // VALUES(:NAME) return createMySQLStatement(insertStatement) }
SQLユースケース
insert
の後に select
を組み合わせて、挿入した行を取得できます。
import { insert, select, createMySQLStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values }); const selectStatement = select({ table: 'persons', columns: '*', where: { id: { eq: values.id } }, limit: 1, }); // Generates statement: // INSERT INTO `persons`(`name`) // VALUES(:NAME) // and // SELECT * // FROM `persons` // WHERE `id` = :ID return createMySQLStatement(insertStatement, selectStatement) }
Postgres のユースケース
Postgres では、returning
*
または列名の配列が受け入れられます。
import { insert, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values, returning: '*' }); // Generates statement: // INSERT INTO "persons"("name") // VALUES(:NAME) // RETURNING * return createPgStatement(insertStatement) }
update
ユーティリティでは、既存の行を更新できます。条件オブジェクトを使用すると、条件を満たすすべての行の指定された列に変更を適用できます。例えば、このミューテーションを可能にするスキーマがあるとします。Person
の name
を 3
の id
値で更新したいのですが、これは 2000
年以降にそれら (known_since
) がわかっている場合に限ります。
mutation Update { updatePerson( input: {id: 3, name: "Jon"}, condition: {known_since: {ge: "2000"}} ) { id name } }
更新リゾルバーは以下のようになります。
import { update, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: { id, ...values }, condition } = ctx.args; const where = { ...condition, id: { eq: id }, }; const updateStatement = update({ table: 'persons', values, where, returning: ['id', 'name'], }); // Generates statement: // UPDATE "persons" // SET "name" = :NAME, "birthday" = :BDAY, "country" = :COUNTRY // WHERE "id" = :ID // RETURNING "id", "name" return createPgStatement(updateStatement) }
条件にチェックを追加して、3
と等しいプライマリキー id
を持つ行だけが更新されるようにすることができます。同様に、Postgres inserts
の場合も、returning
を使用して変更されたデータを返すことができます。
remove
ユーティリティでは、既存の行を削除できます。条件オブジェクトは、条件を満たすすべての行で使用できます。delete
は の予約キーワードです JavaScript。 は代わりに使用remove
する必要があります。
import { remove, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: { id }, condition } = ctx.args; const where = { ...condition, id: { eq: id } }; const deleteStatement = remove({ table: 'persons', where, returning: ['id', 'name'], }); // Generates statement: // DELETE "persons" // WHERE "id" = :ID // RETURNING "id", "name" return createPgStatement(updateStatement) }
キャスティング
ステートメントで使用する正しいオブジェクト型に関して、さらに特異度が必要となる場合もあるでしょう。指定されたタイプのヒントを使用してパラメータのタイプを指定できます。 は、データ と同じタイプのヒント AWS AppSync をサポートしますAPI。モジュールの typeHint
関数を使用してパラメータを AWS AppSync rds
キャストできます。
次の例では、JSONオブジェクトとしてキャストされる値として配列を送信できます。->
演算子を使用して、index
2
JSON配列内の で 要素を取得します。
import { sql, createPgStatement, toJsonObject, typeHint } from '@aws-appsync/utils/rds'; export function request(ctx) { const arr = ctx.args.list_of_ids const statement = sql`select ${typeHint.JSON(arr)}->2 as value` return createPgStatement(statement) } export function response(ctx) { return toJsonObject(ctx.result)[0][0].value }
キャスティングは、DATE
、TIME
、TIMESTAMP
の処理や比較を行うときにも役立ちます。
import { select, createPgStatement, typeHint } from '@aws-appsync/utils/rds'; export function request(ctx) { const when = ctx.args.when const statement = select({ table: 'persons', where: { createdAt : { gt: typeHint.DATETIME(when) } } }) return createPgStatement(statement) }
現在の日付と時刻を送信する方法について別の例を以下に示します。
import { sql, createPgStatement, typeHint } from '@aws-appsync/utils/rds'; export function request(ctx) { const now = util.time.nowFormatted('YYYY-MM-dd HH:mm:ss') return createPgStatement(sql`select ${typeHint.TIMESTAMP(now)}`) }
使用可能な型ヒント
-
typeHint.DATE
- 対応するパラメータが、DATE
型のオブジェクトとしてデータベースに送信されます。受け入れられる形式はYYYY-MM-DD
です。 -
typeHint.DECIMAL
- 対応するパラメータが、DECIMAL
型のオブジェクトとしてデータベースに送信されます。 -
typeHint.JSON
- 対応するパラメータが、JSON
型のオブジェクトとしてデータベースに送信されます。 -
typeHint.TIME
- 対応する文字列パラメータ値が、TIME
型のオブジェクトとしてデータベースに送信されます。受け入れられる形式はHH:MM:SS[.FFF]
です。 -
typeHint.TIMESTAMP
- 対応する文字列パラメータ値が、TIMESTAMP
型のオブジェクトとしてデータベースに送信されます。受け入れられる形式はYYYY-MM-DD HH:MM:SS[.FFF]
です。 -
typeHint.UUID
- 対応する文字列パラメータ値が、UUID
型のオブジェクトとしてデータベースに送信されます。