Yariv Amar created CASSANDRA-6526:
-------------------------------------
Summary: CQLSSTableWriter addRow(Map<String, Object> values) does
not work as documented.
Key: CASSANDRA-6526
URL: https://issues.apache.org/jira/browse/CASSANDRA-6526
Project: Cassandra
Issue Type: Bug
Components: Core
Reporter: Yariv Amar
Fix For: 2.0.4
There are 2 bugs in the method
{code}
addRow(Map<String, Object> values)
{code}
First issue is that the map <b>must</b> contain all the column names as keys in
the map otherwise the addRow fails (with InvalidRequestException "Invalid
number of arguments, expecting %d values but got %d").
Second Issue is that the keys in the map must be in lower-case otherwise they
may not be found in the map, which will result in a NPE during decompose.
h6. SUGGESTED SOLUTION:
Fix the addRow method with:
{code}
public CQLSSTableWriter addRow(Map<String, Object> values)
throws InvalidRequestException, IOException
{
int size = boundNames.size();
Map<String, ByteBuffer> rawValues = new HashMap<>(size);
for (int i = 0; i < size; i++) {
ColumnSpecification spec = boundNames.get(i);
String colName = spec.name.toString();
rawValues.put(colName, values.get(colName) == null ? null :
((AbstractType)spec.type).decompose(values.get(colName)));
}
return rawAddRow(rawValues);
}
{code}
When creating the new Map for the insert we need to go over all columns and
apply null to missing columns.
Fix the method documentation add this line:
{code}
* <p>
* Keys in the map <b>must</b> be in lower case, otherwise their value will
be null.
*
{code}
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)