FR [ 2781053 ] Introduce DB.getValueNamePairs
https://sourceforge.net/tracker/?func=detail&aid=2781053&group_id=176962&atid=879335
This commit is contained in:
parent
49cd77b1a6
commit
1927fd553c
|
@ -77,6 +77,8 @@ import org.compiere.process.SequenceCheck;
|
||||||
* <li>BF [ 2030233 ] Remove duplicate code from DB class
|
* <li>BF [ 2030233 ] Remove duplicate code from DB class
|
||||||
* <li>FR [ 2107062 ] Add more DB.getKeyNamePairs methods
|
* <li>FR [ 2107062 ] Add more DB.getKeyNamePairs methods
|
||||||
* <li>FR [ 2448461 ] Introduce DB.getSQLValue*Ex methods
|
* <li>FR [ 2448461 ] Introduce DB.getSQLValue*Ex methods
|
||||||
|
* <li>FR [ 2781053 ] Introduce DB.getValueNamePairs
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public final class DB
|
public final class DB
|
||||||
{
|
{
|
||||||
|
@ -2000,5 +2002,91 @@ public final class DB
|
||||||
{
|
{
|
||||||
return getSQLValueBD(trxName, sql, new Object[]{int_param1});
|
return getSQLValueBD(trxName, sql, new Object[]{int_param1});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Array of ValueNamePair items.
|
||||||
|
* <pre> Example:
|
||||||
|
* String sql = "SELECT Name, Description FROM AD_Ref_List WHERE AD_Reference_ID=?";
|
||||||
|
* ValueNamePair[] list = DB.getValueNamePairs(sql, false, params);
|
||||||
|
* </pre>
|
||||||
|
* @param sql SELECT Value_Column, Name_Column FROM ...
|
||||||
|
* @param optional if {@link ValueNamePair#EMPTY} is added
|
||||||
|
* @param params query parameters
|
||||||
|
* @return array of {@link ValueNamePair} or empty array
|
||||||
|
* @throws DBException if there is any SQLException
|
||||||
|
*/
|
||||||
|
public static ValueNamePair[] getValueNamePairs(String sql, boolean optional, List<Object> params)
|
||||||
|
{
|
||||||
|
PreparedStatement pstmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
ArrayList<ValueNamePair> list = new ArrayList<ValueNamePair>();
|
||||||
|
if (optional)
|
||||||
|
{
|
||||||
|
list.add (ValueNamePair.EMPTY);
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pstmt = DB.prepareStatement(sql, null);
|
||||||
|
setParameters(pstmt, params);
|
||||||
|
rs = pstmt.executeQuery();
|
||||||
|
while (rs.next())
|
||||||
|
{
|
||||||
|
list.add(new ValueNamePair(rs.getString(1), rs.getString(2)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (SQLException e)
|
||||||
|
{
|
||||||
|
throw new DBException(e, sql);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
close(rs, pstmt);
|
||||||
|
rs = null; pstmt = null;
|
||||||
|
}
|
||||||
|
return list.toArray(new ValueNamePair[list.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Array of KeyNamePair items.
|
||||||
|
* <pre> Example:
|
||||||
|
* String sql = "SELECT C_City_ID, Name FROM C_City WHERE C_City_ID=?";
|
||||||
|
* KeyNamePair[] list = DB.getKeyNamePairs(sql, false, params);
|
||||||
|
* </pre>
|
||||||
|
* @param sql SELECT ID_Column, Name_Column FROM ...
|
||||||
|
* @param optional if {@link ValueNamePair#EMPTY} is added
|
||||||
|
* @param params query parameters
|
||||||
|
* @return array of {@link KeyNamePair} or empty array
|
||||||
|
* @throws DBException if there is any SQLException
|
||||||
|
*/
|
||||||
|
public static KeyNamePair[] getKeyNamePairs(String sql, boolean optional, List<Object> params)
|
||||||
|
{
|
||||||
|
PreparedStatement pstmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
ArrayList<KeyNamePair> list = new ArrayList<KeyNamePair>();
|
||||||
|
if (optional)
|
||||||
|
{
|
||||||
|
list.add (KeyNamePair.EMPTY);
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pstmt = DB.prepareStatement(sql, null);
|
||||||
|
setParameters(pstmt, params);
|
||||||
|
rs = pstmt.executeQuery();
|
||||||
|
while (rs.next())
|
||||||
|
{
|
||||||
|
list.add(new KeyNamePair(rs.getInt(1), rs.getString(2)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (SQLException e)
|
||||||
|
{
|
||||||
|
throw new DBException(e, sql);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
close(rs, pstmt);
|
||||||
|
rs = null; pstmt = null;
|
||||||
|
}
|
||||||
|
return list.toArray(new KeyNamePair[list.size()]);
|
||||||
|
}
|
||||||
} // DB
|
} // DB
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,9 @@ public final class KeyNamePair extends NamePair
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 9187402069085556500L;
|
private static final long serialVersionUID = 6347385376010388473L;
|
||||||
|
|
||||||
|
public static final KeyNamePair EMPTY = new KeyNamePair(-1, "");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor KeyValue Pair -
|
* Constructor KeyValue Pair -
|
||||||
|
|
|
@ -27,7 +27,9 @@ public final class ValueNamePair extends NamePair
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -3020367706232064508L;
|
private static final long serialVersionUID = -8315081335749462163L;
|
||||||
|
|
||||||
|
public static final ValueNamePair EMPTY = new ValueNamePair("", "");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct KeyValue Pair
|
* Construct KeyValue Pair
|
||||||
|
|
|
@ -15,10 +15,14 @@ package test.functional;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import org.adempiere.exceptions.DBException;
|
import org.adempiere.exceptions.DBException;
|
||||||
|
import org.compiere.model.MTable;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.KeyNamePair;
|
||||||
import org.compiere.util.TimeUtil;
|
import org.compiere.util.TimeUtil;
|
||||||
|
import org.compiere.util.ValueNamePair;
|
||||||
|
|
||||||
import test.AdempiereTestCase;
|
import test.AdempiereTestCase;
|
||||||
|
|
||||||
|
@ -159,4 +163,57 @@ public class DBTest extends AdempiereTestCase
|
||||||
result = DB.getSQLValueTS(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM INEXISTENT_TABLE");
|
result = DB.getSQLValueTS(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM INEXISTENT_TABLE");
|
||||||
assertNull("Error should be signaled", result);
|
assertNull("Error should be signaled", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void test_getValueNamePairs() throws Exception
|
||||||
|
{
|
||||||
|
ArrayList<Object> params = new ArrayList<Object>();
|
||||||
|
params.add(MTable.ACCESSLEVEL_AD_Reference_ID);
|
||||||
|
final String sql = "SELECT Value, Name FROM AD_Ref_List WHERE AD_Reference_ID=? ORDER BY Value";
|
||||||
|
// Get (with optional item)
|
||||||
|
ValueNamePair[] arr = DB.getValueNamePairs(sql, true, params);
|
||||||
|
assertEquals("Invalid size", 6+1, arr.length);
|
||||||
|
assertSame("First value should be EMPTY", ValueNamePair.EMPTY, arr[0]);
|
||||||
|
assertEquals(arr[1].getValue(), "1");
|
||||||
|
assertEquals(arr[2].getValue(), "2");
|
||||||
|
assertEquals(arr[3].getValue(), "3");
|
||||||
|
assertEquals(arr[4].getValue(), "4");
|
||||||
|
assertEquals(arr[5].getValue(), "6");
|
||||||
|
assertEquals(arr[6].getValue(), "7");
|
||||||
|
// Get (NO optional item)
|
||||||
|
arr = DB.getValueNamePairs(sql, false, params);
|
||||||
|
assertEquals("Invalid size", 6, arr.length);
|
||||||
|
assertEquals(arr[0].getValue(), "1");
|
||||||
|
assertEquals(arr[1].getValue(), "2");
|
||||||
|
assertEquals(arr[2].getValue(), "3");
|
||||||
|
assertEquals(arr[3].getValue(), "4");
|
||||||
|
assertEquals(arr[4].getValue(), "6");
|
||||||
|
assertEquals(arr[5].getValue(), "7");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void test_getKeyNamePairs() throws Exception
|
||||||
|
{
|
||||||
|
ArrayList<Object> params = new ArrayList<Object>();
|
||||||
|
params.add(MTable.ACCESSLEVEL_AD_Reference_ID);
|
||||||
|
final String sql = "SELECT AD_Ref_List_ID, Value FROM AD_Ref_List WHERE AD_Reference_ID=? ORDER BY Value";
|
||||||
|
// Get (with optional item)
|
||||||
|
KeyNamePair[] arr = DB.getKeyNamePairs(sql, true, params);
|
||||||
|
assertEquals("Invalid size", 6+1, arr.length);
|
||||||
|
assertSame("First value should be EMPTY", KeyNamePair.EMPTY, arr[0]);
|
||||||
|
assertEquals(arr[1].getName(), "1");
|
||||||
|
assertEquals(arr[2].getName(), "2");
|
||||||
|
assertEquals(arr[3].getName(), "3");
|
||||||
|
assertEquals(arr[4].getName(), "4");
|
||||||
|
assertEquals(arr[5].getName(), "6");
|
||||||
|
assertEquals(arr[6].getName(), "7");
|
||||||
|
// Get (NO optional item)
|
||||||
|
arr = DB.getKeyNamePairs(sql, false, params);
|
||||||
|
assertEquals("Invalid size", 6, arr.length);
|
||||||
|
assertEquals(arr[0].getName(), "1");
|
||||||
|
assertEquals(arr[1].getName(), "2");
|
||||||
|
assertEquals(arr[2].getName(), "3");
|
||||||
|
assertEquals(arr[3].getName(), "4");
|
||||||
|
assertEquals(arr[4].getName(), "6");
|
||||||
|
assertEquals(arr[5].getName(), "7");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue