/*
* Copyright (c) 2004, 2005, 2006 TADA AB - Taby Sweden
* Distributed under the terms shown in the file COPYRIGHT
* found in the root folder of this project or at
* http://eng.tada.se/osprojects/COPYRIGHT.html
*/
package org.postgresql.pljava.internal;
/**
* The <code>SPI</code> class provides access to some global
* variables used by SPI.
*
* @author Thomas Hallgren
*/
public class SPI
{
public static final int ERROR_CONNECT = -1;
public static final int ERROR_COPY = -2;
public static final int ERROR_OPUNKNOWN = -3;
public static final int ERROR_UNCONNECTED = -4;
public static final int ERROR_CURSOR = -5;
public static final int ERROR_ARGUMENT = -6;
public static final int ERROR_PARAM = -7;
public static final int ERROR_TRANSACTION = -8;
public static final int ERROR_NOATTRIBUTE = -9;
public static final int ERROR_NOOUTFUNC = -10;
public static final int ERROR_TYPUNKNOWN = -11;
public static final int OK_CONNECT = 1;
public static final int OK_FINISH = 2;
public static final int OK_FETCH = 3;
public static final int OK_UTILITY = 4;
public static final int OK_SELECT = 5;
public static final int OK_SELINTO = 6;
public static final int OK_INSERT = 7;
public static final int OK_DELETE = 8;
public static final int OK_UPDATE = 9;
public static final int OK_CURSOR = 10;
/**
* Execute a command using the internal <code>SPI_exec</code> function.
* @param command The command to execute.
* @param rowCount The maximum number of tuples to create. A value
* of <code>rowCount</code> of zero is interpreted as no limit, i.e.,
* run to completion.
* @return One of the declared status codes.
*/
public static int exec(String command, int rowCount)
{
synchronized(Backend.THREADLOCK)
{
return _exec(System.identityHashCode(Thread.currentThread()), command, rowCount);
}
}
public static void freeTupTable()
{
synchronized(Backend.THREADLOCK)
{
_freeTupTable();
}
}
/**
* Returns the value of the global variable <code>SPI_processed</code>.
*/
public static int getProcessed()
{
synchronized(Backend.THREADLOCK)
{
return _getProcessed();
}
}
/**
* Returns the value of the global variable <code>SPI_result</code>.
*/
public static int getResult()
{
synchronized(Backend.THREADLOCK)
{
return _getResult();
}
}
/**
* Returns the value of the global variable <code>SPI_tuptable</code>.
*/
public static TupleTable getTupTable(TupleDesc known)
{
synchronized(Backend.THREADLOCK)
{
return _getTupTable(known);
}
}
/**
* Returns a textual representatio of a result code
*/
public static String getResultText(int resultCode)
{
String s;
switch(resultCode)
{
case ERROR_CONNECT:
s = "ERROR_CONNECT";
break;
case ERROR_COPY:
s = "ERROR_COPY";
break;
case ERROR_OPUNKNOWN:
s = "ERROR_OPUNKNOWN";
break;
case ERROR_UNCONNECTED:
s = "ERROR_UNCONNECTED";
break;
case ERROR_CURSOR:
s = "ERROR_CURSOR";
break;
case ERROR_ARGUMENT:
s = "ERROR_ARGUMENT";
break;
case ERROR_PARAM:
s = "ERROR_PARAM";
break;
case ERROR_TRANSACTION:
s = "ERROR_TRANSACTION";
break;
case ERROR_NOATTRIBUTE:
s = "ERROR_NOATTRIBUTE";
break;
case ERROR_NOOUTFUNC:
s = "ERROR_NOOUTFUNC";
break;
case ERROR_TYPUNKNOWN:
s = "ERROR_TYPUNKNOWN";
break;
case OK_CONNECT:
s = "OK_CONNECT";
break;
case OK_FINISH:
s = "OK_FINISH";
break;
case OK_FETCH:
s = "OK_FETCH";
break;
case OK_UTILITY:
s = "OK_UTILITY";
break;
case OK_SELECT:
s = "OK_SELECT";
break;
case OK_SELINTO:
s = "OK_SELINTO";
break;
case OK_INSERT:
s = "OK_INSERT";
break;
case OK_DELETE:
s = "OK_DELETE";
break;
case OK_UPDATE:
s = "OK_UPDATE";
break;
case OK_CURSOR:
s = "OK_CURSOR";
break;
default:
s = "Unkown result code: " + resultCode;
}
return s;
}
private native static int _exec(long threadId, String command, int rowCount);
private native static int _getProcessed();
private native static int _getResult();
private native static void _freeTupTable();
private native static TupleTable _getTupTable(TupleDesc known);
}