データベースからの読み取り
データベース内のテーブルからデータを取得することは、一般的に "選択" や "フェッチ" と呼ばれていますが、Eggplant Functional とデータベースを使用する場合は "読み取り" データと呼ばれます。この返されたデータは、Eggplant Functional を用いたデータ駆動型テストなどのテストに情報を提供するために使用することができます。
テーブル内容の読み取り
データベーステーブルの内容をフェッチすることは、そのすべてのレコードを要求するだけの単純な作業となることがあります。
データベースを変更する必要がなく、ただ読み取りたいだけの場合は、writable
データベース接続リストプロパティを No
に設定してください。
例:
以下のコードは、Members
変数をレコードのリストに設定します。それぞれの行に対して一つのレコードがリスト内に格納されます。リスト内の各アイテムは Record
オブジェクトで、テーブル内のその行の値を含むプロパティリストであり、テーブル内の各列に対してプロパティキーが存在します。Recordsについての詳細は、Records vs. Property Listsを参照してください。
put the records of memberTable into Members
単一のレコードだけが期待されるか、必要な場合、record
を records
の代わりに使用することができます。これにより、レコードのリストではなく、単一のレコードオブジェクトが返されます。
この例のように、大きなテーブルの全てのレコードを変数に読み込むことは推奨されません。where
式を使用するか、データベースのレコードをイテレーションする方法を参照してレコードをイテレーションしてください。
例:
この例では、Get
コマンドを使用して、lastName列が "Smith" と等しいレコードのデータのみを取得します。where
節は、レコードを選択するためのさまざまな基準を含めることができます。
get the records of memberTable where lastName is "Smith"
名前が "S" で始まるが、 "Smith" を除くすべてのレコードを取得するには、次のようにリクエストします:
get records of memberTable where lastName begins with "S" and lastName isn't "Smith"
例:
Get
コマンドはまた、それ(参照:すべてについて "It")と一緒に使用することもできます:
set myDB to {type:"odbc", DSN:"MyDB"} -- データベース接続を定義
put table "film" of myDB into myTable -- 変数 myTable に特定のテーブルへの参照データを格納
get rental_rate of the record of myTable where title is "TERMINATOR" -- Get コマンドを使用して特定の映画のレンタル料を取得
if it is "$9.99" then log "Rental rate is correct!" -- ローカル変数 It を使用してレンタル料が正しいことを確認
Where式
データベーステーブルには、大量のレコード(数千、数十万、それ以上)が含まれている場合があります。このような大きさのテーブル全体をEggplant Functionalの変数に取り込むと、ローカルメモリの使用に影響を及ぼす可能性があります。このため、必要なレコードだけを要求できると便利なことがよくあります。where
節はこれを実現し、必要なレコードだけをデータベースに要求することで、ネットワークトラフィックとローカルメモリ使用量の両方を最小限に抑えます。
Where
式は、record
またはrecords
関数、number of records
関数、またはdelete record
コマンドを使用して、テーブルから必要なレコードを選択するために使用されます。where
節が指定されていない場合、テーブルのすべてのレコードが返されます。
このページで説明されているwhere
節は、Each Expressionsで使用されるwhere
節と混同しないでください。それらは似たようなことをしますが、非常に異なります。データベースで使用されるwhere
式は能力が限られていますが、データベースからデータを取得する際にははるかに効率的になることができ ます。
where式はwhere
節に続く式で構成されます。その式には、_columnName operator value_の形式を使用してテーブルを1つ以上参照するものが含まれます。列の名前は最初に来て、その後にオペレータ、そして値が続きます。たとえば、式 "where size is at least 12"では、列名は "size"、オペレータは "is at least"、値は "12"です。
例:
set mymovie to the record of films where title is "TERMINATOR"
where節で指定した条件に一致するレコードが複数ある場合、record
という語を使用すると、その中の最初のレコードのみが返されます。一致するすべてのレコードを返すにはrecords
を使用します。
オペレーター
where
式を使用する場合、オペレーターは次のいずれか(またはそれらの同義語や否定形)にすることができます:
- is equal to
- is not equal to
- is less than
- is more than
- is less than or equal to
- is greater than or equal to
- begins with
- ends with
- contains substring
- is in list of values
- is between min and max
これらのオペレータは、列に値が割り当てられているかどうかをテストするために使用できます:
- columnName is null
- columnName is not null
And/Or
さらに、AND
またはOR
で条件を結合することで、複数の条件を一度にテストすることができます。複雑なwhere
式では、括弧でサブ式を囲むと意味が明確になります。
例:
delete records from billingTable where (dueDate is earlier than today) and (remainingAmountDue is 0)
例:
//Displays the full name of the club member whose member number is 12345
put 12345 into desiredMemNum
set clubDBto (type:"odbc", DSN:"ClubData", user:"root", password:"")
put table "Members" of clubDB into memberTable
set member to the record of memberTable where memberNumber is desiredMemNum
put "Name: " & member's firstName && member's lastName
データベーステーブルのレコードを繰り返し処理する
データベーステーブルのレコードを繰り返し処理することは、レコードを更新したりデータを操作したりする一般的な方法です。これは、Repeat LoopまたはRecord Iteratorを使用して行うことができます。