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