summaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc/postgresql/fastpath/FastpathArg.java
blob: 32c62d761cd66f2160c0bcc5eab19b33d27c6554 (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
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.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);
    }
  }
}