mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
Okay, I have some new code in place that hopefully should work better. I
couldn't produce a full patch using cvs diff -c this time since I have created new files and anonymous cvs usage doesn't allow you to adds. I'm supplying the modified src/interfaces/jdbc as a tarball at : http://www.candleweb.no/~gunnar/projects/pgsql/postgres-jdbc-2000-10-05.tgz The new files that should be added are : ? org/postgresql/PGStatement.java ? org/postgresql/ObjectPool.java ? org/postgresql/ObjectPoolFactory.java There is now a global static pool of free byte arrays and used byte arrays connected to a statement object. This is the role of the new PGStatement class. Access to the global free array is synchronized, while we rely on the PG_Stream synchronization for the used array. My measurements show that the perfomance boost on this code is not quite as big as my last shot, but it is still an improvement. Maybe some of the difference is due to the new synchronization on the global array. I think I will look into choosing between on a connection level and global level. I have also started experimented with improving the performance of the various conversions. The problem here is ofcourse related handle the various encodings. One thing I found to speed up ResultSet.getInt() a lot was to do custom conversion on the byte array into int instead of going through the getString() to do the conversion. But I'm unsure if this is portable, can we assume that a digit never can be represented by more than one byte ? It works fine in my iso-latin-8859-1 environment, but what about other environments ? Maybe we could provide different ResultSet implementations depending on the encoding used or delegate some methods of the result set to an "converter class". Check the org/postgresql/jdbc2/FastResultSet.java in the tarball above to see the modified getInt() method. Regards, Gunnar
This commit is contained in:
@ -1497,7 +1497,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
|
||||
if(procedureNamePattern==null)
|
||||
procedureNamePattern="%";
|
||||
|
||||
r = connection.ExecSQL("select proname, proretset from pg_proc where proname like '"+procedureNamePattern.toLowerCase()+"' order by proname");
|
||||
r = connection.ExecSQL(null, "select proname, proretset from pg_proc where proname like '"+procedureNamePattern.toLowerCase()+"' order by proname");
|
||||
|
||||
while (r.next())
|
||||
{
|
||||
@ -1670,7 +1670,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
|
||||
sql.append("'");
|
||||
|
||||
// Now run the query
|
||||
r = connection.ExecSQL(sql.toString());
|
||||
r = connection.ExecSQL(null, sql.toString());
|
||||
|
||||
byte remarks[];
|
||||
|
||||
@ -1679,7 +1679,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
|
||||
byte[][] tuple = new byte[5][0];
|
||||
|
||||
// Fetch the description for the table (if any)
|
||||
java.sql.ResultSet dr = connection.ExecSQL("select description from pg_description where objoid="+r.getInt(2));
|
||||
java.sql.ResultSet dr = connection.ExecSQL(null, "select description from pg_description where objoid="+r.getInt(2));
|
||||
if(((org.postgresql.ResultSet)dr).getTupleCount()==1) {
|
||||
dr.next();
|
||||
remarks = dr.getBytes(1);
|
||||
@ -1893,7 +1893,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
|
||||
|
||||
// Now form the query
|
||||
// Modified by Stefan Andreasen <stefan@linux.kapow.dk>
|
||||
r = connection.ExecSQL("select a.oid,c.relname,a.attname,a.atttypid,a.attnum,a.attnotnull,a.attlen,a.atttypmod from pg_class c, pg_attribute a where a.attrelid=c.oid and c.relname like '"+tableNamePattern.toLowerCase()+"' and a.attname like '"+columnNamePattern.toLowerCase()+"' and a.attnum>0 order by c.relname,a.attnum");
|
||||
r = connection.ExecSQL(null, "select a.oid,c.relname,a.attname,a.atttypid,a.attnum,a.attnotnull,a.attlen,a.atttypmod from pg_class c, pg_attribute a where a.attrelid=c.oid and c.relname like '"+tableNamePattern.toLowerCase()+"' and a.attname like '"+columnNamePattern.toLowerCase()+"' and a.attnum>0 order by c.relname,a.attnum");
|
||||
|
||||
byte remarks[];
|
||||
|
||||
@ -1901,7 +1901,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
|
||||
byte[][] tuple = new byte[18][0];
|
||||
|
||||
// Fetch the description for the table (if any)
|
||||
java.sql.ResultSet dr = connection.ExecSQL("select description from pg_description where objoid="+r.getInt(1));
|
||||
java.sql.ResultSet dr = connection.ExecSQL(null, "select description from pg_description where objoid="+r.getInt(1));
|
||||
if(((org.postgresql.ResultSet)dr).getTupleCount()==1) {
|
||||
dr.next();
|
||||
tuple[11] = dr.getBytes(1);
|
||||
@ -1915,7 +1915,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
|
||||
tuple[2] = r.getBytes(2); // Table name
|
||||
tuple[3] = r.getBytes(3); // Column name
|
||||
|
||||
dr = connection.ExecSQL("select typname from pg_type where oid = "+r.getString(4));
|
||||
dr = connection.ExecSQL(null, "select typname from pg_type where oid = "+r.getString(4));
|
||||
dr.next();
|
||||
String typname=dr.getString(1);
|
||||
dr.close();
|
||||
@ -2009,7 +2009,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
|
||||
f[7] = new Field(connection,"IS_GRANTABLE",iVarcharOid,32);
|
||||
|
||||
// This is taken direct from the psql source
|
||||
java.sql.ResultSet r = connection.ExecSQL("SELECT relname, relacl FROM pg_class, pg_user WHERE ( relkind = 'r' OR relkind = 'i') and relname !~ '^pg_' and relname !~ '^xin[vx][0-9]+' and usesysid = relowner and relname like '"+table.toLowerCase()+"' ORDER BY relname");
|
||||
java.sql.ResultSet r = connection.ExecSQL(null, "SELECT relname, relacl FROM pg_class, pg_user WHERE ( relkind = 'r' OR relkind = 'i') and relname !~ '^pg_' and relname !~ '^xin[vx][0-9]+' and usesysid = relowner and relname like '"+table.toLowerCase()+"' ORDER BY relname");
|
||||
while(r.next()) {
|
||||
byte[][] tuple = new byte[8][0];
|
||||
tuple[0] = tuple[1]= "".getBytes();
|
||||
@ -2406,7 +2406,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData
|
||||
*/
|
||||
public java.sql.ResultSet getTypeInfo() throws SQLException
|
||||
{
|
||||
java.sql.ResultSet rs = connection.ExecSQL("select typname from pg_type");
|
||||
java.sql.ResultSet rs = connection.ExecSQL(null, "select typname from pg_type");
|
||||
if(rs!=null) {
|
||||
Field f[] = new Field[18];
|
||||
ResultSet r; // ResultSet for the SQL query that we need to do
|
||||
|
Reference in New Issue
Block a user