DB:
* add getSQLValueEx method (same as getSQLValue but throws DBException) * add getSQLValueBDEx method (same as getSQLValueBD but throws DBException) * method setParameter(PreparedStatement pstmt, int index, Object param) should throw DBException if param is not supported * added DBTest JUnit Test Case
This commit is contained in:
parent
848e81fbf2
commit
533d0763b9
|
@ -825,6 +825,8 @@ public final class DB
|
||||||
pstmt.setTimestamp(index, (Timestamp)param);
|
pstmt.setTimestamp(index, (Timestamp)param);
|
||||||
else if (param instanceof Boolean)
|
else if (param instanceof Boolean)
|
||||||
pstmt.setString(index, ((Boolean)param).booleanValue() ? "Y" : "N");
|
pstmt.setString(index, ((Boolean)param).booleanValue() ? "Y" : "N");
|
||||||
|
else
|
||||||
|
throw new DBException("Unknown parameter type "+index+" - "+param);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1130,9 +1132,10 @@ public final class DB
|
||||||
* @param trxName trx
|
* @param trxName trx
|
||||||
* @param sql sql
|
* @param sql sql
|
||||||
* @param params array of parameters
|
* @param params array of parameters
|
||||||
* @return first value or -1
|
* @return first value or -1 if not found
|
||||||
|
* @throws DBException if there is any SQLException
|
||||||
*/
|
*/
|
||||||
public static int getSQLValue (String trxName, String sql, Object... params)
|
public static int getSQLValueEx (String trxName, String sql, Object... params) throws DBException
|
||||||
{
|
{
|
||||||
int retValue = -1;
|
int retValue = -1;
|
||||||
PreparedStatement pstmt = null;
|
PreparedStatement pstmt = null;
|
||||||
|
@ -1147,9 +1150,9 @@ public final class DB
|
||||||
else
|
else
|
||||||
log.info("No Value " + sql);
|
log.info("No Value " + sql);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (SQLException e)
|
||||||
{
|
{
|
||||||
log.log(Level.SEVERE, sql, getSQLException(e));
|
throw new DBException(e, sql);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -1159,6 +1162,27 @@ public final class DB
|
||||||
return retValue;
|
return retValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get int Value from sql
|
||||||
|
* @param trxName trx
|
||||||
|
* @param sql sql
|
||||||
|
* @param params array of parameters
|
||||||
|
* @return first value or -1 if not found or error
|
||||||
|
*/
|
||||||
|
public static int getSQLValue (String trxName, String sql, Object... params)
|
||||||
|
{
|
||||||
|
int retValue = -1;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
retValue = getSQLValueEx(trxName, sql, params);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, sql, getSQLException(e));
|
||||||
|
}
|
||||||
|
return retValue;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get int Value from sql
|
* Get int Value from sql
|
||||||
* @param trxName trx
|
* @param trxName trx
|
||||||
|
@ -1226,9 +1250,10 @@ public final class DB
|
||||||
* @param trxName trx
|
* @param trxName trx
|
||||||
* @param sql sql
|
* @param sql sql
|
||||||
* @param params array of parameters
|
* @param params array of parameters
|
||||||
* @return first value or null
|
* @return first value or null if not found
|
||||||
|
* @throws DBException if there is any SQLException
|
||||||
*/
|
*/
|
||||||
public static BigDecimal getSQLValueBD (String trxName, String sql, Object... params)
|
public static BigDecimal getSQLValueBDEx (String trxName, String sql, Object... params) throws DBException
|
||||||
{
|
{
|
||||||
BigDecimal retValue = null;
|
BigDecimal retValue = null;
|
||||||
PreparedStatement pstmt = null;
|
PreparedStatement pstmt = null;
|
||||||
|
@ -1243,9 +1268,10 @@ public final class DB
|
||||||
else
|
else
|
||||||
log.info("No Value " + sql);
|
log.info("No Value " + sql);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (SQLException e)
|
||||||
{
|
{
|
||||||
log.log(Level.SEVERE, sql, getSQLException(e));
|
//log.log(Level.SEVERE, sql, getSQLException(e));
|
||||||
|
throw new DBException(e, sql);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -1255,6 +1281,27 @@ public final class DB
|
||||||
return retValue;
|
return retValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get BigDecimal Value from sql
|
||||||
|
* @param trxName trx
|
||||||
|
* @param sql sql
|
||||||
|
* @param params array of parameters
|
||||||
|
* @return first value or null
|
||||||
|
*/
|
||||||
|
public static BigDecimal getSQLValueBD (String trxName, String sql, Object... params)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return getSQLValueBDEx(trxName, sql, params);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, sql, getSQLException(e));
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get BigDecimal Value from sql
|
* Get BigDecimal Value from sql
|
||||||
* @param trxName trx
|
* @param trxName trx
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package test.functional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.DBException;
|
||||||
|
import org.compiere.util.DB;
|
||||||
|
|
||||||
|
import test.AdempiereTestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test {@link org.compiere.util.DB} class
|
||||||
|
* @author Teo Sarca, www.arhipac.ro
|
||||||
|
*/
|
||||||
|
public class DBTest extends AdempiereTestCase
|
||||||
|
{
|
||||||
|
public void test_getSQLValueEx() throws Exception
|
||||||
|
{
|
||||||
|
int result = DB.getSQLValueEx(null, "SELECT 10 FROM DUAL");
|
||||||
|
assertEquals(10, result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValue(null, "SELECT 10 FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertEquals("No value should be returned", -1, result);
|
||||||
|
//
|
||||||
|
DBException ex = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DB.getSQLValueEx(null, "SELECT 10 FROM INEXISTENT_TABLE");
|
||||||
|
}
|
||||||
|
catch (DBException e)
|
||||||
|
{
|
||||||
|
ex = e;
|
||||||
|
}
|
||||||
|
assertNotNull("No DBException Was Throwed", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void test_getSQLValue() throws Exception
|
||||||
|
{
|
||||||
|
int result = DB.getSQLValue(null, "SELECT 10 FROM DUAL");
|
||||||
|
assertEquals(10, result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValue(null, "SELECT 10 FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertEquals("No value should be returned", -1, result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValue(null, "SELECT 10 FROM INEXISTENT_TABLE");
|
||||||
|
assertEquals("Error should be signaled", -1, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void test_getSQLValueBDEx() throws Exception
|
||||||
|
{
|
||||||
|
BigDecimal result = DB.getSQLValueBDEx(null, "SELECT 10 FROM DUAL");
|
||||||
|
assertEquals(BigDecimal.TEN, result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueBD(null, "SELECT 10 FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertNull("No value should be returned", result);
|
||||||
|
//
|
||||||
|
DBException ex = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DB.getSQLValueBDEx(null, "SELECT 10 FROM INEXISTENT_TABLE");
|
||||||
|
}
|
||||||
|
catch (DBException e)
|
||||||
|
{
|
||||||
|
ex = e;
|
||||||
|
}
|
||||||
|
assertNotNull("No DBException Was Throwed", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void test_getSQLValueBD() throws Exception
|
||||||
|
{
|
||||||
|
BigDecimal result = DB.getSQLValueBD(null, "SELECT 10 FROM DUAL");
|
||||||
|
assertEquals(BigDecimal.TEN, result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueBD(null, "SELECT 10 FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertNull("No value should be returned", result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueBD(null, "SELECT 10 FROM INEXISTENT_TABLE");
|
||||||
|
assertNull("Error should be signaled", result);
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,6 +18,7 @@ public class FunctionalTestSuite {
|
||||||
suite.addTestSuite(MStorageTest.class);
|
suite.addTestSuite(MStorageTest.class);
|
||||||
suite.addTestSuite(MSysConfigTest.class);
|
suite.addTestSuite(MSysConfigTest.class);
|
||||||
suite.addTestSuite(QueryTest.class);
|
suite.addTestSuite(QueryTest.class);
|
||||||
|
suite.addTestSuite(DBTest.class);
|
||||||
suite.addTestSuite(TrxTest.class);
|
suite.addTestSuite(TrxTest.class);
|
||||||
suite.addTestSuite(MRefListTest.class);
|
suite.addTestSuite(MRefListTest.class);
|
||||||
suite.addTestSuite(MUOMTest.class);
|
suite.addTestSuite(MUOMTest.class);
|
||||||
|
|
|
@ -10,6 +10,8 @@ import org.adempiere.exceptions.DBException;
|
||||||
import org.compiere.model.MTable;
|
import org.compiere.model.MTable;
|
||||||
import org.compiere.model.POResultSet;
|
import org.compiere.model.POResultSet;
|
||||||
import org.compiere.model.Query;
|
import org.compiere.model.Query;
|
||||||
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
|
||||||
import test.AdempiereTestCase;
|
import test.AdempiereTestCase;
|
||||||
|
|
||||||
|
@ -17,20 +19,25 @@ import test.AdempiereTestCase;
|
||||||
* Test {@link org.compiere.model.Query} class
|
* Test {@link org.compiere.model.Query} class
|
||||||
* @author Teo Sarca, SC ARHIPAC SERVICE SRL
|
* @author Teo Sarca, SC ARHIPAC SERVICE SRL
|
||||||
*/
|
*/
|
||||||
public class QueryTest extends AdempiereTestCase {
|
public class QueryTest extends AdempiereTestCase
|
||||||
|
{
|
||||||
public void testQuery_NoTable() throws Exception {
|
public void testQuery_NoTable() throws Exception
|
||||||
|
{
|
||||||
boolean exThrowed = false;
|
boolean exThrowed = false;
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
new Query(getCtx(), "NO_TABLE_DEFINED", null, getTrxName());
|
new Query(getCtx(), "NO_TABLE_DEFINED", null, getTrxName());
|
||||||
}
|
}
|
||||||
catch (RuntimeException e) {
|
catch (RuntimeException e)
|
||||||
|
{
|
||||||
exThrowed = true;
|
exThrowed = true;
|
||||||
|
//e.printStackTrace();
|
||||||
}
|
}
|
||||||
assertTrue("No Error Was Throwed", exThrowed);
|
assertTrue("No Error Was Throwed", exThrowed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testList() throws Exception {
|
public void testList() throws Exception
|
||||||
|
{
|
||||||
List<MTable> list = new Query(getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
List<MTable> list = new Query(getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
.setOrderBy("TableName")
|
.setOrderBy("TableName")
|
||||||
|
@ -40,50 +47,61 @@ public class QueryTest extends AdempiereTestCase {
|
||||||
assertEquals("Invalid object 2", list.get(1).getTableName(), "M_InOut");
|
assertEquals("Invalid object 2", list.get(1).getTableName(), "M_InOut");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testScroll() throws Exception {
|
public void testScroll() throws Exception
|
||||||
POResultSet<MTable> rs = null;
|
{
|
||||||
try {
|
POResultSet<MTable> rs = new Query(getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
rs = new Query(getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
.setOrderBy("TableName")
|
||||||
.setOrderBy("TableName")
|
.scroll();
|
||||||
.scroll();
|
try
|
||||||
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(MTable t = rs.next(); t != null; t = rs.next()) {
|
while (rs.hasNext())
|
||||||
if (i == 0) {
|
{
|
||||||
|
MTable t = rs.next();
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
assertEquals("Invalid object "+i, "C_Invoice", t.getTableName());
|
assertEquals("Invalid object "+i, "C_Invoice", t.getTableName());
|
||||||
}
|
}
|
||||||
else if (i == 1) {
|
else if (i == 1)
|
||||||
|
{
|
||||||
assertEquals("Invalid object "+i, "M_InOut", t.getTableName());
|
assertEquals("Invalid object "+i, "M_InOut", t.getTableName());
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
assertFalse("More objects retrived than expected", true);
|
assertFalse("More objects retrived than expected", true);
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally {
|
finally
|
||||||
if (rs != null)
|
{
|
||||||
rs.close();
|
DB.close(rs);
|
||||||
rs = null;
|
rs = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testIterate() throws Exception {
|
public void testIterate() throws Exception
|
||||||
|
{
|
||||||
Iterator<MTable> it = new Query(getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
Iterator<MTable> it = new Query(getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
.setOrderBy("TableName")
|
.setOrderBy("TableName")
|
||||||
.iterate();
|
.iterate();
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while(it.hasNext()) {
|
while(it.hasNext())
|
||||||
|
{
|
||||||
MTable t = it.next();
|
MTable t = it.next();
|
||||||
if (i == 0) {
|
if (i == 0)
|
||||||
|
{
|
||||||
assertEquals("Invalid object "+i, "C_Invoice", t.getTableName());
|
assertEquals("Invalid object "+i, "C_Invoice", t.getTableName());
|
||||||
}
|
}
|
||||||
else if (i == 1) {
|
else if (i == 1)
|
||||||
|
{
|
||||||
assertEquals("Invalid object "+i, "M_InOut", t.getTableName());
|
assertEquals("Invalid object "+i, "M_InOut", t.getTableName());
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
assertFalse("More objects retrived than expected", true);
|
assertFalse("More objects retrived than expected", true);
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
|
@ -91,7 +109,8 @@ public class QueryTest extends AdempiereTestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCount() throws Exception {
|
public void testCount() throws Exception
|
||||||
|
{
|
||||||
int count = new Query(getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
int count = new Query(getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
.setOrderBy("TableName")
|
.setOrderBy("TableName")
|
||||||
|
@ -99,26 +118,31 @@ public class QueryTest extends AdempiereTestCase {
|
||||||
assertEquals("Invalid count", 2, count);
|
assertEquals("Invalid count", 2, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCount_BadSQL() throws Exception {
|
public void testCount_BadSQL() throws Exception
|
||||||
|
{
|
||||||
boolean exThrowed = false;
|
boolean exThrowed = false;
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
new Query(getCtx(), "AD_Table", "TableName IN (?,?) AND BAD_SQL", getTrxName())
|
new Query(getCtx(), "AD_Table", "TableName IN (?,?) AND BAD_SQL", getTrxName())
|
||||||
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
.setOrderBy("TableName")
|
.setOrderBy("TableName")
|
||||||
.count();
|
.count();
|
||||||
}
|
}
|
||||||
catch (DBException e) {
|
catch (DBException e)
|
||||||
|
{
|
||||||
exThrowed = true;
|
exThrowed = true;
|
||||||
}
|
}
|
||||||
assertTrue("No Error Was Throwed", exThrowed);
|
assertTrue("No Error Was Throwed", exThrowed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCount_NoValues() throws Exception {
|
public void testCount_NoValues() throws Exception
|
||||||
|
{
|
||||||
int count = new Query(getCtx(), "AD_Table", "1=2", getTrxName()).count();
|
int count = new Query(getCtx(), "AD_Table", "1=2", getTrxName()).count();
|
||||||
assertEquals("Counter should be ZERO", 0, count);
|
assertEquals("Counter should be ZERO", 0, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testFirst() throws Exception {
|
public void testFirst() throws Exception
|
||||||
|
{
|
||||||
MTable t = new Query(getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
MTable t = new Query(getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
.setOrderBy("TableName")
|
.setOrderBy("TableName")
|
||||||
|
|
Loading…
Reference in New Issue