Hi, if I remember correctly someone posted a <connection> datatype so that one 
could define
all the parameters for you <sql> tasks in one place and then refid them to the 
<sql> task.
 
It seem to me this would be the ideal place to put this additional parameter 
definitions instead of
overflowing the <sql> task with more elements.
 
Just a thought.
 
Jose Alberto

        -----Original Message----- 
        From: Paul King [mailto:[EMAIL PROTECTED] 
        Sent: Tue 1/21/2003 8:17 AM 
        To: [EMAIL PROTECTED] 
        Cc: 
        Subject: proposed patch to ANT SQL task
        
        


        Hi, I needed to pass properties in to a type-3 JDBC driver
        (WebLogic's RMI driver) in a SQL task.  Perhaps I missed
        how this could be done using existing functionality.
        
        I also removed the need to have userid and password specified.
        The JDBC spec doesn't require them and some database drivers
        such as cloudscape don't need them.  Net result is that
        I can now have databases which don't support user/pw fields
        (without dummy entries):
        
            <target name="test_db_init">
              <sql driver="COM.cloudscape.core.JDBCDriver"
                   url="jdbc:cloudscape:${base.dir}/database"
                   onerror="continue"
                   autocommit="true"
              >
              DELETE from NAMEAUDIT where NAME='xyzzy';
              </sql>
            </target>
        
        And I can support properties:
        
            <target name="test_db_init2">
              <sql driver="weblogic.jdbc.rmi.Driver"
                   url="jdbc:weblogic:rmi"
        
        
properties="weblogic.server.url=t3://localhost:7001;weblogic.jdbc.datasource=Testing-ageapp-AgeDS"
                   onerror="continue"
                   autocommit="true"
              >
              DELETE from NAMEAUDIT where NAME='xyzzy';
              </sql>
            </target>
        
        Obviously you can place the username and password fields into the
        properties field directly if you want or still use the old style
        separate elements.
        
        I haven't checked that my code meets any style guidelines at this point
        or checked if it breaks any existing tests - just wanted some feedback
        first.
        
        I am new to this project and am not a commiter so let me know what I
        need to do now.
        
        I also wanted to support datasources directly so that I could have
        something like:
        
            <target name="test_db_init3">
              <sql contextFactory="weblogic.jndi.WLInitialContextFactory"
                   url="t3://localhost:7001"
                   datasource="Testing-ageapp-AgeDS"
                   onerror="continue"
                   autocommit="true"
              >
              DELETE from NAMEAUDIT where NAME='xyzzy';
              </sql>
            </target>
        
        This would let me support the latest best practice of using
        datasources which would allow me to write more portable ant
        scripts across different app servers but I wasn't sure how to get
        the JNDI code to support the SQL's optional classpath element
        so I wimped out.
        
        
        Regards, Paul.
        
        -------->8----------
        *** JDBCTask.java.orig  Wed Oct  2 11:09:20 2002
        --- JDBCTask.java       Tue Jan 21 15:47:18 2003
        ***************
        *** 67,72 ****
        --- 67,73 ----
           import java.sql.SQLException;
           import java.util.Hashtable;
           import java.util.Properties;
        + import java.util.StringTokenizer;
        
           /**
            * Handles JDBC configuration needed by SQL type tasks.
        ***************
        *** 171,177 ****
                */
               private String password = null;
        
        !     /**
                * RDBMS Product needed for this SQL.
                **/
               private String rdbms = null;
        --- 172,183 ----
                */
               private String password = null;
        
        !       /**
        !        * Properties
        !        */
        !       private String properties = null;
        !
        !       /**
                * RDBMS Product needed for this SQL.
                **/
               private String rdbms = null;
        ***************
        *** 233,252 ****
                   this.url = url;
               }
        
        !     /**
        !      * Sets the password; required.
                * @param password The password to set
                */
        !     public void setPassword(String password) {
                   this.password = password;
               }
        
        !     /**
                * Auto commit flag for database connection;
                * optional, default false.
                * @param autocommit The autocommit to set
                */
        !     public void setAutocommit(boolean autocommit) {
                   this.autocommit = autocommit;
               }
        
        --- 239,280 ----
                   this.url = url;
               }
        
        !       /**
        !        * Set the user name for the connection;
        !        * optional, but some RDBMSs will require it.
        !        * @param userId The userId to set
        !        */
        !       public void setUserid(String userId)
        !       {
        !               this.userId = userId;
        !       }
        !
        !       /**
        !      * Sets the password;
        !        * optional, but some RDBMSs will require it.
                * @param password The password to set
                */
        !     public void setPassword(String password)
        !       {
                   this.password = password;
               }
        
        !       /**
        !        * Sets the properties; optional.
        !        * @param properties The properties to set
        !        */
        !       public void setProperties(String properties)
        !       {
        !               this.properties = properties;
        !       }
        !
        !       /**
                * Auto commit flag for database connection;
                * optional, default false.
                * @param autocommit The autocommit to set
                */
        !     public void setAutocommit(boolean autocommit)
        !       {
                   this.autocommit = autocommit;
               }
        
        ***************
        *** 317,345 ****
                   return loader;
               }
        
        !     /**
                * Creates a new Connection as using the driver, url, userid and
        password specified.
                * The calling method is responsible for closing the connection.
                * @return Connection the newly created connection.
                * @throws BuildException if the UserId/Password/Url is not set
        or there is no suitable driver or the driver fails to load.
                */
        !     protected Connection getConnection() throws BuildException {
        !         if (userId == null) {
        !             throw new BuildException("User Id attribute must be set!",
        location);
        !         }
        !         if (password == null) {
        !             throw new BuildException("Password attribute must be
        set!", location);
        !         }
                   if (url == null) {
                       throw new BuildException("Url attribute must be set!",
        location);
                   }
                   try {
        
                       log("connecting to " + getUrl(), Project.MSG_VERBOSE);
        !             Properties info = new Properties();
        !             info.put("user", getUserId());
        !             info.put("password", getPassword());
        !             Connection conn = getDriver().connect(getUrl(), info);
        
                       if (conn == null) {
                           // Driver doesn't understand the URL
        --- 345,391 ----
                   return loader;
               }
        
        !       /**
        !        * Creates a new Properties data structure from userid, 
password and
        specified properties.
        !        * @return Properties the newly merged properties.
        !        * @throws BuildException if the properties string is malformed.
        !        */
        !       protected Propterties getAllProperties() throws BuildException
        !       {
        !               Properties info = new Properties();
        !               if (userId != null) info.put("user", getUserId());
        !               if (password != null) info.put("password", 
getPassword());
        !               if (properties != null)
        !               {
        !                       StringTokenizer st = new 
StringTokenizer(getProperties(), ";");
        !                       while (st.hasMoreTokens())
        !                       {
        !                               String token = st.nextToken();
        !                               int keyEnd = token.indexOf('=');
        !                               if (keyEnd < 0 || keyEnd == 
token.length()-1)
        !                                       throw new 
BuildException("Malformed Property!", location);
        !                               
info.put(token.substring(0,keyEnd),token.substring(keyEnd+1));
        !                       }
        !               }
        !               return info;
        !       }
        !
        !       /**
                * Creates a new Connection as using the driver, url, userid and
        password specified.
                * The calling method is responsible for closing the connection.
                * @return Connection the newly created connection.
                * @throws BuildException if the UserId/Password/Url is not set
        or there is no suitable driver or the driver fails to load.
                */
        !     protected Connection getConnection() throws BuildException
        !       {
                   if (url == null) {
                       throw new BuildException("Url attribute must be set!",
        location);
                   }
                   try {
        
        +                       Connection conn=null;
                       log("connecting to " + getUrl(), Project.MSG_VERBOSE);
        !                       conn = getDriver().connect(getUrl(), 
getAllProperties());
        
                       if (conn == null) {
                           // Driver doesn't understand the URL
        ***************
        *** 453,466 ****
               }
        
               /**
        -      * Set the user name for the connection; required.
        -      * @param userId The userId to set
        -      */
        -     public void setUserid(String userId) {
        -         this.userId = userId;
        -     }
        -
        -     /**
                * Gets the password.
                * @return Returns a String
                */
        --- 499,504 ----
        ***************
        *** 468,478 ****
                   return password;
               }
        
        !     /**
                * Gets the rdbms.
                * @return Returns a String
                */
        !     public String getRdbms() {
                   return rdbms;
               }
        
        --- 506,526 ----
                   return password;
               }
        
        !       /**
        !        * Gets the properties.
        !        * @return Returns a String
        !        */
        !       public String getProperties()
        !       {
        !               return properties;
        !       }
        !
        !       /**
                * Gets the rdbms.
                * @return Returns a String
                */
        !     public String getRdbms()
        !       {
                   return rdbms;
               }
        
        -------->8----------
        
        
        --
        To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
        For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
        
        

<<winmail.dat>>

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to