← Back to team overview

maria-developers team mailing list archive

Re: Java Connector Coding till 5th June

 


> -----Original Message-----
> From: Puneet Dewan [mailto:puneetd30@xxxxxxxxx]
> Sent: Sonntag, 8. Juni 2014 00:37
> To: Vladislav Vaintroub
> Cc: maria-developers@xxxxxxxxxxxxxxxxxxx
> Subject: Re: [Maria-developers] Java Connector Coding till 5th June
> 
Hi Puneet,


> The advantages of creating a new class MySQLServerSidePreparedStatement
> will be a clear separation of concerns. :)

Back when created this class , I thought something along the lines of usual OO technique - single interface,  2 different concrete implementations classes .  Connection.prepareStatement()would serve then as a factory method -dependent on useServerPrepStmt connection parameter it would create either MySQLPreparedStatement or MySQLServerSidePreparedStatement 

I am by no means a big fan of everything object-oriented or of design patterns , however in this case the alternative to server-side specific implementation class seems to be a lots of "if" statements  mixed into in existing  MySQLPreparedStatement methods .Given that PreparedStatement itself is a rather large interface, I'm afraid that code will go spaghetti way rather easily.

> I will discuss with my mentors this week and take the necessary steps.Will
> continue posting about the steps taken.
> 

> Regards
> 
> Puneet.
> 
> 
> 
> 
> 
> 
> 
> On Sun, Jun 8, 2014 at 2:04 AM, Vladislav Vaintroub
> <wlad@xxxxxxxxxxxxxxxx> wrote:
> 
> 
> 
> 
> 	> -----Original Message-----
> 	> From: Puneet Dewan [mailto:puneetd30@xxxxxxxxx]
> 	> Sent: Samstag, 7. Juni 2014 03:58
> 	> To: Vladislav Vaintroub
> 	> Cc: maria-developers@xxxxxxxxxxxxxxxxxxx
> 	> Subject: Re: [Maria-developers] Java Connector Coding till 5th June
> 	>
> 	> Hi Vladislav,
> 	>
> 	>
> 	> Honestly, initially I had thought of using
> 	> MySqlServerSidePreparedstatement.
> 	> But after discussion with Georg, I understood it was an overhead.
> 
> 	This is why I asked. I'm wondering what was the overhead exactly?
> And what is the plan to avoid the overhead? Is it to squeeze second
> implementation of java.sql.PreparedStatement interface into an already
> existing class?
> 
> 
> 	> Even when discussed during code review with Massimo we decided
> to add
> 	> the useserverprepstmts feature using MySqlPreparedStatement
> and not to
> 	> use MySqlServerSidePreparedstatement.
> 	> Because this class just had a prepare and close and not a clear idea
> why this
> 	> class was created and almost all methods are empty.
> 
> 
> 	This is easy to explan and can also be  easily found  with bzr, or
> Launchpad. The file was added in revision 424
> http://bazaar.launchpad.net/~maria-captains/mariadb-java-
> client/trunk/revision/424 .. The comment says
> 
> 	"CONJ21- allow ResultSetMetaData to be retrieved  from
> preparedStatement, before statement is executed.
> 
> 	Fix is using server-side prepared statement functionality - prepare
> command will return result set metadata among other information.
> Introduce MySQLServerSidePreparedStatement class, which in the future
> will be able to provide  full-featured PreparedStatement functionality, using
> server side prepared statements internally."
> 
> 
> 	This is the fix for the bug
> https://mariadb.atlassian.net/browse/CONJ-21 , to allow users to retrieve
> ResultSetMetadata  priorto /without the  execution of statement. This is only
> possible with server-side "prepare", no other way around it
> 	The class was meant to be expanded in the future, as the comment
> said.
> 
> 
> 	> We are not removing client side prepared statement feature, both
> client and
> 	> server side prepared statement are there and will be used  as per
> the
> 	> needs.I am just trying to add a useserverprepstmts feature
> 	> usingMySqlPreparedStatement and will be activated from the jdbc
> url i.e
> 	> jdbc:mysql://localhost:3306/test?useServerPrepStmts=true.
> 	>
> 	> If useServerPrepStmts is not used client side prepared statements
> will be
> 	> used.
> 
> 
> 	Right, this makes sense.
> 
> 
> 	>
> 	> Regards
> 	>
> 	> Puneet.
> 	>
> 	>
> 	>
> 	>
> 	> On Sat, Jun 7, 2014 at 3:02 PM, Vladislav Vaintroub
> 	> <wlad@xxxxxxxxxxxxxxxx> wrote:
> 	>
> 	>
> 	>
> 	>
> 	>       > -----Original Message-----
> 	>       > From: Maria-developers [mailto:maria-developers-
> 	>       > bounces+wlad=montyprogram.com@xxxxxxxxxxxxxxxxxxx] On
> 	> Behalf Of
> 	>       > Puneet Dewan
> 	>       > Sent: Donnerstag, 5. Juni 2014 07:43
> 	>       > To: maria-developers@xxxxxxxxxxxxxxxxxxx
> 	>       > Subject: [Maria-developers] Java Connector Coding till 5th
> June
> 	>
> 	>       Hi Puneet,
> 	>
> 	>
> 	>       > 7.Then I saw that there is a class
> 	> MySqlServerSidePreparedStatement.java,
> 	>       >
> 	>       > Initially I coded the prepareStatement() ,close(),and execute()
> in
> 	> that class
> 	>       > seperately.
> 	>       >
> 	>       > But after (Code review) discussion with Massimo, we donot
> need
> 	> to use that
> 	>       > class.
> 	>
> 	>
> 	>       I'm curious. What were the  arguments for not using this class?
> That
> 	> class MySqlServerSidePreparedStatement.java was created for
> exactly the
> 	> purpose of implementing server-side prepared statements (user
> could
> 	> choose implementation based on parameter, e.g
> userServerPrepStmts like in
> 	> Connector/J).
> 	>
> 	>       If the idea is that people do not need client-side prepared
> 	> statements, and server-side the only correct way to go, this is,
> based on my
> 	> experience, incorrect.  Often, people would want parametrized
> statements
> 	> without the overhead of P_S (prepare, execute, close).
> 	>
> 	>
> 	>       > Instead use MySqlPreparedStatement.java to do the same
> work.So
> 	> made
> 	>       > changes accordingly.
> 	>
> 	>
> 	>
> 
> 
> 
> 




Follow ups

References