Skip site navigation (1) Skip section navigation (2)

8.01.0200 slow with long queries

From: "Lasse Haataja" <lasse(dot)haataja(at)neagen(dot)com>
To: pgsql-odbc(at)postgresql(dot)org
Subject: 8.01.0200 slow with long queries
Date: 2006-04-04 09:32:00
Message-ID: ops7g8rmnfl2d074@gabrielle.neagen-int.com (view raw or flat)
Thread:
Lists: pgsql-odbc
psqlodbc 8.01.0200 is much slower than 8.01.0102 (and earlier versions)
with long (>10 kilobytes) queries; a 1 megabyte query that takes two
seconds with .0102 takes 37 minutes with .0200.

According to mylog, most of the time seems to be taken by PGAPI_NumParams.
(Although bind.c seems to be identical in .0102 and .0200, perhaps the
arguments the function is called with makes the difference?)

The culprit seems likely to be the line

		for (i = 0; i < strlen(stmt->statement); i++)

where strlen is (needlessly, since the string is not modified, let alone
its length changed) evaluated once for each iteration of the loop, resulting
in O(N^2) complexity. Fix should be easy, something along the lines of

		size_t stmt_len = strlen(stmt->statement);
		for (i = 0; i < stmt_len; i++)

The same problem occurs in misc.c function remove_newlines(); the same fix
appears applicable there as well.

Furthermore, the body of PGAPI_NumParams seems to fail to take into account
single quotes escaped by backslashes, instead treating them in the same manner
as literal single quotes, causing queries containing escaped single quotes
and question marks in correct sequence (such as SELECT '\'?') to fail. This
can luckily be worked around (in a standard-compliant manner, no less) by
escaping single quotes with a single quote instead of a backslash, but a fix,
at least in the documentation, would be welcome.

-- 
Lasse Haataja, Neagen Oy

pgsql-odbc by date

Next:From: noreplyDate: 2006-04-04 10:45:12
Subject: [ psqlodbc-Bugs-1000604 ] 8.01.0200 slow with long queries
Previous:From: Dave PageDate: 2006-04-04 07:34:15
Subject: Re: driver updates in windows

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group