summaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc/org/postgresql/fastpath/FastpathArg.java
blob: 0cc8ff675738e257c24bebbb014f27c8de9e3144 (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
110
111
112
113
114
115
116
/*-------------------------------------------------------------------------
 *
 * FastpathArg.java
 *     Each fastpath call requires an array of arguments, the number and type
 *     dependent on the function being called.
 *
 * Copyright (c) 2003, PostgreSQL Global Development Group
 *
 * IDENTIFICATION
 *	  $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/fastpath/Attic/FastpathArg.java,v 1.5 2003/05/29 03:21:32 barry Exp $
 *
 *-------------------------------------------------------------------------
 */
package org.postgresql.fastpath;

import java.io.IOException;

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.core.PGStream 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);
		}
	}

	protected int sendSize()
	{
		if (type)
		{
			return 8;
		}
		else
		{
			return 4+bytes.length;
		}
	}
}