Author: gdusbabek Date: Sat Apr 16 23:10:11 2011 New Revision: 1094086 URL: http://svn.apache.org/viewvc?rev=1094086&view=rev Log: merge from 0.8
Modified: cassandra/trunk/ (props changed) cassandra/trunk/contrib/ (props changed) cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java (props changed) cassandra/trunk/src/avro/internode.genavro cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java Propchange: cassandra/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Apr 16 23:10:11 2011 @@ -1,7 +1,7 @@ /cassandra/branches/cassandra-0.6:922689-1052356,1052358-1053452,1053454,1053456-1081914,1083000 /cassandra/branches/cassandra-0.7:1026516-1091087,1091503,1091542,1091654 /cassandra/branches/cassandra-0.7.0:1053690-1055654 -/cassandra/branches/cassandra-0.8:1090935-1092685 +/cassandra/branches/cassandra-0.8:1090935-1094085 /cassandra/tags/cassandra-0.7.0-rc3:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3:774578-796573 /incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350 Propchange: cassandra/trunk/contrib/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Apr 16 23:10:11 2011 @@ -1,7 +1,7 @@ /cassandra/branches/cassandra-0.6/contrib:922689-1052356,1052358-1053452,1053454,1053456-1068009 /cassandra/branches/cassandra-0.7/contrib:1026516-1091087,1091503,1091542,1091654 /cassandra/branches/cassandra-0.7.0/contrib:1053690-1055654 -/cassandra/branches/cassandra-0.8/contrib:1090935-1092685 +/cassandra/branches/cassandra-0.8/contrib:1090935-1094085 /cassandra/tags/cassandra-0.7.0-rc3/contrib:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3/contrib:774578-796573 /incubator/cassandra/branches/cassandra-0.4/contrib:810145-810987,810994-834239,834349-834350 Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java?rev=1094086&r1=1094085&r2=1094086&view=diff ============================================================================== --- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java (original) +++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java Sat Apr 16 23:10:11 2011 @@ -42,13 +42,7 @@ import java.sql.SQLXML; import java.sql.Statement; import java.sql.Time; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.WeakHashMap; +import java.util.*; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.marshal.BytesType; @@ -58,7 +52,6 @@ import org.apache.cassandra.thrift.Colum import org.apache.cassandra.thrift.CqlResult; import org.apache.cassandra.thrift.CqlRow; -// todo: get by index is off by one. /** * The Class CassandraResultSet. */ @@ -87,7 +80,6 @@ class CassandraResultSet implements Resu private final RsMetaData meta; private final AbstractType nameType; - private final AbstractType valueType; /** * Instantiates a new cassandra result set. @@ -103,7 +95,6 @@ class CassandraResultSet implements Resu rSetIter = rSet.getRowsIterator(); meta = new RsMetaData(); nameType = decoder.getComparator(keyspace, columnFamily, ColumnDecoder.Specifier.Comparator, null); - valueType = decoder.getComparator(keyspace, columnFamily, ColumnDecoder.Specifier.Validator, null); } /** @@ -2037,10 +2028,11 @@ class CassandraResultSet implements Resu { column--; checkIndex(column); - if (valueType instanceof ColumnMetaData) - return ((ColumnMetaData)valueType).isCaseSensitive(); + TypedColumn tc = values.get(column); + if (tc.getValidator() instanceof ColumnMetaData) + return ((ColumnMetaData)tc.getValidator()).isCaseSensitive(); else - return valueType.getType().equals(String.class); + return tc.getValidator().getType().equals(String.class); } public boolean isNameCurrency(int column) throws SQLException @@ -2057,8 +2049,9 @@ class CassandraResultSet implements Resu { column--; checkIndex(column); - if (valueType instanceof ColumnMetaData) - return ((ColumnMetaData)valueType).isCurrency(); + TypedColumn tc = values.get(column); + if (tc.getValidator() instanceof ColumnMetaData) + return ((ColumnMetaData)tc.getValidator()).isCurrency(); else return false; } @@ -2074,7 +2067,8 @@ class CassandraResultSet implements Resu { column--; checkIndex(column); - return Utils.isTypeSigned(valueType); + TypedColumn tc = values.get(column); + return Utils.isTypeSigned(tc.getValidator()); } public int getNameDisplaySize(int column) throws SQLException @@ -2113,15 +2107,15 @@ class CassandraResultSet implements Resu column--; checkIndex(column); TypedColumn col = values.get(column); - if (valueType instanceof ColumnMetaData) - return ((ColumnMetaData)valueType).getPrecision(); - else if (valueType.getType().equals(String.class)) + if (col.getValidator() instanceof ColumnMetaData) + return ((ColumnMetaData)col.getValidator()).getPrecision(); + else if (col.getValidator().getType().equals(String.class)) return col.getValueString().length(); - else if (valueType == BytesType.instance) + else if (col.getValidator() == BytesType.instance) return col.getValueString().length(); - else if (valueType.getType().equals(UUID.class)) + else if (col.getValidator().getType().equals(UUID.class)) return 36; // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - else if (valueType == LongType.instance) + else if (col.getValidator() == LongType.instance) return 19; // number of digits in 2**63-1. else return 0; @@ -2138,7 +2132,7 @@ class CassandraResultSet implements Resu { column--; checkIndex(column); - return Utils.getTypeScale(valueType); + return Utils.getTypeScale(values.get(column).getValidator()); } public int getNameType(int column) throws SQLException @@ -2152,7 +2146,7 @@ class CassandraResultSet implements Resu { column--; checkIndex(column); - return Utils.getJdbcType(valueType); + return Utils.getJdbcType(values.get(column).getValidator()); } public String getNameTypeName(int column) throws SQLException @@ -2166,7 +2160,7 @@ class CassandraResultSet implements Resu { column--; checkIndex(column); - return valueType.getClass().getSimpleName(); + return values.get(column).getValidator().getClass().getSimpleName(); } public String getNameClassName(int column) throws SQLException @@ -2180,7 +2174,7 @@ class CassandraResultSet implements Resu { column--; checkIndex(column); - return valueType.getType().getName(); + return values.get(column).getValidator().getType().getName(); } // @@ -2202,7 +2196,7 @@ class CassandraResultSet implements Resu { column--; checkIndex(column); - return valueType instanceof CounterColumnType; // todo: check Value is correct. + return values.get(column).getValidator() instanceof CounterColumnType; // todo: check Value is correct. } public boolean isCaseSensitive(int column) throws SQLException Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java?rev=1094086&r1=1094085&r2=1094086&view=diff ============================================================================== --- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java (original) +++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java Sat Apr 16 23:10:11 2011 @@ -24,6 +24,7 @@ package org.apache.cassandra.cql.jdbc; import org.apache.cassandra.config.ConfigurationException; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.thrift.CfDef; +import org.apache.cassandra.thrift.ColumnDef; import org.apache.cassandra.thrift.KsDef; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; @@ -39,14 +40,15 @@ import java.util.Map; class ColumnDecoder { private static final Logger logger = LoggerFactory.getLogger(ColumnDecoder.class); - private static final String MapFormatString = "%s.%s.%s"; + private static final String MapFormatString = "%s.%s.%s.%s"; // basically denotes column or value. enum Specifier { Comparator, Validator, - Key + Key, + ColumnSpecific } private Map<String, CfDef> cfDefs = new HashMap<String, CfDef>(); @@ -58,8 +60,29 @@ class ColumnDecoder public ColumnDecoder(List<KsDef> defs) { for (KsDef ks : defs) + { for (CfDef cf : ks.getCf_defs()) + { cfDefs.put(String.format("%s.%s", ks.getName(), cf.getName()), cf); + for (ColumnDef cd : cf.getColumn_metadata()) + { + try + { + // prefill the validators (because they aren't kept in a convenient lookup map and we don't + // want to iterate over the list for every miss in getComparator. + comparators.put(String.format(MapFormatString, + ks.getName(), + cf.getName(), + Specifier.ColumnSpecific.name(), + ByteBufferUtil.bytesToHex(cd.bufferForName())), + FBUtilities.getComparator(cd.getValidation_class())); + } + catch (ConfigurationException ex) { + throw new RuntimeException(ex); + } + } + } + } } /** @@ -69,10 +92,20 @@ class ColumnDecoder * @param def avoids additional map lookup if specified. null is ok though. * @return */ - AbstractType getComparator(String keyspace, String columnFamily, Specifier specifier, CfDef def) + AbstractType getComparator(String keyspace, String columnFamily, Specifier specifier, CfDef def) + { + return getComparator(keyspace, columnFamily, null, specifier, def); + } + + // same as above, but can get column-specific validators. + AbstractType getComparator(String keyspace, String columnFamily, byte[] column, Specifier specifier, CfDef def) { // check cache first. - String key = String.format(MapFormatString, keyspace, columnFamily, specifier.name()); + String key = String.format(MapFormatString, + keyspace, + columnFamily, + specifier.name(), + FBUtilities.bytesToHex(column == null ? new byte[] {} : column)); AbstractType comparator = comparators.get(key); // make and put in cache. @@ -90,6 +123,8 @@ class ColumnDecoder case Key: comparator = FBUtilities.getComparator(def.getKey_validation_class()); break; + case ColumnSpecific: + // if we get here this means there is no column-specific validator, so fall through to the default. case Validator: comparator = FBUtilities.getComparator(def.getDefault_validation_class()); break; @@ -154,7 +189,7 @@ class ColumnDecoder { CfDef cfDef = cfDefs.get(String.format("%s.%s", keyspace, columnFamily)); AbstractType comparator = getComparator(keyspace, columnFamily, Specifier.Comparator, cfDef); - AbstractType validator = getComparator(keyspace, columnFamily, Specifier.Validator, null); + AbstractType validator = getComparator(keyspace, columnFamily, name, Specifier.ColumnSpecific, null); return new TypedColumn(comparator, name, validator, value); } } Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java?rev=1094086&r1=1094085&r2=1094086&view=diff ============================================================================== --- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java (original) +++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java Sat Apr 16 23:10:11 2011 @@ -34,6 +34,7 @@ class TypedColumn<N, V> // (a good example is byte buffers) as the stringified versions supplied by the AbstractTypes. private final String nameString; private final String valueString; + private final AbstractType<V> validator; public TypedColumn(AbstractType<N> comparator, byte[] name, AbstractType<V> validator, byte[] value) { @@ -43,6 +44,7 @@ class TypedColumn<N, V> this.value = validator.compose(bbValue); nameString = comparator.getString(bbName); valueString = validator.getString(bbValue); + this.validator = validator; } public N getName() @@ -64,4 +66,9 @@ class TypedColumn<N, V> { return valueString; } + + public AbstractType<V> getValidator() + { + return validator; + } } Modified: cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java?rev=1094086&r1=1094085&r2=1094086&view=diff ============================================================================== --- cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java (original) +++ cassandra/trunk/drivers/java/test/org/apache/cassandra/cql/JdbcDriverTest.java Sat Apr 16 23:10:11 2011 @@ -68,12 +68,12 @@ public class JdbcDriverTest extends Embe String[] inserts = { String.format("UPDATE Standard1 SET '%s' = '%s', '%s' = '%s' WHERE KEY = '%s'", first, firstrec, last, lastrec, jsmith), - "UPDATE JdbcInteger SET 1 = 11, 2 = 22 WHERE KEY = '" + jsmith + "'", + "UPDATE JdbcInteger SET 1 = 11, 2 = 22, 42='fortytwo' WHERE KEY = '" + jsmith + "'", "UPDATE JdbcInteger SET 3 = 33, 4 = 44 WHERE KEY = '" + jsmith + "'", "UPDATE JdbcLong SET 1 = 11, 2 = 22 WHERE KEY = '" + jsmith + "'", "UPDATE JdbcAscii SET 'first' = 'firstrec', 'last' = 'lastrec' WHERE key = '" + jsmith + "'", String.format("UPDATE JdbcBytes SET '%s' = '%s', '%s' = '%s' WHERE key = '%s'", first, firstrec, last, lastrec, jsmith), - "UPDATE JdbcUtf8 SET 'first' = 'firstrec', 'last' = 'lastrec' WHERE key = '" + jsmith + "'", + "UPDATE JdbcUtf8 SET 'first' = 'firstrec', 'fortytwo' = '42', 'last' = 'lastrec' WHERE key = '" + jsmith + "'", }; for (String q : inserts) { @@ -119,6 +119,37 @@ public class JdbcDriverTest extends Embe assert valuCaseSense == md.isValueCaseSensitive(col); } + @Test + public void testNonDefaultColumnValidators() throws SQLException + { + String key = FBUtilities.bytesToHex("Integer".getBytes()); + Statement stmt = con.createStatement(); + stmt.executeUpdate("update JdbcInteger set 1=1111, 2=2222, 42='fortytwofortytwo' where key='" + key + "'"); + ResultSet rs = stmt.executeQuery("select 1, 2, 42 from JdbcInteger where key='" + key + "'"); + assert rs.next(); + assert rs.getInt("1") == 1111; + assert rs.getInt("2") == 2222; + assert rs.getString("42").equals("fortytwofortytwo") : rs.getString("42"); + + ResultSetMetaData md = rs.getMetaData(); + assert md.getColumnCount() == 3; + expectedMetaData(md, 1, BigInteger.class.getName(), "JdbcInteger", "Keyspace1", "1", Types.BIGINT, IntegerType.class.getSimpleName(), true, false); + expectedMetaData(md, 2, BigInteger.class.getName(), "JdbcInteger", "Keyspace1", "2", Types.BIGINT, IntegerType.class.getSimpleName(), true, false); + expectedMetaData(md, 3, String.class.getName(), "JdbcInteger", "Keyspace1", "42", Types.VARCHAR, UTF8Type.class.getSimpleName(), false, true); + + stmt.executeUpdate("update JdbcUtf8 set 'a'='aa', 'b'='bb', 'fortytwo'='4242' where key='" + key + "'"); + rs = stmt.executeQuery("select 'a', 'b', 'fortytwo' from JdbcUtf8 where key='" + key + "'"); + assert rs.next(); + assert rs.getString("a").equals("aa"); + assert rs.getString("b").equals("bb"); + assert rs.getInt("fortytwo") == 4242L; + + md = rs.getMetaData(); + expectedMetaData(md, 1, String.class.getName(), "JdbcUtf8", "Keyspace1", "a", Types.VARCHAR, UTF8Type.class.getSimpleName(), false, true); + expectedMetaData(md, 2, String.class.getName(), "JdbcUtf8", "Keyspace1", "b", Types.VARCHAR, UTF8Type.class.getSimpleName(), false, true); + expectedMetaData(md, 3, BigInteger.class.getName(), "JdbcUtf8", "Keyspace1", "fortytwo", Types.BIGINT, IntegerType.class.getSimpleName(), true, false); + } + @Test public void testIntegerMetadata() throws SQLException { Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Apr 16 23:10:11 2011 @@ -1,7 +1,7 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1052356,1052358-1053452,1053454,1053456-1081914,1083000 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1091087,1091503,1091542,1091654 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1090935-1092685 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1090935-1094085 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-796573 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Cassandra.java:810145-834239,834349-834350 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Apr 16 23:10:11 2011 @@ -1,7 +1,7 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1052356,1052358-1053452,1053454,1053456-1081914,1083000 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1091087,1091503,1091542,1091654 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1090935-1092685 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1090935-1094085 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-792198 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Column.java:810145-834239,834349-834350 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Apr 16 23:10:11 2011 @@ -1,7 +1,7 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1052356,1052358-1053452,1053454,1053456-1081914,1083000 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1091087,1091503,1091542,1091654 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1090935-1092685 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1090935-1094085 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-796573 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:810145-834239,834349-834350 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Apr 16 23:10:11 2011 @@ -1,7 +1,7 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1052356,1052358-1053452,1053454,1053456-1081914,1083000 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1091087,1091503,1091542,1091654 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1090935-1092685 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1090935-1094085 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-796573 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:810145-834239,834349-834350 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Apr 16 23:10:11 2011 @@ -1,7 +1,7 @@ /cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1052356,1052358-1053452,1053454,1053456-1081914,1083000 /cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1091087,1091503,1091542,1091654 /cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1053690-1055654 -/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1090935-1092685 +/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1090935-1094085 /cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1051699-1053689 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-792198 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:810145-834239,834349-834350 Modified: cassandra/trunk/src/avro/internode.genavro URL: http://svn.apache.org/viewvc/cassandra/trunk/src/avro/internode.genavro?rev=1094086&r1=1094085&r2=1094086&view=diff ============================================================================== --- cassandra/trunk/src/avro/internode.genavro (original) +++ cassandra/trunk/src/avro/internode.genavro Sat Apr 16 23:10:11 2011 @@ -73,6 +73,7 @@ protocol InterNode { string name; string strategy_class; union{ map<string>, null } strategy_options; + union{ int, null } replication_factor; array<CfDef> cf_defs; } Modified: cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java?rev=1094086&r1=1094085&r2=1094086&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java Sat Apr 16 23:10:11 2011 @@ -115,16 +115,19 @@ public final class KSMetaData { throw new RuntimeException("Could not create ReplicationStrategy of type " + ks.strategy_class, ex); } - Map<String, String> strategyOptions = null; + + Map<String, String> strategyOptions = new HashMap<String, String>(); if (ks.strategy_options != null) { - strategyOptions = new HashMap<String, String>(); for (Map.Entry<CharSequence, CharSequence> e : ks.strategy_options.entrySet()) { strategyOptions.put(e.getKey().toString(), e.getValue().toString()); } } - int cfsz = (int)ks.cf_defs.size(); + if (ks.replication_factor != null) + strategyOptions.put("replication_factor", ks.replication_factor.toString()); + + int cfsz = ks.cf_defs.size(); CFMetaData[] cfMetaData = new CFMetaData[cfsz]; Iterator<org.apache.cassandra.db.migration.avro.CfDef> cfiter = ks.cf_defs.iterator(); for (int i = 0; i < cfsz; i++) Modified: cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java?rev=1094086&r1=1094085&r2=1094086&view=diff ============================================================================== --- cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java (original) +++ cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java Sat Apr 16 23:10:11 2011 @@ -77,6 +77,20 @@ public class SchemaLoader ColumnFamilyType st = ColumnFamilyType.Standard; ColumnFamilyType su = ColumnFamilyType.Super; AbstractType bytes = BytesType.instance; + + // these column definitions will will be applied to the jdbc utf and integer column familes respectively. + Map<ByteBuffer, ColumnDefinition> integerColumn = new HashMap<ByteBuffer, ColumnDefinition>(); + integerColumn.put(IntegerType.instance.fromString("42"), new ColumnDefinition( + IntegerType.instance.fromString("42"), + UTF8Type.instance, + null, + "Column42")); + Map<ByteBuffer, ColumnDefinition> utf8Column = new HashMap<ByteBuffer, ColumnDefinition>(); + utf8Column.put(UTF8Type.instance.fromString("fortytwo"), new ColumnDefinition( + UTF8Type.instance.fromString("fortytwo"), + IntegerType.instance, + null, + "Column42")); // Keyspace 1 schema.add(new KSMetaData(ks1, @@ -115,8 +129,8 @@ public class SchemaLoader bytes, bytes) .defaultValidator(CounterColumnType.instance), - jdbcCFMD(ks1, "JdbcInteger", IntegerType.instance), - jdbcCFMD(ks1, "JdbcUtf8", UTF8Type.instance), + jdbcCFMD(ks1, "JdbcInteger", IntegerType.instance).columnMetadata(integerColumn), + jdbcCFMD(ks1, "JdbcUtf8", UTF8Type.instance).columnMetadata(utf8Column), jdbcCFMD(ks1, "JdbcLong", LongType.instance), jdbcCFMD(ks1, "JdbcBytes", bytes), jdbcCFMD(ks1, "JdbcAscii", AsciiType.instance)));