diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..95832e8e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/build/ +/dist/ \ No newline at end of file diff --git a/Delete/delete0_DataHandler.java b/Delete/delete0_DataHandler.java new file mode 100644 index 00000000..e002f70f --- /dev/null +++ b/Delete/delete0_DataHandler.java @@ -0,0 +1,26 @@ +// Bagian dari DataHandler class + +//Method untuk mengidentifikasi record post +//pilih/set data (yg nanti akan dihapus) + + public Post findPostById(int id) throws SQLException { } + + Post selectedPst = new Post(); + + getDBConnection(); + + stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + query = "SELECT * FROM post_table WHERE post_id = " + id; + System.out.println("\nExecuting: " + query); + + rset = stmt.executeQuery(query); + + while (rset.next()) { + selectedPst.setPostId(new Integer(rset.getInt("post_id"))); + selectedPst.setTitle(rset.getString("title")); + selectedPst.setDate(rset.getString("date")); + selectedPst.setContent(rset.getString("content")); + } + + return selectedPst; + diff --git a/Delete/delete1_DataHandler.java b/Delete/delete1_DataHandler.java new file mode 100644 index 00000000..c54965d1 --- /dev/null +++ b/Delete/delete1_DataHandler.java @@ -0,0 +1,20 @@ +//Delete +//DataHandler.java + +//Method untuk men-delete data + + +public class DataHandler { + public String deletePostById(int id) throws SQLException { } + + getDBConnection(); + + stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + sqlString = "DELETE FROM post_table WHERE post_id = " + id; + System.out.println("\nExecuting: " + sqlString); + + stmt.execute(sqlString); + + return "success"; + +} diff --git a/Delete/delete2_idx.jsp b/Delete/delete2_idx.jsp new file mode 100644 index 00000000..e09b2836 --- /dev/null +++ b/Delete/delete2_idx.jsp @@ -0,0 +1,15 @@ +//Bagian dari index.jsp + +//Menambahkan link ke 'page' delete data + + + while (rset.next ()) { + out.println( + rset.getString("title") + + rset.getString("date") + + rset.getString("content") + + Edit + Delete"); + ); + } + diff --git a/Delete/delete3_action.jsp b/Delete/delete3_action.jsp new file mode 100644 index 00000000..ec5920ca --- /dev/null +++ b/Delete/delete3_action.jsp @@ -0,0 +1,17 @@ +//delete_action.jsp + +//Halaman JSP untuk meng-handle aksi delete + + +//Add a jsp:usebean tag. +//As before, enterempsbean as the ID, and hr.DataHandler as the Class. +//Set the Scope to session, and click OK. + +//Add a Scriptlet to the page. Enter the following code into the Insert Scriptlet dialog box: + +Integer post_id = new Integer(request.getParameter("pstid")); +PostBean.deletePostById(post_id.intValue()); + +//Drag Forward from the Component Palette to add a jsp:forward tag to the page. +//In the Insert Forward dialog box, enter employees.jsp. + diff --git a/Login/InvalidLogin.jsp.jsp b/Login/InvalidLogin.jsp.jsp new file mode 100644 index 00000000..db771477 --- /dev/null +++ b/Login/InvalidLogin.jsp.jsp @@ -0,0 +1,32 @@ + + + +<%@ page language="java"  +      contentType="text/html; charset=windows-1256" +      pageEncoding="windows-1256" +   %> +   <%  +    response.setHeader("Cache-Control","no-store,must-revalidate");  +    response.setHeader("Pragma","no-cache");  +    response.setDateHeader ("Expires", -1); +    new java.util.Date(); +    %> + +    + +    + +      +          +         Invalid Login +      +    +      +         
+            Sorry, you are not registered +         
+      +    +    \ No newline at end of file diff --git a/Login/LoginPage.jsp.jsp b/Login/LoginPage.jsp.jsp new file mode 100644 index 00000000..52b4391a --- /dev/null +++ b/Login/LoginPage.jsp.jsp @@ -0,0 +1,57 @@ + + + +<%@ page language="java"  +    contentType="text/html; charset=windows-1256" +    pageEncoding="windows-1256" +%> +<%  +    response.setHeader("Cache-Control","no-store, must-revalidate");  +    response.setHeader("Pragma","no-cache");  +    response.setDateHeader ("Expires", -1); +    new java.util.Date(); +    %> + + + +    +      +      +     Login Page +    +    +   
+       Please enter your user name        +      
       +      Please enter your password +       +                +      
+    + \ No newline at end of file diff --git a/Login/LoginServlet.java.java b/Login/LoginServlet.java.java new file mode 100644 index 00000000..2ce02faf --- /dev/null +++ b/Login/LoginServlet.java.java @@ -0,0 +1,31 @@ +//LoginServlet.java(takes input from LoginPage.jsp and controls the flow based on validation with database) + + +package ExamplePackage; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +public class LoginServlet extends HttpServlet { + private static final long serialVersionUID = 2562294252731783855L; + public void doPost(HttpServletRequest request, HttpServletResponse response)  + throws ServletException, java.io.IOException { + try { + UserBean user = new UserBean(); + user.setUserName(request.getParameter("un")); + user.setPassword(request.getParameter("pw")); + user = UserDAO.login(user); + if (user.isValid()) { + HttpSession session = request.getSession(true); + session.setAttribute("currentSessionUser",user); + response.sendRedirect("userLogged.jsp"); //logged-in page + } + else response.sendRedirect("invalidLogin.jsp"); //error page + } + catch (Throwable theException) { + System.out.println(theException); + } +       } +} \ No newline at end of file diff --git a/Login/LogoutServlet.java.java b/Login/LogoutServlet.java.java new file mode 100644 index 00000000..6852ae0d --- /dev/null +++ b/Login/LogoutServlet.java.java @@ -0,0 +1,33 @@ +//LogoutServelt.java(for logout) + + +package ExamplePackage; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import ExamplePackage.UserBean; + +public class LogoutServlet extends HttpServlet { +   private static final long serialVersionUID = 1L; +   public void doGet(HttpServletRequest request, HttpServletResponse response)  +              throws ServletException, java.io.IOException { + +   try +   {        + +        UserBean user = new UserBean(); +        user.removeUsername(); +        user.removePassword(); +         HttpSession session=request.getSession(false); +         session.removeAttribute("currentSessionUser"); +         session.invalidate(); +         response.sendRedirect("LoginPage.jsp"); +   }       +   catch (Throwable theException)         +   { +        System.out.println(theException);  +   } +  } +} diff --git a/Login/UserBean.java.java b/Login/UserBean.java.java new file mode 100644 index 00000000..affc59d7 --- /dev/null +++ b/Login/UserBean.java.java @@ -0,0 +1,40 @@ +//UserBean.java(Bean class which holds user data in a bean) + + +package ExamplePackage; +public class UserBean { +    +    private String username; +    private String password; +    public boolean valid; + public String role; + +    public String getUsername() { +       return username; +   } +    public void setUsername(String newUsername) { +       username = newUsername; +   }      + +    public String getPassword() { +       return password; +   } +    public void setPassword(String newPassword) { +       password = newPassword; +   } +         +    public boolean isValid() { +       return valid; +   } +    public void setValid(boolean newValid) { +       valid = newValid; +   } + + public String getRole() { + return role; + } + public void setRole(String newRole) { + role = newRole; + } + +} \ No newline at end of file diff --git a/Login/ValidLogin.jsp.jsp b/Login/ValidLogin.jsp.jsp new file mode 100644 index 00000000..6b454c54 --- /dev/null +++ b/Login/ValidLogin.jsp.jsp @@ -0,0 +1,48 @@ + + + +<%@ page language="java"  +         contentType="text/html; charset=windows-1256" +         pageEncoding="windows-1256" +         import="ExamplePackage.UserBean" +   %> +   <%  +    response.setHeader("Cache-Control","no-store,must-revalidate");  +    response.setHeader("Pragma","no-cache");  +    response.setDateHeader ("Expires", -1);  +    new java.util.Date(); +    if(session.getAttribute("currentSessionUser")!=null) +    { +    %> +     +    + +    + +      +          +            User Logged Successfully    +          +      +    + +Logout +         
+            <% UserBean currentUser = (UserBean)(session.getAttribute("currentSessionUser"));%> +          +            Welcome <%= currentUser.getFirstName() + " " + currentUser.getLastName() %> +         
+ +      +    +    + +<%} +else +response.sendRedirect("LoginPage.jsp");%> \ No newline at end of file diff --git a/Login/no_codemiles6.java b/Login/no_codemiles6.java new file mode 100644 index 00000000..f7f54008 --- /dev/null +++ b/Login/no_codemiles6.java @@ -0,0 +1,90 @@ +//UserDao.java(which interacts with the database to get the results) + + +package ExamplePackage; +import java.sql.*; + +public class UserDAO     +{ +   static Connection currentCon = null; +   static ResultSet rs = null;      +   public static UserBean login(UserBean bean) { +    +      //preparing some objects for connection  +      Statement stmt = null;     +    +      String username = bean.getUsername();     +      String password = bean.getPassword();    +        +      String searchQuery = +            "select * from users where username='" +                     + username +                     + "' AND password='" +                     + password +                     + "'"; +        +   // "System.out.println" prints in the console; Normally used to trace the process +   System.out.println("Your username is " + username);           +   System.out.println("Your password is " + password); +   System.out.println("Query: "+searchQuery); +        +   try  +   { +      //connect to DB  +      currentCon = ConnectionManager.getConnection(); +      stmt=currentCon.createStatement(); +      rs = stmt.executeQuery(searchQuery); +      boolean more = rs.next(); +      // if user does not exist set the isValid variable to false +      if (!more)  +      { +         System.out.println("Sorry, you are not registered"); +         bean.setValid(false); +      }  +            +      //if user exists set the isValid variable to true +      else if (more)  +      { +         String username = rs.getString("Username"); +            +         System.out.println("Welcome " + username); +         bean.setUsername(username); +         bean.setValid(true); + //bean.setRole(role); +      } +   }  + +   catch (Exception ex)  +   { +      System.out.println("Log In failed" + ex); +   } +       +   //some exception handling +   finally  +   { +      if (rs != null)   { +         try { +            rs.close(); +         } catch (Exception e) {} +            rs = null; +       } +      if (stmt != null) { +         try { +            stmt.close(); +         } catch (Exception e) {} +            stmt = null; +      } +    +      if (currentCon != null) { +         try { +            currentCon.close(); +         } catch (Exception e) {} +         currentCon = null; +      } +   } + +return bean; +    + }   + +} \ No newline at end of file diff --git a/Login/no_codemiles7.java b/Login/no_codemiles7.java new file mode 100644 index 00000000..deb9f0af --- /dev/null +++ b/Login/no_codemiles7.java @@ -0,0 +1,42 @@ +//ConnectionManager.java(to establish a connection to database) + + +package ExamplePackage; + +import java.sql.DriverManager; +import java.sql.Connection; +import java.sql.SQLException; +public class ConnectionManager { + +   static Connection con; +   static String url; +          +   public static Connection getConnection() +   { +      +      try +      { +         String url ="jdbc:oracle:thin:@localhost:1521:XE";  + +         Class.forName("oracle.jdbc.driver.OracleDriver"); +          +         try +         {                +            con = DriverManager.getConnection(url,"*******","*******");  +                                      +         } +          +         catch (SQLException ex) +         { +            ex.printStackTrace(); +         } +      } + +      catch(ClassNotFoundException e) +      { +         System.out.println(e); +      } + +   return con; +} +} diff --git a/Publish/GoPublish.jsp b/Publish/GoPublish.jsp new file mode 100644 index 00000000..7ba3e709 --- /dev/null +++ b/Publish/GoPublish.jsp @@ -0,0 +1,3 @@ +//GoPublish.jsp + +//implementasi mirip add post \ No newline at end of file diff --git a/Publish/Unpublished.jsp b/Publish/Unpublished.jsp new file mode 100644 index 00000000..78f7ea23 --- /dev/null +++ b/Publish/Unpublished.jsp @@ -0,0 +1,33 @@ +//Unpublished.jsp + +//View unpublished list: can do edit & publish + +//sesuaikan tampilan + + + + + + + +Blog + + + + +<%  + category=request.getParameter("category"); + //if(category!=null) + //category=Integer.parseString(category); + + //rs=stmt.executeQuery("Select * from post_table where category="+category); + rs=stmt.executeQuery("Select * from post_table where category='unpublished'); + if(rs.next()) { + title=rs.getString("title"); + date=rs.getString("date"); + content=rs.getString("content"); + category=rs.getString("category"); + Edit + Publish"); + } +%> \ No newline at end of file diff --git a/build.xml b/build.xml new file mode 100644 index 00000000..a2361ae2 --- /dev/null +++ b/build.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + Builds, tests, and runs the project Simple_blog. + + + diff --git a/nbproject/ant-deploy.xml b/nbproject/ant-deploy.xml new file mode 100644 index 00000000..9bc5adf7 --- /dev/null +++ b/nbproject/ant-deploy.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml new file mode 100644 index 00000000..17846833 --- /dev/null +++ b/nbproject/build-impl.xml @@ -0,0 +1,1444 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set build.web.dir + Must set build.generated.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.war + + + + + + + + + +The Java EE server classpath is not correctly set up - server home directory is missing. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Dj2ee.server.home=<app_server_installation_directory> + + +The Java EE server classpath is not correctly set up. Your active server type is ${j2ee.server.type}. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Duser.properties.file=<path_to_property_file> (where you put the property "j2ee.platform.classpath" in a .properties file) +or ant -Dj2ee.platform.classpath=<server_classpath> (where no properties file is used) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The libs.CopyLibs.classpath property is not set up. +This property must point to +org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part +of NetBeans IDE installation and is usually located at +<netbeans_installation>/java<version>/ant/extra folder. +Either open the project in the IDE and make sure CopyLibs library +exists or setup the property manually. For example like this: + ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + Must select a file in the IDE or set jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Browser not found, cannot launch the deployed application. Try to set the BROWSER environment variable. + + + Launching ${browse.url} + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 00000000..c60ff016 --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=a7a383ab +build.xml.script.CRC32=d33dcf85 +build.xml.stylesheet.CRC32=651128d4@1.65.1.1 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=a7a383ab +nbproject/build-impl.xml.script.CRC32=af8c5e07 +nbproject/build-impl.xml.stylesheet.CRC32=d659eb7a@1.65.1.1 diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties new file mode 100644 index 00000000..c12c3564 --- /dev/null +++ b/nbproject/private/private.properties @@ -0,0 +1,8 @@ +deploy.ant.properties.file=C:\\Users\\SPM\\AppData\\Roaming\\NetBeans\\7.4\\tomcat70.properties +j2ee.server.domain=C:/Users/user/AppData/Roaming/NetBeans/8.0/apache-tomcat-7.0.41.0_base +j2ee.server.home=C:/xampp/tomcat +j2ee.server.instance=tomcat70:home=C:\\xampp\\tomcat +javac.debug=true +javadoc.preview=true +selected.browser=default +user.properties.file=C:\\Users\\SPM\\AppData\\Roaming\\NetBeans\\7.4\\build.properties diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 00000000..fc6b5cd8 --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,14 @@ + + + + + + file:/C:/Users/SPM/Documents/GitHub/IF3110-02-Simple-Blog-Java/web/post.jsp + file:/C:/Users/SPM/Documents/GitHub/IF3110-02-Simple-Blog-Java/src/java/data/Connector.java + file:/C:/Users/SPM/Documents/GitHub/IF3110-02-Simple-Blog-Java/web/Comment.jsp + file:/C:/Users/SPM/Documents/GitHub/IF3110-02-Simple-Blog-Java/web/assets/js/comment.js + file:/C:/Users/SPM/Documents/GitHub/IF3110-02-Simple-Blog-Java/web/index.jsp + file:/C:/Users/SPM/Documents/GitHub/IF3110-02-Simple-Blog-Java/src/java/data/Comment.java + + + diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 00000000..faf8d2f7 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,87 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=true +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.web.dir}/WEB-INF/classes +build.classes.excludes=**/*.java,**/*.form +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +build.web.dir=${build.dir}/web +build.web.excludes=${build.classes.excludes} +client.urlPart= +compile.jsps=false +conf.dir=${source.root}/conf +debug.classpath=${build.classes.dir}:${javac.classpath} +debug.test.classpath=\ + ${run.test.classpath} +display.browser=true +# Files to be excluded from distribution war +dist.archive.excludes= +dist.dir=dist +dist.ear.war=${dist.dir}/${war.ear.name} +dist.javadoc.dir=${dist.dir}/javadoc +dist.war=${dist.dir}/${war.name} +endorsed.classpath=\ + ${libs.javaee-endorsed-api-6.0.classpath} +excludes= +file.reference.mysql-connector-java-5.0.8-bin.jar=D:\\@install\\mysql-connector-java-5.0.8\\mysql-connector-java-5.0.8-bin.jar +file.reference.mysql-connector-java-5.0.8-bin.jar-1=src\\lib\\mysql-connector-java-5.0.8\\mysql-connector-java-5.0.8-bin.jar +includes=** +j2ee.compile.on.save=true +j2ee.copy.static.files.on.save=true +j2ee.deploy.on.save=true +j2ee.platform=1.6-web +j2ee.platform.classpath=${j2ee.server.home}/lib/annotations-api.jar:${j2ee.server.home}/lib/catalina-ant.jar:${j2ee.server.home}/lib/catalina-ha.jar:${j2ee.server.home}/lib/catalina-tribes.jar:${j2ee.server.home}/lib/catalina.jar:${j2ee.server.home}/lib/ecj-4.2.2.jar:${j2ee.server.home}/lib/el-api.jar:${j2ee.server.home}/lib/jasper-el.jar:${j2ee.server.home}/lib/jasper.jar:${j2ee.server.home}/lib/jsp-api.jar:${j2ee.server.home}/lib/servlet-api.jar:${j2ee.server.home}/lib/tomcat-api.jar:${j2ee.server.home}/lib/tomcat-coyote.jar:${j2ee.server.home}/lib/tomcat-dbcp.jar:${j2ee.server.home}/lib/tomcat-i18n-es.jar:${j2ee.server.home}/lib/tomcat-i18n-fr.jar:${j2ee.server.home}/lib/tomcat-i18n-ja.jar:${j2ee.server.home}/lib/tomcat-jdbc.jar:${j2ee.server.home}/lib/tomcat-util.jar +j2ee.server.type=Tomcat +jar.compress=false +javac.classpath=\ + ${file.reference.mysql-connector-java-5.0.8-bin.jar}:\ + ${file.reference.mysql-connector-java-5.0.8-bin.jar-1} +# Space-separated list of extra javac options +javac.compilerargs= +javac.debug=true +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.6 +javac.target=1.6 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.preview=true +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +lib.dir=${web.docbase.dir}/WEB-INF/lib +persistence.xml.dir=${conf.dir} +platform.active=default_platform +resource.dir=setup +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +# Space-separated list of JVM arguments used when running a class with a main method or a unit test +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value): +runmain.jvmargs= +source.encoding=UTF-8 +source.root=src +src.dir=${source.root}/java +test.src.dir=test +war.content.additional= +war.ear.name=${war.name} +war.name=Simple_blog.war +web.docbase.dir=web +webinf.dir=web/WEB-INF diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 00000000..aecd3733 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,26 @@ + + + org.netbeans.modules.web.project + + + Simple_blog + 1.6.5 + + + ${file.reference.mysql-connector-java-5.0.8-bin.jar} + + + ${file.reference.mysql-connector-java-5.0.8-bin.jar-1} + WEB-INF/lib + + + + + + + + + + + + diff --git a/readme.md b/readme.md deleted file mode 100644 index 5e7e48f5..00000000 --- a/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# Simple Blog Java - -Tugas 2 IF3110. - -![Simple Blog](http://i655.photobucket.com/albums/uu275/sonnylazuardi/ss-5.jpg) - -## Deskripsi - -Gunakan template ini untuk membuat sebuah blog sederhana dengan menggunakan bahasa pemrograman PHP. - -## Spesifikasi - -Spesifikasi untuk Tugas II IF3110 dapat diakses pada pranala berikut: - -https://www.dropbox.com/sh/ig1hf108ad9fqxi/AAA2PMjPFICSFo3ypdrHl39La?dl=0 - -## Deliverable - -Tiap-tiap Kelompok Membuat Organizationnya masing-masing, dengan langkah: - -1. Klik tanda Tambah disamping username pada Github, Pilih Create New Organization - -2. Buat Organisasi dengan Nama : IF3110-II-Nomor_Kelompok . Nomor Kelompok dapat diakses [disini](https://docs.google.com/spreadsheets/d/1Y-FGJ_feIVYNRv-o0ycBXyfAiKMFXKA17cvw3Mhjd1A/edit?usp=sharing) - -3. Masukkan email address salah satu anggota untuk billing email ( bebas ). - -4. Undang anggota kelompok untuk menjadi anggota Organisasi. - -5. Lakukan Fork Repository ini ke Organisasi yang baru dibentuk - -6. Setelah selesai mengerjakan, lakukan Pull Request. - -## Lisensi - -© 2014 Asisten IF3110 - -Yogi | [Sonny](http://github.com/sonnylazuardi) | Fathan | Renusa | Kelvin | Yanuar - -Dosen: [Yudistira Dwi Wardhana](http://github.com/yudis) \ No newline at end of file diff --git a/src/conf/MANIFEST.MF b/src/conf/MANIFEST.MF new file mode 100644 index 00000000..59499bce --- /dev/null +++ b/src/conf/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/src/java/data/Comment.java b/src/java/data/Comment.java new file mode 100644 index 00000000..dca31bda --- /dev/null +++ b/src/java/data/Comment.java @@ -0,0 +1,57 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package data; + +/** + * + * @author user + */ +public class Comment { + private int comment_id; + private String comment_date; + private String comment_content; + private int comment_post_id; + private String comment_email; + private int comment_user_id; + public Comment(){} + public void setCommentID(int value){ + comment_id = value; + } + public void setDate(String value){ + comment_date = value; + } + public void setContent(String value){ + comment_content = value; + } + public void setCommentPostID(int value){ + comment_post_id = value; + } + public void setEmail(String value){ + comment_email = value; + } + public void setUserID(int value){ + comment_user_id = value; + } + public int getCommentID(){ + return comment_id; + } + public String getDate(){ + return comment_date; + } + public String getContent(){ + return comment_content; + } + public int getCommentPostID(){ + return comment_post_id; + } + public String getEmail(){ + return comment_email; + } + public int getUserID(){ + return comment_user_id; + } +} diff --git a/src/java/data/Connector.java b/src/java/data/Connector.java new file mode 100644 index 00000000..a2c60caa --- /dev/null +++ b/src/java/data/Connector.java @@ -0,0 +1,345 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package data; + +import java.sql.*; +import java.util.ArrayList; + +/** + * + * @author user + */ +public class Connector { + /* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +/** + * + * @author user + */ + private Connection connection; + public Connector(){ + try { + System.out.println("Loading driver..."); + Class.forName("com.mysql.jdbc.Driver"); + System.out.println("Driver loaded!"); + } catch (ClassNotFoundException e) { + throw new RuntimeException("Cannot find the driver in the classpath!", e); + } + String url = "jdbc:mysql://localhost:3306/post"; + String username = "root"; + String password = ""; + connection = null; + try { + System.out.println("Connecting database..."); + connection = (Connection) DriverManager.getConnection(url, username, password); + System.out.println("Database connected!"); + } catch (SQLException e) { + System.err.println("Gagal melakukan koneksi."); + } + } + public ArrayList getUser(){ + Statement st; + ArrayList userList = new ArrayList(); + try{ + st = connection.createStatement(); + String sql = ("SELECT * FROM `user_data`"); + ResultSet rs = st.executeQuery(sql); + while(rs.next()){ + User user = new User(); + user.setUserID(rs.getInt("user_id")); + user.setUserName(rs.getString("user_name")); + user.setPassword(rs.getString("password")); + user.setUserType(rs.getInt("user_type")); + userList.add(user); + System.out.println("Username : " + userList.get(0).getUserName()); + } + } + catch(SQLException ex){ + System.err.println("Gagal mengambil data"); + } + return userList; + } + public ArrayList getComment(int post_id){ + Statement st; + ArrayList commentList = new ArrayList(); + try{ + st = connection.createStatement(); + String sql = ("SELECT * FROM `post`.`post_comment` WHERE `comment-post-id` = " + post_id + ";"); + ResultSet rs = st.executeQuery(sql); + while(rs.next()){ + Comment comment = new Comment(); + comment.setCommentID(rs.getInt("comment-id")); + comment.setDate(rs.getString("comment-date")); + comment.setContent(rs.getString("comment-content")); + comment.setCommentPostID(rs.getInt("comment-post-id")); + comment.setEmail(rs.getString("comment-email")); + comment.setUserID(rs.getInt("comment-user-id")); + commentList.add(comment); + } + } + catch(SQLException ex){ + System.err.println("Gagal mengambil data"); + } + return commentList; + } + public ArrayList getPost(int category){ + Statement st; + ArrayList listPost = new ArrayList(); + try { + st = connection.createStatement(); + String cat = new String(); + if (category == 0) + cat = "unpublished"; + else + cat = "published"; + + String sql = ("SELECT * FROM `post`.`post_table` WHERE `category` = '" + cat + "' ORDER BY `date`;"); + ResultSet rs = st.executeQuery(sql); + while(rs.next()) { + Post post = new Post(); + post.setPostID(rs.getInt("post_id")); + post.setTitle(rs.getString("title")); + post.setDate(rs.getString("date")); + post.setContent(rs.getString("content")); + post.setCategory(true); + post.setAuthorID(rs.getInt("post_author_id")); + listPost.add(post); + } + } catch (SQLException ex) { + System.err.println("Gagal mengambil data"); + } + return listPost; + } + + public Post getPost(int postID, boolean published){ + Post post = new Post(); + Statement st; + try { + st = connection.createStatement(); + String sqlQuery = new String(); + if (published){ + sqlQuery = "SELECT * FROM `post`.`post_table` WHERE `category` = 'published' AND `post_id` = " + Integer.toString(postID); + ResultSet rs = st.executeQuery(sqlQuery); + while (rs.next()){ + post.setPostID(rs.getInt("post_id")); + post.setTitle(rs.getString("title")); + post.setDate(rs.getString("date")); + post.setContent(rs.getString("content")); + post.setCategory(true); + post.setAuthorID(rs.getInt("post_author_id")); + } + } + + } + catch (Exception ex){ + + } + return post; + } + + + + public void setUser(User value){ + Statement st; + try { + st = connection.createStatement(); + String sql = ("INSERT INTO `post`.`user_data` (`user_id`, `user_name`, `user_type`, `password`) VALUES (NULL, '" + value.getUserName() + "', '" + value.getUserType() + "', '" + value.getPassword() + ");"); + ResultSet rs = st.executeQuery(sql); + } catch (SQLException ex) { + System.err.println("Gagal mengambil data"); + } + + } + public void setComment(Comment value){ + Statement st; + try { + st = connection.createStatement(); + String sql = new String(); + + if (value.getUserID() == 0) // GUEST + sql = ("INSERT INTO `post`.`post_comment` (`comment-id`, `comment-date`, `comment-content`, `comment-post-id`,`comment-email`, `comment-user-id`) " + + "VALUES" + + "(NULL, CURDATE(), '" + value.getContent() + "', '" + value.getCommentPostID() + "', '" + value.getEmail() + "', '" + "NULL" + ");"); + else { + + sql = ("INSERT INTO `post`.`post_comment` (`comment-id`, `comment-date`, `comment-content`, `comment-post-id`,`comment-email`, `comment-user-id`) VALUES (NULL, CURDATE(), '" + value.getContent() + "', '" + value.getCommentPostID() + "', '" + this.getEmailByID(value.getUserID()) + "'," + value.getUserID() + ");"); + } + + ResultSet rs = st.executeQuery(sql); + } catch (SQLException ex) { + System.err.println("Gagal mengambil data"); + } + + } + + public void setComment(String content, int post_id, String email, int user_id){ + Statement st; + boolean executed = false; + String finalQuery = null; + try{ + st = connection.createStatement(); + String sqlQuery = ""; + //contoh query bener + // INSERT INTO `post`.`post_comment` (`comment-id`, `comment-date`, `comment-content`, `comment-post-id`, `comment-email`, `comment-user-id`) VALUES (NULL, '2014-11-24', 'AAAAAAAAAAAAAAAAEH', '1', 'feli@feli.fel', '1'); + sqlQuery = "INSERT INTO `post`.`post_comment` (`comment-user-id`,`comment-content`,`comment-email`,`comment-post-id`,`comment-date`) VALUES ("; + if (user_id != 0) { + sqlQuery = sqlQuery + Integer.toString(user_id) + ","; + } + else { + sqlQuery = sqlQuery + "null, "; + } + + sqlQuery = sqlQuery + "'" + content.toString() + "', "; + sqlQuery = sqlQuery + "'" + email.toString() + "', "; + sqlQuery = sqlQuery + Integer.toString(post_id) + ", "; + sqlQuery = sqlQuery + "CURDATE() );"; + + //finalQuery = sqlQuery; + executed = st.execute(sqlQuery); + } catch (Exception e) { + System.err.println("Gagal insert comment :v "); + System.out.println(e); + } + + } + + public String setcommentquery(String content, int post_id, String email, int user_id){ + Statement st; + boolean executed = false; + String finalQuery = null; + try{ + st = connection.createStatement(); + String sqlQuery = ""; + //contoh query bener + // INSERT INTO `post`.`post_comment` (`comment-id`, `comment-date`, `comment-content`, `comment-post-id`, `comment-email`, `comment-user-id`) VALUES (NULL, '2014-11-24', 'AAAAAAAAAAAAAAAAEH', '1', 'feli@feli.fel', '1'); + sqlQuery = "INSERT INTO `post`.`post_comment` (`comment-user-id`,`comment-content`,`comment-email`,`comment-post-id`,`comment-date`) VALUES ("; + if (user_id != 0) { + sqlQuery = sqlQuery + Integer.toString(user_id) + ","; + } + else { + sqlQuery = sqlQuery + "null, "; + } + + sqlQuery = sqlQuery + "'" + content.toString() + "', "; + sqlQuery = sqlQuery + "'" + email.toString() + "', "; + sqlQuery = sqlQuery + Integer.toString(post_id) + ", "; + sqlQuery = sqlQuery + "CURDATE() );"; + + finalQuery = sqlQuery; + st.executeQuery(sqlQuery); + //executed = st.execute(sqlQuery); + } catch (Exception e) { + System.err.println("Gagal insert comment :v "); + System.out.println(e); + } + return finalQuery; + + } + + public void setPost(Post value){ + Statement st; + try { + st = connection.createStatement(); + String sql = ("INSERT INTO `post`.`post_table` (`post_id`, `title`, `date`, `content`, `category`, `post_author_id`) VALUES (NULL, '" + value.getTitle() + "', '" + value.getDate() + "', '" + value.getContent() + "', '" + value.getCategory() + "', '" + value.getAuthorID() + ");"); + ResultSet rs = st.executeQuery(sql); + } catch (SQLException ex) { + System.err.println("Gagal meng-insert data."); + } + } + + public boolean resetPost(Post value){ + Statement st; + Boolean queryres = false; + try { + st = connection.createStatement(); + //correct query : UPDATE `post_table` SET `post_id`=[value-1],`title`=[value-2],`date`=[value-3],`content`=[value-4],`category`=[value-5],`post_author_id`=[value-6] WHERE 1 + String sql = "UPDATE `post`.`post_table` " + + "SET `title` ='" + value.getTitle() + "', " + + "`date` ='" + value.getDate() + "', " + + "`content` = '" + value.getContent() + "' " + + "WHERE `post_id`=" + value.getPostID() + ";" ; + //return sql; + //ResultSet rs = st.executeQuery(sql); + queryres = st.execute(sql); + } catch (SQLException ex) { + System.err.println("Gagal meng-insert data."); + } + return queryres; + } + + public String getUsernameByID(int user_ID){ + boolean executed = false; + + String uName = new String(); + try { + Statement st; + st = connection.createStatement(); + String sqlQuery = "SELECT * FROM `post`.`user_data` WHERE `user_id` = " + Integer.toString(user_ID) + ";"; + ResultSet rs = st.executeQuery(sqlQuery); + if (rs.next()){ + uName = Boolean.toString(executed); + uName = rs.getString("user_name"); + } + } catch (Exception e) { + uName = uName + e.toString(); + //uName = sqlQuery; + } + + return uName; + } + public String getEmailByID(int user_ID){ + boolean executed = false; + + String uName = new String(); + try { + Statement st; + st = connection.createStatement(); + String sqlQuery = "SELECT * FROM `post`.`user_data` WHERE `user_id` = " + Integer.toString(user_ID) + ";"; + ResultSet rs = st.executeQuery(sqlQuery); + if (rs.next()){ + uName = Boolean.toString(executed); + uName = rs.getString("user_email"); + } + } catch (Exception e) { + uName = uName + e.toString(); + //uName = sqlQuery; + } + + return uName; + } + + + public void updatePost(int post_id, Post value){ + Statement st; + try { + st = connection.createStatement(); + String sql = ("INSERT INTO `post`.`post_table` (`post_id`, `title`, `date`, `content`, `category`, `post_author_id`) VALUES (NULL, '" + value.getTitle() + "', '" + value.getDate() + "', '" + value.getContent() + "', '" + value.getCategory() + "', '" + value.getAuthorID() + "');"); + ResultSet rs = st.executeQuery(sql); + } catch (SQLException ex) { + ex.printStackTrace(); + } + } + public void deletePost(int post_id){ + Statement st; + try { + st = connection.createStatement(); + String sql = ("DELETE FROM `post`.`post_table` WHERE `post_id` = " + post_id + ";"); + ResultSet rs = st.executeQuery(sql); + } catch (SQLException ex) { + ex.printStackTrace(); + } + } + + + public void closeConnection(){ + System.out.println("Closing the connection."); + if (connection != null) try { connection.close(); } catch (SQLException ignore) {} + } +} diff --git a/src/java/data/Post.java b/src/java/data/Post.java new file mode 100644 index 00000000..cc8ba127 --- /dev/null +++ b/src/java/data/Post.java @@ -0,0 +1,59 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package data; + +/** + * + * @author user + */ +public class Post { + private int post_id; + private String title; + private String date; + private String content; + private boolean category; + private int post_author_id; + public Post(){ + + } + public void setPostID(int value){ + post_id = value; + } + public void setTitle(String value){ + title = value; + } + public void setDate(String value){ + date = value; + } + public void setContent(String value){ + content = value; + } + public void setCategory(boolean value){ + category = value; + } + public void setAuthorID(int value){ + post_author_id = value; + } + public int getPostID(){ + return post_id; + } + public String getTitle(){ + return title; + } + public String getDate(){ + return date; + } + public String getContent(){ + return content; + } + public boolean getCategory(){ + return category; + } + public int getAuthorID(){ + return post_author_id; + } +} diff --git a/src/java/data/User.java b/src/java/data/User.java new file mode 100644 index 00000000..1e6b9908 --- /dev/null +++ b/src/java/data/User.java @@ -0,0 +1,43 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package data; + +/** + * + * @author user + */ +public class User { + private int user_id; + private String username; + private String password; + private int user_type; + User(){} + public void setUserID(int value){ + user_id = value; + } + public void setUserName(String value){ + username = value; + } + public void setPassword(String value){ + password = value; + } + public void setUserType(int value){ + user_type = value; + } + public int setUserID(){ + return user_id; + } + public String getUserName(){ + return username; + } + public String getPassword(){ + return password; + } + public int getUserType(){ + return user_type; + } +} diff --git a/src/lib/mysql-connector-java-5.0.8/CHANGES b/src/lib/mysql-connector-java-5.0.8/CHANGES new file mode 100644 index 00000000..51dfd0e2 --- /dev/null +++ b/src/lib/mysql-connector-java-5.0.8/CHANGES @@ -0,0 +1,3546 @@ +# Changelog +# $Id: CHANGES 6617 2007-10-04 20:43:49Z mmatthews $ + +10-09-07 - Version 5.0.8 + + - Fixed BUG#30550, executeBatch() would fail with an ArithmeticException + and/or NullPointerException when the batch had zero members and + "rewriteBatchedStatements" was set to "true" for the connection. + + - Added two configuration parameters (both default to "false") + + * blobsAreStrings - Should the driver always treat BLOBs as Strings + specifically to work around dubious metadata returned + by the server for GROUP BY clauses? + + * functionsNeverReturnBlobs - Should the driver always treat data from + functions returning BLOBs as Strings - + specifically to work around dubious metadata + returned by the server for GROUP BY clauses? + + - Fixed BUG#29106 - Connection checker for JBoss didn't use same method parameters + via reflection, causing connections to always seem "bad". + + - Fixed BUG#30664 - Note that this fix only works for MySQL server + versions 5.0.25 and newer, since earlier versions didn't consistently + return correct metadata for functions, and thus results from + subqueries and functions were indistinguishable from each other, + leading to type-related bugs. + + - Fixed BUG#28972 - DatabaseMetaData.getTypeInfo() for the types DECIMAL + and NUMERIC will return a precision of 254 for server versions older than + 5.0.3, 64 for versions 5.0.3-5.0.5 and 65 for versions newer than 5.0.5. + + - Fixed BUG#29852 - Closing a load-balanced connection would cause a + ClassCastException. + + - Fixed BUG#27867 - Schema objects with identifiers other than + the connection character aren't retrieved correctly in + ResultSetMetadata. + + - Fixed BUG#28689 - CallableStatement.executeBatch() doesn't work when + connection property "noAccessToProcedureBodies" has been set to "true". + + The fix involves changing the behavior of "noAccessToProcedureBodies",in + that the driver will now report all paramters as "IN" paramters + but allow callers to call registerOutParameter() on them without throwing + an exception. + + - Fixed BUG#27182 - Connection.getServerCharacterEncoding() doesn't work + for servers with version >= 4.1. + + - Fixed BUG#27915 - DatabaseMetaData.getColumns() doesn't + contain SCOPE_* or IS_AUTOINCREMENT columns. + + - Fixed BUG#30851, NPE with null column values when + "padCharsWithSpace" is set to "true". + + - Specifying a "validation query" in your connection pool + that starts with "/* ping */" _exactly_ will cause the driver to + instead send a ping to the server and return a fake result set (much + lighter weight), and when using a ReplicationConnection or a LoadBalancedConnection, + will send the ping across all active connections. + + - Fixed Bug#30892 setObject(int, Object, int, int) delegate in + PreparedStatmentWrapper delegates to wrong method. + + - XAConnections now start in auto-commit mode (as per JDBC-4.0 specification + clarification). + + - Fixed Bug#27412 - cached metadata with PreparedStatement.execute() + throws NullPointerException. + + - Driver will now fall back to sane defaults for max_allowed_packet and + net_buffer_length if the server reports them incorrectly (and will log + this situation at WARN level, since it's actually an error condition). + + - Fixed BUG#27916 - UNSIGNED types not reported via DBMD.getTypeInfo(), and + capitalization of type names is not consistent between DBMD.getColumns(), + RSMD.getColumnTypeName() and DBMD.getTypeInfo(). + + This fix also ensures that the precision of UNSIGNED MEDIUMINT + and UNSIGNED BIGINT is reported correctly via DBMD.getColumns(). + + - Fixed BUG#31053 - Connections established using URLs of the form + "jdbc:mysql:loadbalance://" weren't doing failover if they tried to + connect to a MySQL server that was down. The driver now attempts + connections to the next "best" (depending on the load balance strategy + in use) server, and continues to attempt connecting to the next "best" + server every 250 milliseconds until one is found that is up and running + or 5 minutes has passed. + + If the driver gives up, it will throw the last-received SQLException. + +07-19-07 - Version 5.0.7 + + - Setting the configuration parameter "useCursorFetch" to "true" for + MySQL-5.0+ enables the use of cursors that allow Connector/J to save + memory by fetching result set rows in chunks (where the chunk size + is set by calling setFetchSize() on a Statement or ResultSet) by + using fully-materialized cursors on the server. + + The driver will will now automatically set "useServerPrepStmts" to + "true" when "useCursorFetch" has been set to "true", since the feature + requires server-side prepared statements in order to function. + + - Fixed BUG#28469 - PreparedStatement.getMetaData() for statements + containing leading one-line comments is not returned correctly. + + As part of this fix, we also overhauled detection of DML for + executeQuery() and SELECTs for executeUpdate() in plain and + prepared statements to be aware of the same types of comments. + + - Added configuration property "useNanosForElapsedTime" - for + profiling/debugging functionality that measures elapsed time, + should the driver try to use nanoseconds resolution if available + (requires JDK >= 1.5)? + + - Added configuration property "slowQueryThresholdNanos" - if + "useNanosForElapsedTime" is set to "true", and this property + is set to a non-zero value the driver will use this threshold + (in nanosecond units) to determine if a query was slow, instead + of using millisecond units. + + Note, that if "useNanosForElapsedTime" is set to "true", and this + property is set to "0" (or left default), then elapsed times will + still be measured in nanoseconds (if possible), but the slow query + threshold will be converted from milliseconds to nanoseconds, and thus + have an upper bound of approximately 2000 millesconds (as that threshold + is represented as an integer, not a long). + + - Added configuration properties to allow tuning of TCP/IP socket + parameters: + + "tcpNoDelay" - Should the driver set SO_TCP_NODELAY (disabling the + Nagle Algorithm, default "true")? + + "tcpKeepAlive" - Should the driver set SO_KEEPALIVE (default "true")? + + "tcpRcvBuf" - Should the driver set SO_RCV_BUF to the given value? + The default value of '0', means use the platform default + value for this property. + + "tcpSndBuf" - Should the driver set SO_SND_BUF to the given value? + The default value of '0', means use the platform default + value for this property. + + "tcpTrafficClass" - Should the driver set traffic class or + type-of-service fields? See the documentation + for java.net.Socket.setTrafficClass() for more + information. + + - Give more information in EOFExceptions thrown out of MysqlIO (how many + bytes the driver expected to read, how many it actually read, say that + communications with the server were unexpectedly lost). + + - Setting "useDynamicCharsetInfo" to "false" now causes driver to use + static lookups for collations as well (makes + ResultSetMetadata.isCaseSensitive() much more efficient, which leads + to performance increase for ColdFusion, which calls this method for + every column on every table it sees, it appears). + + - Driver detects when it is running in a ColdFusion MX server (tested + with version 7), and uses the configuration bundle "coldFusion", + which sets useDynamicCharsetInfo to "false" (see previous entry), and + sets useLocalSessionState and autoReconnect to "true". + + - Fixed BUG#28851 - parser in client-side prepared statements + eats character following '/' if it's not a multi-line comment. + + - Fixed BUG#28956 - parser in client-side prepared statements + runs to end of statement, rather than end-of-line for '#' comments. + + Also added support for '--' single-line comments. + + - Don't send any file data in response to LOAD DATA LOCAL INFILE + if the feature is disabled at the client side. This is to prevent + a malicious server or man-in-the-middle from asking the client for + data that the client is not expecting. Thanks to Jan Kneschke for + discovering the exploit and Andrey "Poohie" Hristov, Konstantin Osipov + and Sergei Golubchik for discussions about implications and possible + fixes. This fixes BUG 29605 for JDBC. + + - Added new debugging functionality - Setting configuration property + "includeInnodbStatusInDeadlockExceptions" to "true" will cause the driver + to append the output of "SHOW ENGINE INNODB STATUS" to deadlock-related + exceptions, which will enumerate the current locks held inside InnoDB. + +05-15-07 - Version 5.0.6 + + - Fixed BUG#25545 - Client options not sent correctly when using SSL, + leading to stored procedures not being able to return results. Thanks + to Don Cohen for the bug report, testcase and patch. + + - Fixed BUG#26592 - PreparedStatement is not closed in + BlobFromLocator.getBytes(). + + - Fixed BUG#25624 - Whitespace surrounding storage/size specifiers in + stored procedure parameters declaration causes NumberFormatException to + be thrown when calling stored procedure on JDK-1.5 or newer, as the Number + classes in JDK-1.5+ are whitespace intolerant. + + - Fixed BUG#26173 - When useCursorFetch=true, sometimes server would return + new, more exact metadata during the execution of the server-side prepared + statement that enables this functionality, which the driver ignored (using + the original metadata returned during prepare()), causing corrupt reading + of data due to type mismatch when the actual rows were returned. + + - Fixed BUG#26959 - comments in DDL of stored procedures/functions confuse + procedure parser, and thus metadata about them can not be created, leading to + inability to retrieve said metadata, or execute procedures that have certain + comments in them. + + - Give better error message when "streaming" result sets, and the connection + gets clobbered because of exceeding net_write_timeout on the server. (which is + basically what the error message says too). + + - Fixed BUG#26789 - fast date/time parsing doesn't take into + account 00:00:00 as a legal value. + + - Fixed BUG#27317 - ResultSet.get*() with a column index < 1 returns + misleading error message. + + - Fixed BUG#25517 - Statement.setMaxRows() is not effective on result + sets materialized from cursors. + + - New configuration property, "enableQueryTimeouts" (default "true"). + When enabled, query timeouts set via Statement.setQueryTimeout() use a + shared java.util.Timer instance for scheduling. Even if the timeout + doesn't expire before the query is processed, there will be + memory used by the TimerTask for the given timeout which won't be + reclaimed until the time the timeout would have expired if it + hadn't been cancelled by the driver. High-load environments + might want to consider disabling this functionality. (this configuration + property is part of the "maxPerformance" configuration bundle). + + - Fixed BUG#27400 - CALL /* ... */ some_proc() doesn't work. As a side effect + of this fix, you can now use /* */ and # comments when preparing statements using + client-side prepared statement emulation. + + If the comments happen to contain parameter markers '?', they will be treated + as belonging to the comment (i.e. not recognized) rather than being a parameter + of the statement. + + Note that the statement when sent to the server will contain the comments + as-is, they're not stripped during the process of preparing the PreparedStatement + or CallableStatement. + + - Fixed BUG#25328 - BIT(> 1) is returned as java.lang.String from ResultSet.getObject() + rather than byte[]. + + - Fixed BUG#25715 - CallableStatements with OUT/INOUT parameters that + are "binary" (blobs, bits, (var)binary, java_object) have extra 7 bytes + (which happens to be the _binary introducer!) + + - Added configuration property "padCharsWithSpace" (defaults to "false"). If set + to "true", and a result set column has the CHAR type and the value does not + fill the amount of characters specified in the DDL for the column, the driver + will pad the remaining characters with space (for ANSI compliance). + + - Fixed BUG#27655 - Connection.getTransactionIsolation() uses + "SHOW VARIABLES LIKE" which is very inefficient on MySQL-5.0+ + + - Added configuration property "useDynamicCharsetInfo". If set to "false" + (the default), the driver will use a per-connection cache of character set + information queried from the server when necessary, or when set to "true", + use a built-in static mapping that is more efficient, but isn't aware of + custom character sets or character sets implemented after the release of + the JDBC driver. + + Note: this only affects the "padCharsWithSpace" configuration property and the + ResultSetMetaData.getColumnDisplayWidth() method. + + - More intelligent initial packet sizes for the "shared" packets are used + (512 bytes, rather than 16K), and initial packets used during handshake are + now sized appropriately as to not require reallocation. + + - Fixed issue where calling getGeneratedKeys() on a prepared statement after + calling execute() didn't always return the generated keys (executeUpdate() + worked fine however). + + - Fixed issue where a failed-over connection would let an application call + setReadOnly(false), when that call should be ignored until the connection + is reconnected to a writable master unless "failoverReadOnly" had been set + to "false". + + - Fixed BUG#28085 - Generate more useful error messages for diagnostics + when the driver thinks a result set isn't updatable. (Thanks to Ashley Martens + for the patch). + + - Driver will now use INSERT INTO ... VALUES (DEFAULT) form of statement + for updatable result sets for ResultSet.insertRow(), rather than + pre-populating the insert row with values from DatabaseMetaData.getColumns() + (which results in a "SHOW FULL COLUMNS" on the server for every result + set). If an application requires access to the default values before + insertRow() has been called, the JDBC URL should be configured with + "populateInsertRowWithDefaultValues" set to "true". + + This fix specifically targets performance issues with ColdFusion and the + fact that it seems to ask for updatable result sets no matter what the + application does with them. + + - com.mysql.jdbc.[NonRegistering]Driver now understands URLs of the format + "jdbc:mysql:replication://" and "jdbc:mysql:loadbalance://" which will + create a ReplicationConnection (exactly like when + using [NonRegistering]ReplicationDriver) and an experimenal load-balanced + connection designed for use with SQL nodes in a MySQL Cluster/NDB environment, + respectively. + + In an effort to simplify things, we're working on deprecating multiple + drivers, and instead specifying different core behavior based upon JDBC URL + prefixes, so watch for [NonRegistering]ReplicationDriver to eventually + disappear, to be replaced with com.mysql.jdbc[NonRegistering]Driver with + the new URL prefix. + + - Added an experimental load-balanced connection designed for use with SQL nodes + in a MySQL Cluster/NDB environment (This is not for master-slave replication. + For that, we suggest you look at ReplicationConnection or "lbpool"). + + If the JDBC URL starts with "jdbc:mysql:loadbalance://host-1,host-2,...host-n", + the driver will create an implementation of java.sql.Connection that load + balances requests across a series of MySQL JDBC connections to the given hosts, + where the balancing takes place after transaction commit. + + Therefore, for this to work (at all), you must use transactions, even if only + reading data. + + Physical connections to the given hosts will not be created until needed. + + The driver will invalidate connections that it detects have had + communication errors when processing a request. A new connection to the + problematic host will be attempted the next time it is selected by the load + balancing algorithm. + + There are two choices for load balancing algorithms, which may be specified + by the "loadBalanceStrategy" JDBC URL configuration property: + + * "random" - the driver will pick a random host for each request. This tends + to work better than round-robin, as the randomness will somewhat account for + spreading loads where requests vary in response time, while round-robin + can sometimes lead to overloaded nodes if there are variations in response times + across the workload. + + * "bestResponseTime" - the driver will route the request to the host that had + the best response time for the previous transaction. + + - When "useLocalSessionState" is set to "true" and connected to a MySQL-5.0 or + later server, the JDBC driver will now determine whether an actual "commit" or + "rollback" statement needs to be sent to the database when Connection.commit() + or Connection.rollback() is called. + + This is especially helpful for high-load situations with connection pools that + always call Connection.rollback() on connection check-in/check-out because it + avoids a round-trip to the server. + +03-01-07 - Version 5.0.5 + + - Fixed BUG#23645 - Some collations/character sets reported as "unknown" + (specifically cias variants of existing character sets), and inability to override + the detected server character set. + + - Performance enhancement of initial character set configuration, driver + will only send commands required to configure connection character set + session variables if the current values on the server do not match + what is required. + + - Usage advisor now detects "empty" result sets and doesn't report on + columns not referenced in them. + + - Fixed BUG#24360 .setFetchSize() breaks prepared SHOW and other commands. + + - Fixed BUG#24344 - useJDBCCompliantTimezoneShift with server-side prepared + statements gives different behavior than when using client-side prepared + statements. (this is now fixed if moving from server-side prepared statements + to client-side prepared statements by setting "useSSPSCompatibleTimezoneShift" to + true", as the driver can't tell if this is a new deployment that never used + server-side prepared statements, or if it is an existing deployment that is + switching to client-side prepared statements from server-side prepared statements. + + - Fixed BUG#23304 - DBMD using "show" and DBMD using information_schema do + not return results consistent with each other. (note this fix only + addresses the inconsistencies, not the issue that the driver is + treating schemas differently than some users expect. We will revisit + this behavior when there is full support for schemas in MySQL). + + - Fixed BUG#25073 - rewriting batched statements leaks internal statement + instances, and causes a memory leak. + + - Fixed issue where field-level for metadata from DatabaseMetaData when using + INFORMATION_SCHEMA didn't have references to current connections, + sometimes leading to NullPointerExceptions when intropsecting them via + ResultSetMetaData. + + - Fixed BUG#25025 - Client-side prepared statement parser gets confused by + in-line (/* ... */) comments and therefore can't rewrite batched statements + or reliably detect type of statements when they're used. + + - Fixed BUG#24065 - Better error message when server doesn't return enough + information to determine stored procedure/function parameter types. + + - Fixed BUG#21438 - Driver sending nanoseconds to server for timestamps when + using server-side prepared statements, when server expects microseconds. + + - Fixed BUG#25514 - Timer instance used for Statement.setQueryTimeout() + created per-connection, rather than per-VM, causing memory leak. + + - Fixed BUG#25009 - Results from updates not handled correctly in + multi-statement queries, leading to erroneous "Result is from UPDATE" + exceptions. + + - Fixed BUG#25047 - StringUtils.indexOfIgnoreCaseRespectQuotes() isn't + case-insensitive on the first character of the target. This bug broke + rewriteBatchedStatements functionality when prepared statements don't + use upper-case for the VALUES clause in their statements. + + - Fixed BUG#21480 - Some exceptions thrown out of StandardSocketFactory + were needlessly wrapped, obscurring their true cause, especially when + using socket timeouts. + + - Fixed BUG#23303 - DatabaseMetaData.getSchemas() doesn't return a + TABLE_CATALOG column. + + - Fixed BUG#25399 - EscapeProcessor gets confused by multiple + backslashes. We now push the responsibility of syntax errors back + on to the server for most escape sequences. + + - Fixed BUG#25379 - INOUT parameters in CallableStatements get + doubly-escaped. + + - Removed non-short-circuited logical ORs from "if" statements. + + - Re-worked stored procedure parameter parser to be more robust. Driver no + longer requires "BEGIN" in stored procedure definition, but does have + requirement that if a stored function begins with a label directly after the + "returns" clause, that the label is not a quoted identifier. + + - Reverted back to internal character conversion routines for single-byte + character sets, as the ones internal to the JVM are using much more CPU + time than our internal implementation. + + - Changed cached result set metadata (when using + "cacheResultSetMetadata=true") to be cached per-connection rather + than per-statement as previously implemented. + + - Use a java.util.TreeMap to map column names to ordinal indexes for + ResultSet.findColumn() instead of a HashMap. This allows us to have + case-insensitive lookups (required by the JDBC specification) without + resorting to the many transient object instances needed to support this + requirement with a normal HashMap with either case-adjusted keys, or + case-insensitive keys. (In the worst case scenario for lookups of a 1000 + column result set, TreeMaps are about half as fast wall-clock time as + a HashMap, however in normal applications their use gives many orders + of magnitude reduction in transient object instance creation which pays + off later for CPU usage in garbage collection). + + - Avoid static synchronized code in JVM class libraries for dealing with + default timezones. + + - Fixed cases where ServerPreparedStatements weren't using cached metadata + when "cacheResultSetMetadata=true" was configured. + + - Use faster datetime parsing for ResultSets that come from plain or + non-server-side prepared statements. (Enable old implementation with + "useFastDateParsing=false" as a configuration parameter). + + - Fixed BUG#24794 - DatabaseMetaData.getSQLKeywords() doesn't return + all reserved words for current MySQL version. The current fix/implementation + returns keywords for MySQL-5.1, and doesn't distinguish between different + versions of the server. + + - When using cached metadata, skip field-level metadata packets coming from + the server, rather than reading them and discarding them without creating + com.mysql.jdbc.Field instances. + + - Fixed BUG#25836 - Statement execution which timed out doesn't always + throw MySQLTimeoutException. + + - Throw exceptions encountered during timeout to thread + calling Statement.execute*(), rather than RuntimeException. + + - Added configuration property "localSocketAddress",which is the hostname or + IP address given to explicitly configure the interface that the driver will + bind the client side of the TCP/IP connection to when connecting. + + - Take "localSocketAddress" property into account when creating instances + of CommunicationsException when the underyling exception is a + java.net.BindException, so that a friendlier error message is given with + a little internal diagnostics. + + - Fixed some NPEs when cached metadata was used with UpdatableResultSets. + + - The "rewriteBatchedStatements" feature can now be used with server-side + prepared statements. + + - Fixed BUG#26326 - Connection property "socketFactory" wasn't exposed via + correctly named mutator/accessor, causing data source implementations that + use JavaBean naming conventions to set properties to fail to set the property + (and in the case of SJAS, fail silently when trying to set this parameter). + + - Fixed BUG#25787 - java.util.Date should be serialized for + PreparedStatement.setObject(). + + We've added a new configuration option "treatUtilDateAsTimestamp", which is + false by default, as (1) We already had specific behavior to treat + java.util.Date as a java.sql.Timestamp because it's useful to many folks, + and (2) that behavior will very likely be required for drivers JDBC-post-4.0. + + - Fixed BUG#22628 - Driver.getPropertyInfo() throws NullPointerException for + URL that only specifies host and/or port. + + - Fixed BUG#21267, ParameterMetaData throws NullPointerException when + prepared SQL actually has a syntax error. Added + "generateSimpleParameterMetadata" configuration property, which when set + to "true" will generate metadata reflecting VARCHAR for every parameter + (the default is "false", which will cause an exception to be thrown if no + parameter metadata for the statement is actually available). + + - When extracting foreign key information from "SHOW CREATE TABLE " in + DatabaseMetaData, ignore exceptions relating to tables being missing + (which could happen for cross-reference or imported-key requests, as + the list of tables is generated first, then iterated). + + - Fixed logging of XA commands sent to server, it's now configurable + via "logXaCommands" property (defaults to "false"). + + - Fixed issue where XADataSources couldn't be bound into JNDI, + as the DataSourceFactory didn't know how to create instances + of them. + + - Usage advisor will now issue warnings for result sets with large numbers + of rows (size configured by "resultSetSizeThreshold" property, default + value is 100). + +10-20-06 - Version 5.0.4 + + - Fixed BUG#21379 - column names don't match metadata in cases + where server doesn't return original column names (column functions) + thus breaking compatibility with applications that expect 1-1 mappings + between findColumn() and rsmd.getColumnName(), usually manifests itself + as "Can't find column ('')" exceptions. + + - Fixed BUG#21544 - When using information_schema for metadata, + COLUMN_SIZE for getColumns() is not clamped to range of + java.lang.Integer as is the case when not using + information_schema, thus leading to a truncation exception that + isn't present when not using information_schema. + + - Fixed configuration property "jdbcCompliantTruncation" was not + being used for reads of result set values. + + - Fixed BUG#22024 - Newlines causing whitespace to span confuse + procedure parser when getting parameter metadata for stored + procedures. + + - Driver now supports {call sp} (without "()" if procedure has no + arguments). + + - Fixed BUG#22359 - Driver was using milliseconds for + Statement.setQueryTimeout() when specification says argument is + to be in seconds. + + - Workaround for server crash when calling stored procedures + via a server-side prepared statement (driver now detects + prepare(stored procedure) and substitutes client-side prepared + statement), addresses BUG#22297. + + - Added new _ci collations to CharsetMapping, fixing + Bug#22456 - utf8_unicode_ci not working. + + - Fixed BUG#22290 - Driver issues truncation on write exception when + it shouldn't (due to sending big decimal incorrectly to server with + server-side prepared statement). + + - Fixed BUG#22613 - DBMD.getColumns() does not return expected + COLUMN_SIZE for the SET type, now returns length of largest possible + set disregarding whitespace or the "," delimitters to be consistent + with the ODBC driver. + + - Driver now sends numeric 1 or 0 for client-prepared statement + setBoolean() calls instead of '1' or '0'. + + - DatabaseMetaData correctly reports true for supportsCatalog*() + methods. + +07-26-06 - Version 5.0.3 + + - Fixed BUG#20650 - Statement.cancel() causes NullPointerException + if underlying connection has been closed due to server failure. + + - Added configuration option "noAccessToProcedureBodies" which will + cause the driver to create basic parameter metadata for + CallableStatements when the user does not have access to procedure + bodies via "SHOW CREATE PROCEDURE" or selecting from mysql.proc + instead of throwing an exception. The default value for this option + is "false". + +07-11-06 - Version 5.0.2-beta (5.0.1 not released due to packaging error) + + - Fixed BUG#17401 - Can't use XAConnection for local transactions when + no global transaction is in progress. + + - Fixed BUG#18086 - Driver fails on non-ASCII platforms. The driver + was assuming that the platform character set would be a superset + of MySQL's "latin1" when doing the handshake for authentication, + and when reading error messages. We now use Cp1252 for all strings + sent to the server during the handshake phase, and a hard-coded mapping + of the "language" server variable to the character set that + is used for error messages. + + - Fixed BUG#19169 - ConnectionProperties (and thus some + subclasses) are not serializable, even though some J2EE containers + expect them to be. + + - Fixed BUG#20242 - MysqlValidConnectionChecker for JBoss doesn't + work with MySQLXADataSources. + + - Better caching of character set converters (per-connection) + to remove a bottleneck for multibyte character sets. + + - Added connection/datasource property "pinGlobalTxToPhysicalConnection" + (defaults to "false"). When set to "true", when using XAConnections, the + driver ensures that operations on a given XID are always routed to the + same physical connection. This allows the XAConnection to support + "XA START ... JOIN" after "XA END" has been called, and is also a + workaround for transaction managers that don't maintain thread affinity + for a global transaction (most either always maintain thread affinity, + or have it as a configuration option). + + - MysqlXaConnection.recover(int flags) now allows combinations of + XAResource.TMSTARTRSCAN and TMENDRSCAN. To simulate the "scanning" + nature of the interface, we return all prepared XIDs for TMSTARTRSCAN, + and no new XIDs for calls with TMNOFLAGS, or TMENDRSCAN when not in + combination with TMSTARTRSCAN. This change was made for API compliance, + as well as integration with IBM WebSphere's transaction manager. + +12-23-05 - Version 5.0.0-beta + + - XADataSource implemented (ported from 3.2 branch which won't be + released as a product). Use + "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" as your datasource + class name in your application server to utilize XA transactions + in MySQL-5.0.10 and newer. + + - PreparedStatement.setString() didn't work correctly when + sql_mode on server contained NO_BACKSLASH_ESCAPES, and no characters + that needed escaping were present in the string. + + - Attempt detection of the MySQL type "BINARY" (it's an alias, so this isn't + always reliable), and use the java.sql.Types.BINARY type mapping for it. + + - Moved -bin-g.jar file into separate "debug" subdirectory to avoid confusion. + + - Don't allow .setAutoCommit(true), or .commit() or .rollback() on an XA-managed + connection as-per the JDBC specification. + + - If the connection "useTimezone" is set to "true", then also respect timezone + conversions in escape-processed string literals (e.g. "{ts ...}" and + "{t ...}"). + + - Return original column name for RSMD.getColumnName() if the column was aliased, + alias name for .getColumnLabel() (if aliased), and original table name + for .getTableName(). Note this only works for MySQL-4.1 and newer, as + older servers don't make this information available to clients. + + - Setting "useJDBCCompliantTimezoneShift=true" (it's not the default) + causes the driver to use GMT for _all_ TIMESTAMP/DATETIME timezones, + and the current VM timezone for any other type that refers to timezones. + This feature can not be used when "useTimezone=true" to convert between + server and client timezones. + + - Add one level of indirection of internal representation of CallableStatement + parameter metadata to avoid class not found issues on JDK-1.3 for + ParameterMetadata interface (which doesn't exist prior to JDBC-3.0). + + - Added unit tests for XADatasource, as well as friendlier exceptions + for XA failures compared to the "stock" XAException (which has no + messages). + + - Fixed BUG#14279 - Idle timeouts cause XAConnections to whine about rolling + themselves back + + - Added support for Connector/MXJ integration via url subprotocol + "jdbc:mysql:mxj://....". + + - Moved all SQLException constructor usage to a factory in SQLError + (ground-work for JDBC-4.0 SQLState-based exception classes). + + - Removed Java5-specific calls to BigDecimal constructor (when + result set value is '', (int)0 was being used as an argument + in-directly via method return value. This signature doesn't exist + prior to Java5.) + + - Moved all SQLException creation to a factory method in SQLError, + groundwork for JDBC-4.0 SQLState class-based exceptions. + + - Added service-provider entry to META-INF/services/java.sql.Driver + for JDBC-4.0 support. + + - Return "[VAR]BINARY" for RSMD.getColumnTypeName() when that is actually + the type, and it can be distinguished (MySQL-4.1 and newer). + + - When fix for BUG#14562 was merged from 3.1.12, added functionality + for CallableStatement's parameter metadata to return correct + information for .getParameterClassName(). + + - Fuller synchronization of Connection to avoid deadlocks when + using multithreaded frameworks that multithread a single connection + (usually not recommended, but the JDBC spec allows it anyways), + part of fix to BUG#14972). + + - Implementation of Statement.cancel() and Statement.setQueryTimeout(). + Both require MySQL-5.0.0 or newer server, require a separate connection + to issue the "KILL QUERY" command, and in the case of setQueryTimeout() + creates an additional thread to handle the timeout functionality. + + Note: Failures to cancel the statement for setQueryTimeout() may manifest + themselves as RuntimeExceptions rather than failing silently, as there + is currently no way to unblock the thread that is executing the query being + cancelled due to timeout expiration and have it throw the exception + instead. + + - Removed dead code in com.mysql.jdbc.Connection. + + - Made construction of com.mysql.jdbc.Field (result set metadata) + instances more efficient for non-string types by not doing + character set initialization, or detection of type changes due to + temporary tables. + + - Removed redundant code in com.mysql.jdbc.MysqlIO. + + - Removed work done for BUG#14652, and instead loosened synchronization + to solve a number of deadlock issues in BUG#18719, BUG#18367, BUG#17709 + and BUG#15067. New strategy basically makes Connection instances threadsafe + and thus shareable across threads, and anything else threadsafe, but not + necessarily shareable across threads due to JDBC API interactions that + can cause non-obvious behavior and/or deadlock scenarios to occur since + the API is not designed to be used from multiple threads at once. + + Therefore, unless external synchronization is provided, clients should + not allow multiple threads to share a given statement or result set. Examples + of issues with the API itself not being multi-thread suitable include, + but are not limited to race conditions between modifiers and execution and + retrieval methods on statements and result sets that are not synchronizable + such as ResultSet.get*() and traversal methods, or Statement.execute*() closing + result sets without effectively making the driver itself serializable across the + board. + + These changes should not have any effect on "normal" J(2)EE use cases + where only one thread ever uses a connection instance and the objects created by + it. + + - Use a java.util.Timer to schedule cancellation of queries via + Statement.setQueryTimeout() rather than one thread per potential cancellation. + + A new thread will be used to actually cancel a running query, as there's potential + for a cancel request to block other cancel requests if all run from the + same thread. + +nn-nn-07 - Version 3.1.15 + + - Fixed BUG#23281 - Downed slave caused round-robin load balance to + not cycle back to first host in list. + + - Disabled use of server-side prepared statements by default. + + - Handle YYYY-MM-DD hh:mm:ss format of timestamp in + ResultSet.getTimeFromString(). + + - Fixed BUG#24840 - character encoding of "US-ASCII" doesn't map correctly + for 4.1 or newer + + - Added Implementation-Vendor-Id attribute to jar manifest per request + in BUG#15641. + + - C3P0 >= version 0.9.1 passes non-proxied connections to + MysqlConnectionTester, thus it began throwing ClassCastExceptions. + MysqlConnectionTester now checks if it has a plain Connection and uses + that if possible. Thanks to Brian Skrab for the fix. + +10-19-06 - Version 3.1.14 + + - Fixed BUG#20479 - Updatable result set throws ClassCastException + when there is row data and moveToInsertRow() is called. + + - Fixed BUG#20485 - Updatable result set that contains + a BIT column fails when server-side prepared statements are used. + + - Fixed BUG#16987 - Memory leak with profileSQL=true. + + - Fixed BUG#19726 - Connection fails to localhost when using + timeout and IPv6 is configured. + + - Fixed BUG#16791 - NullPointerException in MysqlDataSourceFactory + due to Reference containing RefAddrs with null content. + + - Fixed BUG#20306 - ResultSet.getShort() for UNSIGNED TINYINT + returns incorrect values when using server-side prepared statements. + + - Fixed BUG#20687 - Can't pool server-side prepared statements, exception + raised when re-using them. + + - Fixed BUG#21062 - ResultSet.getSomeInteger() doesn't work for BIT(>1). + + - Fixed BUG#18880 - ResultSet.getFloatFromString() can't retrieve + values near Float.MIN/MAX_VALUE. + + - Fixed BUG#20888 - escape of quotes in client-side prepared + statements parsing not respected. Patch covers more than bug report, + including NO_BACKSLASH_ESCAPES being set, and stacked quote characters + forms of escaping (i.e. '' or ""). + + - Fixed BUG#19993 - ReplicationDriver does not always round-robin load + balance depending on URL used for slaves list. + + - Fixed calling toString() on ResultSetMetaData for driver-generated + (i.e. from DatabaseMetaData method calls, or from getGeneratedKeys()) + result sets would raise a NullPointerException. + + - Fixed Bug#21207 - Driver throws NPE when tracing prepared statements that + have been closed (in asSQL()). + + - Removed logger autodectection altogether, must now specify logger + explitly if you want to use a logger other than one that logs + to STDERR. + + - Fixed BUG#22290 - Driver issues truncation on write exception when + it shouldn't (due to sending big decimal incorrectly to server with + server-side prepared statement). + + - Driver now sends numeric 1 or 0 for client-prepared statement + setBoolean() calls instead of '1' or '0'. + + - Fixed bug where driver would not advance to next host if + roundRobinLoadBalance=true and the last host in the list is down. + + - Fixed BUG#18258 - DatabaseMetaData.getTables(), columns() with bad + catalog parameter threw exception rather than return empty result + set (as required by spec). + + - Check and store value for continueBatchOnError property in constructor + of Statements, rather than when executing batches, so that Connections + closed out from underneath statements don't cause NullPointerExceptions + when it's required to check this property. + + - Fixed bug when calling stored functions, where parameters weren't + numbered correctly (first parameter is now the return value, subsequent + parameters if specified start at index "2"). + + - Fixed BUG#21814 - time values outside valid range silently wrap. + + - Fixed bug when calling stored functions, where parameters weren't + numbered correctly (first parameter is now the return value, subsequent + parameters if specified start at index "2"). + + - Fixed BUG#21814 - time values outside valid range silently wrap. + +05-26-06 - Version 3.1.13 + + - Fixed BUG#15464 - INOUT parameter does not store IN value. + + - Fixed BUG#14609 - Exception thrown for new decimal type when + using updatable result sets. + + - Fixed BUG#15544, no "dos" character set in MySQL > 4.1.0 + + - Fixed BUG#15383 - PreparedStatement.setObject() serializes + BigInteger as object, rather than sending as numeric value + (and is thus not complementary to .getObject() on an UNSIGNED + LONG type). + + - Fixed BUG#11874 - ResultSet.getShort() for UNSIGNED TINYINT + returned wrong values. + + - Fixed BUG#15676 - lib-nodist directory missing from + package breaks out-of-box build + + - Fixed BUG#15854 - DBMD.getColumns() returns wrong type for BIT. + + - Fixed BUG#16169 - ResultSet.getNativeShort() causes stack overflow error + via recurisve calls. + + - Fixed BUG#14938 - Unable to initialize character set mapping tables. + Removed reliance on .properties files to hold this information, as it + turns out to be too problematic to code around class loader hierarchies + that change depending on how an application is deployed. Moved information + back into the CharsetMapping class. + + - Fixed BUG#16841 - updatable result set doesn't return AUTO_INCREMENT + values for insertRow() when multiple column primary keys are used. (the + driver was checking for the existence of single-column primary keys and + an autoincrement value > 0 instead of a straightforward isAutoIncrement() + check). + + - Fixed BUG#17099 - Statement.getGeneratedKeys() throws NullPointerException + when no query has been processed. + + - Fixed BUG#13469 - Driver tries to call methods that don't exist on older and + newer versions of Log4j. The fix is not trying to auto-detect presense of log4j, + too many different incompatible versions out there in the wild to do this reliably. + + If you relied on autodetection before, you will need to add + "logger=com.mysql.jdbc.log.Log4JLogger" to your JDBC URL to enable Log4J usage, + or alternatively use the new "CommonsLogger" class to take care of this. + + - Added support for Apache Commons logging, use "com.mysql.jdbc.log.CommonsLogger" + as the value for the "logger" configuration property. + + - LogFactory now prepends "com.mysql.jdbc.log" to log class name if it can't be + found as-specified. This allows you to use "short names" for the built-in log + factories, for example "logger=CommonsLogger" instead of + "logger=com.mysql.jdbc.log.CommonsLogger". + + - Fixed BUG#15570 - ReplicationConnection incorrectly copies state, + doesn't transfer connection context correctly when transitioning between + the same read-only states. + + - Fixed BUG#18041 - Server-side prepared statements don't cause + truncation exceptions to be thrown when truncation happens. + + - Added performance feature, re-writing of batched executes for + Statement.executeBatch() (for all DML statements) and + PreparedStatement.executeBatch() (for INSERTs with VALUE clauses + only). Enable by using "rewriteBatchedStatements=true" in your JDBC URL. + + - Fixed BUG#17898 - registerOutParameter not working when some + parameters pre-populated. Still waiting for feedback from JDBC experts + group to determine what correct parameter count from getMetaData() + should be, however. + + - Fixed BUG#17587 - clearParameters() on a closed prepared statement + causes NPE. + + - Map "latin1" on MySQL server to CP1252 for MySQL > 4.1.0. + + - Added additional accessor and mutator methods on ConnectionProperties + so that DataSource users can use same naming as regular URL properties. + + - Fixed BUG#18740 - Data truncation and getWarnings() only returns last + warning in set. + + - Improved performance of retrieving BigDecimal, Time, Timestamp and Date + values from server-side prepared statements by creating fewer short-lived + instances of Strings when the native type is not an exact match for + the requested type. Fixes BUG#18496 for BigDecimals. + + - Fixed BUG#18554 - Aliased column names where length of name > 251 + are corrupted. + + - Fixed BUG#17450 - ResultSet.wasNull() not always reset + correctly for booleans when done via conversion for server-side + prepared statements. + + - Fixed BUG#16277 - Invalid classname returned for + RSMD.getColumnClassName() for BIGINT type. + + - Fixed case where driver wasn't reading server status correctly when + fetching server-side prepared statement rows, which in some cases + could cause warning counts to be off, or multiple result sets to not + be read off the wire. + + - Driver now aware of fix for BIT type metadata that went into + MySQL-5.0.21 for server not reporting length consistently (bug + number 13601). + + - Fixed BUG#19282 - ResultSet.wasNull() returns incorrect value + when extracting native string from server-side prepared statement + generated result set. + +11-30-05 - Version 3.1.12 + + - Fixed client-side prepared statement bug with embedded ? inside + quoted identifiers (it was recognized as a placeholder, when it + was not). + + - Don't allow executeBatch() for CallableStatements with registered + OUT/INOUT parameters (JDBC compliance). + + - Fall back to platform-encoding for URLDecoder.decode() when + parsing driver URL properties if the platform doesn't have a + two-argument version of this method. + + - Fixed BUG#14562 - Java type conversion may be incorrect for + mediumint. + + - Added configuration property "useGmtMillisForDatetimes" which + when set to true causes ResultSet.getDate(), .getTimestamp() to + return correct millis-since GMT when .getTime() is called on + the return value (currently default is "false" for legacy + behavior). + + - Fixed DatabaseMetaData.stores*Identifiers(): + + * if lower_case_table_names=0 (on server): + + storesLowerCaseIdentifiers() returns false + storesLowerCaseQuotedIdentifiers() returns false + storesMixedCaseIdentifiers() returns true + storesMixedCaseQuotedIdentifiers() returns true + storesUpperCaseIdentifiers() returns false + storesUpperCaseQuotedIdentifiers() returns true + + * if lower_case_table_names=1 (on server): + + storesLowerCaseIdentifiers() returns true + storesLowerCaseQuotedIdentifiers() returns true + storesMixedCaseIdentifiers() returns false + storesMixedCaseQuotedIdentifiers() returns false + storesUpperCaseIdentifiers() returns false + storesUpperCaseQuotedIdentifiers() returns true + + - Fixed BUG#14815 - DatabaseMetaData.getColumns() doesn't + return TABLE_NAME correctly. + + - Fixed BUG#14909 - escape processor replaces quote character + in quoted string with string delimiter. + + - Fixed BUG#12975 - OpenOffice expects + DBMD.supportsIntegrityEnhancementFacility() to return "true" + if foreign keys are supported by the datasource, even though + this method also covers support for check constraints, + which MySQL _doesn't_ have. Setting the configuration property + "overrideSupportsIntegrityEnhancementFacility" to "true" causes + the driver to return "true" for this method. + + - Added "com.mysql.jdbc.testsuite.url.default" system property to + set default JDBC url for testsuite (to speed up bug resolution + when I'm working in Eclipse). + + - Fixed BUG#14938 - Unable to initialize character set mapping + tables (due to J2EE classloader differences). + + - Fixed BUG#14972 - Deadlock while closing server-side prepared + statements from multiple threads sharing one connection. + + - Fixed BUG#12230 - logSlowQueries should give better info. + + - Fixed BUG#13775 - Extraneous sleep on autoReconnect. + + - Fixed BUG#15024 - Driver incorrectly closes streams passed as + arguments to PreparedStatements. Reverts to legacy behavior by + setting the JDBC configuration property "autoClosePStmtStreams" + to "true" (also included in the 3-0-Compat configuration "bundle"). + + - Fixed BUG#13048 - maxQuerySizeToLog is not respected. Added logging of + bound values for execute() phase of server-side prepared statements + when profileSQL=true as well. + + - Fixed BUG#15065 - Usage advisor complains about unreferenced + columns, even though they've been referenced. + + - Don't increase timeout for failover/reconnect (BUG#6577) + + - Process escape tokens in Connection.prepareStatement(...), fix + for BUG#15141. You can disable this behavior by setting + the JDBC URL configuration property "processEscapeCodesForPrepStmts" + to "false". + + - Fixed BUG#13255 - Reconnect during middle of executeBatch() + should not occur if autoReconnect is enabled. + +10-07-05 - Version 3.1.11 + + - Fixed BUG#11629 - Spurious "!" on console when character + encoding is "utf8". + + - Fixed statements generated for testcases missing ";" for + "plain" statements. + + - Fixed BUG#11663 - Incorrect generation of testcase scripts + for server-side prepared statements. + + - Fixed regression caused by fix for BUG#11552 that caused driver + to return incorrect values for unsigned integers when those + integers where within the range of the positive signed type. + + - Moved source code to svn repo. + + - Fixed BUG#11797 - Escape tokenizer doesn't respect stacked single quotes + for escapes. + + - GEOMETRY type not recognized when using server-side prepared statements. + + - Fixed BUG#11879 -- ReplicationConnection won't switch to slave, throws + "Catalog can't be null" exception. + + - Fixed BUG#12218, properties shared between master and slave with + replication connection. + + - Fixed BUG#10630, Statement.getWarnings() fails with NPE if statement + has been closed. + + - Only get char[] from SQL in PreparedStatement.ParseInfo() when needed. + + - Fixed BUG#12104 - Geometry types not handled with server-side prepared + statements. + + - Fixed BUG#11614 - StringUtils.getBytes() doesn't work when using + multibyte character encodings and a length in _characters_ is + specified. + + - Fixed BUG#11798 - Pstmt.setObject(...., Types.BOOLEAN) throws exception. + + - Fixed BUG#11976 - maxPerformance.properties mis-spells + "elideSetAutoCommits". + + - Fixed BUG#11575 -- DBMD.storesLower/Mixed/UpperIdentifiers() + reports incorrect values for servers deployed on Windows. + + - Fixed BUG#11190 - ResultSet.moveToCurrentRow() fails to work when + preceeded by a call to ResultSet.moveToInsertRow(). + + - Fixed BUG#11115, VARBINARY data corrupted when using server-side + prepared statements and .setBytes(). + + - Fixed BUG#12229 - explainSlowQueries hangs with server-side + prepared statements. + + - Fixed BUG#11498 - Escape processor didn't honor strings demarcated + with double quotes. + + - Lifted restriction of changing streaming parameters with server-side + prepared statements. As long as _all_ streaming parameters were set + before execution, .clearParameters() does not have to be called. + (due to limitation of client/server protocol, prepared statements + can not reset _individual_ stream data on the server side). + + - Reworked Field class, *Buffer, and MysqlIO to be aware of field + lengths > Integer.MAX_VALUE. + + - Updated DBMD.supportsCorrelatedQueries() to return true for versions > + 4.1, supportsGroupByUnrelated() to return true and + getResultSetHoldability() to return HOLD_CURSORS_OVER_COMMIT. + + - Fixed BUG#12541 - Handling of catalog argument in + DatabaseMetaData.getIndexInfo(), which also means changes to the following + methods in DatabaseMetaData: + + - getBestRowIdentifier() + - getColumns() + - getCrossReference() + - getExportedKeys() + - getImportedKeys() + - getIndexInfo() + - getPrimaryKeys() + - getProcedures() (and thus indirectly getProcedureColumns()) + - getTables() + + The "catalog" argument in all of these methods now behaves in the following + way: + + - Specifying NULL means that catalog will not be used to filter the + results (thus all databases will be searched), unless you've + set "nullCatalogMeansCurrent=true" in your JDBC URL properties. + + - Specifying "" means "current" catalog, even though this isn't quite + JDBC spec compliant, it's there for legacy users. + + - Specifying a catalog works as stated in the API docs. + + - Made Connection.clientPrepare() available from "wrapped" connections + in the jdbc2.optional package (connections built by + ConnectionPoolDataSource instances). + + - Added Connection.isMasterConnection() for clients to be able to determine + if a multi-host master/slave connection is connected to the first host + in the list. + + - Fixed BUG#12753 - Tokenizer for "=" in URL properties was causing + sessionVariables=.... to be parameterized incorrectly. + + - Fixed BUG#11781, foreign key information that is quoted is + parsed incorrectly when DatabaseMetaData methods use that + information. + + - The "sendBlobChunkSize" property is now clamped to "max_allowed_packet" + with consideration of stream buffer size and packet headers to avoid + PacketTooBigExceptions when "max_allowed_packet" is similar in size + to the default "sendBlobChunkSize" which is 1M. + + - CallableStatement.clearParameters() now clears resources associated + with INOUT/OUTPUT parameters as well as INPUT parameters. + + - Fixed BUG#12417 - Connection.prepareCall() is database name + case-sensitive (on Windows systems). + + - Fixed BUG#12752 - Cp1251 incorrectly mapped to win1251 for + servers newer than 4.0.x. + + - Fixed BUG#12970 - java.sql.Types.OTHER returned for + BINARY and VARBINARY columns when using + DatabaseMetaData.getColumns(). + + - ServerPreparedStatement.getBinding() now checks if the statement + is closed before attempting to reference the list of parameter + bindings, to avoid throwing a NullPointerException. + + - Fixed BUG#13277 - ResultSetMetaData from + Statement.getGeneratedKeys() caused NullPointerExceptions to be + thrown whenever a method that required a connection reference + was called. + + - Removed support for java.nio I/O. Too many implementations + turned out to be buggy, and there was no performance difference + since MySQL is a blocking protocol anyway. + +06-23-05 - Version 3.1.10-stable + + - Fixed connecting without a database specified raised an exception + in MysqlIO.changeDatabaseTo(). + + - Initial implemention of ParameterMetadata for + PreparedStatement.getParameterMetadata(). Only works fully + for CallableStatements, as current server-side prepared statements + return every parameter as a VARCHAR type. + + - Fixed BUG#11552 - Server-side prepared statements return incorrect + values for unsigned TINYINT, SMALLINT, INT and Long. + + - Fixed BUG#11540 - Incorrect year conversion in setDate(..) for + system that use B.E. year in default locale. + +06-22-05 - Version 3.1.9-stable + + - Overhaul of character set configuration, everything now + lives in a properties file. + + - Driver now correctly uses CP932 if available on the server + for Windows-31J, CP932 and MS932 java encoding names, + otherwise it resorts to SJIS, which is only a close + approximation. Currently only MySQL-5.0.3 and newer (and + MySQL-4.1.12 or .13, depending on when the character set + gets backported) can reliably support any variant of CP932. + + - Fixed BUG#9064 - com.mysql.jdbc.PreparedStatement.ParseInfo + does unnecessary call to toCharArray(). + + - Fixed Bug#10144 - Memory leak in ServerPreparedStatement if + serverPrepare() fails. + + - Actually write manifest file to correct place so it ends up + in the binary jar file. + + - Added "createDatabaseIfNotExist" property (default is "false"), + which will cause the driver to ask the server to create the + database specified in the URL if it doesn't exist. You must have + the appropriate privileges for database creation for this to + work. + + - Fixed BUG#10156 - Unsigned SMALLINT treated as signed for ResultSet.getInt(), + fixed all cases for UNSIGNED integer values and server-side prepared statements, + as well as ResultSet.getObject() for UNSIGNED TINYINT. + + - Fixed BUG#10155, double quotes not recognized when parsing + client-side prepared statements. + + - Made enableStreamingResults() visible on + com.mysql.jdbc.jdbc2.optional.StatementWrapper. + + - Made ServerPreparedStatement.asSql() work correctly so auto-explain + functionality would work with server-side prepared statements. + + - Made JDBC2-compliant wrappers public in order to allow access to + vendor extensions. + + - Cleaned up logging of profiler events, moved code to dump a profiler + event as a string to com.mysql.jdbc.log.LogUtils so that third + parties can use it. + + - DatabaseMetaData.supportsMultipleOpenResults() now returns true. The + driver has supported this for some time, DBMD just missed that fact. + + - Fixed BUG#10310 - Driver doesn't support {?=CALL(...)} for calling + stored functions. This involved adding support for function retrieval + to DatabaseMetaData.getProcedures() and getProcedureColumns() as well. + + - Fixed BUG#10485, SQLException thrown when retrieving YEAR(2) + with ResultSet.getString(). The driver will now always treat YEAR types + as java.sql.Dates and return the correct values for getString(). + Alternatively, the "yearIsDateType" connection property can be set to + "false" and the values will be treated as SHORTs. + + - The datatype returned for TINYINT(1) columns when "tinyInt1isBit=true" + (the default) can be switched between Types.BOOLEAN and Types.BIT + using the new configuration property "transformedBitIsBoolean", which + defaults to "false". If set to "false" (the default), + DatabaseMetaData.getColumns() and ResultSetMetaData.getColumnType() + will return Types.BOOLEAN for TINYINT(1) columns. If "true", + Types.BOOLEAN will be returned instead. Irregardless of this configuration + property, if "tinyInt1isBit" is enabled, columns with the type TINYINT(1) + will be returned as java.lang.Boolean instances from + ResultSet.getObject(..), and ResultSetMetaData.getColumnClassName() + will return "java.lang.Boolean". + + - Fixed BUG#10496 - SQLException is thrown when using property + "characterSetResults" with cp932 or eucjpms. + + - Reorganized directory layout, sources now in "src" folder, + don't pollute parent directory when building, now output goes + to "./build", distribution goes to "./dist". + + - Added support/bug hunting feature that generates .sql test + scripts to STDERR when "autoGenerateTestcaseScript" is set + to "true". + + - Fixed BUG#10850 - 0-length streams not sent to server when + using server-side prepared statements. + + - Setting "cachePrepStmts=true" now causes the Connection to also + cache the check the driver performs to determine if a prepared + statement can be server-side or not, as well as caches server-side + prepared statements for the lifetime of a connection. As before, + the "prepStmtCacheSize" parameter controls the size of these + caches. + + - Try to handle OutOfMemoryErrors more gracefully. Although not + much can be done, they will in most cases close the connection + they happened on so that further operations don't run into + a connection in some unknown state. When an OOM has happened, + any further operations on the connection will fail with a + "Connection closed" exception that will also list the OOM exception + as the reason for the implicit connection close event. + + - Don't send COM_RESET_STMT for each execution of a server-side + prepared statement if it isn't required. + + - Driver detects if you're running MySQL-5.0.7 or later, and does + not scan for "LIMIT ?[,?]" in statements being prepared, as the + server supports those types of queries now. + + - Fixed BUG#11115, Varbinary data corrupted when using server-side + prepared statements and ResultSet.getBytes(). + + - Connection.setCatalog() is now aware of the "useLocalSessionState" + configuration property, which when set to true will prevent + the driver from sending "USE ..." to the server if the requested + catalog is the same as the current catalog. + + - Added the following configuration bundles, use one or many via + the "useConfigs" configuration property: + + * maxPerformance -- maximum performance without being reckless + * solarisMaxPerformance -- maximum performance for Solaris, + avoids syscalls where it can + * 3-0-Compat -- Compatibility with Connector/J 3.0.x functionality + + - Added "maintainTimeStats" configuration property (defaults to "true"), + which tells the driver whether or not to keep track of the last query time + and the last successful packet sent to the server's time. If set to + false, removes two syscalls per query. + + - Fixed BUG#11259, autoReconnect ping causes exception on connection + startup. + + - Fixed BUG#11360 Connector/J dumping query into SQLException twice + + - Fixed PreparedStatement.setClob() not accepting null as a parameter. + + - Fixed BUG#11411 - Production package doesn't include JBoss integration + classes. + + - Removed nonsensical "costly type conversion" warnings when using + usage advisor. + +04-14-05 - Version 3.1.8-stable + + - Fixed DatabaseMetaData.getTables() returning views when they were + not asked for as one of the requested table types. + + - Added support for new precision-math DECIMAL type in MySQL >= 5.0.3. + + - Fixed ResultSet.getTime() on a NULL value for server-side prepared + statements throws NPE. + + - Made Connection.ping() a public method. + + - Fixed Bug#8868, DATE_FORMAT() queries returned as BLOBs from getObject(). + + - ServerPreparedStatements now correctly 'stream' BLOB/CLOB data to the + server. You can configure the threshold chunk size using the + JDBC URL property 'blobSendChunkSize' (the default is one megabyte). + + - BlobFromLocator now uses correct identifier quoting when generating + prepared statements. + + - Server-side session variables can be preset at connection time by + passing them as a comma-delimited list for the connection property + 'sessionVariables'. + + - Fixed regression in ping() for users using autoReconnect=true. + + - Fixed BUG#9040 - PreparedStatement.addBatch() doesn't work with server-side + prepared statements and streaming BINARY data. + + - Fixed BUG#8800 - DBMD.supportsMixedCase*Identifiers() returns wrong + value on servers running on case-sensitive filesystems. + + - Fixed BUG#9206, can not use 'UTF-8' for characterSetResults + configuration property. + + - Fixed BUG#9236, a continuation of BUG#8868, where functions used in queries + that should return non-string types when resolved by temporary tables suddenly + become opaque binary strings (work-around for server limitation). Also fixed + fields with type of CHAR(n) CHARACTER SET BINARY to return correct/matching + classes for RSMD.getColumnClassName() and ResultSet.getObject(). + + - Fixed BUG#8792 - DBMD.supportsResultSetConcurrency() not returning + true for forward-only/read-only result sets (we obviously support this). + + - Fixed BUG#8803, 'DATA_TYPE' column from DBMD.getBestRowIdentifier() + causes ArrayIndexOutOfBoundsException when accessed (and in fact, didn't + return any value). + + - Check for empty strings ('') when converting char/varchar column data to numbers, + throw exception if 'emptyStringsConvertToZero' configuration property is set + to 'false' (for backwards-compatibility with 3.0, it is now set to 'true' + by default, but will most likely default to 'false' in 3.2). + + - Fixed BUG#9320 - PreparedStatement.getMetaData() inserts blank row in database + under certain conditions when not using server-side prepared statements. + + - Connection.canHandleAsPreparedStatement() now makes 'best effort' to distinguish + LIMIT clauses with placeholders in them from ones without in order to have fewer + false positives when generating work-arounds for statements the server cannot + currently handle as server-side prepared statements. + + - Fixed build.xml to not compile log4j logging if log4j not available. + + - Added support for the c3p0 connection pool's (http://c3p0.sf.net/) + validation/connection checker interface which uses the lightweight + 'COM_PING' call to the server if available. To use it, configure your + c3p0 connection pool's 'connectionTesterClassName' property to use + 'com.mysql.jdbc.integration.c3p0.MysqlConnectionTester'. + + - Better detection of LIMIT inside/outside of quoted strings so that + the driver can more correctly determine whether a prepared statement + can be prepared on the server or not. + + - Fixed BUG#9319 - Stored procedures with same name in + different databases confuse the driver when it tries to determine + parameter counts/types. + + - Added finalizers to ResultSet and Statement implementations to be JDBC + spec-compliant, which requires that if not explicitly closed, these + resources should be closed upon garbage collection. + + - Fixed BUG#9682 - Stored procedures with DECIMAL parameters with + storage specifications that contained "," in them would fail. + + - PreparedStatement.setObject(int, Object, int type, int scale) now + uses scale value for BigDecimal instances. + + - Fixed BUG#9704 - Statement.getMoreResults() could throw NPE when + existing result set was .close()d. + + - The performance metrics feature now gathers information about + number of tables referenced in a SELECT. + + - The logging system is now automatically configured. If the value has + been set by the user, via the URL property "logger" or the system + property "com.mysql.jdbc.logger", then use that, otherwise, autodetect + it using the following steps: + + Log4j, if it's available, + Then JDK1.4 logging, + Then fallback to our STDERR logging. + + - Fixed BUG#9778, DBMD.getTables() shouldn't return tables if views + are asked for, even if the database version doesn't support views. + + - Fixed driver not returning 'true' for '-1' when ResultSet.getBoolean() + was called on result sets returned from server-side prepared statements. + + - Added a Manifest.MF file with implementation information to the .jar + file. + + - More tests in Field.isOpaqueBinary() to distinguish opaque binary (i.e. + fields with type CHAR(n) and CHARACTER SET BINARY) from output of + various scalar and aggregate functions that return strings. + + - Fixed BUG#9917 - Should accept null for catalog (meaning use current) + in DBMD methods, even though it's not JDBC-compliant for legacy's sake. + Disable by setting connection property "nullCatalogMeansCurrent" to "false" + (which will be the default value in C/J 3.2.x). + + - Fixed BUG#9769 - Should accept null for name patterns in DBMD (meaning "%"), + even though it isn't JDBC compliant, for legacy's sake. Disable by setting + connection property "nullNamePatternMatchesAll" to "false" (which will be + the default value in C/J 3.2.x). + +02-18-05 - Version 3.1.7-stable + + + - Fixed BUG#7686, Timestamp key column data needed "_binary'" + stripped for UpdatableResultSet.refreshRow(). + + - Fixed BUG#7715 - Timestamps converted incorrectly to strings + with Server-side prepared statements and updatable result sets. + + - Detect new sql_mode variable in string form (it used to be + integer) and adjust quoting method for strings appropriately. + + - Added 'holdResultsOpenOverStatementClose' property (default is + false), that keeps result sets open over statement.close() or new + execution on same statement (suggested by Kevin Burton). + + - Fixed BUG#7952 -- Infinite recursion when 'falling back' to master + in failover configuration. + + - Disable multi-statements (if enabled) for MySQL-4.1 versions prior + to version 4.1.10 if the query cache is enabled, as the server + returns wrong results in this configuration. + + - Fixed duplicated code in configureClientCharset() that prevented + useOldUTF8Behavior=true from working properly. + + - Removed 'dontUnpackBinaryResults' functionality, the driver now + always stores results from server-side prepared statements as-is + from the server and unpacks them on demand. + + - Fixed BUG#8096 where emulated locators corrupt binary data + when using server-side prepared statements. + + - Fixed synchronization issue with + ServerPreparedStatement.serverPrepare() that could cause + deadlocks/crashes if connection was shared between threads. + + - By default, the driver now scans SQL you are preparing via all + variants of Connection.prepareStatement() to determine if it is a + supported type of statement to prepare on the server side, and if + it is not supported by the server, it instead prepares it as a + client-side emulated prepared statement (BUG#4718). You can + disable this by passing 'emulateUnsupportedPstmts=false' in your + JDBC URL. + + - Remove _binary introducer from parameters used as in/out + parameters in CallableStatement. + + - Always return byte[]s for output parameters registered as *BINARY. + + - Send correct value for 'boolean' "true" to server for + PreparedStatement.setObject(n, "true", Types.BIT). + + - Fixed bug with Connection not caching statements from + prepareStatement() when the statement wasn't a server-side + prepared statement. + + - Choose correct 'direction' to apply time adjustments when both + client and server are in GMT timezone when using + ResultSet.get(..., cal) and PreparedStatement.set(...., cal). + + - Added 'dontTrackOpenResources' option (default is false, to be + JDBC compliant), which helps with memory use for non-well-behaved + apps (i.e applications which don't close Statements when they + should). + + - Fixed BUG#8428 - ResultSet.getString() doesn't maintain format + stored on server, bug fix only enabled when 'noDatetimeStringSync' + property is set to 'true' (the default is 'false'). + + - Fixed NPE in ResultSet.realClose() when using usage advisor and + result set was already closed. + + - Fixed BUG#8487 - PreparedStatements not creating streaming result + sets. + + - Don't pass NULL to String.valueOf() in + ResultSet.getNativeConvertToString(), as it stringifies it (i.e. + returns "null"), which is not correct for the method in question. + + - Fixed BUG#8484 - ResultSet.getBigDecimal() throws exception + when rounding would need to occur to set scale. The driver now + chooses a rounding mode of 'half up' if non-rounding + BigDecimal.setScale() fails. + + - Added 'useLocalSessionState' configuration property, when set to + 'true' the JDBC driver trusts that the application is well-behaved + and only sets autocommit and transaction isolation levels using + the methods provided on java.sql.Connection, and therefore can + manipulate these values in many cases without incurring + round-trips to the database server. + + - Added enableStreamingResults() to Statement for connection pool + implementations that check Statement.setFetchSize() for + specification-compliant values. Call Statement.setFetchSize(>=0) + to disable the streaming results for that statement. + + - Added support for BIT type in MySQL-5.0.3. The driver will treat + BIT(1-8) as the JDBC standard BIT type (which maps to + java.lang.Boolean), as the server does not currently send enough + information to determine the size of a bitfield when < 9 bits are + declared. BIT(>9) will be treated as VARBINARY, and will return + byte[] when getObject() is called. + +12-23-04 - Version 3.1.6-stable + + - Fixed hang on SocketInputStream.read() with Statement.setMaxRows() and + multiple result sets when driver has to truncate result set directly, + rather than tacking a 'LIMIT n' on the end of it. + + - Fixed BUG#7026 - DBMD.getProcedures() doesn't respect catalog parameter. + + - Respect bytes-per-character for RSMD.getPrecision(). + +12-02-04 - Version 3.1.5-gamma + + - Fix comparisons made between string constants and dynamic strings that + are either toUpperCase()d or toLowerCase()d to use Locale.ENGLISH, as + some locales 'override' case rules for English. Also use + StringUtils.indexOfIgnoreCase() instead of .toUpperCase().indexOf(), + avoids creating a very short-lived transient String instance. + + - Fixed BUG#5235 - Server-side prepared statements did not honor + 'zeroDateTimeBehavior' property, and would cause class-cast + exceptions when using ResultSet.getObject(), as the all-zero string + was always returned. + + - Fixed batched updates with server prepared statements weren't looking if + the types had changed for a given batched set of parameters compared + to the previous set, causing the server to return the error + 'Wrong arguments to mysql_stmt_execute()'. + + - Handle case when string representation of timestamp contains trailing '.' + with no numbers following it. + + - Fixed BUG#5706 - Inefficient detection of pre-existing string instances + in ResultSet.getNativeString(). + + - Don't throw exceptions for Connection.releaseSavepoint(). + + - Use a per-session Calendar instance by default when decoding dates + from ServerPreparedStatements (set to old, less performant behavior by + setting property 'dynamicCalendars=true'). + + - Added experimental configuration property 'dontUnpackBinaryResults', + which delays unpacking binary result set values until they're asked for, + and only creates object instances for non-numerical values (it is set + to 'false' by default). For some usecase/jvm combinations, this is + friendlier on the garbage collector. + + - Fixed BUG#5729 - UNSIGNED BIGINT unpacked incorrectly from + server-side prepared statement result sets. + + - Fixed BUG#6225 - ServerSidePreparedStatement allocating short-lived + objects un-necessarily. + + - Removed un-wanted new Throwable() in ResultSet constructor due to bad + merge (caused a new object instance that was never used for every result + set created) - Found while profiling for BUG#6359. + + - Fixed too-early creation of StringBuffer in EscapeProcessor.escapeSQL(), + also return String when escaping not needed (to avoid unnecssary object + allocations). Found while profiling for BUG#6359. + + - Use null-safe-equals for key comparisons in updatable result sets. + + - Fixed BUG#6537, SUM() on Decimal with server-side prepared statement ignores + scale if zero-padding is needed (this ends up being due to conversion to DOUBLE + by server, which when converted to a string to parse into BigDecimal, loses all + 'padding' zeros). + + - Use DatabaseMetaData.getIdentifierQuoteString() when building DBMD + queries. + + - Use 1MB packet for sending file for LOAD DATA LOCAL INFILE if that + is < 'max_allowed_packet' on server. + + - Fixed BUG#6399, ResultSetMetaData.getColumnDisplaySize() returns incorrect + values for multibyte charsets. + + - Make auto-deserialization of java.lang.Objects stored in BLOBs + configurable via 'autoDeserialize' property (defaults to 'false'). + + - Re-work Field.isOpaqueBinary() to detect 'CHAR(n) CHARACTER SET BINARY' + to support fixed-length binary fields for ResultSet.getObject(). + + - Use our own implementation of buffered input streams to get around + blocking behavior of java.io.BufferedInputStream. Disable this with + 'useReadAheadInput=false'. + + - Fixed BUG#6348, failing to connect to the server when one of the + addresses for the given host name is IPV6 (which the server does + not yet bind on). The driver now loops through _all_ IP addresses + for a given host, and stops on the first one that accepts() a + socket.connect(). + +09-04-04 - Version 3.1.4-beta + + - Fixed BUG#4510 - connector/j 3.1.3 beta does not handle integers + correctly (caused by changes to support unsigned reads in + Buffer.readInt() -> Buffer.readShort()). + + - Added support in DatabaseMetaData.getTables() and getTableTypes() + for VIEWs which are now available in MySQL server version 5.0.x. + + - Fixed BUG#4642 -- ServerPreparedStatement.execute*() sometimes + threw ArrayIndexOutOfBoundsException when unpacking field metadata. + + - Optimized integer number parsing, enable 'old' slower integer parsing + using JDK classes via 'useFastIntParsing=false' property. + + - Added 'useOnlyServerErrorMessages' property, which causes message text + in exceptions generated by the server to only contain the text sent by + the server (as opposed to the SQLState's 'standard' description, followed + by the server's error message). This property is set to 'true' by default. + + - Fixed BUG#4689 - ResultSet.wasNull() does not work for primatives if a + previous null was returned. + + - Track packet sequence numbers if enablePacketDebug=true, and throw an + exception if packets received out-of-order. + + - Fixed BUG#4482, ResultSet.getObject() returns wrong type for strings + when using prepared statements. + + - Calling MysqlPooledConnection.close() twice (even though an application + error), caused NPE. Fixed. + + - Fixed BUG#5012 -- ServerPreparedStatements dealing with return of + DECIMAL type don't work. + + - Fixed BUG#5032 -- ResultSet.getObject() doesn't return + type Boolean for pseudo-bit types from prepared statements on 4.1.x + (shortcut for avoiding extra type conversion when using binary-encoded + result sets obscurred test in getObject() for 'pseudo' bit type) + + - You can now use URLs in 'LOAD DATA LOCAL INFILE' statements, and the + driver will use Java's built-in handlers for retreiving the data and + sending it to the server. This feature is not enabled by default, + you must set the 'allowUrlInLocalInfile' connection property to 'true'. + + - The driver is more strict about truncation of numerics on + ResultSet.get*(), and will throw a SQLException when truncation is + detected. You can disable this by setting 'jdbcCompliantTruncation' to + false (it is enabled by default, as this functionality is required + for JDBC compliance). + + - Added three ways to deal with all-zero datetimes when reading them from + a ResultSet, 'exception' (the default), which throws a SQLException + with a SQLState of 'S1009', 'convertToNull', which returns NULL instead of + the date, and 'round', which rounds the date to the nearest closest value + which is '0001-01-01'. + + - Fixed ServerPreparedStatement to read prepared statement metadata off + the wire, even though it's currently a placeholder instead of using + MysqlIO.clearInputStream() which didn't work at various times because + data wasn't available to read from the server yet. This fixes sporadic + errors users were having with ServerPreparedStatements throwing + ArrayIndexOutOfBoundExceptions. + + - Use com.mysql.jdbc.Message's classloader when loading resource bundle, + should fix sporadic issues when the caller's classloader can't locate + the resource bundle. + +07-07-04 - Version 3.1.3-beta + + - Mangle output parameter names for CallableStatements so they + will not clash with user variable names. + + - Added support for INOUT parameters in CallableStatements. + + - Fix for BUG#4119, null bitmask sent for server-side prepared + statements was incorrect. + + - Use SQL Standard SQL states by default, unless 'useSqlStateCodes' + property is set to 'false'. + + - Added packet debuging code (see the 'enablePacketDebug' property + documentation). + + - Added constants for MySQL error numbers (publicly-accessible, + see com.mysql.jdbc.MysqlErrorNumbers), and the ability to + generate the mappings of vendor error codes to SQLStates + that the driver uses (for documentation purposes). + + - Externalized more messages (on-going effort). + + - Fix for BUG#4311 - Error in retrieval of mediumint column with + prepared statements and binary protocol. + + - Support new timezone variables in MySQL-4.1.3 when + 'useTimezone=true' + + - Support for unsigned numerics as return types from prepared statements. + This also causes a change in ResultSet.getObject() for the 'bigint unsigned' + type, which used to return BigDecimal instances, it now returns instances + of java.lang.BigInteger. + +06-09-04 - Version 3.1.2-alpha + + - Fixed stored procedure parameter parsing info when size was + specified for a parameter (i.e. char(), varchar()). + + - Enabled callable statement caching via 'cacheCallableStmts' + property. + + - Fixed case when no output parameters specified for a + stored procedure caused a bogus query to be issued + to retrieve out parameters, leading to a syntax error + from the server. + + - Fixed case when no parameters could cause a NullPointerException + in CallableStatement.setOutputParameters(). + + - Removed wrapping of exceptions in MysqlIO.changeUser(). + + - Fixed sending of split packets for large queries, enabled nio + ability to send large packets as well. + + - Added .toString() functionality to ServerPreparedStatement, + which should help if you're trying to debug a query that is + a prepared statement (it shows SQL as the server would process). + + - Added 'gatherPerformanceMetrics' property, along with properties + to control when/where this info gets logged (see docs for more + info). + + - ServerPreparedStatements weren't actually de-allocating + server-side resources when .close() was called. + + - Added 'logSlowQueries' property, along with property + 'slowQueriesThresholdMillis' to control when a query should + be considered 'slow'. + + - Correctly map output parameters to position given in + prepareCall() vs. order implied during registerOutParameter() - + fixes BUG#3146. + + - Correctly detect initial character set for servers >= 4.1.0 + + - Cleaned up detection of server properties. + + - Support placeholder for parameter metadata for server >= 4.1.2 + + - Fix for BUG#3539 getProcedures() does not return any procedures in + result set + + - Fix for BUG#3540 getProcedureColumns() doesn't work with wildcards + for procedure name + + - Fixed BUG#3520 -- DBMD.getSQLStateType() returns incorrect value. + + - Added 'connectionCollation' property to cause driver to issue + 'set collation_connection=...' query on connection init if default + collation for given charset is not appropriate. + + - Fixed DatabaseMetaData.getProcedures() when run on MySQL-5.0.0 (output of + 'show procedure status' changed between 5.0.1 and 5.0.0. + + - Fixed BUG#3804 -- getWarnings() returns SQLWarning instead of DataTruncation + + - Don't enable server-side prepared statements for server version 5.0.0 or 5.0.1, + as they aren't compatible with the '4.1.2+' style that the driver uses (the driver + expects information to come back that isn't there, so it hangs). + + +02-14-04 - Version 3.1.1-alpha + + - Fixed bug with UpdatableResultSets not using client-side + prepared statements. + + - Fixed character encoding issues when converting bytes to + ASCII when MySQL doesn't provide the character set, and + the JVM is set to a multibyte encoding (usually affecting + retrieval of numeric values). + + - Unpack 'unknown' data types from server prepared statements + as Strings. + + - Implemented long data (Blobs, Clobs, InputStreams, Readers) + for server prepared statements. + + - Implemented Statement.getWarnings() for MySQL-4.1 and newer + (using 'SHOW WARNINGS'). + + - Default result set type changed to TYPE_FORWARD_ONLY + (JDBC compliance). + + - Centralized setting of result set type and concurrency. + + - Re-factored how connection properties are set and exposed + as DriverPropertyInfo as well as Connection and DataSource + properties. + + - Support for NIO. Use 'useNIO=true' on platforms that support + NIO. + + - Support for SAVEPOINTs (MySQL >= 4.0.14 or 4.1.1). + + - Support for mysql_change_user()...See the changeUser() method + in com.mysql.jdbc.Connection. + + - Reduced number of methods called in average query to be more + efficient. + + - Prepared Statements will be re-prepared on auto-reconnect. Any errors + encountered are postponed until first attempt to re-execute the + re-prepared statement. + + - Ensure that warnings are cleared before executing queries + on prepared statements, as-per JDBC spec (now that we support + warnings). + + - Support 'old' profileSql capitalization in ConnectionProperties. + This property is deprecated, you should use 'profileSQL' if possible. + + - Optimized Buffer.readLenByteArray() to return shared empty byte array + when length is 0. + + - Allow contents of PreparedStatement.setBlob() to be retained + between calls to .execute*(). + + - Deal with 0-length tokens in EscapeProcessor (caused by callable + statement escape syntax). + + - Check for closed connection on delete/update/insert row operations in + UpdatableResultSet. + + - Fix support for table aliases when checking for all primary keys in + UpdatableResultSet. + + - Removed useFastDates connection property. + + - Correctly initialize datasource properties from JNDI Refs, including + explicitly specified URLs. + + - DatabaseMetaData now reports supportsStoredProcedures() for + MySQL versions >= 5.0.0 + + - Fixed stack overflow in Connection.prepareCall() (bad merge). + + - Fixed IllegalAccessError to Calendar.getTimeInMillis() in DateTimeValue + (for JDK < 1.4). + + - Fix for BUG#1673, where DatabaseMetaData.getColumns() is not + returning correct column ordinal info for non '%' column name patterns. + + - Merged fix of datatype mapping from MySQL type 'FLOAT' to + java.sql.Types.REAL from 3.0 branch. + + - Detect collation of column for RSMD.isCaseSensitive(). + + - Fixed sending of queries > 16M. + + - Added named and indexed input/output parameter support to CallableStatement. + MySQL-5.0.x or newer. + + - Fixed NullPointerException in ServerPreparedStatement.setTimestamp(), + as well as year and month descrepencies in + ServerPreparedStatement.setTimestamp(), setDate(). + + - Added ability to have multiple database/JVM targets for compliance + and regression/unit tests in build.xml. + + - Fixed NPE and year/month bad conversions when accessing some + datetime functionality in ServerPreparedStatements and their + resultant result sets. + + - Display where/why a connection was implicitly closed (to + aid debugging). + + - CommunicationsException implemented, that tries to determine + why communications was lost with a server, and displays + possible reasons when .getMessage() is called. + + - Fixed BUG#2359, NULL values for numeric types in binary + encoded result sets causing NullPointerExceptions. + + - Implemented Connection.prepareCall(), and DatabaseMetaData. + getProcedures() and getProcedureColumns(). + + - Reset 'long binary' parameters in ServerPreparedStatement when + clearParameters() is called, by sending COM_RESET_STMT to the + server. + + - Merged prepared statement caching, and .getMetaData() support + from 3.0 branch. + + - Fixed off-by-1900 error in some cases for + years in TimeUtil.fastDate/TimeCreate() when unpacking results + from server-side prepared statements. + + - Fixed BUG#2502 -- charset conversion issue in getTables(). + + - Implemented multiple result sets returned from a statement + or stored procedure. + + - Fixed BUG#2606 -- Server side prepared statements not returning + datatype 'YEAR' correctly. + + - Enabled streaming of result sets from server-side prepared + statements. + + - Fixed BUG#2623 -- Class-cast exception when using + scrolling result sets and server-side prepared statements. + + - Merged unbuffered input code from 3.0. + + - Fixed ConnectionProperties that weren't properly exposed + via accessors, cleaned up ConnectionProperties code. + + - Fixed BUG#2671, NULL fields not being encoded correctly in + all cases in server side prepared statements. + + - Fixed rare buffer underflow when writing numbers into buffers + for sending prepared statement execution requests. + + - Use DocBook version of docs for shipped versions of drivers. + + +02-18-03 - Version 3.1.0-alpha + + - Added 'requireSSL' property. + + - Added 'useServerPrepStmts' property (default 'false'). The + driver will use server-side prepared statements when the + server version supports them (4.1 and newer) when this + property is set to 'true'. It is currently set to 'false' + by default until all bind/fetch functionality has been + implemented. Currently only DML prepared statements are + implemented for 4.1 server-side prepared statements. + + - Track open Statements, close all when Connection.close() + is called (JDBC compliance). + +06-22-05 - Version 3.0.17-ga + + - Fixed BUG#5874, Timestamp/Time conversion goes in the wrong 'direction' + when useTimeZone='true' and server timezone differs from client timezone. + + - Fixed BUG#7081, DatabaseMetaData.getIndexInfo() ignoring 'unique' + parameter. + + - Support new protocol type 'MYSQL_TYPE_VARCHAR'. + + - Added 'useOldUTF8Behavoior' configuration property, which causes + JDBC driver to act like it did with MySQL-4.0.x and earlier when + the character encoding is 'utf-8' when connected to MySQL-4.1 or + newer. + + - Fixed BUG#7316 - Statements created from a pooled connection were + returning physical connection instead of logical connection when + getConnection() was called. + + - Fixed BUG#7033 - PreparedStatements don't encode Big5 (and other + multibyte) character sets correctly in static SQL strings. + + - Fixed BUG#6966, connections starting up failed-over (due to down master) + never retry master. + + - Fixed BUG#7061, PreparedStatement.fixDecimalExponent() adding extra + '+', making number unparseable by MySQL server. + + - Fixed BUG#7686, Timestamp key column data needed "_binary'" stripped for + UpdatableResultSet.refreshRow(). + + - Backported SQLState codes mapping from Connector/J 3.1, enable with + 'useSqlStateCodes=true' as a connection property, it defaults to + 'false' in this release, so that we don't break legacy applications (it + defaults to 'true' starting with Connector/J 3.1). + + - Fixed BUG#7601, PreparedStatement.fixDecimalExponent() adding extra + '+', making number unparseable by MySQL server. + + - Escape sequence {fn convert(..., type)} now supports ODBC-style types + that are prepended by 'SQL_'. + + - Fixed duplicated code in configureClientCharset() that prevented + useOldUTF8Behavior=true from working properly. + + - Handle streaming result sets with > 2 billion rows properly by fixing + wraparound of row number counter. + + - Fixed BUG#7607 - MS932, SHIFT_JIS and Windows_31J not recog. as + aliases for sjis. + + - Fixed BUG#6549 (while fixing #7607), adding 'CP943' to aliases for + sjis. + + - Fixed BUG#8064, which requires hex escaping of binary data when using + multibyte charsets with prepared statements. + + - Fixed BUG#8812, NON_UNIQUE column from DBMD.getIndexInfo() returned + inverted value. + + - Workaround for server BUG#9098 - default values of CURRENT_* for + DATE/TIME/TIMESTAMP/TIMESTAMP columns can't be distinguished from + 'string' values, so UpdatableResultSet.moveToInsertRow() generates + bad SQL for inserting default values. + + - Fixed BUG#8629 - 'EUCKR' charset is sent as 'SET NAMES euc_kr' which + MySQL-4.1 and newer doesn't understand. + + - DatabaseMetaData.supportsSelectForUpdate() returns correct value based + on server version. + + - Use hex escapes for PreparedStatement.setBytes() for double-byte charsets + including 'aliases' Windows-31J, CP934, MS932. + + - Added support for the "EUC_JP_Solaris" character encoding, which maps + to a MySQL encoding of "eucjpms" (backported from 3.1 branch). This only + works on servers that support eucjpms, namely 5.0.3 or later. + +11-15-04 - Version 3.0.16-ga + + - Re-issue character set configuration commands when re-using pooled + connections and/or Connection.changeUser() when connected to MySQL-4.1 + or newer. + + - Fixed ResultSetMetaData.isReadOnly() to detect non-writable columns + when connected to MySQL-4.1 or newer, based on existence of 'original' + table and column names. + + - Fixed BUG#5664, ResultSet.updateByte() when on insert row + throws ArrayOutOfBoundsException. + + - Fixed DatabaseMetaData.getTypes() returning incorrect (i.e. non-negative) + scale for the 'NUMERIC' type. + + - Fixed BUG#6198, off-by-one bug in Buffer.readString(string). + + - Made TINYINT(1) -> BIT/Boolean conversion configurable via 'tinyInt1isBit' + property (default 'true' to be JDBC compliant out of the box). + + - Only set 'character_set_results' during connection establishment if + server version >= 4.1.1. + + - Fixed regression where useUnbufferedInput was defaulting to 'false'. + + - Fixed BUG#6231, ResultSet.getTimestamp() on a column with TIME in it + fails. + +09-04-04 - Version 3.0.15-ga + + - Fixed BUG#4010 - StringUtils.escapeEasternUnicodeByteStream is still + broken for GBK + + - Fixed BUG#4334 - Failover for autoReconnect not using port #'s for any + hosts, and not retrying all hosts. (WARN: This required a change to + the SocketFactory connect() method signature, which is now + + public Socket connect(String host, int portNumber, Properties props), + + therefore any third-party socket factories will have to be changed + to support this signature. + + - Logical connections created by MysqlConnectionPoolDataSource will + now issue a rollback() when they are closed and sent back to the pool. + If your application server/connection pool already does this for you, you + can set the 'rollbackOnPooledClose' property to false to avoid the + overhead of an extra rollback(). + + - Removed redundant calls to checkRowPos() in ResultSet. + + - Fixed BUG#4742, 'DOUBLE' mapped twice in DBMD.getTypeInfo(). + + - Added FLOSS license exemption. + + - Fixed BUG#4808, calling .close() twice on a PooledConnection causes NPE. + + - Fixed BUG#4138 and BUG#4860, DBMD.getColumns() returns incorrect JDBC + type for unsigned columns. This affects type mappings for all numeric + types in the RSMD.getColumnType() and RSMD.getColumnTypeNames() methods + as well, to ensure that 'like' types from DBMD.getColumns() match up + with what RSMD.getColumnType() and getColumnTypeNames() return. + + - 'Production' - 'GA' in naming scheme of distributions. + + - Fix for BUG#4880, RSMD.getPrecision() returning 0 for non-numeric types + (should return max length in chars for non-binary types, max length + in bytes for binary types). This fix also fixes mapping of + RSMD.getColumnType() and RSMD.getColumnTypeName() for the BLOB types based + on the length sent from the server (the server doesn't distinguish between + TINYBLOB, BLOB, MEDIUMBLOB or LONGBLOB at the network protocol level). + + - Fixed BUG#5022 - ResultSet should release Field[] instance in .close(). + + - Fixed BUG#5069 -- ResultSet.getMetaData() should not return + incorrectly-initialized metadata if the result set has been closed, but + should instead throw a SQLException. Also fixed for getRow() and + getWarnings() and traversal methods by calling checkClosed() before + operating on instance-level fields that are nullified during .close(). + + - Parse new timezone variables from 4.1.x servers. + + - Use _binary introducer for PreparedStatement.setBytes() and + set*Stream() when connected to MySQL-4.1.x or newer to avoid + misinterpretation during character conversion. + +05-28-04 - Version 3.0.14-production + + - Fixed URL parsing error + +05-27-04 - Version 3.0.13-production + + - Fixed BUG#3848 - Using a MySQLDatasource without server name fails + + - Fixed BUG#3920 - "No Database Selected" when using + MysqlConnectionPoolDataSource. + + - Fixed BUG#3873 - PreparedStatement.getGeneratedKeys() method returns only + 1 result for batched insertions + +05-18-04 - Version 3.0.12-production + + - Add unsigned attribute to DatabaseMetaData.getColumns() output + in the TYPE_NAME column. + + - Added 'failOverReadOnly' property, to allow end-user to configure + state of connection (read-only/writable) when failed over. + + - Backported 'change user' and 'reset server state' functionality + from 3.1 branch, to allow clients of MysqlConnectionPoolDataSource + to reset server state on getConnection() on a pooled connection. + + - Don't escape SJIS/GBK/BIG5 when using MySQL-4.1 or newer. + + - Allow 'url' parameter for MysqlDataSource and MysqlConnectionPool + DataSource so that passing of other properties is possible from + inside appservers. + + - Map duplicate key and foreign key errors to SQLState of + '23000'. + + - Backport documentation tooling from 3.1 branch. + + - Return creating statement for ResultSets created by + getGeneratedKeys() (BUG#2957) + + - Allow java.util.Date to be sent in as parameter to + PreparedStatement.setObject(), converting it to a Timestamp + to maintain full precision (BUG#3103). + + - Don't truncate BLOBs/CLOBs when using setBytes() and/or + setBinary/CharacterStream() (BUG#2670). + + - Dynamically configure character set mappings for field-level + character sets on MySQL-4.1.0 and newer using 'SHOW COLLATION' + when connecting. + + - Map 'binary' character set to 'US-ASCII' to support DATETIME + charset recognition for servers >= 4.1.2 + + - Use 'SET character_set_results" during initialization to allow any + charset to be returned to the driver for result sets. + + - Use charsetnr returned during connect to encode queries before + issuing 'SET NAMES' on MySQL >= 4.1.0. + + - Add helper methods to ResultSetMetaData (getColumnCharacterEncoding() + and getColumnCharacterSet()) to allow end-users to see what charset + the driver thinks it should be using for the column. + + - Only set character_set_results for MySQL >= 4.1.0. + + - Fixed BUG#3511, StringUtils.escapeSJISByteStream() not covering all + eastern double-byte charsets correctly. + + - Renamed StringUtils.escapeSJISByteStream() to more appropriate + escapeEasternUnicodeByteStream(). + + - Fixed BUG#3554 - Not specifying database in URL caused MalformedURL + exception. + + - Auto-convert MySQL encoding names to Java encoding names if used + for characterEncoding property. + + - Added encoding names that are recognized on some JVMs to fix case + where they were reverse-mapped to MySQL encoding names incorrectly. + + - Use junit.textui.TestRunner for all unit tests (to allow them to be + run from the command line outside of Ant or Eclipse). + + - Fixed BUG#3557 - UpdatableResultSet not picking up default values + for moveToInsertRow(). + + - Fixed BUG#3570 - inconsistent reporting of column type. The server + still doesn't return all types for *BLOBs *TEXT correctly, so the + driver won't return those correctly. + + - Fixed BUG#3520 -- DBMD.getSQLStateType() returns incorrect value. + + - Fixed regression in PreparedStatement.setString() and eastern character + encodings. + + - Made StringRegressionTest 4.1-unicode aware. + +02-19-04 - Version 3.0.11-stable + + - Trigger a 'SET NAMES utf8' when encoding is forced to 'utf8' _or_ + 'utf-8' via the 'characterEncoding' property. Previously, only the + Java-style encoding name of 'utf-8' would trigger this. + + - AutoReconnect time was growing faster than exponentially (BUG#2447). + + - Fixed failover always going to last host in list (BUG#2578) + + - Added 'useUnbufferedInput' parameter, and now use it by default + (due to JVM issue + http://developer.java.sun.com/developer/bugParade/bugs/4401235.html) + + - Detect 'on/off' or '1','2','3' form of lower_case_table_names on + server. + + - Return 'java.lang.Integer' for TINYINT and SMALLINT types from + ResultSetMetaData.getColumnClassName() (fix for BUG#2852). + + - Return 'java.lang.Double' for FLOAT type from ResultSetMetaData. + getColumnClassName() (fix for BUG#2855). + + - Return '[B' instead of java.lang.Object for BINARY, VARBINARY and + LONGVARBINARY types from ResultSetMetaData.getColumnClassName() + (JDBC compliance). + +01-13-04 - Version 3.0.10-stable + + - Don't count quoted id's when inside a 'string' in PreparedStatement + parsing (fix for BUG#1511). + + - 'Friendlier' exception message for PacketTooLargeException + (BUG#1534). + + - Backported fix for aliased tables and UpdatableResultSets in + checkUpdatability() method from 3.1 branch. + + - Fix for ArrayIndexOutOfBounds exception when using Statement.setMaxRows() + (BUG#1695). + + - Fixed BUG#1576, dealing with large blobs and split packets not being + read correctly. + + - Fixed regression of Statement.getGeneratedKeys() and REPLACE statements. + + - Fixed BUG#1630, subsequent call to ResultSet.updateFoo() causes NPE if + result set is not updatable. + + - Fix for 4.1.1-style auth with no password. + + - Fix for BUG#1731, Foreign Keys column sequence is not consistent in + DatabaseMetaData.getImported/Exported/CrossReference(). + + - Fix for BUG#1775 - DatabaseMetaData.getSystemFunction() returning + bad function 'VResultsSion'. + + - Fix for BUG#1592 -- cross-database updatable result sets + are not checked for updatability correctly. + + - DatabaseMetaData.getColumns() should return Types.LONGVARCHAR for + MySQL LONGTEXT type. + + - ResultSet.getObject() on TINYINT and SMALLINT columns should return + Java type 'Integer' (BUG#1913) + + - Added 'alwaysClearStream' connection property, which causes the driver + to always empty any remaining data on the input stream before + each query. + + - Added more descriptive error message 'Server Configuration Denies + Access to DataSource', as well as retrieval of message from server. + + - Autoreconnect code didn't set catalog upon reconnect if it had been + changed. + + - Implement ResultSet.updateClob(). + + - ResultSetMetaData.isCaseSensitive() returned wrong value for CHAR/VARCHAR + columns. + + - Fix for BUG#1933 -- Connection property "maxRows" not honored. + + - Fix for BUG#1925 -- Statements being created too many times in + DBMD.extractForeignKeyFromCreateTable(). + + - Fix for BUG#1914 -- Support escape sequence {fn convert ... } + + - Fix for BUG#1958 -- ArrayIndexOutOfBounds when parameter number == + number of parameters + 1. + + - Fix for BUG#2006 -- ResultSet.findColumn() should use first matching + column name when there are duplicate column names in SELECT query + (JDBC-compliance). + + - Removed static synchronization bottleneck from + PreparedStatement.setTimestamp(). + + - Removed static synchronization bottleneck from instance factory + method of SingleByteCharsetConverter. + + - Enable caching of the parsing stage of prepared statements via + the 'cachePrepStmts', 'prepStmtCacheSize' and 'prepStmtCacheSqlLimit' + properties (disabled by default). + + - Speed up parsing of PreparedStatements, try to use one-pass whenever + possible. + + - Fixed security exception when used in Applets (applets can't + read the system property 'file.encoding' which is needed + for LOAD DATA LOCAL INFILE). + + - Use constants for SQLStates. + + - Map charset 'ko18_ru' to 'ko18r' when connected to MySQL-4.1.0 or + newer. + + - Ensure that Buffer.writeString() saves room for the \0. + + - Fixed exception 'Unknown character set 'danish' on connect w/ JDK-1.4.0 + + - Fixed mappings in SQLError to report deadlocks with SQLStates of '41000'. + + - 'maxRows' property would affect internal statements, so check it for all + statement creation internal to the driver, and set to 0 when it is not. + +10-07-03 - Version 3.0.9-stable + + - Faster date handling code in ResultSet and PreparedStatement (no longer + uses Date methods that synchronize on static calendars). + + - Fixed test for end of buffer in Buffer.readString(). + + - Fixed ResultSet.previous() behavior to move current + position to before result set when on first row + of result set (bugs.mysql.com BUG#496) + + - Fixed Statement and PreparedStatement issuing bogus queries + when setMaxRows() had been used and a LIMIT clause was present + in the query. + + - Fixed BUG#661 - refreshRow didn't work when primary key values + contained values that needed to be escaped (they ended up being + doubly-escaped). + + - Support InnoDB contraint names when extracting foreign key info + in DatabaseMetaData BUG#517 and BUG#664 + (impl. ideas from Parwinder Sekhon) + + - Backported 4.1 protocol changes from 3.1 branch (server-side SQL + states, new field info, larger client capability flags, + connect-with-database, etc). + + - Fix UpdatableResultSet to return values for getXXX() when on + insert row (BUG#675). + + - The insertRow in an UpdatableResultSet is now loaded with + the default column values when moveToInsertRow() is called + (BUG#688) + + - DatabaseMetaData.getColumns() wasn't returning NULL for + default values that are specified as NULL. + + - Change default statement type/concurrency to TYPE_FORWARD_ONLY + and CONCUR_READ_ONLY (spec compliance). + + - Don't try and reset isolation level on reconnect if MySQL doesn't + support them. + + - Don't wrap SQLExceptions in RowDataDynamic. + + - Don't change timestamp TZ twice if useTimezone==true (BUG#774) + + - Fixed regression in large split-packet handling (BUG#848). + + - Better diagnostic error messages in exceptions for 'streaming' + result sets. + + - Issue exception on ResultSet.getXXX() on empty result set (wasn't + caught in some cases). + + - Don't hide messages from exceptions thrown in I/O layers. + + - Don't fire connection closed events when closing pooled connections, or + on PooledConnection.getConnection() with already open connections (BUG#884). + + - Clip +/- INF (to smallest and largest representative values for the type in + MySQL) and NaN (to 0) for setDouble/setFloat(), and issue a warning on the + statement when the server does not support +/- INF or NaN. + + - Fix for BUG#879, double-escaping of '\' when charset is SJIS or GBK and '\' + appears in non-escaped input. + + - When emptying input stream of unused rows for 'streaming' result sets, + have the current thread yield() every 100 rows in order to not monopolize + CPU time. + + - Fixed BUG#1099, DatabaseMetaData.getColumns() getting confused about the + keyword 'set' in character columns. + + - Fixed deadlock issue with Statement.setMaxRows(). + + - Fixed CLOB.truncate(), BUG#1130 + + - Optimized CLOB.setChracterStream(), BUG#1131 + + - Made databaseName, portNumber and serverName optional parameters + for MysqlDataSourceFactory (BUG#1246) + + - Fix for BUG#1247 -- ResultSet.get/setString mashing char 127 + + - Backported auth. changes for 4.1.1 and newer from 3.1 branch. + + - Added com.mysql.jdbc.util.BaseBugReport to help creation of testcases + for bug reports. + + - Added property to 'clobber' streaming results, by setting the + 'clobberStreamingResults' property to 'true' (the default is 'false'). + This will cause a 'streaming' ResultSet to be automatically + closed, and any oustanding data still streaming from the server to + be discarded if another query is executed before all the data has been + read from the server. + +05-23-03 - Version 3.0.8-stable + + - Allow bogus URLs in Driver.getPropertyInfo(). + + - Return list of generated keys when using multi-value INSERTS + with Statement.getGeneratedKeys(). + + - Use JVM charset with filenames and 'LOAD DATA [LOCAL] INFILE' + + - Fix infinite loop with Connection.cleanup(). + + - Changed Ant target 'compile-core' to 'compile-driver', and + made testsuite compilation a separate target. + + - Fixed result set not getting set for Statement.executeUpdate(), + which affected getGeneratedKeys() and getUpdateCount() in + some cases. + + - Unicode character 0xFFFF in a string would cause the driver to + throw an ArrayOutOfBoundsException (Bug #378) + + - Return correct amount of generated keys when using 'REPLACE' + statements. + + - Fix problem detecting server character set in some cases. + + - Fix row data decoding error when using _very_ large packets. + + - Optimized row data decoding. + + - Issue exception when operating on an already-closed + prepared statement. + + - Fixed SJIS encoding bug, thanks to Naoto Sato. + + - Optimized usage of EscapeProcessor. + + - Allow multiple calls to Statement.close() + +04-08-03 - Version 3.0.7-stable + + - Fixed MysqlPooledConnection.close() calling wrong event type. + + - Fixed StringIndexOutOfBoundsException in PreparedStatement. + setClob(). + + - 4.1 Column Metadata fixes + + - Remove synchronization from Driver.connect() and + Driver.acceptsUrl(). + + - IOExceptions during a transaction now cause the Connection to + be closed. + + - Fixed missing conversion for 'YEAR' type in ResultSetMetaData. + getColumnTypeName(). + + - Don't pick up indexes that start with 'pri' as primary keys + for DBMD.getPrimaryKeys(). + + - Throw SQLExceptions when trying to do operations on a forcefully + closed Connection (i.e. when a communication link failure occurs). + + - You can now toggle profiling on/off using + Connection.setProfileSql(boolean). + + - Fixed charset issues with database metadata (charset was not + getting set correctly). + + - Updatable ResultSets can now be created for aliased tables/columns + when connected to MySQL-4.1 or newer. + + - Fixed 'LOAD DATA LOCAL INFILE' bug when file > max_allowed_packet. + + - Fixed escaping of 0x5c ('\') character for GBK and Big5 charsets. + + - Fixed ResultSet.getTimestamp() when underlying field is of type DATE. + + - Ensure that packet size from alignPacketSize() does not + exceed MAX_ALLOWED_PACKET (JVM bug) + + - Don't reset Connection.isReadOnly() when autoReconnecting. + +02-18-03 - Version 3.0.6-stable + + - Fixed ResultSetMetaData to return "" when catalog not known. + Fixes NullPointerExceptions with Sun's CachedRowSet. + + - Fixed DBMD.getTypeInfo() and DBMD.getColumns() returning + different value for precision in TEXT/BLOB types. + + - Allow ignoring of warning for 'non transactional tables' during + rollback (compliance/usability) by setting 'ignoreNonTxTables' + property to 'true'. + + - Fixed SQLExceptions getting swallowed on initial connect. + + - Fixed Statement.setMaxRows() to stop sending 'LIMIT' type queries + when not needed (performance) + + - Clean up Statement query/method mismatch tests (i.e. INSERT not + allowed with .executeQuery()). + + - More checks added in ResultSet traversal method to catch + when in closed state. + + - Fixed ResultSetMetaData.isWritable() to return correct value. + + - Add 'window' of different NULL sorting behavior to + DBMD.nullsAreSortedAtStart (4.0.2 to 4.0.10, true, otherwise, + no). + + - Implemented Blob.setBytes(). You still need to pass the + resultant Blob back into an updatable ResultSet or + PreparedStatement to persist the changes, as MySQL does + not support 'locators'. + + - Backported 4.1 charset field info changes from Connector/J 3.1 + +01-22-03 - Version 3.0.5-gamma + + - Fixed Buffer.fastSkipLenString() causing ArrayIndexOutOfBounds + exceptions with some queries when unpacking fields. + + - Implemented an empty TypeMap for Connection.getTypeMap() so that + some third-party apps work with MySQL (IBM WebSphere 5.0 Connection + pool). + + - Added missing LONGTEXT type to DBMD.getColumns(). + + - Retrieve TX_ISOLATION from database for + Connection.getTransactionIsolation() when the MySQL version + supports it, instead of an instance variable. + + - Quote table names in DatabaseMetaData.getColumns(), + getPrimaryKeys(), getIndexInfo(), getBestRowIdentifier() + + - Greatly reduce memory required for setBinaryStream() in + PreparedStatements. + + - Fixed ResultSet.isBeforeFirst() for empty result sets. + + - Added update options for foreign key metadata. + + +01-06-03 - Version 3.0.4-gamma + + - Added quoted identifiers to database names for + Connection.setCatalog. + + - Added support for quoted identifiers in PreparedStatement + parser. + + - Streamlined character conversion and byte[] handling in + PreparedStatements for setByte(). + + - Reduce memory footprint of PreparedStatements by sharing + outbound packet with MysqlIO. + + - Added 'strictUpdates' property to allow control of amount + of checking for 'correctness' of updatable result sets. Set this + to 'false' if you want faster updatable result sets and you know + that you create them from SELECTs on tables with primary keys and + that you have selected all primary keys in your query. + + - Added support for 4.0.8-style large packets. + + - Fixed PreparedStatement.executeBatch() parameter overwriting. + +12-17-02 - Version 3.0.3-dev + + - Changed charsToByte in SingleByteCharConverter to be non-static + + - Changed SingleByteCharConverter to use lazy initialization of each + converter. + + - Fixed charset handling in Fields.java + + - Implemented Connection.nativeSQL() + + - More robust escape tokenizer -- recognize '--' comments, and allow + nested escape sequences (see testsuite.EscapeProcessingTest) + + - DBMD.getImported/ExportedKeys() now handles multiple foreign keys + per table. + + - Fixed ResultSetMetaData.getPrecision() returning incorrect values + for some floating point types. + + - Fixed ResultSetMetaData.getColumnTypeName() returning BLOB for + TEXT and TEXT for BLOB types. + + - Fixed Buffer.isLastDataPacket() for 4.1 and newer servers. + + - Added CLIENT_LONG_FLAG to be able to get more column flags + (isAutoIncrement() being the most important) + + - Because of above, implemented ResultSetMetaData.isAutoIncrement() + to use Field.isAutoIncrement(). + + - Honor 'lower_case_table_names' when enabled in the server when + doing table name comparisons in DatabaseMetaData methods. + + - Some MySQL-4.1 protocol support (extended field info from selects) + + - Use non-aliased table/column names and database names to fullly + qualify tables and columns in UpdatableResultSet (requires + MySQL-4.1 or newer) + + - Allow user to alter behavior of Statement/ + PreparedStatement.executeBatch() via 'continueBatchOnError' property + (defaults to 'true'). + + - Check for connection closed in more Connection methods + (createStatement, prepareStatement, setTransactionIsolation, + setAutoCommit). + + - More robust implementation of updatable result sets. Checks that + _all_ primary keys of the table have been selected. + + - 'LOAD DATA LOCAL INFILE ...' now works, if your server is configured + to allow it. Can be turned off with the 'allowLoadLocalInfile' + property (see the README). + + - Substitute '?' for unknown character conversions in single-byte + character sets instead of '\0'. + + - NamedPipeSocketFactory now works (only intended for Windows), see + README for instructions. + +11-08-02 - Version 3.0.2-dev + + - Fixed issue with updatable result sets and PreparedStatements not + working + + - Fixed ResultSet.setFetchDirection(FETCH_UNKNOWN) + + - Fixed issue when calling Statement.setFetchSize() when using + arbitrary values + + - Fixed incorrect conversion in ResultSet.getLong() + + - Implemented ResultSet.updateBlob(). + + - Removed duplicate code from UpdatableResultSet (it can be inherited + from ResultSet, the extra code for each method to handle updatability + I thought might someday be necessary has not been needed). + + - Fixed "UnsupportedEncodingException" thrown when "forcing" a + character encoding via properties. + + - Fixed various non-ASCII character encoding issues. + + - Added driver property 'useHostsInPrivileges'. Defaults to true. + Affects whether or not '@hostname' will be used in + DBMD.getColumn/TablePrivileges. + + - All DBMD result set columns describing schemas now return NULL + to be more compliant with the behavior of other JDBC drivers + for other databases (MySQL does not support schemas). + + - Added SSL support. See README for information on how to use it. + + - Properly restore connection properties when autoReconnecting + or failing-over, including autoCommit state, and isolation level. + + - Use 'SHOW CREATE TABLE' when possible for determining foreign key + information for DatabaseMetaData...also allows cascade options for + DELETE information to be returned + + - Escape 0x5c character in strings for the SJIS charset. + + - Fixed start position off-by-1 error in Clob.getSubString() + + - Implemented Clob.truncate() + + - Implemented Clob.setString() + + - Implemented Clob.setAsciiStream() + + - Implemented Clob.setCharacterStream() + + - Added com.mysql.jdbc.MiniAdmin class, which allows you to send + 'shutdown' command to MySQL server...Intended to be used when 'embedding' + Java and MySQL server together in an end-user application. + + - Added 'connectTimeout' parameter that allows users of JDK-1.4 and newer + to specify a maxium time to wait to establish a connection. + + - Failover and autoReconnect only work when the connection is in a + autoCommit(false) state, in order to stay transaction safe + + - Added 'queriesBeforeRetryMaster' property that specifies how many + queries to issue when failed over before attempting to reconnect + to the master (defaults to 50) + + - Fixed DBMD.supportsResultSetConcurrency() so that it returns true + for ResultSet.TYPE_SCROLL_INSENSITIVE and ResultSet.CONCUR_READ_ONLY or + ResultSet.CONCUR_UPDATABLE + + - Fixed ResultSet.isLast() for empty result sets (should return false). + + - PreparedStatement now honors stream lengths in setBinary/Ascii/Character + Stream() unless you set the connection property + 'useStreamLengthsInPrepStmts' to 'false'. + + - Removed some not-needed temporary object creation by using Strings + smarter in EscapeProcessor, Connection and DatabaseMetaData classes. + +09-21-02 - Version 3.0.1-dev + + - Fixed ResultSet.getRow() off-by-one bug. + + - Fixed RowDataStatic.getAt() off-by-one bug. + + - Added limited Clob functionality (ResultSet.getClob(), + PreparedStatemtent.setClob(), + PreparedStatement.setObject(Clob). + + - Added socketTimeout parameter to URL. + + - Connection.isClosed() no longer "pings" the server. + + - Connection.close() issues rollback() when getAutoCommit() == false + + - Added "paranoid" parameter...sanitizes error messages removing + "sensitive" information from them (i.e. hostnames, ports, + usernames, etc.), as well as clearing "sensitive" data structures + when possible. + + - Fixed ResultSetMetaData.isSigned() for TINYINT and BIGINT. + + - Charsets now automatically detected. Optimized code for single-byte + character set conversion. + + - Implemented ResultSet.getCharacterStream() + + - Added "LOCAL TEMPORARY" to table types in DatabaseMetaData.getTableTypes() + + - Massive code clean-up to follow Java coding conventions (the time had come) + + +07-31-02 - Version 3.0.0-dev + + - !!! LICENSE CHANGE !!! The driver is now GPL. If you need + non-GPL licenses, please contact me + + - JDBC-3.0 functionality including + Statement/PreparedStatement.getGeneratedKeys() and + ResultSet.getURL() + + - Performance enchancements - driver is now 50-100% faster + in most situations, and creates fewer temporary objects + + - Repackaging...new driver name is "com.mysql.jdbc.Driver", + old name still works, though (the driver is now provided + by MySQL-AB) + + - Better checking for closed connections in Statement + and PreparedStatement. + + - Support for streaming (row-by-row) result sets (see README) + Thanks to Doron. + + - Support for large packets (new addition to MySQL-4.0 protocol), + see README for more information. + + - JDBC Compliance -- Passes all tests besides stored procedure tests + + + - Fix and sort primary key names in DBMetaData (SF bugs 582086 and 582086) + + - Float types now reported as java.sql.Types.FLOAT (SF bug 579573) + + - ResultSet.getTimestamp() now works for DATE types (SF bug 559134) + + - ResultSet.getDate/Time/Timestamp now recognizes all forms of invalid + values that have been set to all zeroes by MySQL (SF bug 586058) + + - Testsuite now uses Junit (which you can get from www.junit.org) + + - The driver now only works with JDK-1.2 or newer. + + - Added multi-host failover support (see README) + + - General source-code cleanup. + + - Overall speed improvements via controlling transient object + creation in MysqlIO class when reading packets + + - Performance improvements in string handling and field + metadata creation (lazily instantiated) contributed by + Alex Twisleton-Wykeham-Fiennes + + +05-16-02 - Version 2.0.14 + + - More code cleanup + + - PreparedStatement now releases resources on .close() (SF bug 553268) + + - Quoted identifiers not used if server version does not support them. Also, + if server started with --ansi or --sql-mode=ANSI_QUOTES then '"' will be + used as an identifier quote, otherwise '`' will be used. + + - ResultSet.getDouble() now uses code built into JDK to be more precise (but slower) + + - LogicalHandle.isClosed() calls through to physical connection + + - Added SQL profiling (to STDERR). Set "profileSql=true" in your JDBC url. + See README for more information. + + - Fixed typo for relaxAutoCommit parameter. + +04-24-02 - Version 2.0.13 + + - More code cleanup. + + - Fixed unicode chars being read incorrectly (SF bug 541088) + + - Faster blob escaping for PrepStmt + + - Added set/getPortNumber() to DataSource(s) (SF bug 548167) + + - Added setURL() to MySQLXADataSource (SF bug 546019) + + - PreparedStatement.toString() fixed (SF bug 534026) + + - ResultSetMetaData.getColumnClassName() now implemented + + - Rudimentary version of Statement.getGeneratedKeys() from JDBC-3.0 + now implemented (you need to be using JDK-1.4 for this to work, I + believe) + + - DBMetaData.getIndexInfo() - bad PAGES fixed (SF BUG 542201) + +04-07-02 - Version 2.0.12 + + - General code cleanup. + + - Added getIdleFor() method to Connection and MysqlLogicalHandle. + + - Relaxed synchronization in all classes, should fix 520615 and 520393. + + - Added getTable/ColumnPrivileges() to DBMD (fixes 484502). + + - Added new types to getTypeInfo(), fixed existing types thanks to + Al Davis and Kid Kalanon. + + - Added support for BIT types (51870) to PreparedStatement. + + - Fixed getRow() bug (527165) in ResultSet + + - Fixes for ResultSet updatability in PreparedStatement. + - Fixed timezone off by 1-hour bug in PreparedStatement (538286, 528785). + + - ResultSet: Fixed updatability (values being set to null + if not updated). + + - DataSources - fixed setUrl bug (511614, 525565), + wrong datasource class name (532816, 528767) + + - Added identifier quoting to all DatabaseMetaData methods + that need them (should fix 518108) + + - Added support for YEAR type (533556) + + - ResultSet.insertRow() should now detect auto_increment fields + in most cases and use that value in the new row. This detection + will not work in multi-valued keys, however, due to the fact that + the MySQL protocol does not return this information. + + - ResultSet.refreshRow() implemented. + + - Fixed testsuite.Traversal afterLast() bug, thanks to Igor Lastric. + +01-27-02 - Version 2.0.11 + + - Fixed missing DELETE_RULE value in + DBMD.getImported/ExportedKeys() and getCrossReference(). + + - Full synchronization of Statement.java. + + - More changes to fix "Unexpected end of input stream" + errors when reading BLOBs. This should be the last fix. + +01-24-02 - Version 2.0.10 + + - Fixed spurious "Unexpected end of input stream" errors in + MysqlIO (bug 507456). + + - Fixed null-pointer-exceptions when using + MysqlConnectionPoolDataSource with Websphere 4 (bug 505839). + +01-13-02 - Version 2.0.9 + + - Ant build was corrupting included jar files, fixed + (bug 487669). + + - Fixed extra memory allocation in MysqlIO.readPacket() + (bug 488663). + + - Implementation of DatabaseMetaData.getExported/ImportedKeys() and + getCrossReference(). + + - Full synchronization on methods modifying instance and class-shared + references, driver should be entirely thread-safe now (please + let me know if you have problems) + + - DataSource implementations moved to org.gjt.mm.mysql.jdbc2.optional + package, and (initial) implementations of PooledConnectionDataSource + and XADataSource are in place (thanks to Todd Wolff for the + implementation and testing of PooledConnectionDataSource with + IBM WebSphere 4). + + - Added detection of network connection being closed when reading packets + (thanks to Todd Lizambri). + + - Fixed quoting error with escape processor (bug 486265). + + - Report batch update support through DatabaseMetaData (bug 495101). + + - Fixed off-by-one-hour error in PreparedStatement.setTimestamp() + (bug 491577). + + - Removed concatenation support from driver (the '||' operator), + as older versions of VisualAge seem to be the only thing that + use it, and it conflicts with the logical '||' operator. You will + need to start mysqld with the "--ansi" flag to use the '||' + operator as concatenation (bug 491680) + + - Fixed casting bug in PreparedStatement (bug 488663). + +11-25-01 - Version 2.0.8 + + - Batch updates now supported (thanks to some inspiration + from Daniel Rall). + + - XADataSource/ConnectionPoolDataSource code (experimental) + + - PreparedStatement.setAnyNumericType() now handles positive + exponents correctly (adds "+" so MySQL can understand it). + + - DatabaseMetaData.getPrimaryKeys() and getBestRowIdentifier() + are now more robust in identifying primary keys (matches + regardless of case or abbreviation/full spelling of Primary Key + in Key_type column). + +10-24-01 - Version 2.0.7 + + - PreparedStatement.setCharacterStream() now implemented + + - Fixed dangling socket problem when in high availability + (autoReconnect=true) mode, and finalizer for Connection will + close any dangling sockets on GC. + + - Fixed ResultSetMetaData.getPrecision() returning one + less than actual on newer versions of MySQL. + + - ResultSet.getBlob() now returns null if column value + was null. + + - Character sets read from database if useUnicode=true + and characterEncoding is not set. (thanks to + Dmitry Vereshchagin) + + - Initial transaction isolation level read from + database (if avaialable) (thanks to Dmitry Vereshchagin) + + - Fixed DatabaseMetaData.supportsTransactions(), and + supportsTransactionIsolationLevel() and getTypeInfo() + SQL_DATETIME_SUB and SQL_DATA_TYPE fields not being + readable. + + - Fixed PreparedStatement generating SQL that would end + up with syntax errors for some queries. + + - Fixed ResultSet.isAfterLast() always returning false. + + - Fixed timezone issue in PreparedStatement.setTimestamp() + (thanks to Erik Olofsson) + + - Captialize type names when "captializeTypeNames=true" + is passed in URL or properties (for WebObjects, thanks + to Anjo Krank) + + - Updatable result sets now correctly handle NULL + values in fields. + + - PreparedStatement.setDouble() now uses full-precision + doubles (reverting a fix made earlier to truncate them). + + - PreparedStatement.setBoolean() will use 1/0 for values + if your MySQL Version >= 3.21.23. + +06-16-01 - Version 2.0.6 + +Fixed PreparedStatement parameter checking + + - Fixed case-sensitive column names in ResultSet.java + +06-13-01 - Version 2.0.5 + + - Fixed ResultSet.getBlob() ArrayIndex out-of-bounds + + - Fixed ResultSetMetaData.getColumnTypeName for TEXT/BLOB + + - Fixed ArrayIndexOutOfBounds when sending large BLOB queries + (Max size packet was not being set) + + - Added ISOLATION level support to Connection.setIsolationLevel() + + - Fixed NPE on PreparedStatement.executeUpdate() when all columns + have not been set. + + - Fixed data parsing of TIMESTAMPs with 2-digit years + + - Added Byte to PreparedStatement.setObject() + + - ResultSet.getBoolean() now recognizes '-1' as 'true' + + - ResultSet has +/-Inf/inf support + + - ResultSet.insertRow() works now, even if not all columns are + set (they will be set to "NULL") + + - DataBaseMetaData.getCrossReference() no longer ArrayIndexOOB + + - getObject() on ResultSet correctly does TINYINT->Byte and + SMALLINT->Short + +12-03-00 - Version 2.0.3 + + - Implemented getBigDecimal() without scale component + for JDBC2. + + - Fixed composite key problem with updateable result sets. + + - Added detection of -/+INF for doubles. + + - Faster ASCII string operations. + + - Fixed incorrect detection of MAX_ALLOWED_PACKET, so sending + large blobs should work now. + + - Fixed off-by-one error in java.sql.Blob implementation code. + + - Added "ultraDevHack" URL parameter, set to "true" to allow + (broken) Macromedia UltraDev to use the driver. + +04-06-00 - Version 2.0.1 + + - Fixed RSMD.isWritable() returning wrong value. + Thanks to Moritz Maass. + + - Cleaned up exception handling when driver connects + + - Columns that are of type TEXT now return as Strings + when you use getObject() + + - DatabaseMetaData.getPrimaryKeys() now works correctly wrt + to key_seq. Thanks to Brian Slesinsky. + + - No escape processing is done on PreparedStatements anymore + per JDBC spec. + + - Fixed many JDBC-2.0 traversal, positioning bugs, especially + wrt to empty result sets. Thanks to Ron Smits, Nick Brook, + Cessar Garcia and Carlos Martinez. + + - Fixed some issues with updatability support in ResultSet when + using multiple primary keys. + +02-21-00 - Version 2.0pre5 + + - Fixed Bad Handshake problem. + +01-10-00 - Version 2.0pre4 + + - Fixes to ResultSet for insertRow() - Thanks to + Cesar Garcia + + - Fix to Driver to recognize JDBC-2.0 by loading a JDBC-2.0 + class, instead of relying on JDK version numbers. Thanks + to John Baker. + + - Fixed ResultSet to return correct row numbers + + - Statement.getUpdateCount() now returns rows matched, + instead of rows actually updated, which is more SQL-92 + like. + +10-29-99 + + - Statement/PreparedStatement.getMoreResults() bug fixed. + Thanks to Noel J. Bergman. + + - Added Short as a type to PreparedStatement.setObject(). + Thanks to Jeff Crowder + + - Driver now automagically configures maximum/preferred packet + sizes by querying server. + + - Autoreconnect code uses fast ping command if server supports + it. + + - Fixed various bugs wrt. to packet sizing when reading from + the server and when alloc'ing to write to the server. + +08-17-99 - Version 2.0pre + + - Now compiles under JDK-1.2. The driver supports both JDK-1.1 + and JDK-1.2 at the same time through a core set of classes. + The driver will load the appropriate interface classes at + runtime by figuring out which JVM version you are using. + + - Fixes for result sets with all nulls in the first row. + (Pointed out by Tim Endres) + + - Fixes to column numbers in SQLExceptions in ResultSet + (Thanks to Blas Rodriguez Somoza) + + - The database no longer needs to specified to connect. + (Thanks to Christian Motschke) + +07-04-99 - Version 1.2b + + - Better Documentation (in progress), in doc/mm.doc/book1.html + + - DBMD now allows null for a column name pattern (not in + spec), which it changes to '%'. + + - DBMD now has correct types/lengths for getXXX(). + + - ResultSet.getDate(), getTime(), and getTimestamp() fixes. + (contributed by Alan Wilken) + + - EscapeProcessor now handles \{ \} and { or } inside quotes + correctly. (thanks to Alik for some ideas on how to fix it) + + - Fixes to properties handling in Connection. + (contributed by Juho Tikkala) + + - ResultSet.getObject() now returns null for NULL columns + in the table, rather than bombing out. + (thanks to Ben Grosman) + + - ResultSet.getObject() now returns Strings for types + from MySQL that it doesn't know about. (Suggested by + Chris Perdue) + + - Removed DataInput/Output streams, not needed, 1/2 number + of method calls per IO operation. + + - Use default character encoding if one is not specified. This + is a work-around for broken JVMs, because according to spec, + EVERY JVM must support "ISO8859_1", but they don't. + + - Fixed Connection to use the platform character encoding + instead of "ISO8859_1" if one isn't explicitly set. This + fixes problems people were having loading the character- + converter classes that didn't always exist (JVM bug). + (thanks to Fritz Elfert for pointing out this problem) + + - Changed MysqlIO to re-use packets where possible to reduce + memory usage. + + - Fixed escape-processor bugs pertaining to {} inside + quotes. + +04-14-99 - Version 1.2a + + - Fixed character-set support for non-Javasoft JVMs + (thanks to many people for pointing it out) + + - Fixed ResultSet.getBoolean() to recognize 'y' & 'n' + as well as '1' & '0' as boolean flags. + (thanks to Tim Pizey) + + - Fixed ResultSet.getTimestamp() to give better performance. + (thanks to Richard Swift) + + - Fixed getByte() for numeric types. + (thanks to Ray Bellis) + + - Fixed DatabaseMetaData.getTypeInfo() for DATE type. + (thanks to Paul Johnston) + + - Fixed EscapeProcessor for "fn" calls. + (thanks to Piyush Shah at locomotive.org) + + - Fixed EscapeProcessor to not do extraneous work if there + are no escape codes. + (thanks to Ryan Gustafson) + + - Fixed Driver to parse URLs of the form "jdbc:mysql://host:port" + (thanks to Richard Lobb) + +03-24-99 - Version 1.1i + + - Fixed Timestamps for PreparedStatements + + - Fixed null pointer exceptions in RSMD and RS + + - Re-compiled with jikes for valid class files (thanks ms!) + +03-08-99 - Version 1.1h + + - Fixed escape processor to deal with un-matched { and } + (thanks to Craig Coles) + + - Fixed escape processor to create more portable (between + DATETIME and TIMESTAMP types) representations so that + it will work with BETWEEN clauses. + (thanks to Craig Longman) + + - MysqlIO.quit() now closes the socket connection. Before, + after many failed connections some OS's would run out + of file descriptors. (thanks to Michael Brinkman) + + - Fixed NullPointerException in Driver.getPropertyInfo. + (thanks to Dave Potts) + + - Fixes to MysqlDefs to allow all *text fields to be + retrieved as Strings. + (thanks to Chris at Leverage) + + - Fixed setDouble in PreparedStatement for large numbers + to avoid sending scientific notation to the database. + (thanks to J.S. Ferguson) + + - Fixed getScale() and getPrecision() in RSMD. + (contrib'd by James Klicman) + + - Fixed getObject() when field was DECIMAL or NUMERIC + (thanks to Bert Hobbs) + + - DBMD.getTables() bombed when passed a null table-name + pattern. Fixed. (thanks to Richard Lobb) + + - Added check for "client not authorized" errors during + connect. (thanks to Hannes Wallnoefer) + +02-19-99 - Version 1.1g + + - Result set rows are now byte arrays. Blobs and Unicode + work bidriectonally now. The useUnicode and encoding + options are implemented now. + + - Fixes to PreparedStatement to send binary set by + setXXXStream to be sent un-touched to the MySQL server. + + - Fixes to getDriverPropertyInfo(). + +12-31-98 - Version 1.1f + + - Changed all ResultSet fields to Strings, this should allow + Unicode to work, but your JVM must be able to convert + between the character sets. This should also make reading + data from the server be a bit quicker, because there is now + no conversion from StringBuffer to String. + + - Changed PreparedStatement.streamToString() to be more + efficient (code from Uwe Schaefer). + + - URL parsing is more robust (throws SQL exceptions on errors + rather than NullPointerExceptions) + + - PreparedStatement now can convert Strings to Time/Date values + via setObject() (code from Robert Currey). + + - IO no longer hangs in Buffer.readInt(), that bug was + introduced in 1.1d when changing to all byte-arrays for + result sets. (Pointed out by Samo Login) + +11-03-98 - Version 1.1b + + - Fixes to DatabaseMetaData to allow both IBM VA and J-Builder + to work. Let me know how it goes. (thanks to Jac Kersing) + + - Fix to ResultSet.getBoolean() for NULL strings + (thanks to Barry Lagerweij) + + - Beginning of code cleanup, and formatting. Getting ready + to branch this off to a parallel JDBC-2.0 source tree. + + - Added "final" modifier to critical sections in MysqlIO and + Buffer to allow compiler to inline methods for speed. + +9-29-98 + + - If object references passed to setXXX() in PreparedStatement are + null, setNull() is automatically called for you. (Thanks for the + suggestion goes to Erik Ostrom) + + - setObject() in PreparedStatement will now attempt to write a + serialized representation of the object to the database for + objects of Types.OTHER and objects of unknown type. + + - Util now has a static method readObject() which given a ResultSet + and a column index will re-instantiate an object serialized in + the above manner. + +9-02-98 - Vesion 1.1 + + - Got rid of "ugly hack" in MysqlIO.nextRow(). Rather than + catch an exception, Buffer.isLastDataPacket() was fixed. + + - Connection.getCatalog() and Connection.setCatalog() + should work now. + + - Statement.setMaxRows() works, as well as setting + by property maxRows. Statement.setMaxRows() overrides + maxRows set via properties or url parameters. + + - Automatic re-connection is available. Because it has + to "ping" the database before each query, it is + turned off by default. To use it, pass in "autoReconnect=true" + in the connection URL. You may also change the number of + reconnect tries, and the initial timeout value via + "maxReconnects=n" (default 3) and "initialTimeout=n" + (seconds, default 2) parameters. The timeout is an + exponential backoff type of timeout, e.g. if you have initial + timeout of 2 seconds, and maxReconnects of 3, then the driver + will timeout 2 seconds, 4 seconds, then 16 seconds between each + re-connection attempt. + +8-24-98 - Version 1.0 + + - Fixed handling of blob data in Buffer.java + + - Fixed bug with authentication packet being + sized too small. + + - The JDBC Driver is now under the LPGL + +8-14-98 - + + - Fixed Buffer.readLenString() to correctly + read data for BLOBS. + + - Fixed PreparedStatement.stringToStream to + correctly read data for BLOBS. + + - Fixed PreparedStatement.setDate() to not + add a day. + (above fixes thanks to Vincent Partington) + + - Added URL parameter parsing (?user=... etc). + + +8-04-98 - Version 0.9d + + - Big news! New package name. Tim Endres from ICE + Engineering is starting a new source tree for + GNU GPL'd Java software. He's graciously given + me the org.gjt.mm package directory to use, so now + the driver is in the org.gjt.mm.mysql package scheme. + I'm "legal" now. Look for more information on Tim's + project soon. + + - Now using dynamically sized packets to reduce + memory usage when sending commands to the DB. + + - Small fixes to getTypeInfo() for parameters, etc. + + - DatabaseMetaData is now fully implemented. Let me + know if these drivers work with the various IDEs + out there. I've heard that they're working with + JBuilder right now. + + - Added JavaDoc documentation to the package. + + - Package now available in .zip or .tar.gz. + +7-28-98 - Version 0.9 + + - Implemented getTypeInfo(). + Connection.rollback() now throws an SQLException + per the JDBC spec. + + - Added PreparedStatement that supports all JDBC API + methods for PreparedStatement including InputStreams. + Please check this out and let me know if anything is + broken. + + - Fixed a bug in ResultSet that would break some + queries that only returned 1 row. + + - Fixed bugs in DatabaseMetaData.getTables(), + DatabaseMetaData.getColumns() and + DatabaseMetaData.getCatalogs(). + + - Added functionality to Statement that allows + executeUpdate() to store values for IDs that are + automatically generated for AUTO_INCREMENT fields. + Basically, after an executeUpdate(), look at the + SQLWarnings for warnings like "LAST_INSERTED_ID = + 'some number', COMMAND = 'your SQL query'". + + If you are using AUTO_INCREMENT fields in your + tables and are executing a lot of executeUpdate()s + on one Statement, be sure to clearWarnings() every + so often to save memory. + +7-06-98 - Version 0.8 + + - Split MysqlIO and Buffer to separate classes. Some + ClassLoaders gave an IllegalAccess error for some + fields in those two classes. Now mm.mysql works in + applets and all classloaders. + + Thanks to Joe Ennis for pointing + out the problem and working on a fix with me. + +7-01-98 - Version 0.7 + + - Fixed DatabaseMetadata problems in getColumns() and + bug in switch statement in the Field constructor. + + Thanks to Costin Manolache for + pointing these out. + +5-21-98 - Version 0.6 + + - Incorporated efficiency changes from + Richard Swift in + MysqlIO.java and ResultSet.java + + - We're now 15% faster than gwe's driver. + + - Started working on DatabaseMetaData. + + The following methods are implemented: + * getTables() + * getTableTypes() + * getColumns + * getCatalogs() diff --git a/src/lib/mysql-connector-java-5.0.8/COPYING b/src/lib/mysql-connector-java-5.0.8/COPYING new file mode 100644 index 00000000..025ed9e7 --- /dev/null +++ b/src/lib/mysql-connector-java-5.0.8/COPYING @@ -0,0 +1,343 @@ +GNU General Public License +************************** + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your + freedom to share and change it. By contrast, the GNU General Public + License is intended to guarantee your freedom to share and change free + software--to make sure the software is free for all its users. This + General Public License applies to most of the Free Software + Foundation's software and to any other program whose authors commit to + using it. (Some other Free Software Foundation software is covered by + the GNU Library General Public License instead.) You can apply it to + your programs, too. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for + this service if you wish), that you receive source code or can get it + if you want it, that you can change the software or use pieces of it + in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid + anyone to deny you these rights or to ask you to surrender the rights. + These restrictions translate to certain responsibilities for you if you + distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether + gratis or for a fee, you must give the recipients all the rights that + you have. You must make sure that they, too, receive or can get the + source code. And you must show them these terms so they know their + rights. + + We protect your rights with two steps: (1) copyright the software, and + (2) offer you this license which gives you legal permission to copy, + distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain + that everyone understands that there is no warranty for this free + software. If the software is modified by someone else and passed on, we + want its recipients to know that what they have is not the original, so + that any problems introduced by others will not reflect on the original + authors' reputations. + + Finally, any free program is threatened constantly by software + patents. We wish to avoid the danger that redistributors of a free + program will individually obtain patent licenses, in effect making the + program proprietary. To prevent this, we have made it clear that any + patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and + modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains + a notice placed by the copyright holder saying it may be distributed + under the terms of this General Public License. The "Program", below, + refers to any such program or work, and a "work based on the Program" + means either the Program or any derivative work under copyright law: + that is to say, a work containing the Program or a portion of it, + either verbatim or with modifications and/or translated into another + language. (Hereinafter, translation is included without limitation in + the term "modification".) Each licensee is addressed as "you". + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of + running the Program is not restricted, and the output from the Program + is covered only if its contents constitute a work based on the + Program (independent of having been made by running the Program). + Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's + source code as you receive it, in any medium, provided that you + conspicuously and appropriately publish on each copy an appropriate + copyright notice and disclaimer of warranty; keep intact all the + notices that refer to this License and to the absence of any warranty; + and give any other recipients of the Program a copy of this License + along with the Program. + + You may charge a fee for the physical act of transferring a copy, and + you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion + of it, thus forming a work based on the Program, and copy and + distribute such modifications or work under the terms of Section 1 + above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Program, + and can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based + on the Program, the distribution of the whole must be on the terms of + this License, whose permissions for other licensees extend to the + entire whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Program. + + In addition, mere aggregation of another work not based on the Program + with the Program (or with a work based on the Program) on a volume of + a storage or distribution medium does not bring the other work under + the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms of + Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete source + code means all the source code for all modules it contains, plus any + associated interface definition files, plus the scripts used to + control compilation and installation of the executable. However, as a + special exception, the source code distributed need not include + anything that is normally distributed (in either source or binary + form) with the major components (compiler, kernel, and so on) of the + operating system on which the executable runs, unless that component + itself accompanies the executable. + + If distribution of executable or object code is made by offering + access to copy from a designated place, then offering equivalent + access to copy the source code from the same place counts as + distribution of the source code, even though third parties are not + compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense or distribute the Program is + void, and will automatically terminate your rights under this License. + However, parties who have received copies, or rights, from you under + this License will not have their licenses terminated so long as such + parties remain in full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify or + distribute the Program or its derivative works. These actions are + prohibited by law if you do not accept this License. Therefore, by + modifying or distributing the Program (or any work based on the + Program), you indicate your acceptance of this License to do so, and + all its terms and conditions for copying, distributing or modifying + the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program subject to + these terms and conditions. You may not impose any further + restrictions on the recipients' exercise of the rights granted herein. + You are not responsible for enforcing compliance by third parties to + this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot + distribute so as to satisfy simultaneously your obligations under this + License and any other pertinent obligations, then as a consequence you + may not distribute the Program at all. For example, if a patent + license would not permit royalty-free redistribution of the Program by + all those who receive copies directly or indirectly through you, then + the only way you could satisfy both it and this License would be to + refrain entirely from distribution of the Program. + + If any portion of this section is held invalid or unenforceable under + any particular circumstance, the balance of the section is intended to + apply and the section as a whole is intended to apply in other + circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system, which is + implemented by public license practices. Many people have made + generous contributions to the wide range of software distributed + through that system in reliance on consistent application of that + system; it is up to the author/donor to decide if he or she is willing + to distribute software through any other system and a licensee cannot + impose that choice. + + This section is intended to make thoroughly clear what is believed to + be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Program under this License + may add an explicit geographical distribution limitation excluding + those countries, so that distribution is permitted only in or among + countries not thus excluded. In such case, this License incorporates + the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions + of the General Public License from time to time. Such new versions will + be similar in spirit to the present version, but may differ in detail to + address new problems or concerns. + + Each version is given a distinguishing version number. If the Program + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and conditions + either of that version or of any later version published by the Free + Software Foundation. If the Program does not specify a version number of + this License, you may choose any version ever published by the Free Software + Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the author + to ask for permission. For software which is copyrighted by the Free + Software Foundation, write to the Free Software Foundation; we sometimes + make exceptions for this. Our decision will be guided by the two goals + of preserving the free status of all derivatives of our free software and + of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY + FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN + OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES + PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED + OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS + TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE + PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, + REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR + REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, + INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING + OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED + TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY + YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER + PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively + convey the exclusion of warranty; and each file should have at least + the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + Also add information on how to contact you by electronic and paper mail. + + If the program is interactive, make it output a short notice like this + when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the appropriate + parts of the General Public License. Of course, the commands you use may + be called something other than `show w' and `show c'; they could even be + mouse-clicks or menu items--whatever suits your program. + + You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the program, if + necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + + This General Public License does not permit incorporating your program into + proprietary programs. If your program is a subroutine library, you may + consider it more useful to permit linking proprietary applications with the + library. If this is what you want to do, use the GNU Library General + Public License instead of this License. + diff --git a/src/lib/mysql-connector-java-5.0.8/EXCEPTIONS-CONNECTOR-J b/src/lib/mysql-connector-java-5.0.8/EXCEPTIONS-CONNECTOR-J new file mode 100644 index 00000000..3ccab747 --- /dev/null +++ b/src/lib/mysql-connector-java-5.0.8/EXCEPTIONS-CONNECTOR-J @@ -0,0 +1,119 @@ +MySQL FLOSS License Exception + +The MySQL AB Exception for Free/Libre and Open Source +Software-only Applications Using MySQL Client Libraries (the +"FLOSS Exception"). + +Version 0.6, 7 March 2007 + +Exception Intent + +We want specified Free/Libre and Open Source Software (``FLOSS'') +applications to be able to use specified GPL-licensed MySQL client +libraries (the ``Program'') despite the fact that not all FLOSS +licenses are compatible with version 2 of the GNU General Public +License (the ``GPL''). + +Legal Terms and Conditions + +As a special exception to the terms and conditions of version 2.0 +of the GPL: + + 1. You are free to distribute a Derivative Work that is formed + entirely from the Program and one or more works (each, a + "FLOSS Work") licensed under one or more of the licenses + listed below in section 1, as long as: + a. You obey the GPL in all respects for the Program and the + Derivative Work, except for identifiable sections of the + Derivative Work which are not derived from the Program, + and which can reasonably be considered independent and + separate works in themselves, + b. all identifiable sections of the Derivative Work which + are not derived from the Program, and which can + reasonably be considered independent and separate works + in themselves, + i. are distributed subject to one of the FLOSS licenses + listed below, and + ii. the object code or executable form of those sections + are accompanied by the complete corresponding + machine-readable source code for those sections on + the same medium and under the same FLOSS license as + the corresponding object code or executable forms of + those sections, and + c. any works which are aggregated with the Program or with a + Derivative Work on a volume of a storage or distribution + medium in accordance with the GPL, can reasonably be + considered independent and separate works in themselves + which are not derivatives of either the Program, a + Derivative Work or a FLOSS Work. + If the above conditions are not met, then the Program may only + be copied, modified, distributed or used under the terms and + conditions of the GPL or another valid licensing option from + MySQL AB. + + 2. FLOSS License List + +License name Version(s)/Copyright Date +Academic Free License 2.0 +Apache Software License 1.0/1.1/2.0 +Apple Public Source License 2.0 +Artistic license From Perl 5.8.0 +BSD license "July 22 1999" +Common Development and Distribution License (CDDL) 1.0 +Common Public License 1.0 +Eclipse Public License 1.0 +GNU Library or "Lesser" General Public License (LGPL) 2.0/2.1 +Jabber Open Source License 1.0 +MIT license (As listed in file MIT-License.txt) --- +Mozilla Public License (MPL) 1.0/1.1 +Open Software License 2.0 +OpenSSL license (with original SSLeay license) "2003" ("1998") +PHP License 3.0 +Python license (CNRI Python License) --- +Python Software Foundation License 2.1.1 +Sleepycat License "1999" +University of Illinois/NCSA Open Source License --- +W3C License "2001" +X11 License "2001" +Zlib/libpng License --- +Zope Public License 2.0 + + Due to the many variants of some of the above licenses, we + require that any version follow the 2003 version of the Free + Software Foundation's Free Software Definition + (http://www.gnu.org/philosophy/free-sw.html) or version 1.9 of + the Open Source Definition by the Open Source Initiative + (http://www.opensource.org/docs/definition.php). + + 3. Definitions + + a. Terms used, but not defined, herein shall have the + meaning provided in the GPL. + b. Derivative Work means a derivative work under copyright + law. + + 4. Applicability: This FLOSS Exception applies to all Programs + that contain a notice placed by MySQL AB saying that the + Program may be distributed under the terms of this FLOSS + Exception. If you create or distribute a work which is a + Derivative Work of both the Program and any other work + licensed under the GPL, then this FLOSS Exception is not + available for that work; thus, you must remove the FLOSS + Exception notice from that work and comply with the GPL in all + respects, including by retaining all GPL notices. You may + choose to redistribute a copy of the Program exclusively under + the terms of the GPL by removing the FLOSS Exception notice + from that copy of the Program, provided that the copy has + never been modified by you or any third party. + +Appendix A. Qualified Libraries and Packages + +The following is a non-exhaustive list of libraries and packages +which are covered by the FLOSS License Exception. Please note that +this appendix is provided merely as an additional service to +specific FLOSS projects wishing to simplify licensing information +for their users. Compliance with one of the licenses noted under +the "FLOSS license list" section remains a prerequisite. + +Package Name Qualifying License and Version +Apache Portable Runtime (APR) Apache Software License 2.0 \ No newline at end of file diff --git a/src/lib/mysql-connector-java-5.0.8/README b/src/lib/mysql-connector-java-5.0.8/README new file mode 100644 index 00000000..2612e4c0 --- /dev/null +++ b/src/lib/mysql-connector-java-5.0.8/README @@ -0,0 +1,45 @@ +MySQL Connector/J @MYSQL_CJ_VERSION@ (formerly MM.MySQL) +MySQL AB's JDBC Driver for MySQL +Copyright (c) 2003 MySQL AB + +CONTENTS + +* License +* Documentation Location + + +LICENSE + +MySQL Connector/J is licensed under the GPL or a commercial license +from MySQL AB. + +If you have licensed this product under the GPL, please see the COPYING +file for more information. + +There are special exceptions to the terms and conditions of the GPL +as it is applied to this software. View the full text of the +exception in file EXCEPTIONS-CONNECTOR-J in the directory of this +software distribution. + +If you have licensed this product under a commercial license from +MySQL AB, please see the file "MySQLEULA.txt" that comes with this +distribution for the terms of the license. + +If you need non-GPL licenses for commercial distribution please contact +me or . + + +DOCUMENTATION LOCATION + +The documentation formerly contained in this file has moved into the +'doc' directory, where it is available in HTML, PDF and plaintext +forms. + +You may also find the latest copy of the documentation on the MySQL +website at http://dev.mysql.com/doc/refman/5.0/en/connector-j.html + +-- +This software is OSI Certified Open Source Software. +OSI Certified is a certification mark of the Open Source Initiative. + + diff --git a/src/lib/mysql-connector-java-5.0.8/README.txt b/src/lib/mysql-connector-java-5.0.8/README.txt new file mode 100644 index 00000000..bb7d8ad7 --- /dev/null +++ b/src/lib/mysql-connector-java-5.0.8/README.txt @@ -0,0 +1,45 @@ +MySQL Connector/J @MYSQL_CJ_VERSION@ (formerly MM.MySQL) +MySQL AB's JDBC Driver for MySQL +Copyright (c) 2003 MySQL AB + +CONTENTS + +* License +* Documentation Location + + +LICENSE + +MySQL Connector/J is licensed under the GPL or a commercial license +from MySQL AB. + +If you have licensed this product under the GPL, please see the COPYING +file for more information. + +There are special exceptions to the terms and conditions of the GPL +as it is applied to this software. View the full text of the +exception in file EXCEPTIONS-CONNECTOR-J in the directory of this +software distribution. + +If you have licensed this product under a commercial license from +MySQL AB, please see the file "MySQLEULA.txt" that comes with this +distribution for the terms of the license. + +If you need non-GPL licenses for commercial distribution please contact +me or . + + +DOCUMENTATION LOCATION + +The documentation formerly contained in this file has moved into the +'doc' directory, where it is available in HTML, PDF and plaintext +forms. + +You may also find the latest copy of the documentation on the MySQL +website at http://dev.mysql.com/doc/refman/5.0/en/connector-j.html + +-- +This software is OSI Certified Open Source Software. +OSI Certified is a certification mark of the Open Source Initiative. + + diff --git a/src/lib/mysql-connector-java-5.0.8/build.xml b/src/lib/mysql-connector-java-5.0.8/build.xml new file mode 100644 index 00000000..d600b72a --- /dev/null +++ b/src/lib/mysql-connector-java-5.0.8/build.xml @@ -0,0 +1,1079 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Removing sources from ${distDir}/toArchive + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+
+ + +
+ + + + + + + + + + + +
+ + + + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +