You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by oz...@apache.org on 2004/06/07 17:36:27 UTC

cvs commit: jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms MySqlRDBMSAdapter.java

ozeigermann    2004/06/07 08:36:27

  Modified:    src/stores/org/apache/slide/store/impl/rdbms
                        MySqlRDBMSAdapter.java
  Log:
  Added Sequence support for MySQL
  
  Revision  Changes    Path
  1.6       +82 -6     jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/MySqlRDBMSAdapter.java
  
  Index: MySqlRDBMSAdapter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/MySqlRDBMSAdapter.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- MySqlRDBMSAdapter.java	7 Jun 2004 14:25:20 -0000	1.5
  +++ MySqlRDBMSAdapter.java	7 Jun 2004 15:36:26 -0000	1.6
  @@ -23,6 +23,9 @@
   
   package org.apache.slide.store.impl.rdbms;
   
  +import java.sql.Connection;
  +import java.sql.PreparedStatement;
  +import java.sql.ResultSet;
   import java.sql.SQLException;
   
   import org.apache.slide.common.*;
  @@ -36,10 +39,14 @@
    * @version $Revision$
    */
   
  -public class MySqlRDBMSAdapter extends StandardRDBMSAdapter {
  +public class MySqlRDBMSAdapter extends StandardRDBMSAdapter implements SequenceAdapter {
   
       protected static final String LOG_CHANNEL = MySqlRDBMSAdapter.class.getName();
   
  +    protected static String normalizeSequenceName(String sequenceName) {
  +        return sequenceName.replace('-', '_').toUpperCase() + "_SEQ";
  +    }
  +
       public MySqlRDBMSAdapter(Service service, Logger logger) {
           super(service, logger);
       }
  @@ -63,8 +70,77 @@
   
       protected String convertRevisionNumberToComparable(String revisioNumber) {
   
  -        return "convert(SUBSTRING_INDEX("+revisioNumber+", '.', 1), unsigned), convert(SUBSTRING_INDEX("+revisioNumber+", '.', -1), unsigned)";
  +        return "convert(SUBSTRING_INDEX("
  +            + revisioNumber
  +            + ", '.', 1), unsigned), convert(SUBSTRING_INDEX("
  +            + revisioNumber
  +            + ", '.', -1), unsigned)";
  +    }
  +
  +    public boolean isSequenceSupported(Connection conn) {
  +        return true;
  +    }
  +
  +    public boolean createSequence(Connection conn, String sequenceName) throws ServiceAccessException {
  +
  +        String query = "CREATE TABLE " + normalizeSequenceName(sequenceName) + "(id INT auto_increment NOT NULL,PRIMARY KEY (id))";
  +
  +        PreparedStatement statement = null;
  +
  +        try {
  +            statement = conn.prepareStatement(query);
  +            statement.executeUpdate();
  +            return true;
  +        } catch (SQLException e) {
  +            throw new ServiceAccessException(service, e);
  +        } finally {
  +            close(statement);
  +        }
  +
  +    }
  +
  +    public long nextSequenceValue(Connection conn, String sequenceName) throws ServiceAccessException {
  +        String query = "INSERT INTO " + normalizeSequenceName(sequenceName) + " VALUES(0)";
  +
  +        String selectQuery = "SELECT LAST_INSERT_ID()";
  +
  +        PreparedStatement statement = null;
  +        PreparedStatement selectStatement = null;
  +        ResultSet res = null;
  +
  +        try {
  +            statement = conn.prepareStatement(query);
  +            statement.executeUpdate();
  +
  +            selectStatement = conn.prepareStatement(selectQuery);
  +            res = selectStatement.executeQuery();
  +            if (!res.next()) {
  +                throw new ServiceAccessException(service, "Could not increment sequence " + sequenceName);
  +            }
  +            long value = res.getLong(1);
  +            return value;
  +        } catch (SQLException e) {
  +            throw new ServiceAccessException(service, e);
  +        } finally {
  +            close(statement);
  +            close(selectStatement, res);
  +        }
       }
   
  +    public boolean sequenceExists(Connection conn, String sequenceName) throws ServiceAccessException {
  +
  +        PreparedStatement selectStatement = null;
  +        ResultSet res = null;
  +
  +        try {
  +            selectStatement = conn.prepareStatement("SELECT * FROM " + normalizeSequenceName(sequenceName));
  +            res = selectStatement.executeQuery();
  +            return true;
  +        } catch (SQLException e) {
  +            return false;
  +        } finally {
  +            close(selectStatement, res);
  +        }
  +    }
   
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org