You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/06/05 15:43:23 UTC
svn commit: r1132406 [1/2] - in /cassandra/trunk: ./ contrib/
contrib/pig/src/java/org/apache/cassandra/hadoop/pig/ debian/ doc/cql/
drivers/java/src/org/apache/cassandra/cql/jdbc/
drivers/java/test/org/apache/cassandra/cql/ drivers/py/cql/ interface/t...
Author: jbellis
Date: Sun Jun 5 13:43:22 2011
New Revision: 1132406
URL: http://svn.apache.org/viewvc?rev=1132406&view=rev
Log:
merge from 0.8
Added:
cassandra/trunk/src/java/org/apache/cassandra/cql/AlterTableStatement.java
- copied unchanged from r1130862, cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cql/AlterTableStatement.java
cassandra/trunk/src/java/org/apache/cassandra/cql/Operation.java
- copied unchanged from r1132405, cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cql/Operation.java
cassandra/trunk/tools/stress/bin/stressd
- copied unchanged from r1130862, cassandra/branches/cassandra-0.8/tools/stress/bin/stressd
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/StressAction.java
- copied unchanged from r1130862, cassandra/branches/cassandra-0.8/tools/stress/src/org/apache/cassandra/stress/StressAction.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/StressServer.java
- copied unchanged from r1130862, cassandra/branches/cassandra-0.8/tools/stress/src/org/apache/cassandra/stress/StressServer.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/server/
- copied from r1130862, cassandra/branches/cassandra-0.8/tools/stress/src/org/apache/cassandra/stress/server/
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/server/StressThread.java
- copied unchanged from r1130862, cassandra/branches/cassandra-0.8/tools/stress/src/org/apache/cassandra/stress/server/StressThread.java
Modified:
cassandra/trunk/ (props changed)
cassandra/trunk/CHANGES.txt
cassandra/trunk/build.xml
cassandra/trunk/contrib/ (props changed)
cassandra/trunk/contrib/pig/src/java/org/apache/cassandra/hadoop/pig/CassandraStorage.java
cassandra/trunk/debian/changelog
cassandra/trunk/doc/cql/CQL.textile
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java
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/test/org/apache/cassandra/cql/JdbcDriverTest.java
cassandra/trunk/drivers/py/cql/marshal.py
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/java/org/apache/cassandra/config/CFMetaData.java
cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java
cassandra/trunk/src/java/org/apache/cassandra/cql/AbstractModification.java
cassandra/trunk/src/java/org/apache/cassandra/cql/BatchStatement.java
cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g
cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
cassandra/trunk/src/java/org/apache/cassandra/cql/DeleteStatement.java
cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java
cassandra/trunk/src/java/org/apache/cassandra/cql/StatementType.java
cassandra/trunk/src/java/org/apache/cassandra/cql/UpdateStatement.java
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
cassandra/trunk/src/java/org/apache/cassandra/db/DataTracker.java
cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
cassandra/trunk/src/java/org/apache/cassandra/db/TruncateVerbHandler.java
cassandra/trunk/src/java/org/apache/cassandra/net/IncomingTcpConnection.java
cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java
cassandra/trunk/test/system/test_cql.py
cassandra/trunk/test/system/test_thrift_server.py
cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/Session.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/Stress.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/operations/CounterAdder.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/operations/CounterGetter.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/operations/IndexedRangeSlicer.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/operations/Inserter.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/operations/MultiGetter.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/operations/RangeSlicer.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/operations/Reader.java
cassandra/trunk/tools/stress/src/org/apache/cassandra/stress/util/Operation.java
Propchange: cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jun 5 13:43:22 2011
@@ -1,8 +1,8 @@
-/cassandra/branches/cassandra-0.6:922689-1052356,1052358-1053452,1053454,1053456-1081914,1083000
-/cassandra/branches/cassandra-0.7:1026516-1128347,1129151
+/cassandra/branches/cassandra-0.6:922689-1052356,1052358-1053452,1053454,1053456-1131291
+/cassandra/branches/cassandra-0.7:1026516-1131292
/cassandra/branches/cassandra-0.7.0:1053690-1055654
-/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1129091,1129094-1129095,1129155,1129462-1129463,1130863-1130864
-/cassandra/branches/cassandra-0.8.0:1125021-1127636,1129154
+/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1132405
+/cassandra/branches/cassandra-0.8.0:1125021-1130369
/cassandra/branches/cassandra-0.8.1:1101014-1125018
/cassandra/tags/cassandra-0.7.0-rc3:1051699-1053689
/cassandra/tags/cassandra-0.8.0-rc1:1102511-1125020
Modified: cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Sun Jun 5 13:43:22 2011
@@ -1,11 +1,16 @@
0.8.1
- * add support for insert, delete in cql BATCH (CASSANDRA-2537)
- * add support for IN to cql SELECT, UPDATE (CASSANDRA-2553)
- * add timestamp support to cql INSERT, UPDATE, and BATCH (CASSANDRA-2555)
+ * CQL:
+ - support for insert, delete in BATCH (CASSANDRA-2537)
+ - support for IN to SELECT, UPDATE (CASSANDRA-2553)
+ - timestamp support for INSERT, UPDATE, and BATCH (CASSANDRA-2555)
+ - TTL support (CASSANDRA-2476)
+ - counter support (CASSANDRA-2473)
+ - improve JDBC spec compliance (CASSANDRA-2720)
+ - ALTER TABLE (CASSANDRA-1709)
+ - DROP INDEX (CASSANDRA-2617)
* add support for comparator parameters and a generic ReverseType
(CASSANDRA-2355)
* add CompositeType and DynamicCompositeType (CASSANDRA-2231)
- * add CQL TTL support (CASSANDRA-2476)
* optimize batches containing multiple updates to the same row
(CASSANDRA-2583)
* adjust hinted handoff page size to avoid OOM with large columns
@@ -31,6 +36,9 @@
* close scrub file handles (CASSANDRA-2669)
* throttle migration replay (CASSANDRA-2714)
* optimize column serializer creation (CASSANDRA-2716)
+ * fix truncate/compaction race (CASSANDRA-2673)
+ * workaround large resultsets causing large allocation retention
+ by nio sockets (CASSANDRA-2654)
0.8.0-final
@@ -42,10 +50,11 @@
* switch to native Thrift for Hadoop map/reduce (CASSANDRA-2667)
* fix StackOverflowError when building from eclipse (CASSANDRA-2687)
* only provide replication_factor to strategy_options "help" for
- SimpleStrategy, OldNetworkTopologyStrategy (CASSANDRA-2678)
+ SimpleStrategy, OldNetworkTopologyStrategy (CASSANDRA-2678, 2713)
* fix exception adding validators to non-string columns (CASSANDRA-2696)
* avoid instantiating DatabaseDescriptor in JDBC (CASSANDRA-2694)
* fix potential stack overflow during compaction (CASSANDRA-2626)
+ * clone super columns to avoid modifying them during flush (CASSANDRA-2675)
* reset underlying iterator in EchoedRow constructor (CASSANDRA-2653)
@@ -147,6 +156,9 @@
* reduce contention on Table.flusherLock (CASSANDRA-1954)
* try harder to detect failures during streaming, cleaning up temporary
files more reliably (CASSANDRA-2088)
+
+
+0.6.13
* shut down server for OOM on a Thrift thread (CASSANDRA-2269)
* fix tombstone handling in repair and sstable2json (CASSANDRA-2279)
* preserve version when streaming data from old sstables (CASSANDRA-2283)
Modified: cassandra/trunk/build.xml
URL: http://svn.apache.org/viewvc/cassandra/trunk/build.xml?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/build.xml (original)
+++ cassandra/trunk/build.xml Sun Jun 5 13:43:22 2011
@@ -64,7 +64,7 @@
<property name="test.long.src" value="${test.dir}/long"/>
<property name="test.distributed.src" value="${test.dir}/distributed"/>
<property name="dist.dir" value="${build.dir}/dist"/>
- <property name="cql.driver.version" value="1.0.2" />
+ <property name="cql.driver.version" value="1.0.3" />
<condition property="version" value="${base.version}">
<isset property="release"/>
</condition>
@@ -693,7 +693,6 @@ url=${svn.entry.url}?pathrev=${svn.entry
destdir="${build.classes.main}" includeantruntime="false">
<src path="${build.src.java}"/>
<src path="${build.src.gen-java}"/>
- <src path="${build.src.driver}" />
<classpath refid="cassandra.classpath"/>
</javac>
<javac debug="true" debuglevel="${debuglevel}"
@@ -972,7 +971,10 @@ url=${svn.entry.url}?pathrev=${svn.entry
debug="true"
debuglevel="${debuglevel}"
destdir="${test.classes}">
- <classpath refid="cassandra.classpath"/>
+ <classpath>
+ <path refid="cassandra.classpath"/>
+ <pathelement location="${build.classes.cql}"/>
+ </classpath>
<src path="${test.unit.src}"/>
<src path="${test.long.src}"/>
<src path="${test.src.driver}"/>
@@ -1024,6 +1026,7 @@ url=${svn.entry.url}?pathrev=${svn.entry
<classpath>
<path refid="cassandra.classpath" />
<pathelement location="${test.classes}"/>
+ <pathelement location="${build.classes.cql}"/>
<path refid="cobertura.classpath"/>
<pathelement location="${test.conf}"/>
<fileset dir="${test.lib}">
Propchange: cassandra/trunk/contrib/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jun 5 13:43:22 2011
@@ -1,8 +1,8 @@
/cassandra/branches/cassandra-0.6/contrib:922689-1052356,1052358-1053452,1053454,1053456-1068009
-/cassandra/branches/cassandra-0.7/contrib:1026516-1128347,1129151
+/cassandra/branches/cassandra-0.7/contrib:1026516-1131292
/cassandra/branches/cassandra-0.7.0/contrib:1053690-1055654
-/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1129091,1129094-1129095,1129155,1129462-1129463,1130863-1130864
-/cassandra/branches/cassandra-0.8.0/contrib:1125021-1127636,1129154
+/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1132405
+/cassandra/branches/cassandra-0.8.0/contrib:1125021-1130369
/cassandra/branches/cassandra-0.8.1/contrib:1101014-1125018
/cassandra/tags/cassandra-0.7.0-rc3/contrib:1051699-1053689
/cassandra/tags/cassandra-0.8.0-rc1/contrib:1102511-1125020
Modified: cassandra/trunk/contrib/pig/src/java/org/apache/cassandra/hadoop/pig/CassandraStorage.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/contrib/pig/src/java/org/apache/cassandra/hadoop/pig/CassandraStorage.java?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/contrib/pig/src/java/org/apache/cassandra/hadoop/pig/CassandraStorage.java (original)
+++ cassandra/trunk/contrib/pig/src/java/org/apache/cassandra/hadoop/pig/CassandraStorage.java Sun Jun 5 13:43:22 2011
@@ -357,12 +357,12 @@ public class CassandraStorage extends Lo
Mutation mutation = new Mutation();
if (DataType.findType(pair.get(1)) == DataType.BAG) // supercolumn
{
- org.apache.cassandra.hadoop.avro.SuperColumn sc = new org.apache.cassandra.hadoop.avro.SuperColumn();
+ org.apache.cassandra.thrift.SuperColumn sc = new org.apache.cassandra.thrift.SuperColumn();
sc.name = objToBB(pair.get(0));
- ArrayList<org.apache.cassandra.hadoop.avro.Column> columns = new ArrayList<org.apache.cassandra.hadoop.avro.Column>();
+ ArrayList<org.apache.cassandra.thrift.Column> columns = new ArrayList<org.apache.cassandra.thrift.Column>();
for (Tuple subcol : (DefaultDataBag) pair.get(1))
{
- org.apache.cassandra.hadoop.avro.Column column = new org.apache.cassandra.hadoop.avro.Column();
+ org.apache.cassandra.thrift.Column column = new org.apache.cassandra.thrift.Column();
column.name = objToBB(subcol.get(0));
column.value = objToBB(subcol.get(1));
column.setTimestamp(System.currentTimeMillis() * 1000);
Modified: cassandra/trunk/debian/changelog
URL: http://svn.apache.org/viewvc/cassandra/trunk/debian/changelog?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/debian/changelog (original)
+++ cassandra/trunk/debian/changelog Sun Jun 5 13:43:22 2011
@@ -2,7 +2,7 @@ cassandra (0.8.0) unstable; urgency=low
* New release
- -- Eric Evans <ee...@apache.org> Mon, 23 May 2011 15:59:48 -0500
+ -- Eric Evans <ee...@apache.org> Mon, 30 May 2011 12:58:23 -0500
cassandra (0.8.0~rc1) unstable; urgency=low
Modified: cassandra/trunk/doc/cql/CQL.textile
URL: http://svn.apache.org/viewvc/cassandra/trunk/doc/cql/CQL.textile?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/doc/cql/CQL.textile (original)
+++ cassandra/trunk/doc/cql/CQL.textile Sun Jun 5 13:43:22 2011
@@ -69,6 +69,17 @@ SELECT ... WHERE <CLAUSE> [LIMIT N] ...
Limiting the number of rows returned can be achieved by adding the @LIMIT@ option to a @SELECT@ expression. @LIMIT@ defaults to 10,000 when left unset.
+h2. ALTER TABLE
+
+_Synopsis:_
+
+bc.
+ALTER TABLE <columnFamily> ADD <column> <validator>;
+ALTER TABLE <columnFamily> ALTER <column> TYPE <validator>;
+ALTER TABLE <columnFamily> DROP <column>;
+
+An @ALTER@ is used to manipulate with ColumnFamily columns. It allows you to add new columns, alter and drop existing columns. No results are returned.
+
h2. INSERT
_Synopsis:_
@@ -282,6 +293,15 @@ bc. CREATE INDEX [index_name] ON <column
A @CREATE INDEX@ statement is used to create a new, automatic secondary index for the named column.
+h2. DROP INDEX
+
+_Synopsis:_
+
+bc. DROP INDEX <INDEX_NAME>
+
+A @DROP INDEX@ statement is used to drop an existing secondary index.
+DROP INDEX <INDEX_NAME> statement will search all ColumnFamilies in the current Keyspace for specified index and delete it if found.
+
h2. DROP
_Synopsis:_
Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java Sun Jun 5 13:43:22 2011
@@ -48,6 +48,7 @@ public class CResultSet extends Abstract
// the current row key when iterating through results.
private byte[] curRowKey = null;
+ private TypedColumn typedCurRowKey = null;
/** The values. */
private List<TypedColumn> values = new ArrayList<TypedColumn>();
@@ -78,6 +79,11 @@ public class CResultSet extends Abstract
return curRowKey;
}
+ public TypedColumn getTypedKey()
+ {
+ return typedCurRowKey;
+ }
+
public TypedColumn getColumn(int i)
{
return values.get(i);
@@ -379,6 +385,8 @@ public class CResultSet extends Abstract
CqlRow row = rSetIter.next();
rowNumber++;
curRowKey = row.getKey();
+ typedCurRowKey = decoder.makeKeyColumn(keyspace, columnFamily, curRowKey);
+
List<Column> cols = row.getColumns();
for (Column col : cols)
{
Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraConnection.java Sun Jun 5 13:43:22 2011
@@ -28,8 +28,10 @@ import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.NClob;
import java.sql.PreparedStatement;
+import java.sql.ResultSet;
import java.sql.SQLClientInfoException;
import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
import java.sql.SQLWarning;
import java.sql.SQLXML;
import java.sql.Savepoint;
@@ -52,10 +54,13 @@ import org.apache.thrift.transport.TTran
*/
class CassandraConnection implements Connection
{
-
- /** The cassandra con. */
+ private Properties clientInfo = new Properties();
+
+ /**
+ * The cassandra con.
+ */
private org.apache.cassandra.cql.jdbc.Connection cassandraCon;
-
+
/**
* Instantiates a new cassandra connection.
*
@@ -77,8 +82,7 @@ class CassandraConnection implements Con
final int host_backwardIdx = host_port.indexOf('/');
final String port = host_port.substring(host_colonIdx + 1, host_backwardIdx);
final String keyspace = host_port.substring(host_backwardIdx + 1);
- cassandraCon = new org.apache.cassandra.cql.jdbc.Connection(hostName, Integer.valueOf(port), userName,
- password);
+ cassandraCon = new org.apache.cassandra.cql.jdbc.Connection(hostName, Integer.valueOf(port), userName, password);
final String useQ = "USE " + keyspace;
cassandraCon.execute(useQ);
}
@@ -120,7 +124,7 @@ class CassandraConnection implements Con
}
}
-
+
/**
* @param arg0
* @return
@@ -128,10 +132,10 @@ class CassandraConnection implements Con
*/
public boolean isWrapperFor(Class<?> arg0) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLException("no object is found that implements this interface");
}
-
+
/**
* @param <T>
* @param arg0
@@ -140,17 +144,19 @@ class CassandraConnection implements Con
*/
public <T> T unwrap(Class<T> arg0) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLException("no object is found that implements this interface");
}
-
/**
* @throws SQLException
*/
public void clearWarnings() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ // This implementation does not support the collection of warnings so clearing is a no-op
+ // but it is still an exception to call this on a closed connection.
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
}
/**
@@ -172,7 +178,7 @@ class CassandraConnection implements Con
*/
public void commit() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLException("The Cassandra Implementation is always in auto-commit mode.");
}
@@ -184,7 +190,7 @@ class CassandraConnection implements Con
*/
public Array createArrayOf(String arg0, Object[] arg1) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -194,7 +200,7 @@ class CassandraConnection implements Con
*/
public Blob createBlob() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -204,7 +210,7 @@ class CassandraConnection implements Con
*/
public Clob createClob() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -214,7 +220,7 @@ class CassandraConnection implements Con
*/
public NClob createNClob() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -224,10 +230,10 @@ class CassandraConnection implements Con
*/
public SQLXML createSQLXML() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
-
+
/**
* @return
* @throws SQLException
@@ -246,7 +252,7 @@ class CassandraConnection implements Con
*/
public Statement createStatement(int arg0, int arg1) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -259,7 +265,7 @@ class CassandraConnection implements Con
*/
public Statement createStatement(int arg0, int arg1, int arg2) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -271,7 +277,7 @@ class CassandraConnection implements Con
*/
public Struct createStruct(String arg0, Object[] arg1) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -281,7 +287,7 @@ class CassandraConnection implements Con
*/
public boolean getAutoCommit() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ return true;
}
@@ -291,7 +297,12 @@ class CassandraConnection implements Con
*/
public String getCatalog() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ // This implementation does not support the catalog names so null is always returned if the connection is open.
+ // but it is still an exception to call this on a closed connection.
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ return null;
}
@@ -301,18 +312,24 @@ class CassandraConnection implements Con
*/
public Properties getClientInfo() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ return clientInfo;
}
/**
- * @param arg0
+ * @param label
* @return
* @throws SQLException
*/
- public String getClientInfo(String arg0) throws SQLException
+ public String getClientInfo(String label) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ return clientInfo.getProperty(label);
}
@@ -322,7 +339,11 @@ class CassandraConnection implements Con
*/
public int getHoldability() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ // the rationale is there are really no commits in Cassandra so no boundary...
+ return ResultSet.HOLD_CURSORS_OVER_COMMIT;
}
@@ -332,7 +353,11 @@ class CassandraConnection implements Con
*/
public DatabaseMetaData getMetaData() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ // the rationale is there is no DatabaseMetaData to return but if there was we would return it...
+ return null;
}
@@ -342,7 +367,10 @@ class CassandraConnection implements Con
*/
public int getTransactionIsolation() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ return Connection.TRANSACTION_NONE;
}
@@ -352,7 +380,7 @@ class CassandraConnection implements Con
*/
public Map<String, Class<?>> getTypeMap() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -362,7 +390,11 @@ class CassandraConnection implements Con
*/
public SQLWarning getWarnings() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ // the rationale is there are no warnings to return in this implementation...
+ return null;
}
@@ -372,7 +404,10 @@ class CassandraConnection implements Con
*/
public boolean isClosed() throws SQLException
{
- return false;
+ if (cassandraCon == null)
+ return true;
+
+ return !cassandraCon.isOpen();
}
@@ -387,24 +422,34 @@ class CassandraConnection implements Con
/**
- * @param arg0
+ * @param timeout
* @return
* @throws SQLException
*/
- public boolean isValid(int arg0) throws SQLException
+ public boolean isValid(int timeout) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+
+ if (timeout < 0)
+ throw new SQLException("the timeout value was less than zero");
+
+ // this needs to be more robust. Some query needs to be made to verify connection is really up.
+ return !isClosed();
}
/**
- * @param arg0
+ * @param sql
* @return
* @throws SQLException
*/
- public String nativeSQL(String arg0) throws SQLException
+ public String nativeSQL(String sql) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ // the rationale is there are no distinction between grammars in this implementation...
+ // so we are just return the input argument
+ return sql;
}
@@ -415,7 +460,7 @@ class CassandraConnection implements Con
*/
public CallableStatement prepareCall(String arg0) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -428,7 +473,7 @@ class CassandraConnection implements Con
*/
public CallableStatement prepareCall(String arg0, int arg1, int arg2) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -442,7 +487,7 @@ class CassandraConnection implements Con
*/
public CallableStatement prepareCall(String arg0, int arg1, int arg2, int arg3) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -465,7 +510,7 @@ class CassandraConnection implements Con
*/
public PreparedStatement prepareStatement(String arg0, int arg1) throws SQLException
{
- return null;
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -477,7 +522,7 @@ class CassandraConnection implements Con
*/
public PreparedStatement prepareStatement(String arg0, int[] arg1) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -489,7 +534,7 @@ class CassandraConnection implements Con
*/
public PreparedStatement prepareStatement(String arg0, String[] arg1) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -502,7 +547,7 @@ class CassandraConnection implements Con
*/
public PreparedStatement prepareStatement(String arg0, int arg1, int arg2) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -516,7 +561,7 @@ class CassandraConnection implements Con
*/
public PreparedStatement prepareStatement(String arg0, int arg1, int arg2, int arg3) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
@@ -526,18 +571,16 @@ class CassandraConnection implements Con
*/
public void releaseSavepoint(Savepoint arg0) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
-
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
/**
* @throws SQLException
- */
+ */
public void rollback() throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
-
+ throw new SQLException("the Cassandra Implementation is always in auto-commit mode");
}
@@ -547,19 +590,18 @@ class CassandraConnection implements Con
*/
public void rollback(Savepoint arg0) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
-
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
/**
- * @param arg0
+ * @param autoCommit
* @throws SQLException
*/
- public void setAutoCommit(boolean arg0) throws SQLException
+ public void setAutoCommit(boolean autoCommit) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
-
+ if (!autoCommit)
+ throw new SQLException("the Cassandra Implementation is always in auto-commit mode");
}
@@ -569,29 +611,35 @@ class CassandraConnection implements Con
*/
public void setCatalog(String arg0) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ // the rationale is there are no catalog name to set in this implementation...
+ // so we are "silently ignoring" the request
}
/**
- * @param arg0
+ * @param props
* @throws SQLClientInfoException
*/
- public void setClientInfo(Properties arg0) throws SQLClientInfoException
+ public void setClientInfo(Properties props) throws SQLClientInfoException
{
- throw new UnsupportedOperationException("method not supported");
+ // this needs to be revisited when and if we actually start to use the clientInfo properties
+ if (props != null)
+ clientInfo = props;
}
/**
- * @param arg0
- * @param arg1
+ * @param key
+ * @param value
* @throws SQLClientInfoException
*/
- public void setClientInfo(String arg0, String arg1) throws SQLClientInfoException
+ public void setClientInfo(String key, String value) throws SQLClientInfoException
{
- throw new UnsupportedOperationException("method not supported");
-
+ // this needs to be revisited when and if we actually start to use the clientInfo properties
+ clientInfo.setProperty(key, value);
}
@@ -601,9 +649,13 @@ class CassandraConnection implements Con
*/
public void setHoldability(int arg0) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ // the rationale is there are no holdability to set in this implementation...
+ // so we are "silently ignoring" the request
}
-
+
/**
* @param arg0
@@ -611,9 +663,13 @@ class CassandraConnection implements Con
*/
public void setReadOnly(boolean arg0) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ // the rationale is all connections are read/write in the Cassandra implementation...
+ // so we are "silently ignoring" the request
}
-
+
/**
* @return
@@ -623,7 +679,7 @@ class CassandraConnection implements Con
{
throw new UnsupportedOperationException("method not supported");
}
-
+
/**
* @param arg0
@@ -632,19 +688,23 @@ class CassandraConnection implements Con
*/
public Savepoint setSavepoint(String arg0) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
-
+
/**
- * @param arg0
+ * @param level
* @throws SQLException
*/
- public void setTransactionIsolation(int arg0) throws SQLException
+ public void setTransactionIsolation(int level) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ if (isClosed())
+ throw new SQLException("this method was called on a closed Connection");
+
+ if (level != Connection.TRANSACTION_NONE)
+ throw new SQLException("the Cassandra Inplementation does not support transactions");
}
-
+
/**
* @param arg0
@@ -652,7 +712,7 @@ class CassandraConnection implements Con
*/
public void setTypeMap(Map<String, Class<?>> arg0) throws SQLException
{
- throw new UnsupportedOperationException("method not supported");
+ throw new SQLFeatureNotSupportedException("the Cassandra Implementation does not support this method");
}
}
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=1132406&r1=1132405&r2=1132406&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 Sun Jun 5 13:43:22 2011
@@ -30,6 +30,7 @@ public interface CassandraResultSet exte
* @return the current row key
*/
public byte[] getKey();
+ public TypedColumn getTypedKey();
/** @return a BigInteger value for the given column offset*/
public BigInteger getBigInteger(int i);
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=1132406&r1=1132405&r2=1132406&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 Sun Jun 5 13:43:22 2011
@@ -128,4 +128,14 @@ class ColumnDecoder
getNameType(keyspace, columnFamily, column.name),
getValueType(keyspace, columnFamily, column.name));
}
+
+ /** constructs a typed column to hold the key */
+ public TypedColumn makeKeyColumn(String keyspace, String columnFamily, byte[] key)
+ {
+ CFMetaData md = metadata.get(String.format("%s.%s", keyspace, columnFamily));
+ Column column = new Column(md.getKeyName()).setValue(key).setTimestamp(-1);
+ return new TypedColumn(column,
+ getNameType(keyspace, columnFamily, md.getKeyName()),
+ getValueType(keyspace, columnFamily, md.getKeyName()));
+ }
}
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=1132406&r1=1132405&r2=1132406&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 Sun Jun 5 13:43:22 2011
@@ -27,7 +27,10 @@ import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.sql.*;
import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.cassandra.cql.jdbc.CassandraResultSet;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -256,27 +259,31 @@ public class JdbcDriverTest extends Embe
public void testWithStatement() throws SQLException
{
Statement stmt = con.createStatement();
-
+ List<String> keys = Arrays.asList(jsmith);
String selectQ = "SELECT 1, 2 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "Int", 1, "1", "2");
+ checkResultSet(stmt.executeQuery(selectQ), "Int", 1, keys, "1", "2");
selectQ = "SELECT 3, 4 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "Int", 1, "3", "4");
+ checkResultSet(stmt.executeQuery(selectQ), "Int", 1, keys, "3", "4");
selectQ = "SELECT 1, 2, 3, 4 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "Int", 1, "1", "2", "3", "4");
+ checkResultSet(stmt.executeQuery(selectQ), "Int", 1, keys, "1", "2", "3", "4");
selectQ = "SELECT 1, 2 FROM JdbcLong WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "Long", 1, "1", "2");
+ checkResultSet(stmt.executeQuery(selectQ), "Long", 1, keys, "1", "2");
selectQ = "SELECT 'first', last FROM JdbcAscii WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "String", 1, "first", "last");
+ checkResultSet(stmt.executeQuery(selectQ), "String", 1, keys, "first", "last");
selectQ = String.format("SELECT '%s', '%s' FROM JdbcBytes WHERE KEY='%s'", first, last, jsmith);
- checkResultSet(stmt.executeQuery(selectQ), "Bytes", 1, first, last);
+ checkResultSet(stmt.executeQuery(selectQ), "Bytes", 1, keys, first, last);
selectQ = "SELECT 'first', last FROM JdbcUtf8 WHERE KEY='" + jsmith + "'";
- checkResultSet(stmt.executeQuery(selectQ), "String", 1, "first", "last");
+ checkResultSet(stmt.executeQuery(selectQ), "String", 1, keys, "first", "last");
+
+ String badKey = FBUtilities.bytesToHex(String.format("jsmith-%s", System.currentTimeMillis()).getBytes());
+ selectQ = "SELECT 1, 2 FROM JdbcInteger WHERE KEY IN ('" + badKey + "', '" + jsmith + "')";
+ checkResultSet(stmt.executeQuery(selectQ), "Int", 1, keys, "1", "2");
}
@Test
@@ -293,29 +300,35 @@ public class JdbcDriverTest extends Embe
@Test
public void testWithPreparedStatement() throws SQLException
{
+ List<String> keys = Arrays.asList(jsmith);
+
String selectQ = String.format("SELECT '%s', '%s' FROM Standard1 WHERE KEY='%s'", first, last, jsmith);
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Bytes", 1, first, last);
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Bytes", 1, keys, first, last);
selectQ = "SELECT 1, 2 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, "1", "2");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, keys, "1", "2");
selectQ = "SELECT 3, 4 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, "3", "4");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, keys, "3", "4");
selectQ = "SELECT 1, 2, 3, 4 FROM JdbcInteger WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, "1", "2", "3", "4");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, keys, "1", "2", "3", "4");
selectQ = "SELECT 1, 2 FROM JdbcLong WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Long", 1, "1", "2");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Long", 1, keys, "1", "2");
selectQ = "SELECT 'first', last FROM JdbcAscii WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "String", 1, "first", "last");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "String", 1, keys, "first", "last");
selectQ = String.format("SELECT '%s', '%s' FROM JdbcBytes WHERE KEY='%s'", first, last, jsmith);
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "Bytes", 1, first, last);
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Bytes", 1, keys, first, last);
selectQ = "SELECT 'first', last FROM JdbcUtf8 WHERE KEY='" + jsmith + "'";
- checkResultSet(executePreparedStatementWithResults(con, selectQ), "String", 1, "first", "last");
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "String", 1, keys, "first", "last");
+
+ String badKey = FBUtilities.bytesToHex(String.format("jsmith-%s", System.currentTimeMillis()).getBytes());
+ selectQ = "SELECT 1, 2 FROM JdbcInteger WHERE KEY IN ('" + badKey + "', '" + jsmith + "')";
+ checkResultSet(executePreparedStatementWithResults(con, selectQ), "Int", 1, keys, "1", "2");
}
/* Method to test with Delete statement. */
@@ -412,11 +425,23 @@ public class JdbcDriverTest extends Embe
/** iterates over a result set checking columns */
private static void checkResultSet(ResultSet rs, String accessor, int expectedRows, String... cols) throws SQLException
{
+ checkResultSet(rs, accessor, expectedRows, null, cols);
+ }
+
+ private static void checkResultSet(ResultSet rs, String accessor, int expectedRows, List<String> keys, String... cols) throws SQLException
+ {
int actualRows = 0;
assert rs != null;
+ Iterator<String> keyIter = (keys == null) ? null : keys.iterator();
+ CassandraResultSet cassandraRs = (CassandraResultSet)rs;
while (rs.next())
{
actualRows++;
+ if (keyIter != null)
+ {
+ assert cassandraRs.getTypedKey().getValueString().equals(keyIter.next());
+ }
+
for (int c = 0; c < cols.length; c++)
{
// getObject should always work.
Modified: cassandra/trunk/drivers/py/cql/marshal.py
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/py/cql/marshal.py?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/drivers/py/cql/marshal.py (original)
+++ cassandra/trunk/drivers/py/cql/marshal.py Sun Jun 5 13:43:22 2011
@@ -39,6 +39,7 @@ LONG_TYPE = "org.apache.cassandra.db.mar
UUID_TYPE = "org.apache.cassandra.db.marshal.UUIDType"
LEXICAL_UUID_TYPE = "org.apache.cassandra.db.marshal.LexicalType"
TIME_UUID_TYPE = "org.apache.cassandra.db.marshal.TimeUUIDType"
+COUNTER_COLUMN_TYPE = "org.apache.cassandra.db.marshal.CounterColumnType"
def prepare(query, params):
# For every match of the form ":param_name", call marshal
@@ -76,14 +77,15 @@ else:
def unmarshal_uuid(bytestr):
return UUID(bytes=bytestr)
-unmarshallers = {BYTES_TYPE: unmarshal_noop,
- ASCII_TYPE: unmarshal_noop,
- UTF8_TYPE: unmarshal_utf8,
- INTEGER_TYPE: unmarshal_int,
- LONG_TYPE: unmarshal_long,
- UUID_TYPE: unmarshal_uuid,
- LEXICAL_UUID_TYPE: unmarshal_uuid,
- TIME_UUID_TYPE: unmarshal_uuid}
+unmarshallers = {BYTES_TYPE: unmarshal_noop,
+ ASCII_TYPE: unmarshal_noop,
+ UTF8_TYPE: unmarshal_utf8,
+ INTEGER_TYPE: unmarshal_int,
+ LONG_TYPE: unmarshal_long,
+ UUID_TYPE: unmarshal_uuid,
+ LEXICAL_UUID_TYPE: unmarshal_uuid,
+ TIME_UUID_TYPE: unmarshal_uuid,
+ COUNTER_COLUMN_TYPE: unmarshal_long}
def decode_bigint(term):
val = int(term.encode('hex'), 16)
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jun 5 13:43:22 2011
@@ -1,8 +1,8 @@
-/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-1128347,1129151
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1052356,1052358-1053452,1053454,1053456-1131291
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1131292
/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:1090934-1125013,1125019-1129091,1129094-1129095,1129155,1129462-1129463,1130863-1130864
-/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1125021-1127636,1129154
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1090934-1125013,1125019-1132405
+/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1125021-1130369
/cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1101014-1125018
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1051699-1053689
/cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1102511-1125020
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jun 5 13:43:22 2011
@@ -1,8 +1,8 @@
-/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-1128347,1129151
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1052356,1052358-1053452,1053454,1053456-1131291
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1131292
/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:1090934-1125013,1125019-1129091,1129094-1129095,1129155,1129462-1129463,1130863-1130864
-/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1125021-1127636,1129154
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1090934-1125013,1125019-1132405
+/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1125021-1130369
/cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1101014-1125018
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1051699-1053689
/cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1102511-1125020
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jun 5 13:43:22 2011
@@ -1,8 +1,8 @@
-/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-1128347,1129151
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1052356,1052358-1053452,1053454,1053456-1131291
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1131292
/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:1090934-1125013,1125019-1129091,1129094-1129095,1129155,1129462-1129463,1130863-1130864
-/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1125021-1127636,1129154
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1090934-1125013,1125019-1132405
+/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1125021-1130369
/cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1101014-1125018
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1051699-1053689
/cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1102511-1125020
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jun 5 13:43:22 2011
@@ -1,8 +1,8 @@
-/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-1128347,1129151
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1052356,1052358-1053452,1053454,1053456-1131291
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1131292
/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:1090934-1125013,1125019-1129091,1129094-1129095,1129155,1129462-1129463,1130863-1130864
-/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1125021-1127636,1129154
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1090934-1125013,1125019-1132405
+/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1125021-1130369
/cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1101014-1125018
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1051699-1053689
/cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1102511-1125020
Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jun 5 13:43:22 2011
@@ -1,8 +1,8 @@
-/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-1128347,1129151
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1052356,1052358-1053452,1053454,1053456-1131291
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1131292
/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:1090934-1125013,1125019-1129091,1129094-1129095,1129155,1129462-1129463,1130863-1130864
-/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1125021-1127636,1129154
+/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1090934-1125013,1125019-1132405
+/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1125021-1130369
/cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1101014-1125018
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1051699-1053689
/cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1102511-1125020
Modified: cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java Sun Jun 5 13:43:22 2011
@@ -257,7 +257,7 @@ public final class CFMetaData
public static CFMetaData newIndexMetadata(CFMetaData parent, ColumnDefinition info, AbstractType columnComparator)
{
- return new CFMetaData(parent.ksName, parent.indexName(info), ColumnFamilyType.Standard, columnComparator, null)
+ return new CFMetaData(parent.ksName, parent.indexColumnFamilyName(info), ColumnFamilyType.Standard, columnComparator, null)
.keyCacheSize(0.0)
.readRepairChance(0.0)
.gcGraceSeconds(parent.gcGraceSeconds)
@@ -305,10 +305,18 @@ public final class CFMetaData
cfIdMap.remove(new Pair<String, String>(cfm.ksName, cfm.cfName));
}
- /** convention for nameing secondary indexes. */
- public String indexName(ColumnDefinition info)
+ /**
+ * generate a column family name for an index corresponding to the given column.
+ * This is NOT the same as the index's name! This is only used in sstable filenames and is not exposed to users.
+ *
+ * @param info A definition of the column with index
+ *
+ * @return name of the index ColumnFamily
+ */
+ public String indexColumnFamilyName(ColumnDefinition info)
{
- return cfName + "." + (info.getIndexName() == null ? comparator.getString(info.name) + "_idx" : info.getIndexName());
+ // TODO simplify this when info.index_name is guaranteed to be set
+ return cfName + "." + (info.getIndexName() == null ? ByteBufferUtil.bytesToHex(info.name) : info.getIndexName());
}
public org.apache.cassandra.db.migration.avro.CfDef deflate()
@@ -369,6 +377,8 @@ public final class CFMetaData
for (ColumnDef aColumn_metadata : cf.column_metadata)
{
ColumnDefinition cd = ColumnDefinition.inflate(aColumn_metadata);
+ if (cd.getIndexName() == null)
+ cd.setIndexName(getDefaultIndexName(comparator, cd.name));
column_metadata.put(cd.name, cd);
}
@@ -930,6 +940,37 @@ public final class CFMetaData
return column_metadata.get(name);
}
+ /**
+ * Convert a null index_name to appropriate default name according to column status
+ * @param cf_def Thrift ColumnFamily Definition
+ */
+ public static void addDefaultIndexNames(org.apache.cassandra.thrift.CfDef cf_def) throws InvalidRequestException
+ {
+ if (cf_def.column_metadata == null)
+ return;
+
+ AbstractType comparator;
+ try
+ {
+ comparator = TypeParser.parse(cf_def.comparator_type);
+ }
+ catch (ConfigurationException e)
+ {
+ throw new InvalidRequestException(e.getMessage());
+ }
+
+ for (org.apache.cassandra.thrift.ColumnDef column : cf_def.column_metadata)
+ {
+ if (column.index_type != null && column.index_name == null)
+ column.index_name = getDefaultIndexName(comparator, column.name);
+ }
+ }
+
+ public static String getDefaultIndexName(AbstractType comparator, ByteBuffer columnName)
+ {
+ return comparator.getString(columnName).replaceAll("\\W", "") + "_idx";
+ }
+
@Override
public String toString()
{
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=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java Sun Jun 5 13:43:22 2011
@@ -68,7 +68,10 @@ public final class KSMetaData
public static Map<String, String> forwardsCompatibleOptions(KsDef ks_def)
{
- Map<String, String> options = new HashMap<String, String>(ks_def.strategy_options);
+ Map<String, String> options;
+ options = ks_def.strategy_options == null
+ ? new HashMap<String, String>()
+ : new HashMap<String, String>(ks_def.strategy_options);
maybeAddReplicationFactor(options, ks_def.strategy_class, ks_def.isSetReplication_factor() ? ks_def.replication_factor : null);
return options;
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/AbstractModification.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/AbstractModification.java?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/AbstractModification.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/AbstractModification.java Sun Jun 5 13:43:22 2011
@@ -20,7 +20,7 @@
*/
package org.apache.cassandra.cql;
-import org.apache.cassandra.db.RowMutation;
+import org.apache.cassandra.db.IMutation;
import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.thrift.ConsistencyLevel;
import org.apache.cassandra.thrift.InvalidRequestException;
@@ -95,8 +95,8 @@ public abstract class AbstractModificati
*
* @throws InvalidRequestException on the wrong request
*/
- public abstract List<RowMutation> prepareRowMutations(String keyspace, ClientState clientState)
- throws InvalidRequestException;
+ public abstract List<IMutation> prepareRowMutations(String keyspace, ClientState clientState)
+ throws org.apache.cassandra.thrift.InvalidRequestException;
/**
* Convert statement into a list of mutations to apply on the server
@@ -109,37 +109,6 @@ public abstract class AbstractModificati
*
* @throws InvalidRequestException on the wrong request
*/
- public abstract List<RowMutation> prepareRowMutations(String keyspace, ClientState clientState, Long timestamp)
- throws InvalidRequestException;
-
- /**
- * Compute a row mutation for a single key
- *
- * @param key The key for mutation
- * @param keyspace The keyspace
- * @param timestamp The global timestamp for mutation
- *
- * @return row mutation
- *
- * @throws InvalidRequestException on the wrong request
- */
- public abstract RowMutation mutationForKey(ByteBuffer key, String keyspace, Long timestamp)
- throws InvalidRequestException;
-
- /**
- * Compute a row mutation for a single key and add it to the given RowMutation object
- *
- * @param mutation The row mutation to add computed mutation into
- * @param keyspace The keyspace
- * @param timestamp The global timestamp for mutation
- *
- * @throws InvalidRequestException on the wrong request
- */
- public abstract void mutationForKey(RowMutation mutation, String keyspace, Long timestamp)
- throws InvalidRequestException;
-
- /**
- * @return a list of the keys associated with the statement
- */
- public abstract List<Term> getKeys();
+ public abstract List<IMutation> prepareRowMutations(String keyspace, ClientState clientState, Long timestamp)
+ throws org.apache.cassandra.thrift.InvalidRequestException;
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/BatchStatement.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/BatchStatement.java?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/BatchStatement.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/BatchStatement.java Sun Jun 5 13:43:22 2011
@@ -20,23 +20,14 @@
*/
package org.apache.cassandra.cql;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
-import org.apache.cassandra.auth.Permission;
-import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.db.ColumnFamily;
-import org.apache.cassandra.db.RowMutation;
-import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.cassandra.db.IMutation;
import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.thrift.ConsistencyLevel;
import org.apache.cassandra.thrift.InvalidRequestException;
-import static org.apache.cassandra.thrift.ThriftValidation.validateColumnFamily;
-
/**
* A <code>BATCH</code> statement parsed from a CQL query.
*
@@ -85,41 +76,12 @@ public class BatchStatement
return timeToLive;
}
- public List<RowMutation> getMutations(String keyspace, ClientState clientState) throws InvalidRequestException
+ public List<IMutation> getMutations(String keyspace, ClientState clientState) throws InvalidRequestException
{
- // To avoid unnecessary authorizations.
- List<String> seenColumnFamilies = new ArrayList<String>();
-
- List<RowMutation> batch = new LinkedList<RowMutation>();
-
- for (AbstractModification statement : statements)
- {
- final String columnFamily = statement.getColumnFamily();
-
- authorizeColumnFamily(keyspace, columnFamily, clientState, seenColumnFamilies);
-
- AbstractType<?> keyValidator = getKeyType(keyspace, columnFamily);
-
- for (Term rawKey : statement.getKeys()) // for each key of the statement
- {
- ByteBuffer key = rawKey.getByteBuffer(keyValidator);
+ List<IMutation> batch = new LinkedList<IMutation>();
- boolean found = false;
-
- for (RowMutation mutation : batch)
- {
- if (mutation.key().equals(key) && hasColumnFamily(mutation.getColumnFamilies(), columnFamily))
- {
- statement.mutationForKey(mutation, keyspace, timestamp);
-
- found = true;
- break;
- }
- }
-
- if (!found) // if mutation was not found we should add a new one
- batch.add(statement.mutationForKey(key, keyspace, timestamp));
- }
+ for (AbstractModification statement : statements) {
+ batch.addAll(statement.prepareRowMutations(keyspace, clientState, timestamp));
}
return batch;
@@ -130,34 +92,6 @@ public class BatchStatement
return timestamp != null;
}
- private boolean hasColumnFamily(Collection<ColumnFamily> columnFamilies, String columnFamily)
- {
- for (ColumnFamily cf : columnFamilies)
- {
- if (cf.metadata().cfName.equals(columnFamily))
- return true;
- }
-
- return false;
- }
-
- private void authorizeColumnFamily(String keyspace, String columnFamily, ClientState state, List<String> seenCFs)
- throws InvalidRequestException
- {
- validateColumnFamily(keyspace, columnFamily, false);
-
- if (!seenCFs.contains(columnFamily))
- {
- state.hasColumnFamilyAccess(columnFamily, Permission.WRITE);
- seenCFs.add(columnFamily);
- }
- }
-
- public AbstractType<?> getKeyType(String keyspace, String columnFamily)
- {
- return DatabaseDescriptor.getCFMetaData(keyspace, columnFamily).getKeyValidator();
- }
-
public String toString()
{
return String.format("BatchStatement(statements=%s, consistency=%s)", statements, consistency);
Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g Sun Jun 5 13:43:22 2011
@@ -35,6 +35,8 @@ options {
import java.util.ArrayList;
import org.apache.cassandra.thrift.ConsistencyLevel;
import org.apache.cassandra.thrift.InvalidRequestException;
+
+ import static org.apache.cassandra.cql.AlterTableStatement.OperationType;
}
@members {
@@ -111,8 +113,10 @@ query returns [CQLStatement stmnt]
| createKeyspaceStatement { $stmnt = new CQLStatement(StatementType.CREATE_KEYSPACE, $createKeyspaceStatement.expr); }
| createColumnFamilyStatement { $stmnt = new CQLStatement(StatementType.CREATE_COLUMNFAMILY, $createColumnFamilyStatement.expr); }
| createIndexStatement { $stmnt = new CQLStatement(StatementType.CREATE_INDEX, $createIndexStatement.expr); }
+ | dropIndexStatement { $stmnt = new CQLStatement(StatementType.DROP_INDEX, $dropIndexStatement.expr); }
| dropKeyspaceStatement { $stmnt = new CQLStatement(StatementType.DROP_KEYSPACE, $dropKeyspaceStatement.ksp); }
| dropColumnFamilyStatement { $stmnt = new CQLStatement(StatementType.DROP_COLUMNFAMILY, $dropColumnFamilyStatement.cfam); }
+ | alterTableStatement { $stmnt = new CQLStatement(StatementType.ALTER_TABLE, $alterTableStatement.expr); }
;
// USE <KEYSPACE>;
@@ -288,12 +292,12 @@ batchStatementObjective returns [Abstrac
updateStatement returns [UpdateStatement expr]
: {
Attributes attrs = new Attributes();
- Map<Term, Term> columns = new HashMap<Term, Term>();
+ Map<Term, Operation> columns = new HashMap<Term, Operation>();
List<Term> keyList = null;
}
K_UPDATE columnFamily=( IDENT | STRING_LITERAL | INTEGER )
( usingClause[attrs] )?
- K_SET termPair[columns] (',' termPair[columns])*
+ K_SET termPairWithOperation[columns] (',' termPairWithOperation[columns])*
K_WHERE ( K_KEY '=' key=term { keyList = Collections.singletonList(key); }
|
K_KEY K_IN '(' keys=termList { keyList = $keys.items; } ')' )
@@ -380,19 +384,49 @@ createIndexStatement returns [CreateInde
: K_CREATE K_INDEX (idxName=IDENT)? K_ON cf=( IDENT | STRING_LITERAL | INTEGER ) '(' columnName=term ')' endStmnt
{ $expr = new CreateIndexStatement($idxName.text, $cf.text, columnName); }
;
+/**
+ * DROP INDEX ON <CF>.<COLUMN_OR_INDEX_NAME>
+ * DROP INDEX <INDEX_NAME>
+ */
+dropIndexStatement returns [DropIndexStatement expr]
+ :
+ K_DROP K_INDEX index=( IDENT | STRING_LITERAL | INTEGER ) endStmnt
+ { $expr = new DropIndexStatement($index.text); }
+ ;
/** DROP KEYSPACE <KSP>; */
dropKeyspaceStatement returns [String ksp]
: K_DROP K_KEYSPACE name=( IDENT | STRING_LITERAL | INTEGER ) endStmnt { $ksp = $name.text; }
;
+
+alterTableStatement returns [AlterTableStatement expr]
+ :
+ {
+ OperationType type = null;
+ String columnFamily = null, columnName = null, validator = null;
+ }
+ K_ALTER K_TABLE name=( IDENT | STRING_LITERAL | INTEGER ) { columnFamily = $name.text; }
+ ( K_ALTER { type = OperationType.ALTER; }
+ (col=( IDENT | STRING_LITERAL | INTEGER ) { columnName = $col.text; })
+ K_TYPE alterValidator=comparatorType { validator = $alterValidator.text; }
+ | K_ADD { type = OperationType.ADD; }
+ (col=( IDENT | STRING_LITERAL | INTEGER ) { columnName = $col.text; })
+ addValidator=comparatorType { validator = $addValidator.text; }
+ | K_DROP { type = OperationType.DROP; }
+ (col=( IDENT | STRING_LITERAL | INTEGER ) { columnName = $col.text; }))
+ endStmnt
+ {
+ $expr = new AlterTableStatement(columnFamily, type, columnName, validator);
+ }
+ ;
/** DROP COLUMNFAMILY <CF>; */
dropColumnFamilyStatement returns [String cfam]
: K_DROP K_COLUMNFAMILY name=( IDENT | STRING_LITERAL | INTEGER ) endStmnt { $cfam = $name.text; }
;
comparatorType
- : 'bytea' | 'ascii' | 'text' | 'varchar' | 'int' | 'varint' | 'bigint' | 'uuid'
+ : 'bytea' | 'ascii' | 'text' | 'varchar' | 'int' | 'varint' | 'bigint' | 'uuid' | 'counter'
;
term returns [Term item]
@@ -409,6 +443,12 @@ termPair[Map<Term, Term> columns]
: key=term '=' value=term { columns.put(key, value); }
;
+termPairWithOperation[Map<Term, Operation> columns]
+ : key=term '=' (value=term { columns.put(key, new Operation(value)); }
+ | c=term ( '+' v=term { columns.put(key, new Operation(c, org.apache.cassandra.cql.Operation.OperationType.PLUS, v)); }
+ | '-' v=term { columns.put(key, new Operation(c, org.apache.cassandra.cql.Operation.OperationType.MINUS, v)); } ))
+ ;
+
// Note: ranges are inclusive so >= and >, and < and <= all have the same semantics.
relation returns [Relation rel]
: { Term entity = new Term("KEY", STRING_LITERAL); }
@@ -468,6 +508,10 @@ K_INTO: I N T O;
K_VALUES: V A L U E S;
K_TIMESTAMP: T I M E S T A M P;
K_TTL: T T L;
+K_ALTER: A L T E R;
+K_TABLE: T A B L E;
+K_ADD: A D D;
+K_TYPE: T Y P E;
// Case-insensitive alpha characters
fragment A: ('a'|'A');
Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java Sun Jun 5 13:43:22 2011
@@ -58,7 +58,7 @@ public class CreateColumnFamilyStatement
private static final String KW_ROW_CACHE_PROVIDER = "row_cache_provider";
// Maps CQL short names to the respective Cassandra comparator/validator class names
- private static final Map<String, String> comparators = new HashMap<String, String>();
+ public static final Map<String, String> comparators = new HashMap<String, String>();
private static final Set<String> keywords = new HashSet<String>();
static
@@ -71,6 +71,7 @@ public class CreateColumnFamilyStatement
comparators.put("int", "LongType");
comparators.put("bigint", "LongType");
comparators.put("uuid", "UUIDType");
+ comparators.put("counter", "CounterColumnType");
keywords.add(KW_COMPARATOR);
keywords.add(KW_COMMENT);
Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/DeleteStatement.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/DeleteStatement.java?rev=1132406&r1=1132405&r2=1132406&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/DeleteStatement.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/DeleteStatement.java Sun Jun 5 13:43:22 2011
@@ -27,6 +27,7 @@ import java.util.List;
import org.apache.cassandra.auth.Permission;
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.IMutation;
import org.apache.cassandra.db.RowMutation;
import org.apache.cassandra.db.filter.QueryPath;
import org.apache.cassandra.db.marshal.AbstractType;
@@ -66,18 +67,18 @@ public class DeleteStatement extends Abs
}
/** {@inheritDoc} */
- public List<RowMutation> prepareRowMutations(String keyspace, ClientState clientState) throws InvalidRequestException
+ public List<IMutation> prepareRowMutations(String keyspace, ClientState clientState) throws InvalidRequestException
{
return prepareRowMutations(keyspace, clientState, null);
}
/** {@inheritDoc} */
- public List<RowMutation> prepareRowMutations(String keyspace, ClientState clientState, Long timestamp) throws InvalidRequestException
+ public List<IMutation> prepareRowMutations(String keyspace, ClientState clientState, Long timestamp) throws InvalidRequestException
{
clientState.hasColumnFamilyAccess(columnFamily, Permission.WRITE);
AbstractType<?> keyType = DatabaseDescriptor.getCFMetaData(keyspace, columnFamily).getKeyValidator();
- List<RowMutation> rowMutations = new ArrayList<RowMutation>();
+ List<IMutation> rowMutations = new ArrayList<IMutation>();
for (Term key : keys)
{
@@ -100,7 +101,8 @@ public class DeleteStatement extends Abs
/** {@inheritDoc} */
public void mutationForKey(RowMutation mutation, String keyspace, Long timestamp) throws InvalidRequestException
{
- CFMetaData metadata = validateColumnFamily(keyspace, columnFamily, false);
+ CFMetaData metadata = validateColumnFamily(keyspace, columnFamily);
+
AbstractType comparator = metadata.getComparatorFor(null);
if (columns.size() < 1) // No columns, delete the row