[
https://issues.apache.org/jira/browse/CASSANDRA-2737?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
MichaĆ Michalski updated CASSANDRA-2737:
----------------------------------------
Attachment: 2737-concept-v1.txt
Here's my idea of implementing this feature (see attached file for details):
# Move the validate(), checkAccess() and execute() method calls from
QueryProcessor into separate "wrapping" method (I called it
validateCheckAccessAndExecute for now ;-) ) defined in CQLStatement interface.
All the classes implementing this interface will just execute these three
methods one by one, like QueryProcessor did (a bit non-DRY). By doing so we
can handle the exceptions thrown by these methods "internally" (in specific
Statement classes), without adding any logic to QueryProcessor.
# Define two exceptions inheriting from InvalidRequestException so we can
distinguish when we can (if IF [NOT] EXISTS was used in the query) just ignore
a problem that occured - let's call them: MissingObject and ObjectExists. They
are - obviously - thrown when we try to create existing object or drop the one
that does not exist.
# Define two subclasses of SchemaAlteringStatement: DropStatement and
CreateStatement - they require one additional parameter in constructor
(indicating if IF [NOT] EXISTS statement was used) and override the
validateCheckAccessAndExecute() method to check if any of the exceptions
mentioned above was thrown and - if allowed - handle it by returning null
(converted to Void message in QueryProcessor) or re-throw the exception.
I've implemented this solution for DROP INDEX statement as an example - see
attachment. If you're OK with this implementation, I'll do the rest.
For now there are no changes in cqlsh (so autocompletion does not work), but of
course it's also in the scope of this task.
*Important* QueryProcessor code, obviously, is not going to look like this - it
will call only validateCheckAccessAndExecute() method, like it happens for
DropIndexStatement now, without any "if" or so.
> CQL: support IF EXISTS extension for DROP commands (table, keyspace, index)
> ---------------------------------------------------------------------------
>
> Key: CASSANDRA-2737
> URL: https://issues.apache.org/jira/browse/CASSANDRA-2737
> Project: Cassandra
> Issue Type: New Feature
> Affects Versions: 0.8.0
> Reporter: Cathy Daw
> Priority: Trivial
> Labels: cql
> Fix For: 2.0
>
> Attachments: 2737-concept-v1.txt
>
>
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira