[PHP-users 4041] psql の \copy 相当機能を pgsql 拡張モジュールに追加する patch

Youichi Iwakiri php-users@php.gr.jp
Sun, 02 Dec 2001 12:06:04 +0900


This is a multi-part message in MIME format.

--------=_1007262294.FFE207BF.FFE201A3
Content-Type: text/plain; charset=iso-2022-jp

いわきりです

先日、PHP-usersにpgsql拡張モジュール用のpatchを送ったのですが
余りにも間抜けなメモリリークがあったので修正しました。

また、
COPY "table_name" TO STDOUT USING DELIMITERS 'delim' WITH NULL AS 'null string'
だけでは片手落ちなので
COPY "table_name" FROM STDIN USING DELIMITERS 'delim' WITH NULL AS 'null string'
に対応する関数も併せて追加しました。
# "COPY FROM 〜"は pg_put_line(), pg_end_copy()があるので要らないと
# 言えば要らないのですが 

関数名も変更しています。

このpatchにより追加される関数

array pg_copy_to(int connection_id, string table_name,
                  [, string delim [, string null_as]])

array pg_copy_from(int connection_id, string table_name, array rows
                    [, string delim [, string null_as]])

psqlの\copyコマンドとの違いは、ファイル操作を行わず、配列を介してのみ
機能する点です。

使用例1
 $conn = pg_connect("dbname=db");
 unset($rows);
 $rows[] = "data1,data2,data3";        // データは`,'区切り
 $rows[] = "data4,data5,data6";
 $rows[] = "data7,data8,data9";
 pg_copy_from($conn, "table_name", $rows, ',');

 $res = pg_copy_to($conn, "table_name", ',');
 $print_r($res);
 pg_close($conn);

使用例2 (ファイルを介在する場合)
 $conn = pg_connect("dbname=db");

 $rows = file(file_path1);
/* 
 こちらの記述でもかまわず
 $fd = fopen(file_path1, "r");
 $rows = explode("\n", fread($fd, filesize(file_path1)));
 fclose($fd);
*/
 pg_copy_from($conn, "table_name", $rows);

 $res = pg_copy_to($conn, "table_name");
 $fd = fopen(file_path2, "w");
 fwrite($fd, implode("\n", $res));
 fclose($fd);
 pg_close($conn);

※行末の`\n'は付いていても付いていなくても構いません

添付ファイルは2つのファイルを含んでいます。
-rw-r--r-- install/wheel  7945 Dec  2 10:47 2001 php4_0_6_pgsql_copy_func.diff
-rw-r--r-- install/wheel  7524 Dec  2 10:53 2001 php4_2_0_pgsql_copy_func.diff
現安定版の4.0.6用と開発版4.2.0-dev用です。
開発版4.2.0-dev用は大垣さんのpgsql非同期関数のpatchを当てたものに
更にpatchを当てる形になります。

ご意見等ありましたら、php-dev@php.gr.jpphp-dev宛で
お願いします。
--------=_1007262294.FFE207BF.FFE201A3
Content-Type: model/vrml,x-world/x-vrml; name="php_pgsql_patch.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="php_pgsql_patch.tar.gz"

H4sIAEGKCTwAA+1ae3PaOBDvv+RT6HLTxgSSGgIkpZNMcylpuUkIBXKd5tLx
uCASpmD7bNP0MXz329XDL2yeaXKds6YNtrRa7WpXK/3ktW6tkqZqFc26cf4Z
al3T+qb1x0Z3tzfo95/cTymoaqVUIk8IKeyXVfyFIn+hrlQoELJfUot7aqmg
VqCqXFaLT4h6T+PPLGPH1W1CngwMeBgOE+nubilNbv1ly87ODmGm3+1mzk2D
/Dk2CCmBUapqpbqnkqKqFjZyuRzZ3X3O6O4G7i16yXPZqw09XtMuIUVSUKul
YlXd471evSI7B3v5CsnB3wPy6tUGyTTfNrXTmmLdaEPTpnoPZjyfaVyenWUj
jYORZdpuPhPbSL+GGnOBRubArpnc1rfNUdyQ1tjVhgODxg5JjR7r7Tf+PuiT
t8d/1bTmu5Ozeq3RqTVOLl7XG2+Y2vv7+6j3/v6LfLFc4apnWrXOZauhnR6f
tWsvN9D1J+yvqO+0LqE6N9nIPd8mk8mEbD/fyG3kfu/RPoiVOblofvjj8rRd
v8ocFF4UsQnofvz4QSzbdE0yMFzi66/ga9c0DNp1B6aRJ45rD4wb4uqfhlQz
9BElf3uVPTocjAYutQN1xng41HTn40eYQpCxDTPA6naAbDQwdJf2PJ4m+aR3
PyOFQ+0v1EbB2dxdNk469YtGwC7A7QfY5PsXfUi2t31p8vDGIxDY4DM5JDjN
WOnJhi9CKJilTPcWVu32P2Nqf/NeYRhG7rdDTXwfzaUjawhawFCbOLXkevN6
k3QuSLvz+uKyQ17Xzurn9U6t1SZb1S3yvt55y2Qix1CxtYnscIoHPWCwU8DX
5hucb8LV4BU2dcZDV1Rp/A1bal9pt+3q7tjpfLMozCM+Spai0yFRZQ3OXc80
qKxjemDlp3H/b98vPvo6dp0vQKzwlyzK7XNHCeDFgYXcvVWuao3XWuPyXDtu
vWkr2SxB82S6ukNJsYqPGXB05TsugBvqapZug7XAHI5GvyrFPHnmWw1efINm
Dw9Pj+tnl62aYBn1f6yasL/SbCDx1rW79VJWCstBtaP3qUbB3XpjS9m8htLY
zHK6TxBFPr/0ZN6bK/Nesszw4rnbEvKD2cHpXfBuja8IHMZn9DKq5PaV1u60
/jo+05rNOLpV9C7N1bu0mN7wLMZfzYIrKhfsJcef0hQioQ5Lg6v6vnXReKM1
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
SUta0pKWtKQlLWlJS1rS8h8q/wIzMsUrAFAAAA==
--------=_1007262294.FFE207BF.FFE201A3--