Re: BUG #5268: PQgetvalue incorrectly returns 0

From: Mike Landis <mlandis(at)pnmx(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #5268: PQgetvalue incorrectly returns 0
Date: 2010-01-07 12:51:54
Message-ID: 20100107125237.0CF58632AE0@mail.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

<html>
<body>
<font face="Arial, Helvetica" color="#0000FF">Try the following, where
mystring is an extension of std::string...<br><br>
mystring sql( </font>&quot;SELECT COUNT(*) FROM information_schema.tables
WHERE table_name='proxies' &quot;);<br><br>
<font face="Arial, Helvetica" color="#0000FF">int</font>
<font face="Arial, Helvetica"><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>GetIntFromSQL(
mystring&amp; sql )<br>
{<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#008000">// if there's more than one
record in the ResultSet, still only returns the first float<br>
</font><font face="Arial, Helvetica"><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">int</font>
<font face="Arial, Helvetica"><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>retVal = -1;<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>
PGresult*<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>res =
GetQueryResult( sql );<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">if</font>
<font face="Arial, Helvetica"> ( res )<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>{<x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">int</font>
<font face="Arial, Helvetica"> nTuples = PQntuples(res);<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">int</font>
<font face="Arial, Helvetica"> nFields = PQnfields(res);<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">if</font>
<font face="Arial, Helvetica"> ( nTuples &gt; 0&nbsp; &amp;&amp;&nbsp;
nFields &gt; 0 )<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>{<x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">char</font>
<font face="Arial, Helvetica">*<x-tab>&nbsp;&nbsp;&nbsp;</x-tab>val =
PQgetvalue(res,0,0);<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#008000">// get first column, first
field<br>
</font><font face="Arial, Helvetica"><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>retVal = atoi(
val );<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>}<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>PQclear( res
);<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>}<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">return</font>
<font face="Arial, Helvetica"><x-tab>&nbsp;&nbsp;</x-tab>retVal;<br>
</font>}<br><br>
<font face="Arial, Helvetica">PGresult*<x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>GetQueryResult(
mystring&amp; sql )<br>
{<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#008000">// run a query that may
return a result set<br>
</font><font face="Arial, Helvetica"><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>PGresult*<x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>res = PQexec( conn,
sql.c_str() );<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">if</font>
<font face="Arial, Helvetica"> ( res )<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>{<x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">int</font>
<font face="Arial, Helvetica"><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>status = PQresultStatus(res);<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">if</font>
<font face="Arial, Helvetica"> ( status != PGRES_TUPLES_OK )<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>{<x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#008000">// what happened?<br>
</font><font face="Arial, Helvetica"><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>fprintf( stderr,
</font><font face="Arial, Helvetica" color="#A31515">
&quot;GetQueryResult(%s) -&gt;
%s\n&quot;</font><font face="Arial, Helvetica">, sql.c_str(),
PQerrorMessage(conn) );<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>PQclear( res
);<x-tab>&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#008000">// possibly moot<br>
</font><font face="Arial, Helvetica"><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>res = NULL;<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>}<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>}<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">else<br>
</font><font face="Arial, Helvetica"><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>{<x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>fprintf( stderr,
</font><font face="Arial, Helvetica" color="#A31515">
&quot;GetQueryResult: insufficient memory to run:
%s\n&quot;</font><font face="Arial, Helvetica">, sql.c_str() );<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">throw</font>
<font face="Arial, Helvetica">
</font><font face="Arial, Helvetica" color="#A31515">
&quot;GetQueryResult: insufficient
memory&quot;</font><font face="Arial, Helvetica">;<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>}<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab></font>
<font face="Arial, Helvetica" color="#0000FF">return</font>
<font face="Arial, Helvetica"><x-tab>&nbsp;&nbsp;</x-tab>res;<br>
</font>}<br><br>
At 02:14 AM 1/7/2010, you wrote:<br>
<blockquote type=cite class=cite cite="">-----BEGIN PGP SIGNED
MESSAGE-----<br>
Hash: SHA1<br><br>
On Thu, Jan 07, 2010 at 04:11:03AM +0000, Mike Landis wrote:<br>
&gt; <br>
&gt; The following bug has been logged online:<br>
&gt; <br>
&gt; Bug reference:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5268<br>
&gt; Logged by:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Mike Landis<br>
&gt; Email address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mlandis(at)pnmx(dot)com<br>
&gt; PostgreSQL version: 8.4.1<br>
&gt; Operating system:&nbsp;&nbsp; Vista<br>
&gt; Description:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PQgetvalue
incorrectly returns 0<br>
&gt; Details: <br>
&gt; <br>
&gt; When I execute the following SQL:<br>
&gt; <br>
&gt; &quot;SELECT COUNT(*) FROM information_schema.tables WHERE
table_name='proxies'&quot;<br>
&gt; <br>
&gt; in the PGAdmmin 1.10.0, rev 7945-7946 query tool, I get
&quot;1&quot; (the correct<br>
&gt; answer).&nbsp; When I run the exact same SQL in a C program, I get a
result set<br>
&gt; with one tuple and one field (so far so good), but when I run<br>
&gt; PQgetvalue(resultSet,0,0) I get &quot;0&quot; (wrong answer).<br>
&gt; <br>
&gt; Am I missing something?&nbsp; You can't do squat in a client program
without<br>
&gt; PQgetvalue().&nbsp; Is any sort of regression test being run against
libpq<br>
&gt; functions?<br><br>
Hm. I don't know for sure, but I'd assume that PGAdmin relies on<br>
libpq...<br><br>
&gt; What can I do to get this resolved?<br><br>
Could you show us a more complete test case? That might help in<br>
pin-pointing the problem.<br><br>
Regards<br>
- -- tomás<br>
-----BEGIN PGP SIGNATURE-----<br>
Version: GnuPG v1.4.6 (GNU/Linux)<br><br>
iD8DBQFLRYnoBcgs9XrR2kYRAjV/AJ9+HAZZu5sFKuHw1vp7aZNLKM7ykwCfQ+FX<br>
q+NXaFojGP7uS4O/4Km/stM=<br>
=zblK<br>
-----END PGP SIGNATURE-----<br><br>
No virus found in this incoming message.<br>
Checked by AVG -
<a href="http://www.avg.com/" eudora="autourl">www.avg.com</a> <br>
Version: 9.0.725 / Virus Database: 270.14.127/2603 - Release Date:
01/06/10 02:35:00</blockquote></body>
</html>

Attachment Content-Type Size
unknown_filename text/html 9.6 KB

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2010-01-07 13:06:26 Re: BUG #5268: PQgetvalue incorrectly returns 0
Previous Message Robert Haas 2010-01-07 11:01:12 Re: email addresses