You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by fr...@apache.org on 2012/07/24 17:40:41 UTC

svn commit: r1365137 - in /empire-db/trunk/empire-db/src: main/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQL.java test/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQLTest.java

Author: francisdb
Date: Tue Jul 24 15:40:41 2012
New Revision: 1365137

URL: http://svn.apache.org/viewvc?rev=1365137&view=rev
Log:
EMPIREDB-147 fix BLOB reading in postgresql

Modified:
    empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQL.java
    empire-db/trunk/empire-db/src/test/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQLTest.java

Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQL.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQL.java?rev=1365137&r1=1365136&r2=1365137&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQL.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQL.java Tue Jul 24 15:40:41 2012
@@ -452,18 +452,19 @@ public class DBDatabaseDriverPostgreSQL 
     }
     
     /**
-     * Postgre needs special handling for CLOBs
+     * Postgre needs special handling for CLOBs and BLOB's
      */
     @Override
     public Object getResultValue(ResultSet rset, int columnIndex, DataType dataType)
         throws SQLException
     {
-        if (dataType == DataType.CLOB)
-        {
-            return rset.getString(columnIndex);
-        }
-        // default handling
-        return super.getResultValue(rset, columnIndex, dataType);
+    	switch(dataType)
+    	{
+    		case BLOB: return rset.getBytes(columnIndex);
+    		case CLOB:	return rset.getString(columnIndex);
+    		default:   return super.getResultValue(rset, columnIndex, dataType);
+    	}
     }
+
     
 }

Modified: empire-db/trunk/empire-db/src/test/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQLTest.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/test/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQLTest.java?rev=1365137&r1=1365136&r2=1365137&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/test/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQLTest.java (original)
+++ empire-db/trunk/empire-db/src/test/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQLTest.java Tue Jul 24 15:40:41 2012
@@ -19,18 +19,23 @@
 package org.apache.empire.db.postgresql;
 
 import java.sql.Connection;
+import java.sql.SQLException;
 
 import org.apache.empire.DBResource;
 import org.apache.empire.DBResource.DB;
 import org.apache.empire.db.CompanyDB;
 import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBDatabaseDriver;
+import org.apache.empire.db.DBReader;
+import org.apache.empire.db.DBRecord;
 import org.apache.empire.db.DBSQLScript;
 import org.apache.empire.db.exceptions.QueryFailedException;
+import org.junit.Assert;
 import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 
+// Ignored as the db is not available everywhere
 @Ignore
 public class DBDatabaseDriverPostgreSQLTest 
 {
@@ -39,14 +44,14 @@ public class DBDatabaseDriverPostgreSQLT
 	public DBResource dbResource = new DBResource(DB.POSTGRESQL);
 
 	@Test
-	public void testBlob() 
+	public void testBlobDDL() throws SQLException 
 	{
 		Connection conn = dbResource.getConnection();
 
 		DBDatabaseDriver driver = dbResource.newDriver();
 		CompanyDB db = new CompanyDB();
 
-		// Encoding issue occur when prepared statement is disabled
+		// Encoding issue occurs when prepared statement is disabled
 		//db.setPreparedStatementsEnabled(true);
 
 		db.open(driver, dbResource.getConnection());
@@ -57,6 +62,38 @@ public class DBDatabaseDriverPostgreSQLT
 			System.out.println(script.toString());
 			script.run(db.getDriver(), dbResource.getConnection(), false);
 		}
+		
+		conn.close();
+	}
+	
+	@Test
+	public void testBlobWritingReading() throws SQLException 
+	{
+		Connection conn = dbResource.getConnection();
+
+		DBDatabaseDriver driver = dbResource.newDriver();
+		CompanyDB db = new CompanyDB();
+
+		// Encoding issue occurs when prepared statement is disabled
+		//db.setPreparedStatementsEnabled(true);
+
+		db.open(driver, dbResource.getConnection());
+		
+		DBRecord emp = new DBRecord();
+        emp.create(db.DATA);
+        emp.setValue(db.DATA.DATA, new byte[]{1,2,3});
+        emp.update(conn);
+		
+		// read a value
+		DBCommand cmd = db.createCommand();
+		cmd.select(db.DATA.DATA);
+		DBReader reader = new DBReader();
+		reader.open(cmd, conn);
+		while(reader.moveNext()){
+			byte[] value = (byte[]) reader.getValue(db.DATA.DATA);
+			Assert.assertArrayEquals(new byte[]{1,2,3}, value);
+		}
+		conn.close();
 	}
 	
 	/**