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/cassandra-2.2 Commit: 0d5908bcc031f93b439fe9a2d717b8e2f9a98740 Parents: 72f2cc4 e9f3604 Author: Sylvain Lebresne <sylv...@datastax.com> Authored: Fri Sep 11 18:40:23 2015 +0200 Committer: Sylvain Lebresne <sylv...@datastax.com> 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); + } + }); + } + } }