I agree. I believe the test-queries are already executable with the current 
implementation of the sql-maven-plugin. 

So I guess we should revert this part.

 

- Robert
 
> Date: Tue, 16 Feb 2010 18:07:13 -0800
> From: [email protected]
> To: [email protected]
> Subject: [mojo-dev] Re: [mojo-scm] [11914] 
> trunk/mojo/sql-maven-plugin/src/test/java/org/codehaus/mojo/sql: Patch from 
> Tony Simpson to allow db procedures to be executed
> 
> I think we are already support this. It is call "block mode" however
> block mode is also removed since we also have better another way using
> delimiterType to handle function/store procedure execution
> 
> -Dan
> 
> On Tue, Feb 16, 2010 at 4:15 PM, <[email protected]> wrote:
> > Revision 11914 Author topping Date 2010-02-16 18:15:24 -0600 (Tue, 16 Feb
> > 2010)
> >
> > Log Message
> >
> > Patch from Tony Simpson to allow db procedures to be executed
> >
> > Modified Paths
> >
> > trunk/mojo/sql-maven-plugin/src/main/java/org/codehaus/mojo/sql/SqlExecMojo.java
> >
> > Added Paths
> >
> > trunk/mojo/sql-maven-plugin/src/main/java/org/codehaus/mojo/sql/ProcedureCallHelper.java
> > trunk/mojo/sql-maven-plugin/src/test/java/org/codehaus/mojo/sql/ProcedureCallHelperTest.java
> >
> > Diff
> >
> > Added:
> > trunk/mojo/sql-maven-plugin/src/main/java/org/codehaus/mojo/sql/ProcedureCallHelper.java
> > (0 => 11914)
> >
> > ---
> > trunk/mojo/sql-maven-plugin/src/main/java/org/codehaus/mojo/sql/ProcedureCallHelper.java
> >  
> > (rev 0)
> > +++
> > trunk/mojo/sql-maven-plugin/src/main/java/org/codehaus/mojo/sql/ProcedureCallHelper.java
> >  2010-02-17
> > 00:15:24 UTC (rev 11914)
> > @@ -0,0 +1,50 @@
> > +package org.codehaus.mojo.sql;
> > +
> > +
> > +public class ProcedureCallHelper {
> > + public static boolean isProcedureCall(String sql) {
> > + String startOfSql = sql.trim().substring(0, 4).toUpperCase();
> > + if (startOfSql.startsWith("CALL") || startOfSql.startsWith("EXEC"))
> > {
> > + return true;
> > + } else {
> > + return false;
> > + }
> > + }
> > +
> > + public static String sqlProcedureCallToJDBCCallStatement(String sql) {
> > + sql = sql.trim();
> > + String parameters = "";
> > + int parametersStart = sql.indexOf('(');
> > + if (parametersStart != -1)
> > + {
> > + int parametersEnd = sql.length() - 1;
> > + for (; parametersEnd > parametersStart &&
> > sql.charAt(parametersEnd) != ')'; parametersEnd--)
> > + {
> > + }
> > + if(parametersEnd == parametersStart) {
> > + throw new RuntimeException("Could not parse procedure call
> > parameters.");
> > + }
> > + parameters = sql.substring(parametersStart+1, parametersEnd);
> > + }
> > + else
> > + {
> > + parametersStart = sql.length();
> > + }
> > + int procedureNameEnds = parametersStart - 1;
> > + for (; procedureNameEnds >= 0 &&
> > Character.isWhitespace(sql.charAt(procedureNameEnds)); procedureNameEnds--)
> > + {
> > + }
> > + int procedureNameStarts = procedureNameEnds;
> > + for (; procedureNameStarts >= 0 &&
> > !Character.isWhitespace(sql.charAt(procedureNameStarts));
> > procedureNameStarts--)
> > + {
> > + }
> > + if (procedureNameStarts == 0 || procedureNameEnds == 0 ||
> > procedureNameStarts == procedureNameEnds)
> > + {
> > + throw new RuntimeException("Cound not parse procedure call,
> > failed to find procedure name");
> > + }
> > + procedureNameStarts += 1;
> > + procedureNameEnds += 1;
> > + String procedureName = sql.substring(procedureNameStarts,
> > procedureNameEnds);
> > + return "{call " + procedureName + "(" + parameters + ")}";
> > + }
> > +}
> >
> > Modified:
> > trunk/mojo/sql-maven-plugin/src/main/java/org/codehaus/mojo/sql/SqlExecMojo.java
> > (11913 => 11914)
> >
> > ---
> > trunk/mojo/sql-maven-plugin/src/main/java/org/codehaus/mojo/sql/SqlExecMojo.java
> >  2010-02-16
> > 16:34:18 UTC (rev 11913)
> > +++
> > trunk/mojo/sql-maven-plugin/src/main/java/org/codehaus/mojo/sql/SqlExecMojo.java
> >  2010-02-17
> > 00:15:24 UTC (rev 11914)
> > @@ -30,6 +30,7 @@
> > import java.io.PrintStream;
> > import java.io.Reader;
> > import java.io.StringReader;
> > +import java.sql.CallableStatement;
> > import java.sql.Connection;
> > import java.sql.Driver;
> > import java.sql.ResultSet;
> > @@ -360,11 +361,6 @@
> > private Connection conn = null;
> >
> > /**
> > - * SQL statement
> > - */
> > - private Statement statement = null;
> > -
> > - /**
> > * SQL transactions to perform
> > */
> > private Vector transactions = new Vector();
> > @@ -591,8 +587,6 @@
> >
> > try
> > {
> > - statement = conn.createStatement();
> > - statement.setEscapeProcessing( escapeProcessing );
> >
> > PrintStream out = System.out;
> > try
> > @@ -649,10 +643,6 @@
> > {
> > try
> > {
> > - if ( statement != null )
> > - {
> > - statement.close();
> > - }
> > if ( conn != null )
> > {
> > conn.close();
> > @@ -999,6 +989,7 @@
> > return;
> > }
> >
> > + Statement statement = null;
> > ResultSet resultSet = null;
> > try
> > {
> > @@ -1008,7 +999,17 @@
> > boolean ret;
> > int updateCountTotal = 0;
> >
> > - ret = statement.execute( sql );
> > +
> > + if(ProcedureCallHelper.isProcedureCall(sql)){
> > + CallableStatement callStatement =
> > conn.prepareCall(ProcedureCallHelper.sqlProcedureCallToJDBCCallStatement(sql));
> > + ret = callStatement.execute();
> > + statement = callStatement;
> > + }
> > + else {
> > + statement = conn.createStatement();
> > + statement.setEscapeProcessing( escapeProcessing );
> > + ret = statement.execute( sql );
> > + }
> > do
> > {
> > if ( !ret )
> > @@ -1060,6 +1061,10 @@
> > }
> > finally
> > {
> > + if ( statement != null )
> > + {
> > + statement.close();
> > + }
> > if ( resultSet != null )
> > {
> > resultSet.close();
> >
> > Added:
> > trunk/mojo/sql-maven-plugin/src/test/java/org/codehaus/mojo/sql/ProcedureCallHelperTest.java
> > (0 => 11914)
> >
> > ---
> > trunk/mojo/sql-maven-plugin/src/test/java/org/codehaus/mojo/sql/ProcedureCallHelperTest.java
> >  
> > (rev 0)
> > +++
> > trunk/mojo/sql-maven-plugin/src/test/java/org/codehaus/mojo/sql/ProcedureCallHelperTest.java
> >  2010-02-17
> > 00:15:24 UTC (rev 11914)
> > @@ -0,0 +1,41 @@
> > +package org.codehaus.mojo.sql;
> > +
> > +import junit.framework.TestCase;
> > +
> > +public class ProcedureCallHelperTest extends TestCase {
> > + private static String query1 = "EXECUTE PROCEDURE foo(1,'cats')";
> > + private static String query2 = "exec bar";
> > + private static String query3 = "EXECUTE\n PROCEDURE\n\n foobar\n (1, 2,
> > 'the cat''s' )";
> > + private static String query4 = "SELECT 1 FROM tablename";
> > + private static String query5 = "call bar ('bob,frank')";
> > + private static String query6 = "Exec bar ('fred', nestedfunction('arg'))";
> > + 
> > + public void testIsProcedureCall() {
> > + assertTrue(ProcedureCallHelper.isProcedureCall(query1));
> > + assertTrue(ProcedureCallHelper.isProcedureCall(query2));
> > + assertTrue(ProcedureCallHelper.isProcedureCall(query3));
> > + assertFalse(ProcedureCallHelper.isProcedureCall(query4));
> > + assertTrue(ProcedureCallHelper.isProcedureCall(query5));
> > + assertTrue(ProcedureCallHelper.isProcedureCall(query6));
> > + }
> > + 
> > + public void testParseQuery1() {
> > + assertEquals("{call foo(1,'cats')}",
> > ProcedureCallHelper.sqlProcedureCallToJDBCCallStatement(query1));
> > + }
> > + 
> > + public void testParseQuery2() {
> > + assertEquals("{call bar()}",
> > ProcedureCallHelper.sqlProcedureCallToJDBCCallStatement(query2));
> > + }
> > + 
> > + public void testParseQuery3() {
> > + assertEquals("{call foobar(1, 2, 'the cat''s' )}",
> > ProcedureCallHelper.sqlProcedureCallToJDBCCallStatement(query3));
> > + }
> > +
> > + public void testParseQuery5() {
> > + assertEquals("{call bar('bob,frank')}",
> > ProcedureCallHelper.sqlProcedureCallToJDBCCallStatement(query5));
> > + }
> > + 
> > + public void testParseQuery6() {
> > + assertEquals("{call bar('fred', nestedfunction('arg'))}",
> > ProcedureCallHelper.sqlProcedureCallToJDBCCallStatement(query6));
> > + }
> > +}
> >
> > ________________________________
> >
> > To unsubscribe from this list please visit:
> >
> > http://xircles.codehaus.org/manage_email
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
> 
> http://xircles.codehaus.org/manage_email
> 
> 
                                          
_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE!
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/

Reply via email to