ozeigermann 2003/11/25 01:19:17
Added: proposals/stores/org/apache/slide/store/impl/rdbms
MySqlSchema.sql MySqlRDBMSAdapter.java
Log:
Added initial (untested) version of adapter for MySQL 4 contributed by Christophe
Lombart.
Submitted by: Christophe Lombart
Revision Changes Path
1.1
jakarta-slide/proposals/stores/org/apache/slide/store/impl/rdbms/MySqlSchema.sql
Index: MySqlSchema.sql
===================================================================
drop table if exists OBJECT;
drop table if exists CHILDREN;
drop table if exists LINKS;
drop table if exists LOCKS;
drop table if exists VERSION_CONTENT;
drop table if exists PROPERTIES;
drop table if exists PERMISSIONS;
drop table if exists VERSION_PREDS;
drop table if exists VERSION_LABELS;
drop table if exists VERSION_HISTORY;
drop table if exists VERSION;
drop table if exists BRANCH;
drop table if exists LABEL;
drop table if exists URI;
CREATE TABLE URI (
URI_ID INTEGER NOT NULL AUTO_INCREMENT,
URI_STRING VARCHAR(255) NOT NULL,
PRIMARY KEY(URI_ID)
) TYPE=INNODB;
CREATE INDEX URI_IX1 ON URI (URI_ID);
CREATE INDEX URI_IX2 ON URI (URI_STRING);
CREATE TABLE OBJECT (
URI_ID INTEGER NOT NULL,
CLASS_NAME VARCHAR(255) NOT NULL,
PRIMARY KEY (URI_ID)
) TYPE=INNODB;
CREATE INDEX OBJECT_IX1 ON OBJECT (URI_ID);
ALTER TABLE OBJECT ADD CONSTRAINT OBJECT_FK1 FOREIGN KEY OBJECT_FK1(URI_ID)
REFERENCES URI (URI_ID);
CREATE TABLE CHILDREN (
URI_ID INTEGER NOT NULL,
CHILD_URI_ID INTEGER NOT NULL,
PRIMARY KEY (URI_ID, CHILD_URI_ID)
) TYPE=INNODB;
CREATE INDEX CHILDREN_IX1 ON CHILDREN (URI_ID);
ALTER TABLE CHILDREN ADD CONSTRAINT CHILDREN_FK1 FOREIGN KEY CHILDREN_FK1(URI_ID)
REFERENCES URI (URI_ID);
CREATE INDEX CHILD_IX2 ON CHILDREN (CHILD_URI_ID);
ALTER TABLE CHILDREN ADD CONSTRAINT CHILDREN_FK2 FOREIGN KEY
CHILDREN_FK2(CHILD_URI_ID) REFERENCES URI (URI_ID);
CREATE TABLE LINKS (
URI_ID INTEGER NOT NULL,
LINK_TO_ID INTEGER NOT NULL,
PRIMARY KEY (URI_ID, LINK_TO_ID)
) TYPE=INNODB;
CREATE INDEX LINK_IX1 ON LINKS (URI_ID);
ALTER TABLE LINKS ADD CONSTRAINT LINK_FK1 FOREIGN KEY LINK_FK1(URI_ID) REFERENCES
URI (URI_ID);
CREATE INDEX LINK_IX2 ON LINKS (LINK_TO_ID);
ALTER TABLE LINKS ADD CONSTRAINT LINK_FK2 FOREIGN KEY LINK_FK2(LINK_TO_ID)
REFERENCES URI (URI_ID);
CREATE TABLE LOCKS (
LOCK_ID INTEGER NOT NULL,
OBJECT_ID INTEGER NOT NULL,
SUBJECT_ID INTEGER NOT NULL,
TYPE_ID INTEGER NOT NULL,
EXPIRATION_DATE DATE NOT NULL,
IS_INHERITABLE INTEGER NOT NULL,
IS_EXCLUSIVE INTEGER NOT NULL,
UNIQUE (LOCK_ID)
)TYPE=INNODB;
CREATE INDEX LOCK_IX1 ON LOCKS (LOCK_ID);
ALTER TABLE LOCKS ADD CONSTRAINT LOCK_FK1 FOREIGN KEY LOCK_FK1(LOCK_ID) REFERENCES
URI (URI_ID);
CREATE INDEX LOCK_IX2 ON LOCKS (OBJECT_ID);
ALTER TABLE LOCKS ADD CONSTRAINT LOCK_FK2 FOREIGN KEY LOCK_FK2(OBJECT_ID) REFERENCES
URI (URI_ID);
CREATE INDEX LOCK_IX3 ON LOCKS (SUBJECT_ID);
ALTER TABLE LOCKS ADD CONSTRAINT LOCK_FK3 FOREIGN KEY LOCK_FK3(SUBJECT_ID)
REFERENCES URI (URI_ID);
CREATE INDEX LOCK_IX4 ON LOCKS (TYPE_ID);
ALTER TABLE LOCKS ADD CONSTRAINT LOCK_FK4 FOREIGN KEY LOCK_FK4(TYPE_ID) REFERENCES
URI (URI_ID);
CREATE TABLE BRANCH (
BRANCH_ID INTEGER NOT NULL AUTO_INCREMENT,
BRANCH_STRING VARCHAR(255) NOT NULL,
PRIMARY KEY (BRANCH_ID)
)TYPE=INNODB;
CREATE TABLE LABEL (
LABEL_ID INTEGER NOT NULL AUTO_INCREMENT,
LABEL_STRING VARCHAR(255) NOT NULL,
PRIMARY KEY (LABEL_ID)
)TYPE=INNODB;
CREATE TABLE VERSION (
URI_ID INTEGER NOT NULL,
IS_VERSIONED INTEGER NOT NULL,
PRIMARY KEY(URI_ID)
)TYPE=INNODB;
CREATE INDEX VERSION_IX1 ON VERSION (URI_ID);
ALTER TABLE VERSION ADD CONSTRAINT REVISON_FK1 FOREIGN KEY VERSION_FK1(URI_ID)
REFERENCES URI (URI_ID);
CREATE TABLE VERSION_HISTORY (
VERSION_ID INTEGER NOT NULL AUTO_INCREMENT,
URI_ID INTEGER NOT NULL,
BRANCH_ID INTEGER NOT NULL,
REVISION_NO VARCHAR(20) NOT NULL,
PRIMARY KEY (VERSION_ID),
UNIQUE(URI_ID, BRANCH_ID, REVISION_NO)
)TYPE=INNODB;
CREATE INDEX VERSION_HISTORY_IX1 ON VERSION_HISTORY (URI_ID);
ALTER TABLE VERSION_HISTORY ADD CONSTRAINT VERSION_HISTORY_FK1 FOREIGN KEY
VERSION_HISTORY_FK1(URI_ID) REFERENCES URI (URI_ID);
CREATE INDEX VERSION_HISTORY_IX2 ON VERSION_HISTORY(BRANCH_ID);
ALTER TABLE VERSION_HISTORY ADD CONSTRAINT VERSION_HISTORY_FK2 FOREIGN KEY
VERSION_HISTORY_FK2(BRANCH_ID) REFERENCES BRANCH (BRANCH_ID);
CREATE TABLE VERSION_PREDS (
VERSION_ID INTEGER NOT NULL,
PREDECESSOR_ID INTEGER NOT NULL,
UNIQUE (VERSION_ID, PREDECESSOR_ID)
)TYPE=INNODB;
CREATE INDEX VERSION_PREDS_IX1 ON VERSION_PREDS (VERSION_ID);
ALTER TABLE VERSION_PREDS ADD CONSTRAINT REVISON_PREDS_FK1 FOREIGN KEY
VERSION_PREDS_FK1(VERSION_ID) REFERENCES VERSION_HISTORY (VERSION_ID);
CREATE INDEX VERSION_PREDS_IX2 ON VERSION_PREDS (PREDECESSOR_ID);
ALTER TABLE VERSION_PREDS ADD CONSTRAINT REVISON_PREDS_FK2 FOREIGN KEY
VERSION_PREDS_FK2(PREDECESSOR_ID) REFERENCES VERSION_HISTORY (VERSION_ID);
CREATE TABLE VERSION_LABELS (
VERSION_ID INTEGER NOT NULL,
LABEL_ID INTEGER NOT NULL,
UNIQUE (VERSION_ID, LABEL_ID)
)TYPE=INNODB;
CREATE INDEX VERSION_LABELS_IX1 ON VERSION_LABELS (VERSION_ID);
ALTER TABLE VERSION_LABELS ADD CONSTRAINT REVISON_LABELS_FK1 FOREIGN KEY
VERSION_LABELS_FK1(VERSION_ID) REFERENCES VERSION_HISTORY (VERSION_ID);
CREATE INDEX VERSION_LABELS_IX2 ON VERSION_LABELS (LABEL_ID);
ALTER TABLE VERSION_LABELS ADD CONSTRAINT REVISON_LABELS_FK2 FOREIGN KEY
VERSION_LABELS_FK2(LABEL_ID) REFERENCES LABEL (LABEL_ID);
CREATE TABLE VERSION_CONTENT (
VERSION_ID INTEGER NOT NULL,
CONTENT BLOB NOT NULL,
UNIQUE(VERSION_ID)
)TYPE=INNODB;
CREATE INDEX VERSION_CONTENT_IX1 ON VERSION_CONTENT (VERSION_ID);
ALTER TABLE VERSION_CONTENT ADD CONSTRAINT REVISON_CONTENT_FK1 FOREIGN KEY
VERSION_CONTENT_FK1(VERSION_ID) REFERENCES VERSION_HISTORY (VERSION_ID);
CREATE TABLE PROPERTIES (
VERSION_ID INTEGER NOT NULL,
PROPERTY_NAMESPACE VARCHAR(50) NOT NULL,
PROPERTY_NAME VARCHAR(50) NOT NULL,
PROPERTY_VALUE VARCHAR(255) NOT NULL,
PROPERTY_TYPE VARCHAR(50) NOT NULL,
IS_PROTECTED INTEGER NOT NULL,
UNIQUE (VERSION_ID, PROPERTY_NAMESPACE, PROPERTY_NAME)
)TYPE=INNODB;
CREATE INDEX PROPERTIES_IX1 ON PROPERTIES (VERSION_ID);
ALTER TABLE PROPERTIES ADD CONSTRAINT PROPERTIES_FK1 FOREIGN KEY
PROPERTIES_FK1(VERSION_ID) REFERENCES VERSION_HISTORY (VERSION_ID);
CREATE TABLE PERMISSIONS (
OBJECT_ID INTEGER NOT NULL,
SUBJECT_ID INTEGER NOT NULL,
ACTION_ID INTEGER NOT NULL,
VERSION_NO VARCHAR(20),
IS_INHERITABLE INTEGER NOT NULL,
IS_NEGATIVE INTEGER NOT NULL,
SUCCESSION INTEGER NOT NULL,
UNIQUE (OBJECT_ID, SUBJECT_ID, ACTION_ID),
UNIQUE (OBJECT_ID, SUCCESSION)
)TYPE=INNODB;
CREATE INDEX PERMISSIONS_IX1 ON PERMISSIONS (OBJECT_ID);
ALTER TABLE PERMISSIONS ADD CONSTRAINT PERMISSIONS_FK1 FOREIGN KEY
PERMISSIONS_FK1(OBJECT_ID) REFERENCES URI (URI_ID);
CREATE INDEX PERMISSIONS_IX2 ON PERMISSIONS (SUBJECT_ID);
ALTER TABLE PERMISSIONS ADD CONSTRAINT PERMISSIONS_FK2 FOREIGN KEY
PERMISSIONS_FK2(SUBJECT_ID) REFERENCES URI (URI_ID);
CREATE INDEX PERMISSIONS_IX3 ON PERMISSIONS (ACTION_ID);
ALTER TABLE PERMISSIONS ADD CONSTRAINT PERMISSIONS_FK3 FOREIGN KEY
PERMISSIONS_FK3(ACTION_ID) REFERENCES URI (URI_ID);
1.1
jakarta-slide/proposals/stores/org/apache/slide/store/impl/rdbms/MySqlRDBMSAdapter.java
Index: MySqlRDBMSAdapter.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-slide/proposals/stores/org/apache/slide/store/impl/rdbms/MySqlRDBMSAdapter.java,v
1.1 2003/11/25 09:19:17 ozeigermann Exp $
* $Revision: 1.1 $
* $Date: 2003/11/25 09:19:17 $
*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Slide", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* [Additional notices, if required by prior licensing conditions]
*
*/
package org.apache.slide.store.impl.rdbms;
import org.apache.slide.common.*;
import org.apache.slide.lock.NodeLock;
import org.apache.slide.util.logger.Logger;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.Date;
/**
* Adapter for MySQL 4.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Christophe Lombart</a>
* @version $Revision: 1.1 $
*/
public class MySqlRDBMSAdapter extends StandardRDBMSAdapter {
protected static final String LOG_CHANNEL = MySqlRDBMSAdapter.class.getName();
public MySqlRDBMSAdapter(Service service, Logger logger) {
super(service, logger);
}
public Enumeration enumerateLocks(Connection connection, Uri uri) throws
ServiceAccessException {
Vector lockVector = new Vector();
PreparedStatement statement = null;
ResultSet res = null;
try {
statement =
connection.prepareStatement(
"select l.EXPIRATION_DATE, l.IS_INHERITABLE, l.IS_EXCLUSIVE,
u2.URI_STRING as LCK, u3.URI_STRING as SUBJECT, u4.URI_STRING as TYPE from LOCKS l,
URI u, URI u2, URI u3, URI u4 where l.OBJECT_ID=u.URI_ID and u.URI_STRING=? and
l.LOCK_ID=u2.URI_ID and l.SUBJECT_ID=u3.URI_ID and l.TYPE_ID = u4.URI_ID");
statement.setString(1, uri.toString());
res = statement.executeQuery();
while (res.next()) {
Date expirationDate = null;
try {
expirationDate = res.getDate("EXPIRATION_DATE");
} catch (NumberFormatException e) {
getLogger().log(e, LOG_CHANNEL, Logger.WARNING);
expirationDate = new Date();
}
NodeLock lock =
new NodeLock(
res.getString("LCK"),
uri.toString(),
res.getString("SUBJECT"),
res.getString("TYPE"),
expirationDate,
res.getInt("IS_INHERITABLE") == 1,
res.getInt("IS_EXCLUSIVE") == 1);
lockVector.addElement(lock);
}
} catch (SQLException e) {
getLogger().log(e, LOG_CHANNEL, Logger.ERROR);
throw new ServiceAccessException(service, e);
} finally {
close(statement, res);
}
return lockVector.elements();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]