package org.postgresql.fastpath; import java.io.*; import java.lang.*; import java.net.*; import java.util.*; import java.sql.*; import org.postgresql.util.*; /* * Each fastpath call requires an array of arguments, the number and type * dependent on the function being called. * *

This class implements methods needed to provide this capability. * *

For an example on how to use this, refer to the org.postgresql.largeobject * package * * @see org.postgresql.fastpath.Fastpath * @see org.postgresql.largeobject.LargeObjectManager * @see org.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. * *

The stream sent consists of the length.int4 then the contents. * *

Note: 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(org.postgresql.PG_Stream s) throws IOException { if (type) { // argument is an integer s.SendInteger(4, 4); // size of an integer s.SendInteger(value, 4); // integer value of argument } else { // argument is a byte array s.SendInteger(bytes.length, 4); // size of array s.Send(bytes); } } }