Fixed postgresql bug for virtual table:
* postgresql need trx to use cursor based resultset * must set fetchsize for postgresql otherwise it will load the whole resultset into memory Link to SF Tracker: http://sourceforge.net/support/tracker.php?aid=2913975
This commit is contained in:
parent
da5292bbea
commit
2a74599b51
|
@ -48,6 +48,7 @@ import org.compiere.util.Env;
|
||||||
import org.compiere.util.Ini;
|
import org.compiere.util.Ini;
|
||||||
import org.compiere.util.MSort;
|
import org.compiere.util.MSort;
|
||||||
import org.compiere.util.SecureEngine;
|
import org.compiere.util.SecureEngine;
|
||||||
|
import org.compiere.util.Trx;
|
||||||
import org.compiere.util.ValueNamePair;
|
import org.compiere.util.ValueNamePair;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3201,6 +3202,7 @@ private Object[] getDataAtRow(int row)
|
||||||
|
|
||||||
private PreparedStatement m_pstmt = null;
|
private PreparedStatement m_pstmt = null;
|
||||||
private ResultSet m_rs = null;
|
private ResultSet m_rs = null;
|
||||||
|
private Trx trx = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open ResultSet
|
* Open ResultSet
|
||||||
|
@ -3240,17 +3242,22 @@ private Object[] getDataAtRow(int row)
|
||||||
if (rows == 0)
|
if (rows == 0)
|
||||||
info.append(" - ").append(m_SQL_Count);
|
info.append(" - ").append(m_SQL_Count);
|
||||||
|
|
||||||
|
//postgresql need trx to use cursor based resultset
|
||||||
|
String trxName = m_virtual ? Trx.createTrxName("Loader") : null;
|
||||||
|
trx = trxName != null ? Trx.get(trxName, true) : null;
|
||||||
// open Statement (closed by Loader.close)
|
// open Statement (closed by Loader.close)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_pstmt = DB.prepareStatement(m_SQL, null);
|
m_pstmt = DB.prepareStatement(m_SQL, trxName);
|
||||||
if (maxRows > 0 && rows > maxRows)
|
if (maxRows > 0 && rows > maxRows)
|
||||||
{
|
{
|
||||||
m_pstmt.setMaxRows(maxRows);
|
m_pstmt.setMaxRows(maxRows);
|
||||||
info.append(" - MaxRows=").append(maxRows);
|
info.append(" - MaxRows=").append(maxRows);
|
||||||
rows = maxRows;
|
rows = maxRows;
|
||||||
}
|
}
|
||||||
// m_pstmt.setFetchSize(20);
|
//ensure not all row is fectch into memory for virtual table
|
||||||
|
if (m_virtual)
|
||||||
|
m_pstmt.setFetchSize(100);
|
||||||
setParameter (m_pstmt, false);
|
setParameter (m_pstmt, false);
|
||||||
m_rs = m_pstmt.executeQuery();
|
m_rs = m_pstmt.executeQuery();
|
||||||
}
|
}
|
||||||
|
@ -3272,6 +3279,8 @@ private Object[] getDataAtRow(int row)
|
||||||
DB.close(m_rs, m_pstmt);
|
DB.close(m_rs, m_pstmt);
|
||||||
m_rs = null;
|
m_rs = null;
|
||||||
m_pstmt = null;
|
m_pstmt = null;
|
||||||
|
if (trx != null)
|
||||||
|
trx.close();
|
||||||
} // close
|
} // close
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3335,7 +3344,10 @@ private Object[] getDataAtRow(int row)
|
||||||
{
|
{
|
||||||
log.log(Level.SEVERE, "run", e);
|
log.log(Level.SEVERE, "run", e);
|
||||||
}
|
}
|
||||||
close();
|
finally
|
||||||
|
{
|
||||||
|
close();
|
||||||
|
}
|
||||||
fireDataStatusIEvent("", "");
|
fireDataStatusIEvent("", "");
|
||||||
} // run
|
} // run
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue