]> begriffs open source - ai-pg/blob - full-docs/html/ecpg-lo.html
Include links to all subsection html pages, with shorter paths too
[ai-pg] / full-docs / html / ecpg-lo.html
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>34.12. Large Objects</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="ecpg-library.html" title="34.11. Library Functions" /><link rel="next" href="ecpg-cpp.html" title="34.13. C++ Applications" /></head><body id="docContent" class="container-fluid col-10"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">34.12. Large Objects</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="ecpg-library.html" title="34.11. Library Functions">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="ecpg.html" title="Chapter 34. ECPG — Embedded SQL in C">Up</a></td><th width="60%" align="center">Chapter 34. <span class="application">ECPG</span> — Embedded <acronym class="acronym">SQL</acronym> in C</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="ecpg-cpp.html" title="34.13. C++ Applications">Next</a></td></tr></table><hr /></div><div class="sect1" id="ECPG-LO"><div class="titlepage"><div><div><h2 class="title" style="clear: both">34.12. Large Objects <a href="#ECPG-LO" class="id_link">#</a></h2></div></div></div><p>
3    Large objects are not directly supported by ECPG, but ECPG
4    application can manipulate large objects through the libpq large
5    object functions, obtaining the necessary <code class="type">PGconn</code>
6    object by calling the <code class="function">ECPGget_PGconn()</code>
7    function.  (However, use of
8    the <code class="function">ECPGget_PGconn()</code> function and touching
9    <code class="type">PGconn</code> objects directly should be done very carefully
10    and ideally not mixed with other ECPG database access calls.)
11   </p><p>
12    For more details about the <code class="function">ECPGget_PGconn()</code>, see
13    <a class="xref" href="ecpg-library.html" title="34.11. Library Functions">Section 34.11</a>.  For information about the large
14    object function interface, see <a class="xref" href="largeobjects.html" title="Chapter 33. Large Objects">Chapter 33</a>.
15   </p><p>
16    Large object functions have to be called in a transaction block, so
17    when autocommit is off, <code class="command">BEGIN</code> commands have to
18    be issued explicitly.
19   </p><p>
20    <a class="xref" href="ecpg-lo.html#ECPG-LO-EXAMPLE" title="Example 34.2. ECPG Program Accessing Large Objects">Example 34.2</a> shows an example program that
21    illustrates how to create, write, and read a large object in an
22    ECPG application.
23   </p><div class="example" id="ECPG-LO-EXAMPLE"><p class="title"><strong>Example 34.2. ECPG Program Accessing Large Objects</strong></p><div class="example-contents"><pre class="programlisting">
24 #include &lt;stdio.h&gt;
25 #include &lt;stdlib.h&gt;
26 #include &lt;libpq-fe.h&gt;
27 #include &lt;libpq/libpq-fs.h&gt;
28
29 EXEC SQL WHENEVER SQLERROR STOP;
30
31 int
32 main(void)
33 {
34     PGconn     *conn;
35     Oid         loid;
36     int         fd;
37     char        buf[256];
38     int         buflen = 256;
39     char        buf2[256];
40     int         rc;
41
42     memset(buf, 1, buflen);
43
44     EXEC SQL CONNECT TO testdb AS con1;
45     EXEC SQL SELECT pg_catalog.set_config('search_path', '', false); EXEC SQL COMMIT;
46
47     conn = ECPGget_PGconn("con1");
48     printf("conn = %p\n", conn);
49
50     /* create */
51     loid = lo_create(conn, 0);
52     if (loid &amp;lt; 0)
53         printf("lo_create() failed: %s", PQerrorMessage(conn));
54
55     printf("loid = %d\n", loid);
56
57     /* write test */
58     fd = lo_open(conn, loid, INV_READ|INV_WRITE);
59     if (fd &amp;lt; 0)
60         printf("lo_open() failed: %s", PQerrorMessage(conn));
61
62     printf("fd = %d\n", fd);
63
64     rc = lo_write(conn, fd, buf, buflen);
65     if (rc &amp;lt; 0)
66         printf("lo_write() failed\n");
67
68     rc = lo_close(conn, fd);
69     if (rc &amp;lt; 0)
70         printf("lo_close() failed: %s", PQerrorMessage(conn));
71
72     /* read test */
73     fd = lo_open(conn, loid, INV_READ);
74     if (fd &amp;lt; 0)
75         printf("lo_open() failed: %s", PQerrorMessage(conn));
76
77     printf("fd = %d\n", fd);
78
79     rc = lo_read(conn, fd, buf2, buflen);
80     if (rc &amp;lt; 0)
81         printf("lo_read() failed\n");
82
83     rc = lo_close(conn, fd);
84     if (rc &amp;lt; 0)
85         printf("lo_close() failed: %s", PQerrorMessage(conn));
86
87     /* check */
88     rc = memcmp(buf, buf2, buflen);
89     printf("memcmp() = %d\n", rc);
90
91     /* cleanup */
92     rc = lo_unlink(conn, loid);
93     if (rc &amp;lt; 0)
94         printf("lo_unlink() failed: %s", PQerrorMessage(conn));
95
96     EXEC SQL COMMIT;
97     EXEC SQL DISCONNECT ALL;
98     return 0;
99 }
100 </pre></div></div><br class="example-break" /></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ecpg-library.html" title="34.11. Library Functions">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ecpg.html" title="Chapter 34. ECPG — Embedded SQL in C">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ecpg-cpp.html" title="34.13. C++ Applications">Next</a></td></tr><tr><td width="40%" align="left" valign="top">34.11. Library Functions </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="40%" align="right" valign="top"> 34.13. <acronym class="acronym">C++</acronym> Applications</td></tr></table></div></body></html>