/*
* 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;
import java.sql.SQLException;
/**
* The <code>Relation</code> correspons to the internal PostgreSQL
* <code>Relation</code>.
*
* @author Thomas Hallgren
*/
public class Relation extends JavaWrapper
{
private TupleDesc m_tupleDesc;
Relation(long pointer)
{
super(pointer);
}
/**
* Returns the name of this <code>Relation</code>.
* @throws SQLException
*/
public String getName()
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _getName(this.getNativePointer());
}
}
/**
* Returns the schema name of this <code>Relation</code>.
* @throws SQLException
*/
public String getSchema()
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _getSchema(this.getNativePointer());
}
}
/**
* Returns a descriptor that describes tuples in this <code>Relation</code>.
* @throws SQLException
*/
public TupleDesc getTupleDesc()
throws SQLException
{
if(m_tupleDesc == null)
{
synchronized(Backend.THREADLOCK)
{
m_tupleDesc = _getTupleDesc(this.getNativePointer());
}
}
return m_tupleDesc;
}
/**
* Creates a new <code>Tuple</code> by substituting new values for selected columns
* copying the columns of the original <code>Tuple</code> at other positions. The
* original <code>Tuple</code> is not modified.<br>
* @param original The tuple that serves as the source.
* @param fieldNumbers An array of one based indexes denoting the positions that
* are to receive modified values.
* @param values The array of new values. Each value in this array corresponds to
* an index in the <code>fieldNumbers</code> array.
* @return A copy of the original with modifications.
* @throws SQLException if indexes are out of range or the values illegal.
*/
public Tuple modifyTuple(Tuple original, int[] fieldNumbers, Object[] values)
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _modifyTuple(this.getNativePointer(), original.getNativePointer(), fieldNumbers, values);
}
}
protected native void _free(long pointer);
private static native String _getName(long pointer)
throws SQLException;
private static native String _getSchema(long pointer)
throws SQLException;
private static native TupleDesc _getTupleDesc(long pointer)
throws SQLException;
private static native Tuple _modifyTuple(long pointer, long original, int[] fieldNumbers, Object[] values)
throws SQLException;
}