Merge branch 'cassandra-2.1' into cassandra-2.2
Conflicts:
src/java/org/apache/cassandra/cql3/QueryProcessor.java
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/0d5908bc
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/0d5908bc
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/0d5908bc
Branch: refs/heads/trunk
Commit: 0d5908bcc031f93b439fe9a2d717b8e2f9a98740
Parents: 72f2cc4 e9f3604
Author: Sylvain Lebresne <[email protected]>
Authored: Fri Sep 11 18:40:23 2015 +0200
Committer: Sylvain Lebresne <[email protected]>
Committed: Fri Sep 11 18:40:23 2015 +0200
----------------------------------------------------------------------
src/java/org/apache/cassandra/cql3/QueryProcessor.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/0d5908bc/src/java/org/apache/cassandra/cql3/QueryProcessor.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/cql3/QueryProcessor.java
index b1b4cb4,d59d84f..e9ff1b1
--- a/src/java/org/apache/cassandra/cql3/QueryProcessor.java
+++ b/src/java/org/apache/cassandra/cql3/QueryProcessor.java
@@@ -597,30 -612,13 +597,30 @@@ public class QueryProcessor implements
return ksName.equals(statementKsName) && (cfName == null ||
cfName.equals(statementCfName));
}
+ public void onCreateFunction(String ksName, String functionName,
List<AbstractType<?>> argTypes) {
+ if (Functions.getOverloadCount(new FunctionName(ksName,
functionName)) > 1)
+ {
+ // in case there are other overloads, we have to remove all
overloads since argument type
+ // matching may change (due to type casting)
+
removeInvalidPreparedStatementsForFunction(preparedStatements.values().iterator(),
ksName, functionName);
+
removeInvalidPreparedStatementsForFunction(thriftPreparedStatements.values().iterator(),
ksName, functionName);
+ }
+ }
+ public void onCreateAggregate(String ksName, String aggregateName,
List<AbstractType<?>> argTypes) {
+ if (Functions.getOverloadCount(new FunctionName(ksName,
aggregateName)) > 1)
+ {
+ // in case there are other overloads, we have to remove all
overloads since argument type
+ // matching may change (due to type casting)
+
removeInvalidPreparedStatementsForFunction(preparedStatements.values().iterator(),
ksName, aggregateName);
+
removeInvalidPreparedStatementsForFunction(thriftPreparedStatements.values().iterator(),
ksName, aggregateName);
+ }
+ }
+
public void onUpdateColumnFamily(String ksName, String cfName,
boolean columnsDidChange)
{
- logger.info("Column definitions for {}.{} changed, invalidating
related prepared statements", ksName, cfName);
++ logger.debug("Column definitions for {}.{} changed, invalidating
related prepared statements", ksName, cfName);
if (columnsDidChange)
- {
- logger.debug("Column definitions for {}.{} changed,
invalidating related prepared statements", ksName, cfName);
removeInvalidPreparedStatements(ksName, cfName);
- }
}
public void onDropKeyspace(String ksName)
@@@ -631,41 -629,8 +631,41 @@@
public void onDropColumnFamily(String ksName, String cfName)
{
- logger.info("Table {}.{} was dropped, invalidating related
prepared statements", ksName, cfName);
+ logger.debug("Table {}.{} was dropped, invalidating related
prepared statements", ksName, cfName);
removeInvalidPreparedStatements(ksName, cfName);
}
- }
+
+ public void onDropFunction(String ksName, String functionName,
List<AbstractType<?>> argTypes)
+ {
+
removeInvalidPreparedStatementsForFunction(preparedStatements.values().iterator(),
ksName, functionName);
+
removeInvalidPreparedStatementsForFunction(thriftPreparedStatements.values().iterator(),
ksName, functionName);
+ }
+
+ public void onDropAggregate(String ksName, String aggregateName,
List<AbstractType<?>> argTypes)
+ {
+
removeInvalidPreparedStatementsForFunction(preparedStatements.values().iterator(),
ksName, aggregateName);
+
removeInvalidPreparedStatementsForFunction(thriftPreparedStatements.values().iterator(),
ksName, aggregateName);
+ }
+
+ private static void
removeInvalidPreparedStatementsForFunction(Iterator<ParsedStatement.Prepared>
statements,
+ final
String ksName,
+ final
String functionName)
+ {
+ final Predicate<Function> matchesFunction = new
Predicate<Function>()
+ {
+ public boolean apply(Function f)
+ {
+ return ksName.equals(f.name().keyspace) &&
functionName.equals(f.name().name);
+ }
+ };
+
+ Iterators.removeIf(statements, new
Predicate<ParsedStatement.Prepared>()
+ {
+ public boolean apply(ParsedStatement.Prepared statement)
+ {
+ return Iterables.any(statement.statement.getFunctions(),
matchesFunction);
+ }
+ });
+ }
+ }
}