1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-16 06:01:02 +03:00

Back out Gunnar R|nning jdbc changes.

This commit is contained in:
Bruce Momjian
2000-10-09 16:48:19 +00:00
parent c4ccc6146b
commit a4e3943b3f
13 changed files with 84 additions and 412 deletions

View File

@ -22,10 +22,7 @@ public class PG_Stream
private Socket connection;
private InputStream pg_input;
private BufferedOutputStream pg_output;
public PGStatement executingStatement;
/**
* Constructor: Connect to the PostgreSQL back end and return
* a stream connection.
@ -47,15 +44,6 @@ public class PG_Stream
pg_output = new BufferedOutputStream(connection.getOutputStream(), 8192);
}
/**
* Set the currently executing statement. This is used to bind cached byte
* arrays to a Statement, so the statement can return the to the global
* pool of unused byte arrays when they are no longer inuse.
*/
public void setExecutingStatement(PGStatement executingStatement){
this.executingStatement = executingStatement;
}
/**
* Sends a single character to the back end
*
@ -82,7 +70,7 @@ public class PG_Stream
*/
public void SendInteger(int val, int siz) throws IOException
{
byte[] buf = allocByteDim1(siz);
byte[] buf = new byte[siz];
while (siz-- > 0)
{
@ -106,7 +94,7 @@ public class PG_Stream
*/
public void SendIntegerReverse(int val, int siz) throws IOException
{
byte[] buf = allocByteDim1(siz);
byte[] buf = new byte[siz];
int p=0;
while (siz-- > 0)
{
@ -248,52 +236,23 @@ public class PG_Stream
return n;
}
/**
* Receives a null-terminated string from the backend. Maximum of
* maxsiz bytes - if we don't see a null, then we assume something
* has gone wrong.
*
* @param maxsiz maximum length of string
* @return string from back end
* @exception SQLException if an I/O error occurs
*/
public String ReceiveString(int maxsiz) throws SQLException
{
return ReceiveString(maxsiz, null);
}
/**
* Receives a null-terminated string from the backend. Maximum of
* maxsiz bytes - if we don't see a null, then we assume something
* has gone wrong.
*
* @param maxsiz maximum length of string
* @param encoding the charset encoding to use.
* @return string from back end
* @exception SQLException if an I/O error occurs
*/
public String ReceiveString(int maxsiz, String encoding) throws SQLException
{
byte[] rst = allocByteDim1(maxsiz);
return ReceiveString(rst, maxsiz, encoding);
}
public String ReceiveString(int maxsize) throws SQLException {
return ReceiveString(maxsize, null);
}
/**
* Receives a null-terminated string from the backend. Maximum of
* maxsiz bytes - if we don't see a null, then we assume something
* has gone wrong.
*
* @param rst byte array to read the String into. rst.length must
* equal to or greater than maxsize.
* @param maxsiz maximum length of string in bytes
* @param encoding the charset encoding to use.
* @param maxsiz maximum length of string in bytes
* @return string from back end
* @exception SQLException if an I/O error occurs
*/
public String ReceiveString(byte rst[], int maxsiz, String encoding)
throws SQLException
public String ReceiveString(int maxsiz, String encoding) throws SQLException
{
byte[] rst = new byte[maxsiz];
int s = 0;
try
@ -303,10 +262,9 @@ public class PG_Stream
int c = pg_input.read();
if (c < 0)
throw new PSQLException("postgresql.stream.eof");
else if (c == 0) {
rst[s] = 0;
break;
} else
else if (c == 0)
break;
else
rst[s++] = (byte)c;
}
if (s >= maxsiz)
@ -341,7 +299,7 @@ public class PG_Stream
{
int i, bim = (nf + 7)/8;
byte[] bitmask = Receive(bim);
byte[][] answer = allocByteDim2(nf);
byte[][] answer = new byte[nf][0];
int whichbit = 0x80;
int whichbyte = 0;
@ -379,7 +337,7 @@ public class PG_Stream
*/
private byte[] Receive(int siz) throws SQLException
{
byte[] answer = allocByteDim1(siz);
byte[] answer = new byte[siz];
Receive(answer,0,siz);
return answer;
}
@ -437,95 +395,4 @@ public class PG_Stream
pg_input.close();
connection.close();
}
/**
* Deallocate all resources that has been associated with any previous
* query.
*/
public void deallocate(PGStatement stmt){
for(int i = 0; i < maxsize_dim1; i++){
synchronized(notusemap_dim1[i]){
notusemap_dim1[i].addAll(stmt.inusemap_dim1[i]);
}
stmt.inusemap_dim1[i].clear();
}
for(int i = 0; i < maxsize_dim2; i++){
synchronized(notusemap_dim2[i]){
notusemap_dim2[i].addAll(stmt.inusemap_dim2[i]);
}
stmt.inusemap_dim2[i].clear();
}
}
public static final int maxsize_dim1 = 256;
public static ObjectPool notusemap_dim1[] = new ObjectPool[maxsize_dim1];
public static byte binit[][] = new byte[maxsize_dim1][0];
public static final int maxsize_dim2 = 32;
public static ObjectPool notusemap_dim2[] = new ObjectPool[maxsize_dim2];
public static ObjectPoolFactory factory_dim1;
public static ObjectPoolFactory factory_dim2;
static {
for(int i = 0; i < maxsize_dim1; i++){
binit[i] = new byte[i];
notusemap_dim1[i] = new ObjectPool();
}
for(int i = 0; i < maxsize_dim2; i++){
notusemap_dim2[i] = new ObjectPool();
}
factory_dim1 = ObjectPoolFactory.getInstance(maxsize_dim1);
factory_dim2 = ObjectPoolFactory.getInstance(maxsize_dim2);
}
public byte[] allocByteDim1(int size){
if(size >= maxsize_dim1 || executingStatement == null){
return new byte[size];
}
ObjectPool not_usel = notusemap_dim1[size];
ObjectPool in_usel = executingStatement.inusemap_dim1[size];
byte b[] = null;
synchronized(not_usel){
if(!not_usel.isEmpty()) {
Object o = not_usel.remove();
b = (byte[]) o;
} else {
b = new byte[size];
}
}
in_usel.add(b);
return b;
}
public byte[][] allocByteDim2(int size){
if(size >= maxsize_dim2 || executingStatement == null){
return new byte[size][0];
}
ObjectPool not_usel = notusemap_dim2[size];
ObjectPool in_usel = executingStatement.inusemap_dim2[size];
byte b[][] = null;
synchronized(not_usel){
if(!not_usel.isEmpty()) {
Object o = not_usel.remove();
b = (byte[][]) o;
} else
b = new byte[size][0];
in_usel.add(b);
}
return b;
}
}