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]

Reply via email to