Annotation of embedaddon/php/ext/pdo_pgsql/tests/large_objects.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: PDO PgSQL Large Objects
3: --SKIPIF--
4: <?php # vim:se ft=php:
5: if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
6: require dirname(__FILE__) . '/config.inc';
7: require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
8: PDOTest::skip();
9: ?>
10: --FILE--
11: <?php
12: require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
13: $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
14: $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
15: $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
16:
17: $db->exec('CREATE TABLE test (blobid integer not null primary key, bloboid OID)');
18:
19: $db->beginTransaction();
20: $oid = $db->pgsqlLOBCreate();
21: try {
22: $stm = $db->pgsqlLOBOpen($oid, 'w+b');
23: fwrite($stm, "Hello dude\n");
24:
25: $stmt = $db->prepare("INSERT INTO test (blobid, bloboid) values (?, ?)");
26: $stmt->bindValue(1, 1);
27: /* bind as LOB; the oid from the pgsql stream will be inserted instead
28: * of the stream contents. Binding other streams will attempt to bind
29: * as bytea, and will most likely lead to an error.
30: * You can also just bind the $oid in as a string. */
31: $stmt->bindParam(2, $stm, PDO::PARAM_LOB);
32: $stmt->execute();
33: $stm = null;
34:
35: /* Pull it out */
36: $stmt = $db->prepare("SELECT * from test");
37: $stmt->bindColumn('bloboid', $lob, PDO::PARAM_LOB);
38: $stmt->execute();
39: echo "Fetching:\n";
40: while (($row = $stmt->fetch(PDO::FETCH_ASSOC))) {
41: var_dump($row['blobid']);
42: var_dump(stream_get_contents($lob));
43: }
44: echo "Fetched!\n";
45:
46: /* Try again, with late bind */
47: $stmt = $db->prepare("SELECT * from test");
48: $stmt->execute();
49: $stmt->bindColumn('bloboid', $lob, PDO::PARAM_LOB);
50: echo "Fetching late bind:\n";
51: while (($row = $stmt->fetch(PDO::FETCH_ASSOC))) {
52: var_dump($row['blobid']);
53: var_dump(is_int($row['bloboid']));
54: }
55: echo "Fetched!\n";
56:
57: /* Try again, with NO bind */
58: $stmt = $db->prepare("SELECT * from test");
59: $stmt->execute();
60: $stmt->bindColumn('bloboid', $lob, PDO::PARAM_LOB);
61: echo "Fetching NO bind:\n";
62: while (($row = $stmt->fetch(PDO::FETCH_ASSOC))) {
63: var_dump($row['blobid']);
64: var_dump(is_int($row['bloboid']));
65: }
66: echo "Fetched!\n";
67:
68: } catch (Exception $e) {
69: /* catch exceptions so that we can guarantee to clean
70: * up the LOB */
71: echo "Exception! at line ", $e->getLine(), "\n";
72: var_dump($e->getMessage());
73: }
74:
75: /* Now to remove the large object from the database, so it doesn't
76: * linger and clutter up the storage */
77: $db->pgsqlLOBUnlink($oid);
78:
79: ?>
80: --EXPECT--
81: Fetching:
82: int(1)
83: string(11) "Hello dude
84: "
85: Fetched!
86: Fetching late bind:
87: int(1)
88: bool(true)
89: Fetched!
90: Fetching NO bind:
91: int(1)
92: bool(true)
93: Fetched!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>