[
https://issues.apache.org/jira/browse/CASSANDRA-2475?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13165844#comment-13165844
]
Rick Shaw commented on CASSANDRA-2475:
--------------------------------------
You are right of course this was a really big bear, and very cumbersome.
I appreciate all the comments and I'll try to address all the problems. Thanks
for the review! Really helpful.
I try and start from the top. I tried several times to break it up. Really. But
there never seemed to be a clean break. I see what you did with generated
thrift... that really helps... I'll do that.
I am using GIT but some of the techniques were a bit foreign to me a tricky to
get all together so I learned as I went along on this patch and I think I have
turned the corner but it definitely slowed me down an I backtracked a lot... I
think I got it now...
I must say I really did not intend any of the whitespace changes (in general)
they just sneak in there when I am not looking I guess. I'll try to keep it
tidier.
As to coding conventions, I'll comply... NBD.
And now on the the meat...
{quote}
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.
{quote}
I completely agree and implemented the whole thing first using {{String}}.
But then I hated the idea of having to go to HEX to get in "blob"/bytes data.
This approach let me do both. It also allowed me to serialize Java Objects
nicely as bytes. Can you think of a clever way to handle byte streams
({{AbstractBytes}})? But I can live with just {{String}}. I agree it is the
most flexible.
I really don't see any real performance advantage and the loss of flexibility
on the server side is just too much in my opinion.
{quote}
Does remove_prepared_query support something particular in JDBC (or any other
standard)? How will that be used?
{quote}
It allows you to free the cached {CQLStatement} on the server side when a
client side {{PreparedStatement}} is closed. If not, you will accumulate dead
entries until the connection is closed. That could be a lot of dead wood.
Seemed the tidy thing to do.
{quote}
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?
{quote}
The count is to know how many markers were actually encountered. This number
serves as the upper bound for {{Setxxx}} parameter indexes. Better than
regexing for it... it is exactly what the server side encountered.
The statement type is again a validation of what the server side saw. Remember
this happens in 2 steps {{prepare}} then {{execute}}, and the {{execute}} step
does not have the CQL text.
But I used it while debugging and I don't seem to use it any more so I guess it
could go, but it I thought I might find a use for is so I never did make it go
away.
{quote}
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).
{quote}
Another "seems useful" so I kept it around. If something goes wrong and you
need to go poking around its handy to have attached to the statement (I think).
{quote}
There are a few places where queries are being logged at DEBUG. That seems too
verbose for DEBUG.
{quote}
I think there was already an instance there at DEBUG and I just added some
more. I'll gladly move to TRACE.
{quote}
Why is Term.bindIndex marked as volatile?
{quote}
No good reason. I'll fix.
{quote}
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
{quote}
The short answer is because the question marks (?) are often referred to in the
spec as "bound variable markers". So I just propagated it. But NBD to change to
"bind" theme.
{quote}
QueryProcessor.prepare seems as though it could be folded into
CassandraServer.prepare_cql_query
{quote}
I guess it could but I liked the way it read better with it split up for all
the methods.
{quote}
It seems as though QueryProcessor.doTheStatement and QueryProcessor.process
could be merged into one method.{quote}
I factored it out because {{doTheStatement}} is used by both {{process}} and
{{process_prepared}}
----
So in summary, I'll start another pass and would welcome response to my excuses
:)
> 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,
> v1-0001-CASSANDRA-2475-prepared-statement-patch.txt,
> v1-0002-regenerated-thrift-java.txt
>
>
--
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