diff options
Diffstat (limited to 'src/interfaces/jdbc/postgresql/fastpath/FastpathArg.java')
-rw-r--r-- | src/interfaces/jdbc/postgresql/fastpath/FastpathArg.java | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/interfaces/jdbc/postgresql/fastpath/FastpathArg.java b/src/interfaces/jdbc/postgresql/fastpath/FastpathArg.java new file mode 100644 index 00000000000..9b800073c22 --- /dev/null +++ b/src/interfaces/jdbc/postgresql/fastpath/FastpathArg.java @@ -0,0 +1,106 @@ +package postgresql.fastpath; + +import java.io.*; +import java.lang.*; +import java.net.*; +import java.util.*; +import java.sql.*; +import postgresql.util.*; + +/** + * Each fastpath call requires an array of arguments, the number and type + * dependent on the function being called. + * + * <p>This class implements methods needed to provide this capability. + * + * <p>For an example on how to use this, refer to the postgresql.largeobject + * package + * + * @see postgresql.fastpath.Fastpath + * @see postgresql.largeobject.LargeObjectManager + * @see postgresql.largeobject.LargeObject + */ +public class FastpathArg +{ + /** + * Type of argument, true=integer, false=byte[] + */ + public boolean type; + + /** + * Integer value if type=true + */ + public int value; + + /** + * Byte value if type=false; + */ + public byte[] bytes; + + /** + * Constructs an argument that consists of an integer value + * @param value int value to set + */ + public FastpathArg(int value) + { + type=true; + this.value=value; + } + + /** + * Constructs an argument that consists of an array of bytes + * @param bytes array to store + */ + public FastpathArg(byte bytes[]) + { + type=false; + this.bytes=bytes; + } + + /** + * Constructs an argument that consists of part of a byte array + * @param buf source array + * @param off offset within array + * @param len length of data to include + */ + public FastpathArg(byte buf[],int off,int len) + { + type=false; + bytes = new byte[len]; + System.arraycopy(buf,off,bytes,0,len); + } + + /** + * Constructs an argument that consists of a String. + * @param s String to store + */ + public FastpathArg(String s) + { + this(s.getBytes()); + } + + /** + * This sends this argument down the network stream. + * + * <p>The stream sent consists of the length.int4 then the contents. + * + * <p><b>Note:</b> This is called from Fastpath, and cannot be called from + * client code. + * + * @param s output stream + * @exception IOException if something failed on the network stream + */ + protected void send(postgresql.PG_Stream s) throws IOException + { + if(type) { + // argument is an integer + s.SendIntegerReverse(4,4); // size of an integer + s.SendIntegerReverse(value,4); // integer value of argument + } else { + // argument is a byte array + s.SendIntegerReverse(bytes.length,4); // size of array + s.Send(bytes); + } + } +} + |