You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2010/10/10 15:16:11 UTC
svn commit: r1006292 - in
/incubator/lcf/trunk/modules/framework/core/src/main/java/org/apache/manifoldcf/core/database:
DBInterfaceHSQLDB.java Database.java
Author: kwright
Date: Sun Oct 10 13:16:11 2010
New Revision: 1006292
URL: http://svn.apache.org/viewvc?rev=1006292&view=rev
Log:
Fix what's needed for hsqldb to at least start to run.
Modified:
incubator/lcf/trunk/modules/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java
incubator/lcf/trunk/modules/framework/core/src/main/java/org/apache/manifoldcf/core/database/Database.java
Modified: incubator/lcf/trunk/modules/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java?rev=1006292&r1=1006291&r2=1006292&view=diff
==============================================================================
--- incubator/lcf/trunk/modules/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java (original)
+++ incubator/lcf/trunk/modules/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java Sun Oct 10 13:16:11 2010
@@ -1007,6 +1007,10 @@ public class DBInterfaceHSQLDB extends D
beginTransaction(TRANSACTION_ENCLOSING);
}
+ protected int depthCount = 0;
+ protected boolean inTransaction = false;
+ protected int desiredTransactionType = Connection.TRANSACTION_READ_COMMITTED;
+
/** Begin a database transaction. This method call MUST be paired with an endTransaction() call,
* or database handles will be lost. If the transaction should be rolled back, then signalRollback() should
* be called before the transaction is ended.
@@ -1033,26 +1037,12 @@ public class DBInterfaceHSQLDB extends D
switch (transactionType)
{
case TRANSACTION_READCOMMITTED:
+ desiredTransactionType = Connection.TRANSACTION_READ_COMMITTED;
super.beginTransaction(TRANSACTION_READCOMMITTED);
break;
case TRANSACTION_SERIALIZED:
+ desiredTransactionType = Connection.TRANSACTION_SERIALIZABLE;
super.beginTransaction(TRANSACTION_SERIALIZED);
- try
- {
- performModification("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE",null,null);
- }
- catch (Error e)
- {
- super.signalRollback();
- super.endTransaction();
- throw e;
- }
- catch (ManifoldCFException e)
- {
- super.signalRollback();
- super.endTransaction();
- throw e;
- }
break;
default:
throw new ManifoldCFException("Bad transaction type: "+Integer.toString(transactionType));
@@ -1082,25 +1072,81 @@ public class DBInterfaceHSQLDB extends D
super.endTransaction();
}
+
/** Abstract method to start a transaction */
protected void startATransaction()
throws ManifoldCFException
{
- executeViaThread(connection,"START TRANSACTION",null,false,0,null,null);
+ if (!inTransaction)
+ {
+ try
+ {
+ connection.setAutoCommit(false);
+ connection.setTransactionIsolation(desiredTransactionType);
+ }
+ catch (java.sql.SQLException e)
+ {
+ throw new ManifoldCFException(e.getMessage(),e,ManifoldCFException.DATABASE_CONNECTION_ERROR);
+ }
+ inTransaction = true;
+ }
+ depthCount++;
}
/** Abstract method to commit a transaction */
protected void commitCurrentTransaction()
throws ManifoldCFException
{
- executeViaThread(connection,"COMMIT",null,false,0,null,null);
+ if (inTransaction)
+ {
+ if (depthCount == 1)
+ {
+ try
+ {
+ if (connection != null)
+ {
+ connection.commit();
+ connection.setAutoCommit(true);
+ }
+ }
+ catch (java.sql.SQLException e)
+ {
+ throw new ManifoldCFException(e.getMessage(),e,ManifoldCFException.DATABASE_CONNECTION_ERROR);
+ }
+ inTransaction = false;
+ }
+ depthCount--;
+ }
+ else
+ throw new ManifoldCFException("Transaction nesting error!");
}
/** Abstract method to roll back a transaction */
protected void rollbackCurrentTransaction()
throws ManifoldCFException
{
- executeViaThread(connection,"ROLLBACK",null,false,0,null,null);
+ if (inTransaction)
+ {
+ if (depthCount == 1)
+ {
+ try
+ {
+ if (connection != null)
+ {
+ connection.rollback();
+ connection.setAutoCommit(true);
+ }
+ }
+ catch (java.sql.SQLException e)
+ {
+ throw new ManifoldCFException(e.getMessage(),e,ManifoldCFException.DATABASE_CONNECTION_ERROR);
+ }
+ inTransaction = false;
+ }
+ depthCount--;
+ }
+ else
+ throw new ManifoldCFException("Transaction nesting error!");
}
/** Abstract method for mapping a column name from resultset */
Modified: incubator/lcf/trunk/modules/framework/core/src/main/java/org/apache/manifoldcf/core/database/Database.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/core/src/main/java/org/apache/manifoldcf/core/database/Database.java?rev=1006292&r1=1006291&r2=1006292&view=diff
==============================================================================
--- incubator/lcf/trunk/modules/framework/core/src/main/java/org/apache/manifoldcf/core/database/Database.java (original)
+++ incubator/lcf/trunk/modules/framework/core/src/main/java/org/apache/manifoldcf/core/database/Database.java Sun Oct 10 13:16:11 2010
@@ -604,6 +604,7 @@ public class Database
{
int colcount = 0;
String[] resultCols = null;
+ String[] resultLabels = null;
// Optionally we're going to suck the data
// out of the db and return it in a
@@ -616,9 +617,11 @@ public class Database
//LogBean.db.debug(colcount + " columns returned.");
resultCols = new String[colcount];
+ resultLabels = new String[colcount];
for (int i = 0; i < colcount; i++)
{
- resultCols[i] = mapColumnName(rsmd.getColumnName(i+1));
+ resultCols[i] = rsmd.getColumnName(i+1);
+ resultLabels[i] = mapColumnName(rsmd.getColumnLabel(i+1));
}
}
@@ -633,7 +636,7 @@ public class Database
while (rs.next() && (maxResults == -1 || maxResults > 0) && (returnLimit == null || returnLimit.checkContinue()))
{
- Object value = null;
+ Object value;
RRow m = new RRow();
// We have 'colcount' cols to look thru
@@ -642,11 +645,13 @@ public class Database
String key = resultCols[i];
// System.out.println("Key = "+key);
int colnum = findColumn(rs,key);
+ value = null;
if (colnum > -1)
{
value = getObject(rs,rsmd,colnum,(spec == null)?ResultSpecification.FORM_DEFAULT:spec.getForm(key));
}
- m.put(key, value);
+ //System.out.println(" Key = '"+resultLabels[i]+"', value = "+((value==null)?"NULL":value.toString()));
+ m.put(resultLabels[i], value);
}
// See if we should include this row
@@ -909,6 +914,7 @@ public class Database
switch (rsmd.getColumnType(col))
{
case java.sql.Types.CHAR :
+ case java.sql.Types.VARCHAR :
if ((resultString = rs.getString(col)) != null)
{
if (rsmd.getColumnDisplaySize(col) < resultString.length())
@@ -925,6 +931,7 @@ public class Database
result = clob.getSubString(1, (int) clob.length());
}
break;
+
case java.sql.Types.BIGINT :
long l = rs.getLong(col);
if (!rs.wasNull())
@@ -937,6 +944,12 @@ public class Database
result = new Integer(i);
break;
+ case java.sql.Types.SMALLINT:
+ short s = rs.getShort(col);
+ if (!rs.wasNull())
+ result = new Short(s);
+ break;
+
case java.sql.Types.REAL :
case java.sql.Types.FLOAT :
float f = rs.getFloat(col);
@@ -964,6 +977,12 @@ public class Database
}
break;
+ case java.sql.Types.BOOLEAN :
+ boolean b = rs.getBoolean(col);
+ if (!rs.wasNull())
+ result = new Boolean(b);
+ break;
+
case java.sql.Types.BLOB:
throw new ManifoldCFException("BLOB is not a string, column = " + col,ManifoldCFException.GENERAL_ERROR);