CommonTree columnFamilySpec = (CommonTree)ast.getChild(0);
assert(columnFamilySpec.getType() == CqlParser.A_COLUMN_ACCESS);
CFMetaData cfMetaData = getColumnFamilyInfo(columnFamilySpec);
ConstantOperand rowKey = new ConstantOperand(getRowKey(columnFamilySpec));
int dimensionCnt = numColumnDimensions(columnFamilySpec);
CommonTree valueNode = (CommonTree)(ast.getChild(1));
Plan plan = null;
if ("Super".equals(cfMetaData.columnType))
{
if (dimensionCnt == 2)
{
// Case: set table.super_cf['key']['supercolumn']['column'] = 'value'
OperandDef value = getSimpleExpr(valueNode);
ConstantOperand superColumnKey = new ConstantOperand(getColumn(columnFamilySpec, 0));
ConstantOperand columnKey = new ConstantOperand(getColumn(columnFamilySpec, 1));
plan = new SetUniqueKey(cfMetaData, rowKey, superColumnKey, columnKey, value);
}
else if (dimensionCnt == 1)
{
// Case: set table.super_cf['key']['supercolumn'] = <column_map>;
ColumnMapExpr columnMapExpr = getColumnMapExpr(valueNode);
ConstantOperand superColumnKey = new ConstantOperand(getColumn(columnFamilySpec, 0));
plan = new SetColumnMap(cfMetaData, rowKey, superColumnKey, columnMapExpr);
}
else
{
// Case: set table.super_cf['key'] = <super_column_map>;
logger_.assertLog(dimensionCnt == 0, "invalid dimensionCnt: " + dimensionCnt);
SuperColumnMapExpr superColumnMapExpr = getSuperColumnMapExpr(valueNode);
plan = new SetSuperColumnMap(cfMetaData, rowKey, superColumnMapExpr);
}
}
else // Standard column family
{
if (dimensionCnt == 1)
{
// Case: set table.standard_cf['key']['column'] = 'value'
OperandDef value = getSimpleExpr(valueNode);
ConstantOperand columnKey = new ConstantOperand(getColumn(columnFamilySpec, 0));
plan = new SetUniqueKey(cfMetaData, rowKey, columnKey, value);
}
else
{
// Case: set table.standard_cf['key'] = <column_map>;