[
https://issues.apache.org/jira/browse/CASSANDRA-2475?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13165645#comment-13165645
]
Eric Evans commented on CASSANDRA-2475:
---------------------------------------
Alright. This one is sort of a monster, so bare with me if any of this seems
disorganized, or jumps around. Also, if it seems long(ish), don't be
disheartened, again, it's a bit of a monster; All-in-all it looks pretty good.
First, on the subject of patch submission, coding conventions, etc:
If at all possible, try to break a large change like this into more than one
changeset, with logically separate changes in separate patches. A work-flow
based on patch submission sucks, I know, but Git can make this fairly easy (you
mentioned you were using Git). It definitely makes review easier and is much
appreciated.
That said, don't worry about breaking this one into smaller patches (something
to keep in mind for next time).
Also, avoid unnecessary changes to whitespace, or unrelated/cosmetic changes.
They add noise to the review and increase the likelihood of collisions when
merging or rebasing. A bit here and there is fine, but if you do any sort of
substantive cleanup, roll that up into a separate patch.
Some specific code-style/convention nits:
* Consensus seems to be against {{SuppressWarnings}} annotations, or the use of
{{Override}} for interfaces
* Put a space between method arguments
* When wrapping a method call, align the arguments with the open paren
OK, on to the bigger fish.
There was some earlier discussion in this ticket about using preserialized
binary parameters, or strings that would be parsed node-side. Which of those
two views is "right" notwithstanding, I feel pretty strongly that a struct that
can optionally do either, is the wrong choice. Let's not make this
implementation, or the client-facing interface any more complicated than it
needs to be.
My opinion on string vs. binary is largely unchanged here. String parameters
is the path of greatest abstraction, eliminating a proven vector for bugs, and
it keeps our query interface as friendly as possible.
That said, if the performance advantage to preserialized values were known, and
turned out to be significant enough, I'd happily reconsider (I like fast as
much as the next guy). My suggestion then would be this: Let's refactor this
patch to type the variables as {{String}} and get it in-tree. From there, it's
a simple matter of a patch to change from {{String}} to {{ByteBuffer}} (and of
course to drop the {{AT.fromString}}), and we can run some benchmarks. I will
commit to working up this latter patch, and to the benchmarking, within the
time remaining to 1.1, if that helps.
Other questions and concerns in no particular order:
* Does {{remove_prepared_query}} support something particular in JDBC (or any
other standard)? How will that be used?
* With regard to {{CqlPreparedResult}}:
** What is the purpose of the count that is returned? How is that used?
** What is the purpose of the {{CqlStatementType}} returned. How will that be
used?
* Is {{CQLStatement.cql}} only used for logging? If so, should we be keeping a
copy of the query string around for that? Maybe we could create a {{toString}}
that would descend to create the query (or something comparable).
* There are a few places where queries are being logged at DEBUG. That seems
too verbose for DEBUG.
* Why is {{Term.bindIndex}} marked as volatile?
* In {{CassandraServer.prepare_cql_query}}, don't create a separate variable
for state
* Not a biggie, but how about using "bind" or "bound" instead of "mark" when
referring to term position? i.e. {{needsBind}} instead of {{isMarked}}, or
{{indexBindTerms}} instead of {{discoverMarkedTerms}}
* {{QueryProcessor.prepare}} seems as though it could be folded into
{{CassandraServer.prepare_cql_query}}
* It seems as though {{QueryProcessor.doTheStatement}} and
{{QueryProcessor.process}} could be merged into one method.
> Prepared statements
> -------------------
>
> Key: CASSANDRA-2475
> URL: https://issues.apache.org/jira/browse/CASSANDRA-2475
> Project: Cassandra
> Issue Type: New Feature
> Components: API, Core
> Affects Versions: 1.0.5
> Reporter: Eric Evans
> Assignee: Rick Shaw
> Priority: Minor
> Labels: cql
> Fix For: 1.1
>
> Attachments: 2475-v1.patch, 2475-v2.patch
>
>
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira