summaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc/org/postgresql/fastpath/FastpathArg.java
blob: 7234df10d80a97341e726b88820a01099b462a1b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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.
 *
 * <p>This class implements methods needed to provide this capability.
 *
 * <p>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.
	 *
	 * <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(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);
		}
	}
}