qoobaa-pg 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +10 -0
 - data/.gitignore +5 -0
 - data/BSD +23 -0
 - data/ChangeLog +266 -0
 - data/Contributors +29 -0
 - data/GPL +340 -0
 - data/LICENSE +58 -0
 - data/README +125 -0
 - data/Rakefile +50 -0
 - data/VERSION +1 -0
 - data/doc/postgres.html +278 -0
 - data/doc/postgres.jp.html +256 -0
 - data/ext/compat.c +541 -0
 - data/ext/compat.h +180 -0
 - data/ext/extconf.rb +87 -0
 - data/ext/mingw/Rakefile +24 -0
 - data/ext/mingw/build.rake +40 -0
 - data/ext/mkmf.log +316 -0
 - data/ext/mkrf_config.rb +138 -0
 - data/ext/pg.c +3569 -0
 - data/ext/pg.h +60 -0
 - data/ext/vc/pg.sln +26 -0
 - data/ext/vc/pg_18/pg.vcproj +216 -0
 - data/ext/vc/pg_19/pg_19.vcproj +209 -0
 - data/pg.gemspec +73 -0
 - data/sample/losample.rb +47 -0
 - data/sample/psql.rb +1181 -0
 - data/sample/psqlHelp.rb +158 -0
 - data/sample/test1.rb +63 -0
 - data/sample/test2.rb +44 -0
 - data/sample/test4.rb +71 -0
 - data/spec/data/expected_trace.out +26 -0
 - data/spec/data/random_binary_data +0 -0
 - data/spec/pgconn_spec.rb +130 -0
 - data/spec/pgresult_spec.rb +112 -0
 - metadata +90 -0
 
| 
         @@ -0,0 +1,256 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         
     | 
| 
      
 2 
     | 
    
         
            +
                "http://www.w3.org/TR/html4/strict.dtd">
         
     | 
| 
      
 3 
     | 
    
         
            +
            <html lang="ja">
         
     | 
| 
      
 4 
     | 
    
         
            +
            <head> 
         
     | 
| 
      
 5 
     | 
    
         
            +
              <meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp">
         
     | 
| 
      
 6 
     | 
    
         
            +
              <meta http-equiv="Content-Style-Type" content="text/css">
         
     | 
| 
      
 7 
     | 
    
         
            +
              <meta name="Keywords" lang="en" content="Ruby PostgreSQL">
         
     | 
| 
      
 8 
     | 
    
         
            +
              <link rev="made" href="mailto:noborus@netlab.jp">
         
     | 
| 
      
 9 
     | 
    
         
            +
              <link rel="contents" href="./index.html">
         
     | 
| 
      
 10 
     | 
    
         
            +
              <style type="text/css">
         
     | 
| 
      
 11 
     | 
    
         
            +
               <!--
         
     | 
| 
      
 12 
     | 
    
         
            +
                body {
         
     | 
| 
      
 13 
     | 
    
         
            +
                    background-color: white;
         
     | 
| 
      
 14 
     | 
    
         
            +
                    color: black;
         
     | 
| 
      
 15 
     | 
    
         
            +
                }
         
     | 
| 
      
 16 
     | 
    
         
            +
                address { text-align: right }
         
     | 
| 
      
 17 
     | 
    
         
            +
                div.lastmodifed { text-align: right }
         
     | 
| 
      
 18 
     | 
    
         
            +
                div.language { text-align: right }    
         
     | 
| 
      
 19 
     | 
    
         
            +
                pre {
         
     | 
| 
      
 20 
     | 
    
         
            +
                    white-space: pre;
         
     | 
| 
      
 21 
     | 
    
         
            +
                    background-color: antiquewhite;
         
     | 
| 
      
 22 
     | 
    
         
            +
                    border: inset thin;
         
     | 
| 
      
 23 
     | 
    
         
            +
                }
         
     | 
| 
      
 24 
     | 
    
         
            +
               -->
         
     | 
| 
      
 25 
     | 
    
         
            +
              </style>
         
     | 
| 
      
 26 
     | 
    
         
            +
              <title>Postgres reference</title>
         
     | 
| 
      
 27 
     | 
    
         
            +
            </head>
         
     | 
| 
      
 28 
     | 
    
         
            +
            <body>
         
     | 
| 
      
 29 
     | 
    
         
            +
              <div class = "language">
         
     | 
| 
      
 30 
     | 
    
         
            +
                [<a href="postgres.html">English</a> | Japanese]
         
     | 
| 
      
 31 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 32 
     | 
    
         
            +
              <h1><a name="reference">Postgres reference</a></h1>
         
     | 
| 
      
 33 
     | 
    
         
            +
              <div class = "lastmodifed">
         
     | 
| 
      
 34 
     | 
    
         
            +
                Last update: Mon,  5 Mar 2001 00:34:55 +0900
         
     | 
| 
      
 35 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 36 
     | 
    
         
            +
              <hr>
         
     | 
| 
      
 37 
     | 
    
         
            +
              <div>
         
     | 
| 
      
 38 
     | 
    
         
            +
                <h2><a name="PGconn">PGconn</a></h2>
         
     | 
| 
      
 39 
     | 
    
         
            +
                <p>
         
     | 
| 
      
 40 
     | 
    
         
            +
            PostgreSQL$B$K%"%/%;%9$9$k$?$a$N%/%i%9!#$=$NB>$N%a%=%C%I$O(Blibpq$B$H$[$\F1$8%$%s%?%U%'!<%9$GDs6!$5$l$^$9!#(B
         
     | 
| 
      
 41 
     | 
    
         
            +
                </p>
         
     | 
| 
      
 42 
     | 
    
         
            +
                <p>
         
     | 
| 
      
 43 
     | 
    
         
            +
            $BNc$($P!"(Blocalhost $B>e$N(B PostgreSQL $B$K@\B3$7!"(Bquery $B$r=P$9$?$a$K$O0J2<$N$h$&$K$7$F9T$$$^$9!#(B
         
     | 
| 
      
 44 
     | 
    
         
            +
                </p>
         
     | 
| 
      
 45 
     | 
    
         
            +
                <pre>
         
     | 
| 
      
 46 
     | 
    
         
            +
            require "postgres"
         
     | 
| 
      
 47 
     | 
    
         
            +
            conn = PGconn.connect("localhost", 5432, "", "", "test1")
         
     | 
| 
      
 48 
     | 
    
         
            +
            res = conn.exec("select * from a;")
         
     | 
| 
      
 49 
     | 
    
         
            +
                </pre>
         
     | 
| 
      
 50 
     | 
    
         
            +
                <h3>$B%9!<%P!<%/%i%9(B:</h3>
         
     | 
| 
      
 51 
     | 
    
         
            +
                <code>Object</code>
         
     | 
| 
      
 52 
     | 
    
         
            +
                <h3>$B%/%i%9%a%=%C%I(B:</h3>
         
     | 
| 
      
 53 
     | 
    
         
            +
                <p>
         
     | 
| 
      
 54 
     | 
    
         
            +
                  <a name="PGconn.connect"><code>connect(<var>pghost</var>,
         
     | 
| 
      
 55 
     | 
    
         
            +
                                   <var>pgport</var>, <var>pgoptions</var>,
         
     | 
| 
      
 56 
     | 
    
         
            +
                                   <var>pgtty</var>, <var>dbname</var>, <var>login</var>,
         
     | 
| 
      
 57 
     | 
    
         
            +
                                   <var>passwd</var>)</code></a>
         
     | 
| 
      
 58 
     | 
    
         
            +
                  <a name="PGconn.new"><code>new(<var>pghost</var>,
         
     | 
| 
      
 59 
     | 
    
         
            +
                                   <var>pgport</var>, <var>pgoptions</var>,
         
     | 
| 
      
 60 
     | 
    
         
            +
                                   <var>pgtty</var>, <var>dbname</var>, <var>login</var>,
         
     | 
| 
      
 61 
     | 
    
         
            +
                                   <var>passwd</var>)</code></a>
         
     | 
| 
      
 62 
     | 
    
         
            +
                  <a name="PGconn.open"><code>open(<var>string</var>)</code></a>
         
     | 
| 
      
 63 
     | 
    
         
            +
                 </p>
         
     | 
| 
      
 64 
     | 
    
         
            +
                 <dl>
         
     | 
| 
      
 65 
     | 
    
         
            +
                   <dt>PostgreSQL$B%5!<%P$H@\B3$7$^$9!#%*%W%7%g%s$N0UL#$O0J2<$NDL$j$G$9!#(B</dt>
         
     | 
| 
      
 66 
     | 
    
         
            +
                     <dd><var>pghost</var> : $B%5!<%P$N%[%9%HL>(B($BJ8;zNs(B)
         
     | 
| 
      
 67 
     | 
    
         
            +
                     <dd><var>pgport</var> : $B%5!<%P$,(Blisten$B$7$F$$$k%]!<%HHV9f(B($B@0?t(B)
         
     | 
| 
      
 68 
     | 
    
         
            +
                     <dd><var>pgoptions</var> : backend$B$r5/F0$9$k:]$N%*%W%7%g%s(B($BJ8;zNs(B)
         
     | 
| 
      
 69 
     | 
    
         
            +
                     <dd><var>pgtty</var> : backend$B$,%G%P%C%0%a%C%;!<%8$rI=<($9$k(Btty($BJ8;zNs(B)
         
     | 
| 
      
 70 
     | 
    
         
            +
                     <dd><var>dbname</var> : $B@\B3$9$k%G!<%?%Y!<%9L>(B($BJ8;zNs(B)
         
     | 
| 
      
 71 
     | 
    
         
            +
                     <dd><var>login</var> : $B%f!<%6L>(B($BJ8;zNs(B)
         
     | 
| 
      
 72 
     | 
    
         
            +
                     <dd><var>passwd</var> : $B%Q%9%o!<%I(B($BJ8;zNs(B)
         
     | 
| 
      
 73 
     | 
    
         
            +
                   <dt>$B%*%W%7%g%s$rJ8;zNs$GEO$9>l9g$N%U%)!<%^%C%H$G$9!#(B</dt>
         
     | 
| 
      
 74 
     | 
    
         
            +
                     <dd><var>host=name</var> : $B%5!<%P$N%[%9%HL>(B($BJ8;zNs(B)
         
     | 
| 
      
 75 
     | 
    
         
            +
            	 <dd><var>hostaddr=addr</var> : $B%5!<%P$N(BIP$B%"%I%l%9(B($BJ8;zNs(B)
         
     | 
| 
      
 76 
     | 
    
         
            +
            	 <dd><var>port=number</var> $B%5!<%P$,(Blisten$B$7$F$$$k%]!<%HHV9f(B($B@0?t(B)
         
     | 
| 
      
 77 
     | 
    
         
            +
                     <dd><var>options=string</var> : backend$B$r5/F0$9$k:]$N%*%W%7%g%s(B($BJ8;zNs(B)
         
     | 
| 
      
 78 
     | 
    
         
            +
                     <dd><var>tty=anything</var> : backend$B$,%G%P%C%0%a%C%;!<%8$rI=<($9$k(Btty($BJ8;zNs(B)
         
     | 
| 
      
 79 
     | 
    
         
            +
                     <dd><var>dbname=name</var> : $B@\B3$9$k%G!<%?%Y!<%9L>(B($BJ8;zNs(B)
         
     | 
| 
      
 80 
     | 
    
         
            +
                     <dd><var>user=username</var> : $B%f!<%6L>(B($BJ8;zNs(B)
         
     | 
| 
      
 81 
     | 
    
         
            +
                     <dd><var>password=censored</var> : $B%Q%9%o!<%I(B($BJ8;zNs(B)
         
     | 
| 
      
 82 
     | 
    
         
            +
            	 <dd><var>sslmode=mode</var> : SSL$B%b!<%I$N;XDj(B($BJ8;zNs(B) (disable, allow, prefer, require)
         
     | 
| 
      
 83 
     | 
    
         
            +
                     <dd><var>service=name</var> : $BB>$N%Q%i%a!<%?MQ$K;HMQ$5$l$k%5!<%S%9L>(B($BJ8;zNs(B)
         
     | 
| 
      
 84 
     | 
    
         
            +
            	 <dd><var>connect_timeout=seconds</var> : $B@\B3%?%$%`%"%&%H;~4V(B($B@0?t(B) 
         
     | 
| 
      
 85 
     | 
    
         
            +
                 </dl>
         
     | 
| 
      
 86 
     | 
    
         
            +
                 <p>$B<:GT$7$?>l9g$O(B <code>PGError</code> $BNc30$,H/@8$7$^$9!#(B</p>
         
     | 
| 
      
 87 
     | 
    
         
            +
                 <h3>methods:</h3>
         
     | 
| 
      
 88 
     | 
    
         
            +
                 <dl>
         
     | 
| 
      
 89 
     | 
    
         
            +
                   <dt><a name="db"><code>db</code></a>
         
     | 
| 
      
 90 
     | 
    
         
            +
                     <dd>$B@\B3$7$?%G!<%?%Y!<%9L>$rJV$7$^$9!#(B
         
     | 
| 
      
 91 
     | 
    
         
            +
                   <dt><a name="host"><code>host</code></a>
         
     | 
| 
      
 92 
     | 
    
         
            +
                     <dd>$B@\B3$7$?%5!<%PL>$rJV$7$^$9!#(B
         
     | 
| 
      
 93 
     | 
    
         
            +
                   <dt><a name="user"><code>user</code></a>
         
     | 
| 
      
 94 
     | 
    
         
            +
                     <dd>$B%5!<%P$X@\B3;~$KG'>Z$7$?%f!<%6L>$rJV$7$^$9!#(B
         
     | 
| 
      
 95 
     | 
    
         
            +
                   <dt><a name="options"><code>options</code></a>
         
     | 
| 
      
 96 
     | 
    
         
            +
                     <dd>backend$B$r5/F0$9$k:]$K;XDj$7$?(Boption$B$rJV$7$^$9!#(B
         
     | 
| 
      
 97 
     | 
    
         
            +
                   <dt><a name="port"><code>port</code></a>
         
     | 
| 
      
 98 
     | 
    
         
            +
                     <dd>$B%5!<%P$X@\B3$9$k:]$K;HMQ$7$?%]!<%HHV9f$rJV$7$^$9!#(B
         
     | 
| 
      
 99 
     | 
    
         
            +
                   <dt><a name="tty"><code>tty</code></a>
         
     | 
| 
      
 100 
     | 
    
         
            +
                     <dd>$B@\B3$7$F$$$k(Bpgtty$B$rJV$7$^$9!#(B
         
     | 
| 
      
 101 
     | 
    
         
            +
                   <dt><a name="error"><code>error</code></a>
         
     | 
| 
      
 102 
     | 
    
         
            +
                     <dd>$B@\B3$K4X$9$k%(%i!<%a%C%;!<%8$rJV$7$^$9!#(B
         
     | 
| 
      
 103 
     | 
    
         
            +
                   <dt> <a name="finish"><code>finish</code></a>
         
     | 
| 
      
 104 
     | 
    
         
            +
                   <dt> <a name="close"><code>close</code></a>
         
     | 
| 
      
 105 
     | 
    
         
            +
                     <dd>$B%P%C%/%(%s%I$H$N@\B3$r=*N;$7$^$9!#(B
         
     | 
| 
      
 106 
     | 
    
         
            +
                   <dt><a name="reset"><code>reset</code></a>
         
     | 
| 
      
 107 
     | 
    
         
            +
                     <dd>$B%P%C%/%(%s%I$H$NDL?.%]!<%H$r%j%;%C%H$7$^$9!#$3$N4X?t$O%P%C%/%(%s%I$H$N%=%1%C%H@\B3$r=*N;$7!"$$$:$l$+$N%P%C%/%(%s%I$H$N?7$7$$@\B3$N:F3NN)$r;n$_$^$9!#(B
         
     | 
| 
      
 108 
     | 
    
         
            +
                   <dt><a name="trace"><code>trace(<var>port</var>)</code></a>
         
     | 
| 
      
 109 
     | 
    
         
            +
                     <dd>$B%P%C%/%(%s%I$H$N%a%C%;!<%8$N<uEO$7$N%H%l!<%9$rM-8z$K$7$^$9!#%a%C%;!<%8$O(B<var>port</var>$B$G;XDj$5$l$?(B File $B%/%i%9$N%$%s%9%?%s%9$X=q$-=P$5$l$^$9!#(B
         
     | 
| 
      
 110 
     | 
    
         
            +
                   <dt><a name="untrace"><code>untrace</code></a>
         
     | 
| 
      
 111 
     | 
    
         
            +
                     <dd>$B%P%C%/%(%s%I$H$N%a%C%;!<%8$N<uEO$7$N%H%l!<%9$rL58z$K$7$^$9!#(B
         
     | 
| 
      
 112 
     | 
    
         
            +
                   <dt><a name="exec"><code>exec(<var>sql</var>)</code></a>
         
     | 
| 
      
 113 
     | 
    
         
            +
                     <dd><var>sql</var>$B$G;XDj$5$l$?(BSQL$BLd$$9g$o$;J8$r(BPostgreSQL$B$XAw$j$^$9!#(B
         
     | 
| 
      
 114 
     | 
    
         
            +
            $BLd$$9g$o$;$,@.8y$7$?>l9g$K$O!"7k2L$,(B<a href="#PGresult">PGresult</a>$B%/%i%9$N(B
         
     | 
| 
      
 115 
     | 
    
         
            +
            $B%$%s%9%?%s%9$H$7$FJV$5$l!"$=$&$G$J$$>l9g$ONc30$,H/@8$7$^$9!#(B
         
     | 
| 
      
 116 
     | 
    
         
            +
                   <dt><a name="query"><code>query(<var>sql</var>)</code></a>
         
     | 
| 
      
 117 
     | 
    
         
            +
                     <dd><var>sql</var>$B$G;XDj$5$l$?(BSQL$BLd$$9g$o$;J8$r(BPostgreSQL$B$XAw$j$^$9!#(B
         
     | 
| 
      
 118 
     | 
    
         
            +
            $BLd$$9g$o$;$,@.8y$7$?>l9g$K$O!"7k2L$,(B Array $B%/%i%9$N(B
         
     | 
| 
      
 119 
     | 
    
         
            +
            $B%$%s%9%?%s%9$H$7$FJV$5$l!"$=$&$G$J$$>l9g$O(B nil $B$,JV$5$l$^$9!#(B
         
     | 
| 
      
 120 
     | 
    
         
            +
                   <dt><a name="async_exec"><code>async_exec(<var>sql</var>)</code></a>
         
     | 
| 
      
 121 
     | 
    
         
            +
                     <dd><var>sql</var>$B$G;XDj$5$l$?(BSQL$BLd$$9g$o$;J8$r(BPostgreSQL$B$X(B
         
     | 
| 
      
 122 
     | 
    
         
            +
             $BHsF14|$G(B $BAw$j$^$9!#Ld$$9g$o$;$,@.8y$7$?>l9g$K$O!"(B
         
     | 
| 
      
 123 
     | 
    
         
            +
              $B7k2L$,(B<a href="#PGresult">PGresult</a>$B%/%i%9$N(B
         
     | 
| 
      
 124 
     | 
    
         
            +
             $B%$%s%9%?%s%9$H$7$FJV$5$l!"$=$&$G$J$$>l9g$ONc30$,H/@8$7$^$9!#(B
         
     | 
| 
      
 125 
     | 
    
         
            +
                   <dt><a name="async_query"><code>async_query(<var>sql</var>)</code></a>
         
     | 
| 
      
 126 
     | 
    
         
            +
                     <dd><var>sql</var>$B$G;XDj$5$l$?(BSQL$BLd$$9g$o$;J8$r(BPostgreSQL$B$X(B
         
     | 
| 
      
 127 
     | 
    
         
            +
             $BHsF14|$G(B $BAw$j$^$9!#Ld$$9g$o$;$,@.8y$7$?>l9g$K$O!"7k2L$,(B Array $B%/%i%9$N(B
         
     | 
| 
      
 128 
     | 
    
         
            +
            $B%$%s%9%?%s%9$H$7$FJV$5$l!"$=$&$G$J$$>l9g$O(B nil $B$,JV$5$l$^$9!#(B
         
     | 
| 
      
 129 
     | 
    
         
            +
                   <dt><a name="get_notify"><code>get_notify</code></a>
         
     | 
| 
      
 130 
     | 
    
         
            +
                     <dd>$B%P%C%/%(%s%I$+$iL$=hM}$NDLCN%j%9%H$rF@$F!"(BArray $B%/%i%9$N%$%s%9%?%s%9$H$7$FJV$7$^$9!#%P%C%/%(%s%I$+$i$NL$=hM}$NDLCN$,$J$$>l9g$K$O!"(Bnil $B$,JV$5$l$^$9!#(B
         
     | 
| 
      
 131 
     | 
    
         
            +
                   <dt><a name="insert_table"><code>insert_table(<var>table</var>,
         
     | 
| 
      
 132 
     | 
    
         
            +
            	  <var>array</var>)</code></a>
         
     | 
| 
      
 133 
     | 
    
         
            +
                     <dd><var>table</var>$B$G;XDj$5$l$?%F!<%V%k$KBP$7!"(B<var>array</var>$B$NFbMF$rA^F~$7$^$9!#(B<var>array</var>$B$O(B Array $B%/%i%9$N%$%s%9%?%s%9$G$J$1$l$P$J$j$^$;$s!#(B
         
     | 
| 
      
 134 
     | 
    
         
            +
                   <dt><a name="getline"><code>getline</code></a>
         
     | 
| 
      
 135 
     | 
    
         
            +
                     <dd>$B%P%C%/%(%s%I%5!<%P$+$i2~9T%3!<%I$G=*$k9T$rFI$_<h$j$^$9!#(B<code>fgets(3)</code>$B$HF1MM$K!"$3$N%a%=%C%I$O(B<code>get(3)</code>$B$HF1MM$K=*C<9T$r%L%k$KJQ49$7$^$9!#(Bgetline$B$O(BEOF$B$N>l9g$O!"(Bnil $B$r!"9TA4BN$rFI$_<h$C$?>l9g$O(B0$B$r!"$^$@2~9T%3!<%I$rFI$_<h$C$F$$$J$$>l9g$O(B1$B$rJV$7$^$9!#$3$N%a%=%C%I$r;HMQ$9$k;~$NCm0UE@$O!"%P%C%/%(%s%I%5!<%P$,7k2L$NAw?.$r40N;$7$?$3$H$r<($9C10lJ8;z(B"."$B$r?75,9T$KAw?.$7$?$3$H$r3NG'$7$J$1$l$P$J$i$J$$$3$H$G$9!#(B<br>
         
     | 
| 
      
 136 
     | 
    
         
            +
            $B%5%s%W%k%3!<%I(B<a href="../sample/psql.rb">psql.rb</a>$B$O!"(Bcopy$B%W%m%H%3%k$r@5$7$/07$&%=!<%9$r4^$s$G$$$^$9!#(B
         
     | 
| 
      
 137 
     | 
    
         
            +
                   <dt><a name="putline"><code>putline(<var>string</var>)</code></a>
         
     | 
| 
      
 138 
     | 
    
         
            +
                     <dd><var>string</var>$B$G;XDj$5$l$?J8;zNs$r%P%C%/%(%s%I!<%5!<%P$XAw?.$7$^$9!#;HMQ<T$O%G!<%?$NAw?.$,40N;$7$?$3$H$r%P%C%/%(%s%I$K<($9$?$a$K!"C10lJ8;z(B"."$B$rL@<(E*$KAw?.$7$J$1$l$P$J$j$^$;$s!#(B
         
     | 
| 
      
 139 
     | 
    
         
            +
                   <dt><a name="endcopy"><code>endcopy</code></a>
         
     | 
| 
      
 140 
     | 
    
         
            +
                     <dd>$B%P%C%/%(%s%I$HF14|$r$H$j$^$9!#$3$N%a%=%C%I$O%P%C%/%(%s%I$,(Bcopy$B$r40N;$9$k$^$GBT$A$^$9!#(B<a href="#putline">putline</a>$B$d(B<a href="#getline">getline</a>$B$r;HMQ$7$?>l9g$K;HMQ$9$Y$-%a%=%C%I$G$9!#(Bcopy$B$,$&$^$/40N;$7$?>l9g$K$O(B nil $B$,JV$j!"$=$&$G$J$$>l9g$ONc30$,H/@8$7$^$9!#(B
         
     | 
| 
      
 141 
     | 
    
         
            +
                   <dt><a name="set_client_encoding"><code>set_client_encoding</code></a>
         
     | 
| 
      
 142 
     | 
    
         
            +
                     <dd>$B%/%i%$%"%s%H$NJ8;z%3!<%I$r;XDj$7$^$9(B($BJ8;zNs(B)$B!#(B
         
     | 
| 
      
 143 
     | 
    
         
            +
                   <dt><a name="client_encoding"><code>client_encoding</code></a>
         
     | 
| 
      
 144 
     | 
    
         
            +
                     <dd>$B%/%i%$%"%s%H$NJ8;z%3!<%I$rJV$7$^$9(B($BJ8;zNs(B)$B!#(B
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                   <dt><a name="lo_import"><code>lo_import(<var>file</var>)</code></a>
         
     | 
| 
      
 147 
     | 
    
         
            +
                     <dd><var>file</var>$B$r%i!<%8%*%V%8%'%/%H$K%$%s%]!<%H$7$^$9!#@.8y$9$k$H(B<a href="#PGlarge">PGlarge</a>$B%/%i%9$N%$%s%9%?%s%9$,JV$5$l$^$9!#<:GT$9$k$H(B <code>PGError</code> $BNc30$,H/@8$7$^$9!#(B
         
     | 
| 
      
 148 
     | 
    
         
            +
                   <dt><a name="lo_export"><code>lo_export(<var>oid</var>, <var>file</var>)</code></a>
         
     | 
| 
      
 149 
     | 
    
         
            +
                     <dd>$B%i!<%8%*%V%8%'%/%H$r(B <var>file</var> $B$KJ]B8$7$^$9!#(B
         
     | 
| 
      
 150 
     | 
    
         
            +
                   <dt><a name="lo_create"><code>lo_create([<var>mode</var>])</code></a>
         
     | 
| 
      
 151 
     | 
    
         
            +
                     <dd>$B?7$7$/%i!<%8%*%V%8%'%/%H$r$D$/$j$^$9!#@.8y$9$k$H(B<a href="#PGlarge">PGlarge</a> $B%/%i%9$N%$%s%9%?%s%9$,JV$5$l$^$9!#<:GT$9$k$H(B <code>PGError</code> $BNc30$,H/@8$7$^$9!#(B
         
     | 
| 
      
 152 
     | 
    
         
            +
                   <dt><a name="lo_open"><code>lo_open(<var>oid</var>, [<var>mode</var>])</code></a>
         
     | 
| 
      
 153 
     | 
    
         
            +
                     <dd>oid $B$N%i!<%8%*%V%8%'%/%H$r3+$-$^$9!#@.8y$9$k$H(B<a href="#PGlarge">PGlarge</a> $B%/%i%9$N%$%s%9%?%s%9$,JV$5$l$^$9!#<:GT$9$k$H(B <code>PGError</code> $BNc30$,H/@8$7$^$9!#(B<var>"INV_READ"</var>,<var>"INV_WRITE"</var>$B$N$I$A$i$+$N%b!<%I$r;XDj$7$^$9!#<:GT$9$k$H(B <code>PGError</code> $BNc30$,H/@8$7$^$9!#%b!<%I$r>JN,$7$?>l9g$O(B<var>"INV_READ"</var>$B$G$9!#(B
         
     | 
| 
      
 154 
     | 
    
         
            +
                   <dt><a name="lo_unlink"><code>lo_unlink(<var>oid</var>)</code></a>
         
     | 
| 
      
 155 
     | 
    
         
            +
                     <dd><var>oid</var>$B$N%i!<%8%*%V%8%'%/%H$r:o=|$7$^$9!#(B
         
     | 
| 
      
 156 
     | 
    
         
            +
                 </dl>
         
     | 
| 
      
 157 
     | 
    
         
            +
               </div>
         
     | 
| 
      
 158 
     | 
    
         
            +
               <hr>
         
     | 
| 
      
 159 
     | 
    
         
            +
               <div>
         
     | 
| 
      
 160 
     | 
    
         
            +
                 <h2><a name="PGresult">PGresult</a></h2>
         
     | 
| 
      
 161 
     | 
    
         
            +
                 <P>
         
     | 
| 
      
 162 
     | 
    
         
            +
            Query$B$N7k2L$H$7$FF@$i$l$?%?%C%W%k$r(Bwrap$B$9$k%/%i%9!%$3$N%/%i%9(B
         
     | 
| 
      
 163 
     | 
    
         
            +
            $B$N%$%s%9%?%s%9$O!"(Bquery$B$r9T$&$?$S$K@8@.$5$l$^$9!#8N$KF@$i$l$?(B
         
     | 
| 
      
 164 
     | 
    
         
            +
            $B7k2L$,ITMW$K$J$C$?>l9g$K$O!"(Bclear$B$r8F$S=P$7$F%a%b%j$r2rJ|$9$k(B
         
     | 
| 
      
 165 
     | 
    
         
            +
            $B$h$&$K$7$F2<$5$$!#(B
         
     | 
| 
      
 166 
     | 
    
         
            +
                 </P>
         
     | 
| 
      
 167 
     | 
    
         
            +
                 <h3>$B%9!<%Q!<%/%i%9(B:</h3>
         
     | 
| 
      
 168 
     | 
    
         
            +
                 <p>
         
     | 
| 
      
 169 
     | 
    
         
            +
                   <code>Object</code>
         
     | 
| 
      
 170 
     | 
    
         
            +
                 </p>
         
     | 
| 
      
 171 
     | 
    
         
            +
                 <h2>$B%a%=%C%I(B:</h2>
         
     | 
| 
      
 172 
     | 
    
         
            +
                 <dl>
         
     | 
| 
      
 173 
     | 
    
         
            +
                   <dt><a name="status"><code>status</code></a>
         
     | 
| 
      
 174 
     | 
    
         
            +
                     <dd><dl>
         
     | 
| 
      
 175 
     | 
    
         
            +
            	      <dt>$BLd$$9g$o$;7k2L$N%9%F!<%?%9$rJV$7$^$9!#%9%F!<%?%9$O0J2<$NCM$N$&$A$N$$$:$l$+0l$D$rJV$7$^$9!#(B
         
     | 
| 
      
 176 
     | 
    
         
            +
            	        <dd>EMPTY_QUERY
         
     | 
| 
      
 177 
     | 
    
         
            +
                            <dd>COMMAND_OK
         
     | 
| 
      
 178 
     | 
    
         
            +
                            <dd>TUPLES_OK
         
     | 
| 
      
 179 
     | 
    
         
            +
                            <dd>COPY_OUT
         
     | 
| 
      
 180 
     | 
    
         
            +
                            <dd>COPY_IN
         
     | 
| 
      
 181 
     | 
    
         
            +
            	      </dl>
         
     | 
| 
      
 182 
     | 
    
         
            +
                   <dt><a name="result"><code>result</code></a>
         
     | 
| 
      
 183 
     | 
    
         
            +
                     <dd>$BLd$$9g$o$;7k2L$N%?%C%W%k(B($B%$%s%9%?%s%9(B)$B$r!"G[Ns$GJV$7$^$9!#(B
         
     | 
| 
      
 184 
     | 
    
         
            +
                   <dt><a name="fields"><code>fields</code></a>
         
     | 
| 
      
 185 
     | 
    
         
            +
                     <dd>$BLd$$9g$o$;$N7k2L$N%U%#!<%k%I(B($BB0@-(B)$B$r!"G[Ns$GJV$7$^$9!#(B
         
     | 
| 
      
 186 
     | 
    
         
            +
                   <dt><a name="num_tuples"><code>num_tuples</code></a>
         
     | 
| 
      
 187 
     | 
    
         
            +
                     <dd>$BLd$$9g$o$;7k2L$N%?%C%W%k(B($B%$%s%9%?%s%9(B)$B$N?t$rJV$7$^$9!#(B
         
     | 
| 
      
 188 
     | 
    
         
            +
                   <dt><a name="num_fields"><code>num_fields</code></a>
         
     | 
| 
      
 189 
     | 
    
         
            +
                     <dd>$BLd$$9g$o$;$N7k2L$N%U%#!<%k%I(B($BB0@-(B)$B$N?t$rJV$7$^$9!#(B
         
     | 
| 
      
 190 
     | 
    
         
            +
                   <dt><a name="fieldname"><code>fieldname(<var>index</var>)</code></a>
         
     | 
| 
      
 191 
     | 
    
         
            +
                     <dd>$BM?$($i$l$?%U%#!<%k%I(B($BB0@-(B)$B$N:w0z(B(field index)$B$KBP1~$9$k%U%#!<%k%I(B($BB0@-(B)$B$NL>A0$rJV$7$^$9!#%U%#!<%k%I!&%$%s%G%#%1!<%?$O(B0$B$+$i3+;O$5$l$^$9!#(B
         
     | 
| 
      
 192 
     | 
    
         
            +
                   <dt><a name="fieldnum"><code>fieldnum(<var>name</var>)</code></a>
         
     | 
| 
      
 193 
     | 
    
         
            +
                     <dd>$BM?$($i$l$?%U%#!<%k%I(B($BB0@-(B)$B$NL>A0$KBP1~$9$k!"%U%#!<%k%I(B($BB0@-(B)$B$N:w0z$rJV$7$^$9!#(B
         
     | 
| 
      
 194 
     | 
    
         
            +
                   <dt><a name="type"><code>type(<var>index</var>)</code></a>
         
     | 
| 
      
 195 
     | 
    
         
            +
                     <dd>$BM?$($i$l$?%U%#!<%k%I(B($BB0@-(B)$B$KBP1~$9$k%U%#!<%k%I$N7?$rJV$7$^$9!#FbIt%3!<%G%#%s%0$5$l$F$$$k7?$,@0?t$GJV$5$l$^$9!#%U%#!<%k%I!&%$%s%G%#%1!<%?$O(B0$B$+$i3+;O$5$l$^$9!#(B
         
     | 
| 
      
 196 
     | 
    
         
            +
                   <dt><a name="size"><code>size(<var>index</var>)</code></a>
         
     | 
| 
      
 197 
     | 
    
         
            +
                     <dd>$BM?$($i$l$?%U%#!<%k%I(B($BB0@-(B)$B$KBP1~$9$k%U%#!<%k%I$N%5%$%:$r%P%$%H?t$GJV$7$^$9!#JV$5$l$k%5%$%:$,(B-1$B$N>l9g!"%U%#!<%k%I$O2DJQD9$G$9!#%U%#!<%k%I!&%$%s%G%#%1!<%?$O(B0$B$+$i3+;O$5$l$^$9!#(B
         
     | 
| 
      
 198 
     | 
    
         
            +
                   <dt><a name="getvalue"><code>getvalue(<var>tup_num, field_num</var>)
         
     | 
| 
      
 199 
     | 
    
         
            +
            	    </code></a>
         
     | 
| 
      
 200 
     | 
    
         
            +
                     <dd>$B%U%#!<%k%I(B($BB0@-(B)$B$NCM$rJV$7$^$9!#$[$H$s$I$NLd$$9g$o$;$KBP$7$F!"(B<a href="#getvalue">getvalue</a>$B$K$h$C$FJV$5$l$kCM$O!"%L%k$G=*$o$k(BASCII$BJ8;zNs$GI=8=$5$l$^$9!#Ld$$9g$o$;$N7k2L$,%P%$%J%j%+!<%=%k$G$"$C$?>l9g!"(B<a href="#getvalue">getvalue</a>$B$K$h$C$FJV$5$l$kCM$O!"%P%C%/%(%s%I!&%5!<%P$NFbIt%U%)!<%^%C%H$K0MB8$7$?%P%$%J%j$GI=8=$5$l$^$9!#%G!<%?$r@5$7$$%?%$%W$K%-%c%9%H$7$?$j!"JQ49$7$?$j$9$k$N$O%W%m%0%i%^$N@UG$$G$9!#(B<a href="#PGresult">PGresult</a>$B$N%$%s%9%?%s%9$O(Bquery$B$N$?$S$K@8@.$5$l$^$9!#ITMW$K$J$C$?>l9g$O!"%W%m%0%i%^$,@UG$$r$b$C$F(B<a href="#clear">clear</a>$B$r8F$S=P$7%a%b%j$r2rJ|$7$F2<$5$$!#(B
         
     | 
| 
      
 201 
     | 
    
         
            +
                   <dt><a name="getlength"><code>getlength(<var>tup_num, field_num</var>)
         
     | 
| 
      
 202 
     | 
    
         
            +
            	    </code></a>
         
     | 
| 
      
 203 
     | 
    
         
            +
                     <dd>$B%U%#!<%k%I(B($BB0@-(B)$B$ND9$5$r%P%$%H$GJV$7$^$9!#(B
         
     | 
| 
      
 204 
     | 
    
         
            +
                   <dt><a name="cmdtuples"><code>cmdtuples</code></a>
         
     | 
| 
      
 205 
     | 
    
         
            +
                     <dd>$B:G8e$NLd$$9g$o$;%3%^%s%I$N1F6A$r$&$1$?9T?t$rJV$7$^$9!#(B
         
     | 
| 
      
 206 
     | 
    
         
            +
                   <dt><a name="cmdstatus"><code>cmdstatus</code></a>
         
     | 
| 
      
 207 
     | 
    
         
            +
                     <dd>$B:G8e$NLd$$9g$o$;%3%^%s%I$N%3%^%s%I%9%F!<%?%9$rJ8;zNs$GJV$7$^$9!#(B
         
     | 
| 
      
 208 
     | 
    
         
            +
                   <dt><a name="oid"><code>oid</code></a>
         
     | 
| 
      
 209 
     | 
    
         
            +
                     <dd>$BA^F~$5$l$?9T$N(BOID$B$rJV$7$^$9!#(B
         
     | 
| 
      
 210 
     | 
    
         
            +
                   <dt><a name="clear"><code>clear</code></a>
         
     | 
| 
      
 211 
     | 
    
         
            +
                     <dd>$BLd$$9g$o$;$N7k2L@8@.$5$l$?(B<a href="#PGresult">PGresult</a>$B$N%$%s%9%?%s%9$r%/%j%"$7$^$9!#(B
         
     | 
| 
      
 212 
     | 
    
         
            +
                 </dl>
         
     | 
| 
      
 213 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 214 
     | 
    
         
            +
              <hr>
         
     | 
| 
      
 215 
     | 
    
         
            +
              <div>
         
     | 
| 
      
 216 
     | 
    
         
            +
              <h2><a name="PGlarge">PGlarge</a></h2>
         
     | 
| 
      
 217 
     | 
    
         
            +
                 <p>
         
     | 
| 
      
 218 
     | 
    
         
            +
             $B%i!<%8%*%V%8%'%/%H$K%"%/%;%9$9$k$?$a$N%/%i%9!#$3$N%*%V%8%'%/%H$O(B <a href="lo_import">lo_import</a>, <a href="lo_create">lo_create</a>, <a href="lo_open">lo_open</a> $B$N7k2L$H$7$FJV$5$l$^$9!#(B
         
     | 
| 
      
 219 
     | 
    
         
            +
                 </p>
         
     | 
| 
      
 220 
     | 
    
         
            +
                 <h3>super class:</h3>
         
     | 
| 
      
 221 
     | 
    
         
            +
                 <p>
         
     | 
| 
      
 222 
     | 
    
         
            +
                   <code>Object</code>
         
     | 
| 
      
 223 
     | 
    
         
            +
                 </p>
         
     | 
| 
      
 224 
     | 
    
         
            +
                 <h2>methods:</h2>
         
     | 
| 
      
 225 
     | 
    
         
            +
                 <dl>
         
     | 
| 
      
 226 
     | 
    
         
            +
                   <dt><a name="open"><code>open([<var>mode</var>])</code></a>
         
     | 
| 
      
 227 
     | 
    
         
            +
                     <dd>$B%i!<%8%*%V%8%'%/%H$r3+$-$^$9!#(B <var>"INV_READ"</var>,<var>"INV_WRITE"</var>$B$N$I$A$i$+$N%b!<%I$r;XDj$7$^$9!#<:GT$9$k$H(B <code>PGError</code> $BNc30$,H/@8$7$^$9!#%b!<%I$r>JN,$7$?>l9g$O(B<var>"INV_READ"</var>$B$G$9!#(B
         
     | 
| 
      
 228 
     | 
    
         
            +
                   <dt><a name="close"><code>close</code></a>
         
     | 
| 
      
 229 
     | 
    
         
            +
                     <dd>$B%i!<%8%*%V%8%'%/%H$rJD$8$^$9!#0J9_$3$N%*%V%8%'%/%H$KBP$9$k%"%/%;%9$ONc30$rH/@8$7$^$9!#(B
         
     | 
| 
      
 230 
     | 
    
         
            +
                   <dt><a name="read"><code>read([<var>length</var>])</code></a>
         
     | 
| 
      
 231 
     | 
    
         
            +
                     <dd><var>length</var> $B%P%$%HFI$_9~$s$G$=$NJ8;zNs$rJV$7$^$9!#(B<var>length</var> $B$,>JN,$5$l$?;~$K$O!"A4$F$N%G!<%?$rFI$_9~$_$^$9!#(B
         
     | 
| 
      
 232 
     | 
    
         
            +
                   <dt><a name="write"><code>write(<var>str</var>)</code></a>
         
     | 
| 
      
 233 
     | 
    
         
            +
                     <dd><var>str</var>$B$r%i!<%8%*%V%8%'%/%H$K=q$-9~$_$^$9!#=q$-9~$s$@%P%$%H?t$rJV$7$^$9!#(B
         
     | 
| 
      
 234 
     | 
    
         
            +
                   <dt><a name="seek"><code>seek(<var>offset</var>, <var>whence</var>)</code></a>
         
     | 
| 
      
 235 
     | 
    
         
            +
                     <dd>$B%i!<%8%*%V%8%'%/%H$N%]%$%s%?$r(B <var>offset</var> $B0\F0$7$^$9!#(B<var>whence</var> $B$O(B SEEK_SET, SEEK_CUR, and SEEK_END $B$,;XDj$G$-$^$9!#$=$l$>$l(B 0,1,2$B$H?t;z$G;XDj$7$F$b9=$$$^$;$s!#(B
         
     | 
| 
      
 236 
     | 
    
         
            +
                   <dt><a name="tell"><code>tell</code></a>
         
     | 
| 
      
 237 
     | 
    
         
            +
                     <dd>$B%i!<%8%*%V%8%'%/%H$N%]%$%s%?$N8=:_$N0LCV$rJV$7$^$9!#(B
         
     | 
| 
      
 238 
     | 
    
         
            +
                   <dt><a name="unlink"><code>unlink</code></a>
         
     | 
| 
      
 239 
     | 
    
         
            +
                     <dd>$B%i!<%8%*%V%8%'%/%H$r:o=|$7$^$9!#(B
         
     | 
| 
      
 240 
     | 
    
         
            +
                   <dt><a name="oid"><code>oid</code></a>
         
     | 
| 
      
 241 
     | 
    
         
            +
                     <dd>$B%i!<%8%*%V%8%'%/%H$N(B oid $B$rJV$7$^$9!#(B
         
     | 
| 
      
 242 
     | 
    
         
            +
                   <dt><a name="size"><code>size</code></a>
         
     | 
| 
      
 243 
     | 
    
         
            +
                     <dd>$B%i!<%8%*%V%8%'%/%H$N%5%$%:$rJV$7$^$9!#(B
         
     | 
| 
      
 244 
     | 
    
         
            +
                   <dt><a name="export"><code>export(<var>file</var>)</code></a>
         
     | 
| 
      
 245 
     | 
    
         
            +
                     <dd><var>file</var>$B$K%i!<%8%*%V%8%'%/%H$r=q$-=P$7$^$9!#(B
         
     | 
| 
      
 246 
     | 
    
         
            +
                </dl>
         
     | 
| 
      
 247 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 248 
     | 
    
         
            +
              <hr>
         
     | 
| 
      
 249 
     | 
    
         
            +
              <address>
         
     | 
| 
      
 250 
     | 
    
         
            +
                mailto:
         
     | 
| 
      
 251 
     | 
    
         
            +
                <a href="mailto:noborus@netlab.jp">Noboru Saitou</a>
         
     | 
| 
      
 252 
     | 
    
         
            +
              </address>
         
     | 
| 
      
 253 
     | 
    
         
            +
            </body>
         
     | 
| 
      
 254 
     | 
    
         
            +
            </html>
         
     | 
| 
      
 255 
     | 
    
         
            +
             
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
    
        data/ext/compat.c
    ADDED
    
    | 
         @@ -0,0 +1,541 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /************************************************
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              compat.c -
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              Author: matz 
         
     | 
| 
      
 6 
     | 
    
         
            +
              created at: Tue May 13 20:07:35 JST 1997
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              Author: ematsu
         
     | 
| 
      
 9 
     | 
    
         
            +
              modified at: Wed Jan 20 16:41:51 1999
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              $Author: jdavis $
         
     | 
| 
      
 12 
     | 
    
         
            +
              $Date: 2007-12-04 14:25:44 -0800 (Tue, 04 Dec 2007) $
         
     | 
| 
      
 13 
     | 
    
         
            +
            ************************************************/
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            #include <ctype.h>
         
     | 
| 
      
 16 
     | 
    
         
            +
            #include "compat.h"
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            #ifdef PG_BEFORE_080300
         
     | 
| 
      
 19 
     | 
    
         
            +
            int
         
     | 
| 
      
 20 
     | 
    
         
            +
            PQconnectionNeedsPassword(PGconn *conn)
         
     | 
| 
      
 21 
     | 
    
         
            +
            {
         
     | 
| 
      
 22 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, 
         
     | 
| 
      
 23 
     | 
    
         
            +
            		"PQconnectionNeedsPassword not supported by this client version.");
         
     | 
| 
      
 24 
     | 
    
         
            +
            }
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            int
         
     | 
| 
      
 27 
     | 
    
         
            +
            PQconnectionUsedPassword(PGconn *conn)
         
     | 
| 
      
 28 
     | 
    
         
            +
            {
         
     | 
| 
      
 29 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, 
         
     | 
| 
      
 30 
     | 
    
         
            +
            		"PQconnectionUsedPassword not supported by this client version.");
         
     | 
| 
      
 31 
     | 
    
         
            +
            }
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            int
         
     | 
| 
      
 34 
     | 
    
         
            +
            lo_truncate(PGconn *conn, int fd, size_t len)
         
     | 
| 
      
 35 
     | 
    
         
            +
            {
         
     | 
| 
      
 36 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "lo_truncate not supported by this client version.");
         
     | 
| 
      
 37 
     | 
    
         
            +
            }
         
     | 
| 
      
 38 
     | 
    
         
            +
            #endif /* PG_BEFORE_080300 */
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            #ifdef PG_BEFORE_080200
         
     | 
| 
      
 41 
     | 
    
         
            +
            int
         
     | 
| 
      
 42 
     | 
    
         
            +
            PQisthreadsafe()
         
     | 
| 
      
 43 
     | 
    
         
            +
            {
         
     | 
| 
      
 44 
     | 
    
         
            +
            	return Qfalse;
         
     | 
| 
      
 45 
     | 
    
         
            +
            }
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            int
         
     | 
| 
      
 48 
     | 
    
         
            +
            PQnparams(const PGresult *res)
         
     | 
| 
      
 49 
     | 
    
         
            +
            {
         
     | 
| 
      
 50 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQnparams not supported by this client version.");
         
     | 
| 
      
 51 
     | 
    
         
            +
            }
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            Oid
         
     | 
| 
      
 54 
     | 
    
         
            +
            PQparamtype(const PGresult *res, int param_number)
         
     | 
| 
      
 55 
     | 
    
         
            +
            {
         
     | 
| 
      
 56 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQparamtype not supported by this client version.");
         
     | 
| 
      
 57 
     | 
    
         
            +
            }
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            PGresult *
         
     | 
| 
      
 60 
     | 
    
         
            +
            PQdescribePrepared(PGconn *conn, const char *stmtName)
         
     | 
| 
      
 61 
     | 
    
         
            +
            {
         
     | 
| 
      
 62 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQdescribePrepared not supported by this client version.");
         
     | 
| 
      
 63 
     | 
    
         
            +
            }
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            PGresult *
         
     | 
| 
      
 66 
     | 
    
         
            +
            PQdescribePortal(PGconn *conn, const char *portalName)
         
     | 
| 
      
 67 
     | 
    
         
            +
            {
         
     | 
| 
      
 68 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQdescribePortal not supported by this client version.");
         
     | 
| 
      
 69 
     | 
    
         
            +
            }
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            int
         
     | 
| 
      
 72 
     | 
    
         
            +
            PQsendDescribePrepared(PGconn *conn, const char *stmtName)
         
     | 
| 
      
 73 
     | 
    
         
            +
            {
         
     | 
| 
      
 74 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQsendDescribePrepared not supported by this client version.");
         
     | 
| 
      
 75 
     | 
    
         
            +
            }
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            int
         
     | 
| 
      
 78 
     | 
    
         
            +
            PQsendDescribePortal(PGconn *conn, const char *portalName)
         
     | 
| 
      
 79 
     | 
    
         
            +
            {
         
     | 
| 
      
 80 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQsendDescribePortal not supported by this client version.");
         
     | 
| 
      
 81 
     | 
    
         
            +
            }
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            char *
         
     | 
| 
      
 84 
     | 
    
         
            +
            PQencryptPassword(const char *passwd, const char *user)
         
     | 
| 
      
 85 
     | 
    
         
            +
            {
         
     | 
| 
      
 86 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQencryptPassword not supported by this client version.");
         
     | 
| 
      
 87 
     | 
    
         
            +
            }
         
     | 
| 
      
 88 
     | 
    
         
            +
            #endif /* PG_BEFORE_080200 */
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
            #ifdef PG_BEFORE_080100
         
     | 
| 
      
 91 
     | 
    
         
            +
            Oid
         
     | 
| 
      
 92 
     | 
    
         
            +
            lo_create(PGconn *conn, Oid lobjId)
         
     | 
| 
      
 93 
     | 
    
         
            +
            {
         
     | 
| 
      
 94 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "lo_create not supported by this client version.");
         
     | 
| 
      
 95 
     | 
    
         
            +
            }
         
     | 
| 
      
 96 
     | 
    
         
            +
            #endif /* PG_BEFORE_080100 */
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
            #ifdef PG_BEFORE_080000
         
     | 
| 
      
 99 
     | 
    
         
            +
            PGresult *
         
     | 
| 
      
 100 
     | 
    
         
            +
            PQprepare(PGconn *conn, const char *stmtName, const char *query,
         
     | 
| 
      
 101 
     | 
    
         
            +
            	int nParams, const Oid *paramTypes)
         
     | 
| 
      
 102 
     | 
    
         
            +
            {
         
     | 
| 
      
 103 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQprepare not supported by this client version.");
         
     | 
| 
      
 104 
     | 
    
         
            +
            }
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
            int
         
     | 
| 
      
 107 
     | 
    
         
            +
            PQsendPrepare(PGconn *conn, const char *stmtName, const char *query,
         
     | 
| 
      
 108 
     | 
    
         
            +
            	int nParams, const Oid *paramTypes)
         
     | 
| 
      
 109 
     | 
    
         
            +
            {
         
     | 
| 
      
 110 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQsendPrepare not supported by this client version.");
         
     | 
| 
      
 111 
     | 
    
         
            +
            }
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
            int
         
     | 
| 
      
 114 
     | 
    
         
            +
            PQserverVersion(const PGconn* conn)
         
     | 
| 
      
 115 
     | 
    
         
            +
            {
         
     | 
| 
      
 116 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQserverVersion not supported by this client version.");
         
     | 
| 
      
 117 
     | 
    
         
            +
            }
         
     | 
| 
      
 118 
     | 
    
         
            +
            #endif /* PG_BEFORE_080000 */
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            #ifdef PG_BEFORE_070400
         
     | 
| 
      
 121 
     | 
    
         
            +
            PGresult *
         
     | 
| 
      
 122 
     | 
    
         
            +
            PQexecParams(PGconn *conn, const char *command, int nParams, 
         
     | 
| 
      
 123 
     | 
    
         
            +
            	const Oid *paramTypes, const char * const * paramValues, const int *paramLengths, 
         
     | 
| 
      
 124 
     | 
    
         
            +
            	const int *paramFormats, int resultFormat)
         
     | 
| 
      
 125 
     | 
    
         
            +
            {
         
     | 
| 
      
 126 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQexecParams not supported by this client version.");
         
     | 
| 
      
 127 
     | 
    
         
            +
            }
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
            PGTransactionStatusType 
         
     | 
| 
      
 130 
     | 
    
         
            +
            PQtransactionStatus(const PGconn *conn)
         
     | 
| 
      
 131 
     | 
    
         
            +
            {
         
     | 
| 
      
 132 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQtransactionStatus not supported by this client version.");
         
     | 
| 
      
 133 
     | 
    
         
            +
            }
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
            char *
         
     | 
| 
      
 136 
     | 
    
         
            +
            PQparameterStatus(const PGconn *conn, const char *paramName)
         
     | 
| 
      
 137 
     | 
    
         
            +
            {
         
     | 
| 
      
 138 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQparameterStatus not supported by this client version.");
         
     | 
| 
      
 139 
     | 
    
         
            +
            }
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
            int
         
     | 
| 
      
 142 
     | 
    
         
            +
            PQprotocolVersion(const PGconn *conn)
         
     | 
| 
      
 143 
     | 
    
         
            +
            {
         
     | 
| 
      
 144 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQprotocolVersion not supported by this client version.");
         
     | 
| 
      
 145 
     | 
    
         
            +
            }
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
            PGresult
         
     | 
| 
      
 148 
     | 
    
         
            +
            *PQexecPrepared(PGconn *conn, const char *stmtName, int nParams, 
         
     | 
| 
      
 149 
     | 
    
         
            +
            	const char * const *ParamValues, const int *paramLengths, const int *paramFormats,
         
     | 
| 
      
 150 
     | 
    
         
            +
            	int resultFormat)
         
     | 
| 
      
 151 
     | 
    
         
            +
            {
         
     | 
| 
      
 152 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQexecPrepared not supported by this client version.");
         
     | 
| 
      
 153 
     | 
    
         
            +
            }
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
            int
         
     | 
| 
      
 156 
     | 
    
         
            +
            PQsendQueryParams(PGconn *conn, const char *command, int nParams,
         
     | 
| 
      
 157 
     | 
    
         
            +
            	const Oid *paramTypes, const char * const * paramValues, const int *paramLengths, 
         
     | 
| 
      
 158 
     | 
    
         
            +
            	const int *paramFormats, int resultFormat)
         
     | 
| 
      
 159 
     | 
    
         
            +
            {
         
     | 
| 
      
 160 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQsendQueryParams not supported by this client version.");
         
     | 
| 
      
 161 
     | 
    
         
            +
            }
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
            int
         
     | 
| 
      
 164 
     | 
    
         
            +
            PQsendQueryPrepared(PGconn *conn, const char *stmtName, int nParams, 
         
     | 
| 
      
 165 
     | 
    
         
            +
            	const char * const *ParamValues, const int *paramLengths, const int *paramFormats,
         
     | 
| 
      
 166 
     | 
    
         
            +
            	int resultFormat)
         
     | 
| 
      
 167 
     | 
    
         
            +
            {
         
     | 
| 
      
 168 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQsendQueryPrepared not supported by this client version.");
         
     | 
| 
      
 169 
     | 
    
         
            +
            }
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
            int
         
     | 
| 
      
 172 
     | 
    
         
            +
            PQputCopyData(PGconn *conn, const char *buffer, int nbytes)
         
     | 
| 
      
 173 
     | 
    
         
            +
            {
         
     | 
| 
      
 174 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQputCopyData not supported by this client version.");
         
     | 
| 
      
 175 
     | 
    
         
            +
            }
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
            int
         
     | 
| 
      
 178 
     | 
    
         
            +
            PQputCopyEnd(PGconn *conn, const char *errormsg)
         
     | 
| 
      
 179 
     | 
    
         
            +
            {
         
     | 
| 
      
 180 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQputCopyEnd not supported by this client version.");
         
     | 
| 
      
 181 
     | 
    
         
            +
            }
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
            int
         
     | 
| 
      
 184 
     | 
    
         
            +
            PQgetCopyData(PGconn *conn, char **buffer, int async)
         
     | 
| 
      
 185 
     | 
    
         
            +
            {
         
     | 
| 
      
 186 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQgetCopyData not supported by this client version.");
         
     | 
| 
      
 187 
     | 
    
         
            +
            }
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
            PGVerbosity
         
     | 
| 
      
 190 
     | 
    
         
            +
            PQsetErrorVerbosity(PGconn *conn, PGVerbosity verbosity)
         
     | 
| 
      
 191 
     | 
    
         
            +
            {
         
     | 
| 
      
 192 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQsetErrorVerbosity not supported by this client version.");
         
     | 
| 
      
 193 
     | 
    
         
            +
            }
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
            Oid
         
     | 
| 
      
 196 
     | 
    
         
            +
            PQftable(const PGresult *res, int column_number)
         
     | 
| 
      
 197 
     | 
    
         
            +
            {
         
     | 
| 
      
 198 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQftable not supported by this client version.");
         
     | 
| 
      
 199 
     | 
    
         
            +
            }
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
            int
         
     | 
| 
      
 202 
     | 
    
         
            +
            PQftablecol(const PGresult *res, int column_number)
         
     | 
| 
      
 203 
     | 
    
         
            +
            {
         
     | 
| 
      
 204 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQftablecol not supported by this client version.");
         
     | 
| 
      
 205 
     | 
    
         
            +
            }
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
            int
         
     | 
| 
      
 208 
     | 
    
         
            +
            PQfformat(const PGresult *res, int column_number)
         
     | 
| 
      
 209 
     | 
    
         
            +
            {
         
     | 
| 
      
 210 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQfformat not supported by this client version.");
         
     | 
| 
      
 211 
     | 
    
         
            +
            }
         
     | 
| 
      
 212 
     | 
    
         
            +
             
     | 
| 
      
 213 
     | 
    
         
            +
            PQnoticeReceiver 
         
     | 
| 
      
 214 
     | 
    
         
            +
            PQsetNoticeReceiver(PGconn *conn, PQnoticeReceiver proc, void *arg)
         
     | 
| 
      
 215 
     | 
    
         
            +
            {
         
     | 
| 
      
 216 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQsetNoticeReceiver not supported by this client version.");
         
     | 
| 
      
 217 
     | 
    
         
            +
            }
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
            char *
         
     | 
| 
      
 220 
     | 
    
         
            +
            PQresultErrorField(const PGresult *res, int fieldcode)
         
     | 
| 
      
 221 
     | 
    
         
            +
            {
         
     | 
| 
      
 222 
     | 
    
         
            +
            	rb_raise(rb_eStandardError, "PQresultErrorField not supported by this client version.");
         
     | 
| 
      
 223 
     | 
    
         
            +
            }
         
     | 
| 
      
 224 
     | 
    
         
            +
            #endif /* PG_BEFORE_070400 */
         
     | 
| 
      
 225 
     | 
    
         
            +
             
     | 
| 
      
 226 
     | 
    
         
            +
            #ifdef PG_BEFORE_070300
         
     | 
| 
      
 227 
     | 
    
         
            +
            size_t
         
     | 
| 
      
 228 
     | 
    
         
            +
            PQescapeStringConn(PGconn *conn, char *to, const char *from, 
         
     | 
| 
      
 229 
     | 
    
         
            +
            	size_t length, int *error)
         
     | 
| 
      
 230 
     | 
    
         
            +
            {
         
     | 
| 
      
 231 
     | 
    
         
            +
            	return PQescapeString(to,from,length);
         
     | 
| 
      
 232 
     | 
    
         
            +
            }
         
     | 
| 
      
 233 
     | 
    
         
            +
             
     | 
| 
      
 234 
     | 
    
         
            +
            unsigned char *
         
     | 
| 
      
 235 
     | 
    
         
            +
            PQescapeByteaConn(PGconn *conn, const unsigned char *from, 
         
     | 
| 
      
 236 
     | 
    
         
            +
            	size_t from_length, size_t *to_length)
         
     | 
| 
      
 237 
     | 
    
         
            +
            {
         
     | 
| 
      
 238 
     | 
    
         
            +
            	return PQescapeBytea(from, from_length, to_length);
         
     | 
| 
      
 239 
     | 
    
         
            +
            }
         
     | 
| 
      
 240 
     | 
    
         
            +
            #endif /* PG_BEFORE_070300 */
         
     | 
| 
      
 241 
     | 
    
         
            +
             
     | 
| 
      
 242 
     | 
    
         
            +
             
     | 
| 
      
 243 
     | 
    
         
            +
            /**************************************************************************
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
      
 245 
     | 
    
         
            +
            IF ANY CODE IS COPIED FROM POSTGRESQL, PLACE IT AFTER THIS COMMENT.
         
     | 
| 
      
 246 
     | 
    
         
            +
             
     | 
| 
      
 247 
     | 
    
         
            +
            ***************************************************************************
         
     | 
| 
      
 248 
     | 
    
         
            +
             
     | 
| 
      
 249 
     | 
    
         
            +
            Portions of code after this point were copied from the PostgreSQL source
         
     | 
| 
      
 250 
     | 
    
         
            +
            distribution, available at http://www.postgresql.org
         
     | 
| 
      
 251 
     | 
    
         
            +
             
     | 
| 
      
 252 
     | 
    
         
            +
            ***************************************************************************
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
      
 254 
     | 
    
         
            +
            Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
         
     | 
| 
      
 255 
     | 
    
         
            +
             
     | 
| 
      
 256 
     | 
    
         
            +
            Portions Copyright (c) 1994, The Regents of the University of California
         
     | 
| 
      
 257 
     | 
    
         
            +
             
     | 
| 
      
 258 
     | 
    
         
            +
            Permission to use, copy, modify, and distribute this software and its
         
     | 
| 
      
 259 
     | 
    
         
            +
            documentation for any purpose, without fee, and without a written agreement
         
     | 
| 
      
 260 
     | 
    
         
            +
            is hereby granted, provided that the above copyright notice and this
         
     | 
| 
      
 261 
     | 
    
         
            +
            paragraph and the following two paragraphs appear in all copies.
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
            IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
         
     | 
| 
      
 264 
     | 
    
         
            +
            DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
         
     | 
| 
      
 265 
     | 
    
         
            +
            LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
         
     | 
| 
      
 266 
     | 
    
         
            +
            DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
         
     | 
| 
      
 267 
     | 
    
         
            +
            POSSIBILITY OF SUCH DAMAGE.
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
            THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
         
     | 
| 
      
 270 
     | 
    
         
            +
            INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
         
     | 
| 
      
 271 
     | 
    
         
            +
            AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
         
     | 
| 
      
 272 
     | 
    
         
            +
            ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO
         
     | 
| 
      
 273 
     | 
    
         
            +
            PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
         
     | 
| 
      
 274 
     | 
    
         
            +
             
     | 
| 
      
 275 
     | 
    
         
            +
            **************************************************************************/
         
     | 
| 
      
 276 
     | 
    
         
            +
             
     | 
| 
      
 277 
     | 
    
         
            +
            #ifndef HAVE_PQSETCLIENTENCODING
         
     | 
| 
      
 278 
     | 
    
         
            +
            int
         
     | 
| 
      
 279 
     | 
    
         
            +
            PQsetClientEncoding(PGconn *conn, const char *encoding)
         
     | 
| 
      
 280 
     | 
    
         
            +
            {
         
     | 
| 
      
 281 
     | 
    
         
            +
            	char        qbuf[128];
         
     | 
| 
      
 282 
     | 
    
         
            +
            	static const char query[] = "set client_encoding to '%s'";
         
     | 
| 
      
 283 
     | 
    
         
            +
            	PGresult   *res;
         
     | 
| 
      
 284 
     | 
    
         
            +
            	int         status;
         
     | 
| 
      
 285 
     | 
    
         
            +
             
     | 
| 
      
 286 
     | 
    
         
            +
            	if (!conn || PQstatus(conn) != CONNECTION_OK)
         
     | 
| 
      
 287 
     | 
    
         
            +
            		return -1;
         
     | 
| 
      
 288 
     | 
    
         
            +
             
     | 
| 
      
 289 
     | 
    
         
            +
            	if (!encoding)
         
     | 
| 
      
 290 
     | 
    
         
            +
            		return -1;
         
     | 
| 
      
 291 
     | 
    
         
            +
             
     | 
| 
      
 292 
     | 
    
         
            +
            	/* check query buffer overflow */
         
     | 
| 
      
 293 
     | 
    
         
            +
            	if (sizeof(qbuf) < (sizeof(query) + strlen(encoding)))
         
     | 
| 
      
 294 
     | 
    
         
            +
            		return -1;
         
     | 
| 
      
 295 
     | 
    
         
            +
             
     | 
| 
      
 296 
     | 
    
         
            +
            	/* ok, now send a query */
         
     | 
| 
      
 297 
     | 
    
         
            +
            	sprintf(qbuf, query, encoding);
         
     | 
| 
      
 298 
     | 
    
         
            +
            	res = PQexec(conn, qbuf);
         
     | 
| 
      
 299 
     | 
    
         
            +
             
     | 
| 
      
 300 
     | 
    
         
            +
            	if (res == NULL)
         
     | 
| 
      
 301 
     | 
    
         
            +
            	return -1;
         
     | 
| 
      
 302 
     | 
    
         
            +
            	if (PQresultStatus(res) != PGRES_COMMAND_OK)
         
     | 
| 
      
 303 
     | 
    
         
            +
            	status = -1;
         
     | 
| 
      
 304 
     | 
    
         
            +
            	else
         
     | 
| 
      
 305 
     | 
    
         
            +
            	{
         
     | 
| 
      
 306 
     | 
    
         
            +
            		/*
         
     | 
| 
      
 307 
     | 
    
         
            +
            		 * In protocol 2 we have to assume the setting will stick, and adjust
         
     | 
| 
      
 308 
     | 
    
         
            +
            		 * our state immediately.  In protocol 3 and up we can rely on the
         
     | 
| 
      
 309 
     | 
    
         
            +
            		 * backend to report the parameter value, and we'll change state at
         
     | 
| 
      
 310 
     | 
    
         
            +
            		 * that time.
         
     | 
| 
      
 311 
     | 
    
         
            +
            		 */
         
     | 
| 
      
 312 
     | 
    
         
            +
            		if (PQprotocolVersion(conn) < 3)
         
     | 
| 
      
 313 
     | 
    
         
            +
            			pqSaveParameterStatus(conn, "client_encoding", encoding);
         
     | 
| 
      
 314 
     | 
    
         
            +
            		status = 0;             /* everything is ok */
         
     | 
| 
      
 315 
     | 
    
         
            +
            	}
         
     | 
| 
      
 316 
     | 
    
         
            +
            	PQclear(res);
         
     | 
| 
      
 317 
     | 
    
         
            +
            	return status;
         
     | 
| 
      
 318 
     | 
    
         
            +
            }
         
     | 
| 
      
 319 
     | 
    
         
            +
            #endif /* HAVE_PQSETCLIENTENCODING */
         
     | 
| 
      
 320 
     | 
    
         
            +
             
     | 
| 
      
 321 
     | 
    
         
            +
            #ifndef HAVE_PQESCAPESTRING
         
     | 
| 
      
 322 
     | 
    
         
            +
            /*
         
     | 
| 
      
 323 
     | 
    
         
            +
             * Escaping arbitrary strings to get valid SQL literal strings.
         
     | 
| 
      
 324 
     | 
    
         
            +
             *
         
     | 
| 
      
 325 
     | 
    
         
            +
             * Replaces "\\" with "\\\\" and "'" with "''".
         
     | 
| 
      
 326 
     | 
    
         
            +
             *
         
     | 
| 
      
 327 
     | 
    
         
            +
             * length is the length of the source string.  (Note: if a terminating NUL
         
     | 
| 
      
 328 
     | 
    
         
            +
             * is encountered sooner, PQescapeString stops short of "length"; the behavior
         
     | 
| 
      
 329 
     | 
    
         
            +
             * is thus rather like strncpy.)
         
     | 
| 
      
 330 
     | 
    
         
            +
             *
         
     | 
| 
      
 331 
     | 
    
         
            +
             * For safety the buffer at "to" must be at least 2*length + 1 bytes long.
         
     | 
| 
      
 332 
     | 
    
         
            +
             * A terminating NUL character is added to the output string, whether the
         
     | 
| 
      
 333 
     | 
    
         
            +
             * input is NUL-terminated or not.
         
     | 
| 
      
 334 
     | 
    
         
            +
             *
         
     | 
| 
      
 335 
     | 
    
         
            +
             * Returns the actual length of the output (not counting the terminating NUL).
         
     | 
| 
      
 336 
     | 
    
         
            +
             */
         
     | 
| 
      
 337 
     | 
    
         
            +
            size_t
         
     | 
| 
      
 338 
     | 
    
         
            +
            PQescapeString(char *to, const char *from, size_t length)
         
     | 
| 
      
 339 
     | 
    
         
            +
            {
         
     | 
| 
      
 340 
     | 
    
         
            +
            	const char *source = from;
         
     | 
| 
      
 341 
     | 
    
         
            +
            	char	   *target = to;
         
     | 
| 
      
 342 
     | 
    
         
            +
            	size_t		remaining = length;
         
     | 
| 
      
 343 
     | 
    
         
            +
             
     | 
| 
      
 344 
     | 
    
         
            +
            	while (remaining > 0 && *source != '\0')
         
     | 
| 
      
 345 
     | 
    
         
            +
            	{
         
     | 
| 
      
 346 
     | 
    
         
            +
            		switch (*source)
         
     | 
| 
      
 347 
     | 
    
         
            +
            		{
         
     | 
| 
      
 348 
     | 
    
         
            +
            			case '\\':
         
     | 
| 
      
 349 
     | 
    
         
            +
            				*target++ = '\\';
         
     | 
| 
      
 350 
     | 
    
         
            +
            				*target++ = '\\';
         
     | 
| 
      
 351 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 352 
     | 
    
         
            +
             
     | 
| 
      
 353 
     | 
    
         
            +
            			case '\'':
         
     | 
| 
      
 354 
     | 
    
         
            +
            				*target++ = '\'';
         
     | 
| 
      
 355 
     | 
    
         
            +
            				*target++ = '\'';
         
     | 
| 
      
 356 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 357 
     | 
    
         
            +
             
     | 
| 
      
 358 
     | 
    
         
            +
            			default:
         
     | 
| 
      
 359 
     | 
    
         
            +
            				*target++ = *source;
         
     | 
| 
      
 360 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 361 
     | 
    
         
            +
            		}
         
     | 
| 
      
 362 
     | 
    
         
            +
            		source++;
         
     | 
| 
      
 363 
     | 
    
         
            +
            		remaining--;
         
     | 
| 
      
 364 
     | 
    
         
            +
            	}
         
     | 
| 
      
 365 
     | 
    
         
            +
             
     | 
| 
      
 366 
     | 
    
         
            +
            	/* Write the terminating NUL character. */
         
     | 
| 
      
 367 
     | 
    
         
            +
            	*target = '\0';
         
     | 
| 
      
 368 
     | 
    
         
            +
             
     | 
| 
      
 369 
     | 
    
         
            +
            	return target - to;
         
     | 
| 
      
 370 
     | 
    
         
            +
            }
         
     | 
| 
      
 371 
     | 
    
         
            +
             
     | 
| 
      
 372 
     | 
    
         
            +
            /*
         
     | 
| 
      
 373 
     | 
    
         
            +
             *		PQescapeBytea	- converts from binary string to the
         
     | 
| 
      
 374 
     | 
    
         
            +
             *		minimal encoding necessary to include the string in an SQL
         
     | 
| 
      
 375 
     | 
    
         
            +
             *		INSERT statement with a bytea type column as the target.
         
     | 
| 
      
 376 
     | 
    
         
            +
             *
         
     | 
| 
      
 377 
     | 
    
         
            +
             *		The following transformations are applied
         
     | 
| 
      
 378 
     | 
    
         
            +
             *		'\0' == ASCII  0 == \\000
         
     | 
| 
      
 379 
     | 
    
         
            +
             *		'\'' == ASCII 39 == \'
         
     | 
| 
      
 380 
     | 
    
         
            +
             *		'\\' == ASCII 92 == \\\\
         
     | 
| 
      
 381 
     | 
    
         
            +
             *		anything < 0x20, or > 0x7e ---> \\ooo
         
     | 
| 
      
 382 
     | 
    
         
            +
             *										(where ooo is an octal expression)
         
     | 
| 
      
 383 
     | 
    
         
            +
             */
         
     | 
| 
      
 384 
     | 
    
         
            +
            unsigned char *
         
     | 
| 
      
 385 
     | 
    
         
            +
            PQescapeBytea(const unsigned char *bintext, size_t binlen, size_t *bytealen)
         
     | 
| 
      
 386 
     | 
    
         
            +
            {
         
     | 
| 
      
 387 
     | 
    
         
            +
            	const unsigned char *vp;
         
     | 
| 
      
 388 
     | 
    
         
            +
            	unsigned char *rp;
         
     | 
| 
      
 389 
     | 
    
         
            +
            	unsigned char *result;
         
     | 
| 
      
 390 
     | 
    
         
            +
            	size_t		i;
         
     | 
| 
      
 391 
     | 
    
         
            +
            	size_t		len;
         
     | 
| 
      
 392 
     | 
    
         
            +
             
     | 
| 
      
 393 
     | 
    
         
            +
            	/*
         
     | 
| 
      
 394 
     | 
    
         
            +
            	 * empty string has 1 char ('\0')
         
     | 
| 
      
 395 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 396 
     | 
    
         
            +
            	len = 1;
         
     | 
| 
      
 397 
     | 
    
         
            +
             
     | 
| 
      
 398 
     | 
    
         
            +
            	vp = bintext;
         
     | 
| 
      
 399 
     | 
    
         
            +
            	for (i = binlen; i > 0; i--, vp++)
         
     | 
| 
      
 400 
     | 
    
         
            +
            	{
         
     | 
| 
      
 401 
     | 
    
         
            +
            		if (*vp < 0x20 || *vp > 0x7e)
         
     | 
| 
      
 402 
     | 
    
         
            +
            			len += 5;			/* '5' is for '\\ooo' */
         
     | 
| 
      
 403 
     | 
    
         
            +
            		else if (*vp == '\'')
         
     | 
| 
      
 404 
     | 
    
         
            +
            			len += 2;
         
     | 
| 
      
 405 
     | 
    
         
            +
            		else if (*vp == '\\')
         
     | 
| 
      
 406 
     | 
    
         
            +
            			len += 4;
         
     | 
| 
      
 407 
     | 
    
         
            +
            		else
         
     | 
| 
      
 408 
     | 
    
         
            +
            			len++;
         
     | 
| 
      
 409 
     | 
    
         
            +
            	}
         
     | 
| 
      
 410 
     | 
    
         
            +
             
     | 
| 
      
 411 
     | 
    
         
            +
            	rp = result = (unsigned char *) malloc(len);
         
     | 
| 
      
 412 
     | 
    
         
            +
            	if (rp == NULL)
         
     | 
| 
      
 413 
     | 
    
         
            +
            		return NULL;
         
     | 
| 
      
 414 
     | 
    
         
            +
             
     | 
| 
      
 415 
     | 
    
         
            +
            	vp = bintext;
         
     | 
| 
      
 416 
     | 
    
         
            +
            	*bytealen = len;
         
     | 
| 
      
 417 
     | 
    
         
            +
             
     | 
| 
      
 418 
     | 
    
         
            +
            	for (i = binlen; i > 0; i--, vp++)
         
     | 
| 
      
 419 
     | 
    
         
            +
            	{
         
     | 
| 
      
 420 
     | 
    
         
            +
            		if (*vp < 0x20 || *vp > 0x7e)
         
     | 
| 
      
 421 
     | 
    
         
            +
            		{
         
     | 
| 
      
 422 
     | 
    
         
            +
            			(void) sprintf(rp, "\\\\%03o", *vp);
         
     | 
| 
      
 423 
     | 
    
         
            +
            			rp += 5;
         
     | 
| 
      
 424 
     | 
    
         
            +
            		}
         
     | 
| 
      
 425 
     | 
    
         
            +
            		else if (*vp == '\'')
         
     | 
| 
      
 426 
     | 
    
         
            +
            		{
         
     | 
| 
      
 427 
     | 
    
         
            +
            			rp[0] = '\\';
         
     | 
| 
      
 428 
     | 
    
         
            +
            			rp[1] = '\'';
         
     | 
| 
      
 429 
     | 
    
         
            +
            			rp += 2;
         
     | 
| 
      
 430 
     | 
    
         
            +
            		}
         
     | 
| 
      
 431 
     | 
    
         
            +
            		else if (*vp == '\\')
         
     | 
| 
      
 432 
     | 
    
         
            +
            		{
         
     | 
| 
      
 433 
     | 
    
         
            +
            			rp[0] = '\\';
         
     | 
| 
      
 434 
     | 
    
         
            +
            			rp[1] = '\\';
         
     | 
| 
      
 435 
     | 
    
         
            +
            			rp[2] = '\\';
         
     | 
| 
      
 436 
     | 
    
         
            +
            			rp[3] = '\\';
         
     | 
| 
      
 437 
     | 
    
         
            +
            			rp += 4;
         
     | 
| 
      
 438 
     | 
    
         
            +
            		}
         
     | 
| 
      
 439 
     | 
    
         
            +
            		else
         
     | 
| 
      
 440 
     | 
    
         
            +
            			*rp++ = *vp;
         
     | 
| 
      
 441 
     | 
    
         
            +
            	}
         
     | 
| 
      
 442 
     | 
    
         
            +
            	*rp = '\0';
         
     | 
| 
      
 443 
     | 
    
         
            +
             
     | 
| 
      
 444 
     | 
    
         
            +
            	return result;
         
     | 
| 
      
 445 
     | 
    
         
            +
            }
         
     | 
| 
      
 446 
     | 
    
         
            +
             
     | 
| 
      
 447 
     | 
    
         
            +
            #define ISFIRSTOCTDIGIT(CH) ((CH) >= '0' && (CH) <= '3')
         
     | 
| 
      
 448 
     | 
    
         
            +
            #define ISOCTDIGIT(CH) ((CH) >= '0' && (CH) <= '7')
         
     | 
| 
      
 449 
     | 
    
         
            +
            #define OCTVAL(CH) ((CH) - '0')
         
     | 
| 
      
 450 
     | 
    
         
            +
             
     | 
| 
      
 451 
     | 
    
         
            +
            /*
         
     | 
| 
      
 452 
     | 
    
         
            +
             *		PQunescapeBytea - converts the null terminated string representation
         
     | 
| 
      
 453 
     | 
    
         
            +
             *		of a bytea, strtext, into binary, filling a buffer. It returns a
         
     | 
| 
      
 454 
     | 
    
         
            +
             *		pointer to the buffer (or NULL on error), and the size of the
         
     | 
| 
      
 455 
     | 
    
         
            +
             *		buffer in retbuflen. The pointer may subsequently be used as an
         
     | 
| 
      
 456 
     | 
    
         
            +
             *		argument to the function free(3). It is the reverse of PQescapeBytea.
         
     | 
| 
      
 457 
     | 
    
         
            +
             *
         
     | 
| 
      
 458 
     | 
    
         
            +
             *		The following transformations are made:
         
     | 
| 
      
 459 
     | 
    
         
            +
             *		\\	 == ASCII 92 == \
         
     | 
| 
      
 460 
     | 
    
         
            +
             *		\ooo == a byte whose value = ooo (ooo is an octal number)
         
     | 
| 
      
 461 
     | 
    
         
            +
             *		\x	 == x (x is any character not matched by the above transformations)
         
     | 
| 
      
 462 
     | 
    
         
            +
             */
         
     | 
| 
      
 463 
     | 
    
         
            +
            unsigned char *
         
     | 
| 
      
 464 
     | 
    
         
            +
            PQunescapeBytea(const unsigned char *strtext, size_t *retbuflen)
         
     | 
| 
      
 465 
     | 
    
         
            +
            {
         
     | 
| 
      
 466 
     | 
    
         
            +
            	size_t		strtextlen,
         
     | 
| 
      
 467 
     | 
    
         
            +
            				buflen;
         
     | 
| 
      
 468 
     | 
    
         
            +
            	unsigned char *buffer,
         
     | 
| 
      
 469 
     | 
    
         
            +
            			   *tmpbuf;
         
     | 
| 
      
 470 
     | 
    
         
            +
            	size_t		i,
         
     | 
| 
      
 471 
     | 
    
         
            +
            				j;
         
     | 
| 
      
 472 
     | 
    
         
            +
             
     | 
| 
      
 473 
     | 
    
         
            +
            	if (strtext == NULL)
         
     | 
| 
      
 474 
     | 
    
         
            +
            		return NULL;
         
     | 
| 
      
 475 
     | 
    
         
            +
             
     | 
| 
      
 476 
     | 
    
         
            +
            	strtextlen = strlen(strtext);
         
     | 
| 
      
 477 
     | 
    
         
            +
             
     | 
| 
      
 478 
     | 
    
         
            +
            	/*
         
     | 
| 
      
 479 
     | 
    
         
            +
            	 * Length of input is max length of output, but add one to avoid
         
     | 
| 
      
 480 
     | 
    
         
            +
            	 * unportable malloc(0) if input is zero-length.
         
     | 
| 
      
 481 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 482 
     | 
    
         
            +
            	buffer = (unsigned char *) malloc(strtextlen + 1);
         
     | 
| 
      
 483 
     | 
    
         
            +
            	if (buffer == NULL)
         
     | 
| 
      
 484 
     | 
    
         
            +
            		return NULL;
         
     | 
| 
      
 485 
     | 
    
         
            +
             
     | 
| 
      
 486 
     | 
    
         
            +
            	for (i = j = 0; i < strtextlen;)
         
     | 
| 
      
 487 
     | 
    
         
            +
            	{
         
     | 
| 
      
 488 
     | 
    
         
            +
            		switch (strtext[i])
         
     | 
| 
      
 489 
     | 
    
         
            +
            		{
         
     | 
| 
      
 490 
     | 
    
         
            +
            			case '\\':
         
     | 
| 
      
 491 
     | 
    
         
            +
            				i++;
         
     | 
| 
      
 492 
     | 
    
         
            +
            				if (strtext[i] == '\\')
         
     | 
| 
      
 493 
     | 
    
         
            +
            					buffer[j++] = strtext[i++];
         
     | 
| 
      
 494 
     | 
    
         
            +
            				else
         
     | 
| 
      
 495 
     | 
    
         
            +
            				{
         
     | 
| 
      
 496 
     | 
    
         
            +
            					if ((ISFIRSTOCTDIGIT(strtext[i])) &&
         
     | 
| 
      
 497 
     | 
    
         
            +
            						(ISOCTDIGIT(strtext[i + 1])) &&
         
     | 
| 
      
 498 
     | 
    
         
            +
            						(ISOCTDIGIT(strtext[i + 2])))
         
     | 
| 
      
 499 
     | 
    
         
            +
            					{
         
     | 
| 
      
 500 
     | 
    
         
            +
            						int			byte;
         
     | 
| 
      
 501 
     | 
    
         
            +
             
     | 
| 
      
 502 
     | 
    
         
            +
            						byte = OCTVAL(strtext[i++]);
         
     | 
| 
      
 503 
     | 
    
         
            +
            						byte = (byte << 3) + OCTVAL(strtext[i++]);
         
     | 
| 
      
 504 
     | 
    
         
            +
            						byte = (byte << 3) + OCTVAL(strtext[i++]);
         
     | 
| 
      
 505 
     | 
    
         
            +
            						buffer[j++] = byte;
         
     | 
| 
      
 506 
     | 
    
         
            +
            					}
         
     | 
| 
      
 507 
     | 
    
         
            +
            				}
         
     | 
| 
      
 508 
     | 
    
         
            +
             
     | 
| 
      
 509 
     | 
    
         
            +
            				/*
         
     | 
| 
      
 510 
     | 
    
         
            +
            				 * Note: if we see '\' followed by something that isn't a
         
     | 
| 
      
 511 
     | 
    
         
            +
            				 * recognized escape sequence, we loop around having done
         
     | 
| 
      
 512 
     | 
    
         
            +
            				 * nothing except advance i.  Therefore the something will
         
     | 
| 
      
 513 
     | 
    
         
            +
            				 * be emitted as ordinary data on the next cycle. Corner
         
     | 
| 
      
 514 
     | 
    
         
            +
            				 * case: '\' at end of string will just be discarded.
         
     | 
| 
      
 515 
     | 
    
         
            +
            				 */
         
     | 
| 
      
 516 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 517 
     | 
    
         
            +
             
     | 
| 
      
 518 
     | 
    
         
            +
            			default:
         
     | 
| 
      
 519 
     | 
    
         
            +
            				buffer[j++] = strtext[i++];
         
     | 
| 
      
 520 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 521 
     | 
    
         
            +
            		}
         
     | 
| 
      
 522 
     | 
    
         
            +
            	}
         
     | 
| 
      
 523 
     | 
    
         
            +
            	buflen = j;					/* buflen is the length of the dequoted
         
     | 
| 
      
 524 
     | 
    
         
            +
            								 * data */
         
     | 
| 
      
 525 
     | 
    
         
            +
             
     | 
| 
      
 526 
     | 
    
         
            +
            	/* Shrink the buffer to be no larger than necessary */
         
     | 
| 
      
 527 
     | 
    
         
            +
            	/* +1 avoids unportable behavior when buflen==0 */
         
     | 
| 
      
 528 
     | 
    
         
            +
            	tmpbuf = realloc(buffer, buflen + 1);
         
     | 
| 
      
 529 
     | 
    
         
            +
             
     | 
| 
      
 530 
     | 
    
         
            +
            	/* It would only be a very brain-dead realloc that could fail, but... */
         
     | 
| 
      
 531 
     | 
    
         
            +
            	if (!tmpbuf)
         
     | 
| 
      
 532 
     | 
    
         
            +
            	{
         
     | 
| 
      
 533 
     | 
    
         
            +
            		free(buffer);
         
     | 
| 
      
 534 
     | 
    
         
            +
            		return NULL;
         
     | 
| 
      
 535 
     | 
    
         
            +
            	}
         
     | 
| 
      
 536 
     | 
    
         
            +
             
     | 
| 
      
 537 
     | 
    
         
            +
            	*retbuflen = buflen;
         
     | 
| 
      
 538 
     | 
    
         
            +
            	return tmpbuf;
         
     | 
| 
      
 539 
     | 
    
         
            +
            }
         
     | 
| 
      
 540 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 541 
     | 
    
         
            +
             
     |