|
|
@@ -1,6 +1,6 @@
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
<!-- Reviewed: no -->
|
|
|
-<!-- EN-Revision: 19173 -->
|
|
|
+<!-- EN-Revision: 21080 -->
|
|
|
<sect1 id="zend.db.adapter">
|
|
|
|
|
|
<title>Zend_Db_Adapter</title>
|
|
|
@@ -739,6 +739,7 @@ echo $result[0]->bug_description;
|
|
|
<para>
|
|
|
<methodname>fetchAssoc()</methodname> メソッドは、
|
|
|
フェッチモードの設定にかかわらず、
|
|
|
+ 最初のカラムを配列のインデックスとして使って、
|
|
|
結果のデータを連想配列の配列で返します。
|
|
|
</para>
|
|
|
|
|
|
@@ -747,10 +748,11 @@ echo $result[0]->bug_description;
|
|
|
<programlisting language="php"><![CDATA[
|
|
|
$db->setFetchMode(Zend_Db::FETCH_OBJ);
|
|
|
|
|
|
-$result = $db->fetchAssoc('SELECT * FROM bugs WHERE bug_id = ?', 2);
|
|
|
+$result = $db->fetchAssoc('SELECT bug_id, bug_description, bug_status FROM bugs');
|
|
|
|
|
|
// $result は、フェッチモードの指定とは関係なく連想配列の配列となります
|
|
|
-echo $result[0]['bug_description'];
|
|
|
+echo $result[2]['bug_description']; // Description of Bug #2
|
|
|
+echo $result[1]['bug_description']; // Description of Bug #1
|
|
|
]]></programlisting>
|
|
|
</example>
|
|
|
|
|
|
@@ -902,7 +904,7 @@ $db->insert('bugs', $data);
|
|
|
データの配列で指定しなかったカラムについてはデータベースに対して何も指示しません。
|
|
|
つまり、<acronym>SQL</acronym> の <acronym>INSERT</acronym> 文で列を指定しなかった場合と同じ挙動となります。
|
|
|
<acronym>DEFAULT</acronym> 句が設定されていればその値が追加され、
|
|
|
- 設定されていなければ <acronym>NULL</acronym> のままとなります。
|
|
|
+ 設定されていなければ <constant>NULL</constant> のままとなります。
|
|
|
</para>
|
|
|
|
|
|
<para>
|
|
|
@@ -1596,7 +1598,8 @@ try {
|
|
|
<row>
|
|
|
<entry><constant>NULLABLE</constant></entry>
|
|
|
<entry>(boolean)</entry>
|
|
|
- <entry>そのカラムが <acronym>SQL</acronym> の NULL を許可している場合は true、NOT NULL 制約が指定されている場合は false。</entry>
|
|
|
+ <entry>そのカラムが <acronym>SQL</acronym> の <constant>NULL</constant> を許可している場合は <constant>TRUE</constant> 、
|
|
|
+ <constant>NOT</constant> <constant>NULL</constant> 制約が指定されている場合は <constant>FALSE</constant>。</entry>
|
|
|
</row>
|
|
|
<row>
|
|
|
<entry><constant>LENGTH</constant></entry>
|
|
|
@@ -1616,12 +1619,12 @@ try {
|
|
|
<row>
|
|
|
<entry><constant>UNSIGNED</constant></entry>
|
|
|
<entry>(boolean)</entry>
|
|
|
- <entry>整数系の型で、符号なし (<constant>UNSIGNED</constant>) である場合に true。</entry>
|
|
|
+ <entry>整数系の型で、符号なし (<constant>UNSIGNED</constant>) である場合に <constant>TRUE</constant>。</entry>
|
|
|
</row>
|
|
|
<row>
|
|
|
<entry><constant>PRIMARY</constant></entry>
|
|
|
<entry>(boolean)</entry>
|
|
|
- <entry>そのカラムが主キーの一部である場合に true。</entry>
|
|
|
+ <entry>そのカラムが主キーの一部である場合に <constant>TRUE</constant>。</entry>
|
|
|
</row>
|
|
|
<row>
|
|
|
<entry><constant>PRIMARY_POSITION</constant></entry>
|
|
|
@@ -1631,7 +1634,7 @@ try {
|
|
|
<row>
|
|
|
<entry><constant>IDENTITY</constant></entry>
|
|
|
<entry>(boolean)</entry>
|
|
|
- <entry>そのカラムが自動生成の値を使用している場合に true。</entry>
|
|
|
+ <entry>そのカラムが自動生成の値を使用している場合に <constant>TRUE</constant>。</entry>
|
|
|
</row>
|
|
|
</tbody>
|
|
|
</tgroup>
|
|
|
@@ -1718,11 +1721,12 @@ $db->closeConnection();
|
|
|
<para>
|
|
|
はい。<classname>Zend_Db</classname> のアダプタの設定
|
|
|
(driver_configuration ではありません) で、
|
|
|
- <property>persistent</property> フラグを true に設定することで対応します。
|
|
|
+ <property>persistent</property> フラグを <constant>TRUE</constant> に設定することで対応します。
|
|
|
</para>
|
|
|
|
|
|
<example id="zend.db.adapter.connecting.persistence.example">
|
|
|
<title>Oracle アダプタでの持続的接続の使用</title>
|
|
|
+
|
|
|
<programlisting language="php"><![CDATA[
|
|
|
$db = Zend_Db::factory('Oracle', array(
|
|
|
'host' => '127.0.0.1',
|
|
|
@@ -1739,6 +1743,7 @@ $db = Zend_Db::factory('Oracle', array(
|
|
|
接続作成時のオーバーヘッドが減ることによるパフォーマンスの向上よりも、
|
|
|
それによって引き起こされる問題のほうが多くなりえます。
|
|
|
</para>
|
|
|
+
|
|
|
<para>
|
|
|
データベース接続は、その状態を管理しています。
|
|
|
つまり、<acronym>RDBMS</acronym> サーバのオブジェクトの中には
|
|
|
@@ -1750,6 +1755,7 @@ $db = Zend_Db::factory('Oracle', array(
|
|
|
別の <acronym>PHP</acronym> リクエストが作成したデータに
|
|
|
誤ってアクセスしてしまう危険が生じてしまいます。
|
|
|
</para>
|
|
|
+
|
|
|
<para>
|
|
|
現在、<classname>Zend_Db</classname> が持続的接続をサポートしているのは
|
|
|
Oracle、DB2 そして <acronym>PDO</acronym> アダプタ
|
|
|
@@ -1794,6 +1800,7 @@ $db = Zend_Db::factory('Oracle', array(
|
|
|
|
|
|
<example id="zend.db.adapter.other-statements.example">
|
|
|
<title>PDO アダプタによる、プリペアド形式ではないクエリの実行</title>
|
|
|
+
|
|
|
<programlisting language="php"><![CDATA[
|
|
|
$result = $db->getConnection()->exec('DROP TABLE bugs');
|
|
|
]]></programlisting>
|
|
|
@@ -1827,6 +1834,7 @@ $result = $db->getConnection()->exec('DROP TABLE bugs');
|
|
|
|
|
|
<example id="zend.db.adapter.server-version.example">
|
|
|
<title>サーバのバージョンを取得してからクエリを実行する</title>
|
|
|
+
|
|
|
<programlisting language="php"><![CDATA[
|
|
|
$version = $db->getServerVersion();
|
|
|
if (!is_null($version)) {
|
|
|
@@ -1853,6 +1861,7 @@ if (!is_null($version)) {
|
|
|
|
|
|
<sect3 id="zend.db.adapter.adapter-notes.ibm-db2">
|
|
|
<title>IBM DB2</title>
|
|
|
+
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
<para>
|
|
|
@@ -1860,11 +1869,13 @@ if (!is_null($version)) {
|
|
|
'Db2' とします。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
このアダプタは、<acronym>PHP</acronym> の ibm_db2 拡張モジュールを使用します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
IBM DB2 は、シーケンスも自動インクリメントのキーも
|
|
|
@@ -1882,6 +1893,7 @@ if (!is_null($version)) {
|
|
|
|
|
|
<sect3 id="zend.db.adapter.adapter-notes.mysqli">
|
|
|
<title>MySQLi</title>
|
|
|
+
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
<para>
|
|
|
@@ -1889,11 +1901,13 @@ if (!is_null($version)) {
|
|
|
名前を 'Mysqli' とします。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
このアダプタは、<acronym>PHP</acronym> の mysqli 拡張モジュールを使用します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
MySQL はシーケンスをサポートしていません。したがって、
|
|
|
@@ -1908,6 +1922,7 @@ if (!is_null($version)) {
|
|
|
|
|
|
<sect3 id="zend.db.adapter.adapter-notes.oracle">
|
|
|
<title>Oracle</title>
|
|
|
+
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
<para>
|
|
|
@@ -1915,11 +1930,13 @@ if (!is_null($version)) {
|
|
|
名前を 'Oracle' とします。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
このアダプタは、<acronym>PHP</acronym> の oci8 拡張モジュールを使用します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
Oracle は自動インクリメントのキーをサポートしていません。
|
|
|
@@ -1928,12 +1945,14 @@ if (!is_null($version)) {
|
|
|
にはシーケンス名を指定する必要があります。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
Oracle 拡張モジュールは位置指定によるパラメータをサポートしていません。
|
|
|
名前つきパラメータを使用する必要があります。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
現在、Oracle アダプタでは <constant>Zend_Db::CASE_FOLDING</constant>
|
|
|
@@ -1942,6 +1961,7 @@ if (!is_null($version)) {
|
|
|
アダプタを使用する必要があります。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
デフォルトでは、LOB フィールドは OCI-Lob オブジェクトで返されます。
|
|
|
@@ -1956,6 +1976,7 @@ if (!is_null($version)) {
|
|
|
|
|
|
<sect3 id="zend.db.adapter.adapter-notes.sqlsrv">
|
|
|
<title>Microsoft SQL Server</title>
|
|
|
+
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
<para>
|
|
|
@@ -1963,11 +1984,13 @@ if (!is_null($version)) {
|
|
|
名前を 'Sqlsrv' とします。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
このアダプタは、<acronym>PHP</acronym> の sqlsrv 拡張モジュールを使用します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
Microsoft <acronym>SQL</acronym> Server はシーケンスをサポートしていません。
|
|
|
@@ -1978,6 +2001,7 @@ if (!is_null($version)) {
|
|
|
<constant>NULL</constant> となります。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
<classname>Zend_Db_Adapter_Sqlsrv</classname> は、
|
|
|
@@ -1990,14 +2014,16 @@ if (!is_null($version)) {
|
|
|
それは使わないようになります。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
オプション配列のキーに <property>driver_options</property>
|
|
|
を指定できます。この値は <ulink
|
|
|
- url="http://msdn.microsoft.com/en-us/library/cc296161(SQL.90).aspx">http://msdn.microsoft.com/en-us/library/cc296161(SQL.90).aspx</ulink>
|
|
|
+ url="http://msdn.microsoft.com/ja-jp/library/cc296161(SQL.90).aspx">http://msdn.microsoft.com/ja-jp/library/cc296161(SQL.90).aspx</ulink>
|
|
|
に書かれているものとなります。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
<methodname>setTransactionIsolationLevel()</methodname>
|
|
|
@@ -2009,6 +2035,7 @@ if (!is_null($version)) {
|
|
|
<constant>SQLSRV_TXN_SERIALIZABLE</constant> のいずれかとなります。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
Zend Framework 1.9 以降は、Microsoft の
|
|
|
@@ -2022,6 +2049,7 @@ if (!is_null($version)) {
|
|
|
|
|
|
<sect3 id="zend.db.adapter.adapter-notes.pdo-ibm">
|
|
|
<title>PDO for IBM DB2 and Informix Dynamic Server (IDS)</title>
|
|
|
+
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
<para>
|
|
|
@@ -2029,11 +2057,13 @@ if (!is_null($version)) {
|
|
|
名前を '<classname>Pdo_Ibm</classname>' とします。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
このアダプタは、<acronym>PHP</acronym> の pdo および pdo_ibm 拡張モジュールを使用します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
PDO_IBM 拡張モジュールのバージョン 1.2.2 以降が必要です。
|
|
|
@@ -2046,6 +2076,7 @@ if (!is_null($version)) {
|
|
|
|
|
|
<sect3 id="zend.db.adapter.adapter-notes.pdo-mssql">
|
|
|
<title>PDO Microsoft SQL Server</title>
|
|
|
+
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
<para>
|
|
|
@@ -2053,11 +2084,13 @@ if (!is_null($version)) {
|
|
|
名前を '<classname>Pdo_Mssql</classname>' とします。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
このアダプタは、<acronym>PHP</acronym> の pdo および pdo_dblib 拡張モジュールを使用します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
Microsoft SQL Server はシーケンスをサポートしていません。
|
|
|
@@ -2068,6 +2101,7 @@ if (!is_null($version)) {
|
|
|
<constant>NULL</constant> となります。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
unicode 文字列を UCS-2 以外のエンコーディング (UTF-8 など)
|
|
|
@@ -2078,6 +2112,7 @@ if (!is_null($version)) {
|
|
|
を参照ください。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
<classname>Zend_Db_Adapter_Pdo_Mssql</classname> は、SQL Server
|
|
|
@@ -2087,6 +2122,7 @@ if (!is_null($version)) {
|
|
|
SQL Server の独自仕様である角括弧によるクォートは使用しません。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
オプションの配列で、キーとして <property>pdoType</property>
|
|
|
@@ -2109,6 +2145,7 @@ if (!is_null($version)) {
|
|
|
|
|
|
<sect3 id="zend.db.adapter.adapter-notes.pdo-mysql">
|
|
|
<title>PDO MySQL</title>
|
|
|
+
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
<para>
|
|
|
@@ -2116,11 +2153,13 @@ if (!is_null($version)) {
|
|
|
名前を '<classname>Pdo_Mysql</classname>' とします。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
このアダプタは、<acronym>PHP</acronym> の pdo および pdo_mysql 拡張モジュールを使用します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
MySQL はシーケンスをサポートしていません。したがって、
|
|
|
@@ -2135,6 +2174,7 @@ if (!is_null($version)) {
|
|
|
|
|
|
<sect3 id="zend.db.adapter.adapter-notes.pdo-oci">
|
|
|
<title>PDO Oracle</title>
|
|
|
+
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
<para>
|
|
|
@@ -2142,11 +2182,13 @@ if (!is_null($version)) {
|
|
|
名前を '<classname>Pdo_Oci</classname>' とします。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
このアダプタは、<acronym>PHP</acronym> の pdo および pdo_oci 拡張モジュールを使用します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
Oracle は自動インクリメントのキーをサポートしていません。
|
|
|
@@ -2160,6 +2202,7 @@ if (!is_null($version)) {
|
|
|
|
|
|
<sect3 id="zend.db.adapter.adapter-notes.pdo-pgsql">
|
|
|
<title>PDO PostgreSQL</title>
|
|
|
+
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
<para>
|
|
|
@@ -2167,11 +2210,13 @@ if (!is_null($version)) {
|
|
|
名前を '<classname>Pdo_Pgsql</classname>' とします。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
このアダプタは、<acronym>PHP</acronym> の pdo および pdo_pgsql 拡張モジュールを使用します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
PostgreSQL は、シーケンスも自動インクリメントのキーも
|
|
|
@@ -2189,6 +2234,7 @@ if (!is_null($version)) {
|
|
|
|
|
|
<sect3 id="zend.db.adapter.adapter-notes.pdo-sqlite">
|
|
|
<title>PDO SQLite</title>
|
|
|
+
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
<para>
|
|
|
@@ -2196,11 +2242,13 @@ if (!is_null($version)) {
|
|
|
名前を '<classname>Pdo_Sqlite</classname>' とします。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
このアダプタは、<acronym>PHP</acronym> の pdo および pdo_sqlite 拡張モジュールを使用します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
SQLite はシーケンスをサポートしていません。したがって、
|
|
|
@@ -2210,6 +2258,7 @@ if (!is_null($version)) {
|
|
|
<constant>NULL</constant> となります。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
SQLite2 データベースに接続するには、
|
|
|
@@ -2218,6 +2267,7 @@ if (!is_null($version)) {
|
|
|
<command>'sqlite2' => true</command> を指定します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
メモリ上の SQLite データベースに接続するには、
|
|
|
@@ -2226,6 +2276,7 @@ if (!is_null($version)) {
|
|
|
<command>'dbname' => ':memory:'</command> を指定します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
<acronym>PHP</acronym> 用の SQLite ドライバの古いバージョンでは、
|
|
|
@@ -2241,12 +2292,14 @@ if (!is_null($version)) {
|
|
|
|
|
|
<sect3 id="zend.db.adapter.adapter-notes.firebird">
|
|
|
<title>Firebird/Interbase</title>
|
|
|
+
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
<para>
|
|
|
このアダプタは、<acronym>PHP</acronym> の php_interbase 拡張モジュールを使用します。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
Firebird/interbase は自動インクリメントのキーをサポートしていません。
|
|
|
@@ -2255,6 +2308,7 @@ if (!is_null($version)) {
|
|
|
<methodname>lastSequenceId()</methodname> に指定する必要があります。
|
|
|
</para>
|
|
|
</listitem>
|
|
|
+
|
|
|
<listitem>
|
|
|
<para>
|
|
|
現在、Firebird/interbase アダプタでは <constant>Zend_Db::CASE_FOLDING</constant>
|
|
|
@@ -2264,12 +2318,23 @@ if (!is_null($version)) {
|
|
|
</listitem>
|
|
|
|
|
|
<listitem>
|
|
|
- <para>アダプタ名は <classname>ZendX_Db_Adapter_Firebird</classname> です。</para>
|
|
|
- <para>パラメータ adapterNamespace の値を <classname>ZendX_Db_Adapter</classname> とすることを覚えておきましょう。</para>
|
|
|
- <para>php にバンドルされている <filename>gds32.dll</filename> (あるいは linux 環境でそれに相当するもの) をアップデートし、
|
|
|
- サーバと同じバージョンにしておくことを推奨します。
|
|
|
- Firebird で <filename>gds32.dll</filename> に相当するものは <filename>fbclient.dll</filename> です。</para>
|
|
|
- <para>デフォルトでは、すべての識別子 (テーブル名やフィールド) は大文字で返されます。</para>
|
|
|
+ <para>
|
|
|
+ アダプタ名は <classname>ZendX_Db_Adapter_Firebird</classname> です。
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ パラメータ adapterNamespace の値を <classname>ZendX_Db_Adapter</classname> とすることを覚えておきましょう。
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ php にバンドルされている <filename>gds32.dll</filename> (あるいは linux 環境でそれに相当するもの) をアップデートし、
|
|
|
+ サーバと同じバージョンにしておくことを推奨します。
|
|
|
+ Firebird で <filename>gds32.dll</filename> に相当するものは <filename>fbclient.dll</filename> です。
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ デフォルトでは、すべての識別子 (テーブル名やフィールド) は大文字で返されます。
|
|
|
+ </para>
|
|
|
</listitem>
|
|
|
</itemizedlist>
|
|
|
</sect3>
|