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/
