データベース

~ Merge queries using db_merge 和訳 ~

Merge query は少し特殊なクエリです。SQL 2003 の仕様では定義されているものですが、ほとんどのデータベースは、標準の構文をサポートしていません。ほとんどがそれぞれデータベース固有の構文の実装で代替されています。Drupal のマージクエリは抽象化されたオブジェクトであり、それぞれのデータベースにおける適切な構文にコンパイルすることが出来ます。これは「UPDATE」と「INSERT」を足し合わせたようなもので、しばしば「UPSERT」と呼ばれます。

コア: 
Drupal7
~ Describing tables to Views 和訳 ~

独自のテーブルを Views で使えるようにするには hook_views_data() を使います。hook_views_data() はテーブルの名前をキーに、その情報の配列を返します。例えばモジュールが 'foo'、'bar'、'baz' といった3つのテーブルを Views に伝える必要があるとすると、配列は次のように表現されます。:

コア: 
Drupal7
~ Result sets 和訳 ~

セレクトクエリは常に 0 個以上の結果セットオブジェクトを返します。結果セットからデータを取得するには、ケースに応じていくつかの方法があります。いちばんよく使われる方法は、foreach() ループを使った繰り返し処理です。

コア: 
Drupal7
~ Conditional clauses 和訳 ~

「条件句(conditional clause)」はクエリ文の中で、その結果を一定の条件にマッチする行だけに制限する部分です。SQLでは、セレクト文、アップデート文、もしくはデリート文における WHERE 句、HAVING 句がそれにあたります。Drupal のダイナミッククエリでは、それらは同じメカニズムで実装されています。ここで説明することはすべて、特別な場合を除き、次の3つのクエリタイプのすべてに適用されます。

コア: 
Drupal7
~ Extenders 和訳 ~

セレクトクエリは「エクステンダ」という概念をサポートします。エクステンダはセレクトクエリに動的に機能を追加する方法です。これによりメソッドを新たに追加したり、既存のメソッドの振る舞いを変更したりといったことが出来ます。

コア: 
Drupal7
~ Query alteration 和訳 ~

ダイナミックセレクトクエリーの重要な特徴のひとつは、他のモジュールがクエリの実行時に変更を加えられることです。ノードのアクセス制限などの動作に見られるように、モジュールは自身のクエリ、もしくは他のモジュールのクエリに対しても、独自の条件の追加などを行うことができます。こういったクエリの変更機能にはタグ付けメタデータhook_query_alter() といった3つの要素があります。

コア: 
Drupal7
~ HowTo Convert a module to DBTNG 和訳 ~

DBTNGはDrupal7におけるデータベースの新しい抽象化レイヤーです。これはいくつかのオブジェクト指向の原理を使うことで、Drupal6よりもはるかに多くの機能を提供します。

Drupal6のモジュールをDBTNGで動作させるには、多くのクエリーは変更が必要です。ここではその変更点について、最も一般的なものについて説明します。

コア: 
Drupal7

Drupal ではモジュールが、(コアも含めた)他のモジュールのページ構築中に実行しようとしているデータベースクエリを変更操作することができる。D6 では db_rewrite_sql() を使うのだが、これは D7 では使えない。

D7 では hook_query_alter() というのを使うらしい。addTag() でクエリにタグを設定することができるようになっている。

他のモジュールのクエリを操作するときは、設定されているタグでクエリを識別する。

addTag()の例

コア: 
Drupal7

db_or() というのを使うらしい。こんな感じになる。

<?php
// From taxonomy_term_save():
$or = db_or()->condition('tid1', 5)->condition('tid2', 6);
db_delete('term_relation')->condition($or)->execute();
// DELETE FROM {term_relation} WHERE ((tid1 = 5 OR tid2 = 6))
?>
コア: 
Drupal7
~ Dynamic queries 和訳 ~

ダイナミッククエリとは、静的なクエリー文字列ではなく、Drupalによって動的に構築されるクエリーのことです。すべてのインサート、アップデート、デリートそしてマージのクエリは動的に生成されます。セレクトクエリーは、静的と動的、どちらでも可能ですが、これも一般的に「ダイナミッククエリ」といえば、動的に生成されたセレクトクエリのことを指します。

コア: 
Drupal7