/*
* Copyright (c) 2004-2016 Tada AB and other contributors, as listed below.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the The BSD 3-Clause License
* which accompanies this distribution, and is available at
* http://opensource.org/licenses/BSD-3-Clause
*
* Contributors:
* Tada AB
* Chapman Flack
*/
package org.postgresql.pljava.internal;
import java.sql.SQLException;
/**
* The <code>LargeObject</code> correspons to the internal PostgreSQL
* <code>LargeObjectDesc</code>.
*
* @author Thomas Hallgren
*/
public class LargeObject extends JavaWrapper
{
/**
* Write mode flag to be passed to {@link #create} and {@link #open}
*/
public static final int INV_WRITE = 0x00020000;
/**
* Read mode flag to be passed to {@link #create} and {@link #open}
*/
public static final int INV_READ = 0x00040000;
/**
* Flag returned by {@link #create} and {@link #open}
*/
public static final int IFS_RDLOCK = (1 << 0);
/**
* Flag returned by {@link #create} and {@link #open}
*/
public static final int IFS_WRLOCK = (1 << 1);
/**
* Flag to be passed to {@link #seek} denoting that the
* offset parameter should be treated as an absolute address.
*/
public static final int SEEK_SET = 0;
/**
* Flag to be passed to {@link #seek} denoting that the
* offset parameter should be treated relative to the current
* address.
*/
public static final int SEEK_CUR = 1;
/**
* Flag to be passed to {@link #seek} denoting that the
* offset parameter should be treated relative to the end
* of the data.
*/
public static final int SEEK_END = 2;
LargeObject(long nativePointer)
{
super(nativePointer);
}
/**
* Creates a LargeObject handle and returns the {@link Oid} of
* that handle.
* @param flags Flags to use for creation.
* @return A Oid that can be used in a call to {@link #open(Oid, int)}
* or {@link #drop(Oid)}.
* @throws SQLException
*/
public static Oid create(int flags)
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _create(flags);
}
}
public static LargeObject open(Oid lobjId, int flags)
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _open(lobjId, flags);
}
}
public void close()
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
_close(this.getNativePointer());
}
}
public static int drop(Oid lobjId)
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _drop(lobjId);
}
}
public Oid getId()
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _getId(this.getNativePointer());
}
}
public long length()
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _length(this.getNativePointer());
}
}
public long seek(long offset, int whence)
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _seek(this.getNativePointer(), offset, whence);
}
}
public long tell()
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _tell(this.getNativePointer());
}
}
public void truncate(long offset)
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
_truncate(this.getNativePointer(), offset);
}
}
public int read(byte[] buf)
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _read(this.getNativePointer(), buf);
}
}
public int write(byte[] buf)
throws SQLException
{
synchronized(Backend.THREADLOCK)
{
return _write(this.getNativePointer(), buf);
}
}
private static native Oid _create(int flags)
throws SQLException;
private static native int _drop(Oid lobjId)
throws SQLException;
private static native LargeObject _open(Oid lobjId, int flags)
throws SQLException;
private static native void _close(long pointer)
throws SQLException;
private static native Oid _getId(long pointer)
throws SQLException;
private static native long _length(long pointer)
throws SQLException;
private static native long _seek(long pointer, long offset, int whence)
throws SQLException;
private static native long _tell(long pointer)
throws SQLException;
private static native void _truncate(long pointer, long offset)
throws SQLException;
private static native int _read(long pointer, byte[] buf)
throws SQLException;
private static native int _write(long pointer, byte[] buf)
throws SQLException;
}