ozeigermann    2004/06/07 09:16:32

  Modified:    src/stores/org/apache/slide/store/impl/rdbms
                        PostgresRDBMSAdapter.java
  Log:
  Added Sequence support for Postgres
  
  Revision  Changes    Path
  1.6       +69 -5     
jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/PostgresRDBMSAdapter.java
  
  Index: PostgresRDBMSAdapter.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/PostgresRDBMSAdapter.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- PostgresRDBMSAdapter.java 19 Apr 2004 12:38:18 -0000      1.5
  +++ PostgresRDBMSAdapter.java 7 Jun 2004 16:16:32 -0000       1.6
  @@ -25,6 +25,7 @@
   
   import java.sql.Connection;
   import java.sql.PreparedStatement;
  +import java.sql.ResultSet;
   import java.sql.SQLException;
   
   import org.apache.slide.common.Service;
  @@ -54,11 +55,15 @@
    * @version $Revision$
    */
   
  -public class PostgresRDBMSAdapter extends StandardRDBMSAdapter {
  +public class PostgresRDBMSAdapter extends StandardRDBMSAdapter implements 
SequenceAdapter {
   
        protected static String LOG_CHANNEL =
                PostgresRDBMSAdapter.class.getName();
   
  +    protected static String normalizeSequenceName(String sequenceName) {
  +        return sequenceName.replace('-', '_').toUpperCase() + "_SEQ";
  +    }
  +
        public PostgresRDBMSAdapter(Service service, Logger logger) {
                super(service, logger);
        }
  @@ -335,4 +340,63 @@
                        return new ServiceAccessException(service, e);
                }
        }
  +
  +    public boolean isSequenceSupported(Connection conn) {
  +        return true;
  +    }
  +
  +    public boolean createSequence(Connection conn, String sequenceName) throws 
ServiceAccessException {
  +
  +        String query = "CREATE SEQUENCE " + normalizeSequenceName(sequenceName);
  +
  +        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 selectQuery = "SELECT nextval('" + 
normalizeSequenceName(sequenceName)+"');";
  +
  +        PreparedStatement selectStatement = null;
  +        ResultSet res = null;
  +
  +        try {
  +            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(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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to