package org.postgresql.test.jdbc2;
                                                                                                                                                                                     
import org.postgresql.test.TestUtil;
import junit.framework.TestCase;
import java.io.*;
import java.sql.*;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Properties;
import java.sql.*;

/**
 * User: alexei
 * Date: 17-Dec-2003
 * Time: 11:01:44
 * @version $Id: OID74Test.java,v 1.3 2003/12/18 04:08:30 davec Exp $
 */
public class OID74Test  extends TestCase
{

	public OID74Test( String name )
	{
		super(name);
	}
	public void setUp() throws Exception
	{
	}
	public void tearDown() throws Exception
	{
	}
	public void testBinaryStream() throws SQLException
	{
		//set up conection here
		Properties props = new Properties();
		props.setProperty("compatible","7.1");
		Connection c = TestUtil.openDB(props);
		c.setAutoCommit(false);

		TestUtil.createTable(c,"temp","col oid");
    		
      		Statement st = null; 
      		
		PreparedStatement pstmt = null;
    		try 
		{
	      	
			pstmt = c.prepareStatement("INSERT INTO temp VALUES (?)");
		      	pstmt.setBinaryStream(1, new ByteArrayInputStream(new byte[]{1, 2, 3, 4, 5}), 5);
			assertTrue( (pstmt.executeUpdate() == 1) );
		      	pstmt.close();
    		
		      	pstmt = c.prepareStatement("SELECT col FROM temp LIMIT 1");
		      	ResultSet rs = pstmt.executeQuery();

		      	assertTrue("No results from query", rs.next() );

			InputStream in = rs.getBinaryStream(1);
		      	int data;
			int i = 1;
		      	while ((data = in.read()) != -1)
				assertEquals(data,i++);
		      	rs.close();
		      	pstmt.close();
			c.createStatement().executeUpdate("DELETE FROM temp");
			c.commit();
		}
		catch ( IOException ioex )
		{
			fail( ioex.getMessage() );
		}
		catch (SQLException ex)
		{
			fail( ex.getMessage() );
		}

		TestUtil.dropTable(c,"temp");
		TestUtil.closeDB(c);
  	}	
}
