ozeigermann    2004/05/13 00:17:57

  Added:       src/conf/schema OracleSchema.sql
               src/stores/org/apache/slide/store/impl/rdbms
                        OracleRDBMSAdapter.java
  Log:
  Added initial version of Oracle Port donated by 

  Davide Savazzi <[EMAIL PROTECTED]> in

  http://nagoya.apache.org/eyebrowse/[EMAIL PROTECTED]&msgNo=6262
  
  Revision  Changes    Path
  1.1                  jakarta-slide/src/conf/schema/OracleSchema.sql
  
  Index: OracleSchema.sql
  ===================================================================
  
  ALTER SESSION SET SQL_TRACE = TRUE;
  
  DROP TRIGGER "URI-URI_ID-TRG";
  DROP TRIGGER "BRANCH-BRANCH_ID-TRG";
  DROP TRIGGER "LABEL-LABEL_ID-TRG";
  DROP TRIGGER "VERSION_HISTORY-VERSION_ID-TRG";
  
  DROP SEQUENCE "URI-URI_ID-SEQ";
  DROP SEQUENCE "BRANCH-BRANCH_ID-SEQ";
  DROP SEQUENCE "LABEL-LABEL_ID-SEQ";
  DROP SEQUENCE "VERSION_HISTORY-VERSION_ID-SEQ";
  
  DROP TABLE "URI" CASCADE CONSTRAINTS;
  DROP TABLE "OBJECT" CASCADE CONSTRAINTS;
  DROP TABLE "BINDING" CASCADE CONSTRAINTS;
  DROP TABLE "PARENT_BINDING" CASCADE CONSTRAINTS;
  DROP TABLE "LINKS" CASCADE CONSTRAINTS;
  DROP TABLE "LOCKS" CASCADE CONSTRAINTS;
  DROP TABLE "BRANCH" CASCADE CONSTRAINTS;
  DROP TABLE "LABEL" CASCADE CONSTRAINTS;
  DROP TABLE "VERSION" CASCADE CONSTRAINTS;
  DROP TABLE "VERSION_HISTORY" CASCADE CONSTRAINTS;
  DROP TABLE "VERSION_PREDS" CASCADE CONSTRAINTS;
  DROP TABLE "VERSION_LABELS" CASCADE CONSTRAINTS;
  DROP TABLE "VERSION_CONTENT" CASCADE CONSTRAINTS;
  DROP TABLE "PROPERTIES" CASCADE CONSTRAINTS;
  DROP TABLE "PERMISSIONS" CASCADE CONSTRAINTS;
  
  
  // path max length: 2500
  
  CREATE TABLE "URI" (
        "URI_ID" NUMBER(10) NOT NULL,
        "URI_STRING" VARCHAR2(2500) NOT NULL,
        PRIMARY KEY("URI_ID"),
        UNIQUE("URI_STRING")
  ) CACHE NOLOGGING;
  
  CREATE TABLE "OBJECT" (
        "URI_ID" NUMBER(10),
        "CLASS_NAME" VARCHAR2(255) NOT NULL,
        PRIMARY KEY("URI_ID"),
        FOREIGN KEY("URI_ID") REFERENCES "URI"("URI_ID")
  ) CACHE NOLOGGING;
  
  // node name max length: 512
  
  CREATE TABLE "BINDING" (
        "URI_ID" NUMBER(10) NOT NULL,
        "NAME" VARCHAR2(512) NOT NULL,
        "CHILD_UURI_ID" NUMBER(10) NOT NULL,
        PRIMARY KEY("URI_ID", "NAME", "CHILD_UURI_ID"),
        FOREIGN KEY("URI_ID") REFERENCES "URI"("URI_ID"),
        FOREIGN KEY("CHILD_UURI_ID") REFERENCES "URI"("URI_ID")
  ) CACHE NOLOGGING;
  
  CREATE TABLE "PARENT_BINDING" (
        "URI_ID" NUMBER(10) NOT NULL,
        "NAME" VARCHAR2(512) NOT NULL,
        "PARENT_UURI_ID" NUMBER(10) NOT NULL,
        PRIMARY KEY("URI_ID", "NAME", "PARENT_UURI_ID"),
        FOREIGN KEY("URI_ID") REFERENCES "URI"("URI_ID"),
        FOREIGN KEY("PARENT_UURI_ID") REFERENCES "URI"("URI_ID")
  ) CACHE NOLOGGING;
  
  CREATE TABLE "LINKS" (
        "URI_ID" NUMBER(10) NOT NULL,
        "LINK_TO_ID" NUMBER(10) NOT NULL,
        PRIMARY KEY("URI_ID", "LINK_TO_ID"),
        FOREIGN KEY("URI_ID") REFERENCES "URI"("URI_ID"),
        FOREIGN KEY("LINK_TO_ID") REFERENCES "URI"("URI_ID")
  ) CACHE NOLOGGING;
  
  CREATE TABLE "LOCKS" (
        "LOCK_ID" NUMBER(10) NOT NULL, 
        "OBJECT_ID" NUMBER(10) NOT NULL, 
        "SUBJECT_ID" NUMBER(10) NOT NULL, 
        "TYPE_ID" NUMBER(10) NOT NULL, 
        "EXPIRATION_DATE" NUMBER(14) NOT NULL,
        "IS_INHERITABLE" NUMBER(1) NOT NULL, 
        "IS_EXCLUSIVE" NUMBER(1) NOT NULL, 
        "OWNER" VARCHAR2(512), 
        PRIMARY KEY("LOCK_ID"), 
        FOREIGN KEY("LOCK_ID") REFERENCES "URI"("URI_ID"),
        FOREIGN KEY("OBJECT_ID") REFERENCES "URI"("URI_ID"),
        FOREIGN KEY("SUBJECT_ID") REFERENCES "URI"("URI_ID"),
        FOREIGN KEY("TYPE_ID") REFERENCES "URI"("URI_ID")
  ) CACHE NOLOGGING;
  
  CREATE TABLE "BRANCH" (
        "BRANCH_ID" NUMBER(10) NOT NULL, 
        "BRANCH_STRING" VARCHAR2(512) NOT NULL, 
        PRIMARY KEY("BRANCH_ID"), 
        UNIQUE("BRANCH_STRING")
  ) CACHE NOLOGGING;
  
  CREATE TABLE "LABEL" (
        "LABEL_ID" NUMBER(10) NOT NULL, 
        "LABEL_STRING" VARCHAR2(512) NOT NULL, 
        PRIMARY KEY("LABEL_ID")
  ) CACHE NOLOGGING;
  
  CREATE TABLE "VERSION" (
        "URI_ID" NUMBER(10) NOT NULL, 
        "IS_VERSIONED" NUMBER(1) NOT NULL, 
        PRIMARY KEY("URI_ID"), 
        FOREIGN KEY("URI_ID") REFERENCES "URI"("URI_ID")
  ) CACHE NOLOGGING;
  
  CREATE TABLE "VERSION_HISTORY" (
        "VERSION_ID" NUMBER(10) NOT NULL, 
        "URI_ID" NUMBER(10) NOT NULL, 
        "BRANCH_ID" NUMBER(10) NOT NULL, 
        "REVISION_NO" VARCHAR2(20) NOT NULL, 
        PRIMARY KEY("VERSION_ID"), 
        UNIQUE("URI_ID", "BRANCH_ID", "REVISION_NO"), 
        FOREIGN KEY("URI_ID") REFERENCES "URI"("URI_ID"), 
        FOREIGN KEY("BRANCH_ID") REFERENCES "BRANCH"("BRANCH_ID")
  ) CACHE NOLOGGING;
  
  CREATE TABLE "VERSION_PREDS" (
        "VERSION_ID" NUMBER(10) NOT NULL, 
        "PREDECESSOR_ID" NUMBER(10) NOT NULL, 
        FOREIGN KEY("VERSION_ID") REFERENCES "VERSION_HISTORY"("VERSION_ID"), 
        FOREIGN KEY("PREDECESSOR_ID") REFERENCES "VERSION_HISTORY"("VERSION_ID"), 
        UNIQUE("VERSION_ID", "PREDECESSOR_ID")
  ) CACHE NOLOGGING;
  
  CREATE TABLE "VERSION_LABELS" (
        "VERSION_ID" NUMBER(10) NOT NULL, 
        "LABEL_ID" NUMBER(10) NOT NULL, 
        UNIQUE("VERSION_ID", "LABEL_ID"), 
        FOREIGN KEY("VERSION_ID") REFERENCES "VERSION_HISTORY"("VERSION_ID"), 
        FOREIGN KEY("LABEL_ID") REFERENCES "LABEL"("LABEL_ID")
  ) CACHE NOLOGGING;
  
  CREATE TABLE "VERSION_CONTENT" (
        "VERSION_ID" NUMBER(10) NOT NULL, 
        "CONTENT" BLOB, 
        PRIMARY KEY("VERSION_ID"), 
        FOREIGN KEY("VERSION_ID") REFERENCES "VERSION_HISTORY"("VERSION_ID")
  ) CACHE NOLOGGING
  LOB ("CONTENT") STORE AS (NOCACHE NOLOGGING STORAGE(MAXEXTENTS UNLIMITED));
  
  CREATE TABLE "PROPERTIES" (
        "VERSION_ID" NUMBER(10) NOT NULL, 
        "PROPERTY_NAMESPACE" VARCHAR2(50) NOT NULL, 
        "PROPERTY_NAME" VARCHAR2(50) NOT NULL, 
        "PROPERTY_VALUE" VARCHAR2(255), 
        "PROPERTY_TYPE" VARCHAR2(50),
        "IS_PROTECTED" NUMBER(1) NOT NULL, 
        UNIQUE("VERSION_ID", "PROPERTY_NAMESPACE", "PROPERTY_NAME"), 
        FOREIGN KEY("VERSION_ID") REFERENCES "VERSION_HISTORY"("VERSION_ID")
  ) CACHE NOLOGGING;
        
  CREATE TABLE "PERMISSIONS" (
        "OBJECT_ID" NUMBER(10) NOT NULL, 
        "SUBJECT_ID" NUMBER(10) NOT NULL, 
        "ACTION_ID" NUMBER(10) NOT NULL, 
        "VERSION_NO" VARCHAR2(20), 
        "IS_INHERITABLE" NUMBER(1) NOT NULL, 
        "IS_NEGATIVE" NUMBER(1) NOT NULL, 
        "SUCCESSION" NUMBER(10) NOT NULL, 
        FOREIGN KEY("OBJECT_ID") REFERENCES "URI"("URI_ID"), 
        FOREIGN KEY("SUBJECT_ID") REFERENCES "URI"("URI_ID"), 
        FOREIGN KEY("ACTION_ID") REFERENCES "URI"("URI_ID"), 
        UNIQUE("OBJECT_ID", "SUBJECT_ID", "ACTION_ID"), 
        UNIQUE("OBJECT_ID", "SUCCESSION")
  ) CACHE NOLOGGING;
  
  CREATE SEQUENCE "URI-URI_ID-SEQ" START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
  CREATE SEQUENCE "BRANCH-BRANCH_ID-SEQ" START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
  CREATE SEQUENCE "LABEL-LABEL_ID-SEQ" START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
  CREATE SEQUENCE "VERSION_HISTORY-VERSION_ID-SEQ" START WITH 1 INCREMENT BY 1 NOCACHE 
NOCYCLE;
  
  CREATE TRIGGER "URI-URI_ID-TRG" BEFORE INSERT ON "URI" FOR EACH ROW 
  BEGIN 
  SELECT "URI-URI_ID-SEQ".nextval INTO :new.URI_ID from dual; 
  END;
  /
  
  CREATE TRIGGER "BRANCH-BRANCH_ID-TRG" BEFORE INSERT ON "BRANCH" FOR EACH ROW 
  BEGIN 
  SELECT "BRANCH-BRANCH_ID-SEQ".nextval INTO :new.BRANCH_ID from dual; 
  END;
  /
  
  CREATE TRIGGER "LABEL-LABEL_ID-TRG" BEFORE INSERT ON "LABEL" FOR EACH ROW 
  BEGIN 
  SELECT "LABEL-LABEL_ID-SEQ".nextval INTO :new.LABEL_ID from dual; 
  END;
  /
  
  CREATE TRIGGER "VERSION_HISTORY-VERSION_ID-TRG" BEFORE INSERT ON "VERSION_HISTORY" 
FOR EACH ROW 
  BEGIN 
  SELECT "VERSION_HISTORY-VERSION_ID-SEQ".nextval INTO :new.VERSION_ID from dual; 
  END;
  /
  
  
  
  1.1                  
jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/OracleRDBMSAdapter.java
  
  Index: OracleRDBMSAdapter.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/OracleRDBMSAdapter.java,v
 1.1 2004/05/13 07:17:57 ozeigermann Exp $
   * $Revision: 1.1 $
   * $Date: 2004/05/13 07:17:57 $
   *
   * ====================================================================
   *
   * Copyright 1999-2003 The Apache Software Foundation 
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   */
  
  package org.apache.slide.store.impl.rdbms;
  
  import org.apache.slide.common.*;
  import org.apache.slide.content.*;
  import org.apache.slide.lock.LockTokenNotFoundException;
  import org.apache.slide.lock.NodeLock;
  import org.apache.slide.security.NodePermission;
  import org.apache.slide.structure.LinkNode;
  import org.apache.slide.structure.ObjectAlreadyExistsException;
  import org.apache.slide.structure.ObjectNode;
  import org.apache.slide.structure.ObjectNotFoundException;
  import org.apache.slide.util.logger.Logger;
  
  import java.io.*;
  //import java.util.zip.GZIPOutputStream;
  //import java.util.zip.GZIPInputStream;
  import java.sql.*;
  import java.util.*;
  
  
  /**
   * @todo compression support
   *
   * @author Davide Savazzi
   */
  public class OracleRDBMSAdapter extends StandardRDBMSAdapter {
      
      // Constructor
      
      public OracleRDBMSAdapter(Service service, Logger logger) {
          super(service, logger);
      }
      
  
      // Public Methods
      
      public void removeObject(Connection connection, Uri uri, ObjectNode object)
          throws ServiceAccessException, ObjectNotFoundException 
      {
          PreparedStatement statement = null;
          try {
              clearBinding(connection, uri);
  
              // delete links
              try {
                  statement =
                      connection.prepareStatement(
                          "delete from LINKS l where l.URI_ID in (" + 
                          "select u.URI_ID from URI u where u.URI_STRING = ?)");
                  statement.setString(1, uri.toString());
                  statement.executeUpdate();
              } finally {
                  close(statement);
              }
              // delete version history
              // FIXME: Is this true??? Should the version history be removed if the 
object is removed???
              try {
                  statement =
                      connection.prepareStatement(
                          "delete from VERSION_HISTORY vh where vh.URI_ID in (" + 
                          "select u.URI_ID from URI u where u.URI_STRING = ?)");
                  statement.setString(1, uri.toString());
                  statement.executeUpdate();
              } finally {
                  close(statement);
              }
              // delete version
              try {
                  statement =
                      connection.prepareStatement(
                          "delete from VERSION v where v.URI_ID in (" + 
                          "select u.URI_ID from URI u where u.URI_STRING = ?)");
                  statement.setString(1, uri.toString());
                  statement.executeUpdate();
              } finally {
                  close(statement);
              }
              // delete the object itself
              try {
                  statement =
                      connection.prepareStatement(
                          "delete from OBJECT o where o.URI_ID in (" +
                          "select u.URI_ID from URI u where u.URI_STRING = ?)");
                  statement.setString(1, uri.toString());
                  statement.executeUpdate();
              } finally {
                  close(statement);
              }
              // finally delete the uri
              try {
                  statement = connection.prepareStatement("delete from URI where 
URI_STRING = ?");
                  statement.setString(1, uri.toString());
                  statement.executeUpdate();
              } finally {
                  close(statement);
              }
          } catch (SQLException e) {
              throw createException(e, uri.toString());
  
          }
      }
      
      public void removeRevisionContent(Connection connection, Uri uri, 
NodeRevisionDescriptor revisionDescriptor)
          throws ServiceAccessException {
          try {
              PreparedStatement statement = null;
              try {
                  statement =
                      connection.prepareStatement(
                          "delete from VERSION_CONTENT vc where vc.VERSION_ID in (" + 
                          "select vh.VERSION_ID from VERSION_HISTORY vh, URI u where 
vh.REVISION_NO = ? and vh.URI_ID=u.URI_ID AND u.URI_STRING=?)");
                          // "delete VERSION_CONTENT from VERSION_CONTENT vc, 
VERSION_HISTORY vh, URI u where vc.VERSION_ID = vh.VERSION_ID and vh.REVISION_NO = ? 
and vh.URI_ID=u.URI_ID AND u.URI_STRING=?");
                  statement.setString(1, 
revisionDescriptor.getRevisionNumber().toString());
                  statement.setString(2, uri.toString());
                  statement.executeUpdate();
              } finally {
                  close(statement);
              }
          } catch (SQLException e) {
              throw createException(e, uri.toString());
          }
      }
      
      public void removeRevisionDescriptors(Connection connection, Uri uri) throws 
ServiceAccessException {
          PreparedStatement statement = null;
          try {
              statement =
                  connection.prepareStatement(
                  "delete from VERSION_PREDS vp where vp.VERSION_ID in (" + 
                  "select vh.VERSION_ID from VERSION_HISTORY vh, URI u where vh.URI_ID 
= u.URI_ID and u.URI_STRING = ?)");
                  // "delete VERSION_PREDS from VERSION_PREDS vp, VERSION_HISTORY vh, 
URI u where vp.VERSION_ID = vh.VERSION_ID and vh.URI_ID = u.URI_ID and u.URI_STRING = 
?");
              statement.setString(1, uri.toString());
              statement.executeUpdate();
          } catch (SQLException e) {
              throw createException(e, uri.toString());
          } finally {
              close(statement);
          }
      }
  
      public void removeRevisionDescriptor(Connection connection, Uri uri, 
NodeRevisionNumber revisionNumber)
          throws ServiceAccessException 
      {
          PreparedStatement statement = null;
          try {
              try {
                  statement =
                      connection.prepareStatement(
                          "delete from VERSION_LABELS vl where vl.VERSION_ID in (" + 
                          "select vh.VERSION_ID from VERSION_HISTORY vh, URI u where 
vh.REVISION_NO = ? and vh.URI_ID = u.URI_ID AND u.URI_STRING = ?)");
                          // "delete VERSION_LABELS from VERSION_LABELS vl, 
VERSION_HISTORY vh, URI u where vl.VERSION_ID = vh.VERSION_ID and vh.REVISION_NO = ? 
and vh.URI_ID = u.URI_ID AND u.URI_STRING = ?");
                  statement.setString(1, revisionNumber.toString());
                  statement.setString(2, uri.toString());
                  statement.executeUpdate();
              } finally {
                  close(statement);
              }
              try {
                  statement =
                      connection.prepareStatement(
                          "delete from PROPERTIES p where p.VERSION_ID in (" + 
                          "select vh.VERSION_ID from VERSION_HISTORY vh, URI u where 
vh.REVISION_NO = ? and vh.URI_ID = u.URI_ID AND u.URI_STRING = ?)");
                          // "delete PROPERTIES from PROPERTIES p, VERSION_HISTORY vh, 
URI u where p.VERSION_ID = vh.VERSION_ID and vh.REVISION_NO = ? and vh.URI_ID = 
u.URI_ID AND u.URI_STRING = ?");
                  statement.setString(1, revisionNumber.toString());
                  statement.setString(2, uri.toString());
                  statement.executeUpdate();
              } finally {
                  close(statement);
              }
          } catch (SQLException e) {
              throw createException(e, uri.toString());
          }
      }
      
      public void removeLock(Connection connection, Uri uri, NodeLock lock)
          throws ServiceAccessException, LockTokenNotFoundException {
          PreparedStatement statement = null;
          try {
              // FIXME: What about inheritage?
              try {
                  statement =
                      connection.prepareStatement(
                          "delete from LOCKS where LOCKS.LOCK_ID in (select u.URI_ID 
from URI u where u.URI_STRING=?)");
                          // "delete LOCKS from LOCKS, URI u where LOCK_ID = u.URI_ID 
and u.URI_STRING=?");
                  statement.setString(1, lock.getLockId());
                  statement.executeUpdate();
              } finally {
                  close(statement);
              }
              try {
                  statement =
                      connection.prepareStatement(
                          "delete from URI where URI.URI_ID in (select LOCK_ID from 
LOCKS) and URI_STRING=?");
                          // "delete URI from URI, LOCKS l where URI_ID = l.LOCK_ID 
and URI_STRING=?");
                  statement.setString(1, lock.getLockId());
                  statement.executeUpdate();
              } finally {
                  close(statement);
              }
          } catch (SQLException e) {
              throw createException(e, uri.toString());
          }
      }
      
      public void revokePermission(Connection connection, Uri uri, NodePermission 
permission)
          throws ServiceAccessException {
          PreparedStatement statement = null;
          try {
              NodeRevisionNumber revisionNumber = permission.getRevisionNumber();
              statement =
                  connection.prepareStatement(
                      "delete from PERMISSIONS where PERMISSIONS.OBJECT_ID in (select 
ou.URI_ID from URI ou, URI su, URI au where ou.URI_STRING = ? and SUBJECT_ID = 
su.URI_ID and su.URI_STRING = ? and ACTION_ID = au.URI_ID and au.URI_STRING = ? and 
VERSION_NO"
                          + getRevisionNumberAsWhereQueryFragement(revisionNumber) + 
")");
  //                    "delete PERMISSIONS from PERMISSIONS, URI ou, URI su, URI au 
where OBJECT_ID = ou.URI_ID and ou.URI_STRING = ? and SUBJECT_ID = su.URI_ID and 
su.URI_STRING = ? and ACTION_ID = au.URI_ID and au.URI_STRING = ? and VERSION_NO"
  //                        + getRevisionNumberAsWhereQueryFragement(revisionNumber));
              statement.setString(1, permission.getObjectUri());
              statement.setString(2, permission.getSubjectUri());
              statement.setString(3, permission.getActionUri());
              statement.executeUpdate();
          } catch (SQLException e) {
              throw createException(e, uri.toString());
          } finally {
              close(statement);
          }
      }
  
      public void revokePermissions(Connection connection, Uri uri) throws 
ServiceAccessException {
          PreparedStatement statement = null;
          try {
              statement =
                  connection.prepareStatement(
                      "delete from PERMISSIONS where PERMISSIONS.OBJECT_ID in (select 
u.URI_ID from URI u where u.URI_STRING = ?)");
                      // "delete PERMISSIONS from PERMISSIONS, URI u where OBJECT_ID = 
u.URI_ID and u.URI_STRING = ?");
              statement.setString(1, uri.toString());
              statement.executeUpdate();
          } catch (SQLException e) {
              throw createException(e, uri.toString());
          } finally {
              close(statement);
          }
      }
      
      
      // Private Methods
      
      protected void storeContent(
          Connection connection,
          Uri uri,
          NodeRevisionDescriptor revisionDescriptor,
          NodeRevisionContent revisionContent)
          throws IOException, SQLException 
      {
          getLogger().log("storeContent: " + uri, Logger.DEBUG);
          
          assureVersionInfo(connection, uri, revisionDescriptor);
          long versionContentId = getVersionContentId(connection, uri, 
revisionDescriptor);
          insertEmptyContent(connection, versionContentId);
          
          PreparedStatement statement = connection.prepareStatement(
              "SELECT vc.CONTENT FROM VERSION_CONTENT vc WHERE vc.VERSION_ID = ? FOR 
UPDATE");
          try {
              statement.setLong(1, versionContentId);
              ResultSet res = statement.executeQuery();
              try {
                  res.next();
                  Blob blob = res.getBlob(1);
                  InputStream in = revisionContent.streamContent();
  //                OutputStream out = new GZIPOutputStream(
  //                    ((oracle.sql.BLOB) blob).getBinaryOutputStream());
                  OutputStream out = ((oracle.sql.BLOB) blob).getBinaryOutputStream();
                  
                  try {
                      copy(in, out, ((oracle.sql.BLOB) blob).getBufferSize());
                  } finally {
                      close(out);
                  }
              } finally {
                  close(res);
              }
          }  finally {
              close(statement);
          }
      }
      
      protected void clearBinding(Connection connection, Uri uri)
          throws ServiceAccessException, ObjectNotFoundException, SQLException 
      {
          PreparedStatement statement = null;
  
          try {
              statement =
                  connection.prepareStatement(
                      "delete from BINDING where BINDING.URI_ID in (select URI_ID from 
URI where URI.URI_STRING = ?)");
                      // "delete BINDING from BINDING c, URI u where c.URI_ID = 
u.URI_ID and u.URI_STRING = ?");
              statement.setString(1, uri.toString());
              statement.executeUpdate();
          } finally {
              close(statement);
          }
  
          try {
              statement =
                  connection.prepareStatement(
                      "delete from PARENT_BINDING where PARENT_BINDING.URI_ID in 
(select URI_ID from URI where URI.URI_STRING = ?)");
                      // "delete PARENT_BINDING from PARENT_BINDING c, URI u where 
c.URI_ID = u.URI_ID and u.URI_STRING = ?");
              statement.setString(1, uri.toString());
              statement.executeUpdate();
          } finally {
              close(statement);
          }
      }
      
      protected ServiceAccessException createException(SQLException sqle, String uri) {
          if (getLogger().isEnabled(Logger.DEBUG)) {
              sqle.printStackTrace();
          }
          return new ServiceAccessException(service, sqle);
      }
      
      private long getVersionContentId(Connection connection, Uri uri, 
NodeRevisionDescriptor revisionDescriptor) 
          throws SQLException 
      {
          PreparedStatement statement = connection.prepareStatement(
              "select vh.VERSION_ID from VERSION_HISTORY vh, URI u " + 
              "where vh.URI_ID = u.URI_ID and u.URI_STRING = ? and vh.REVISION_NO"
              + 
getRevisionNumberAsWhereQueryFragement(revisionDescriptor.getRevisionNumber()));
          try {
              statement.setString(1, uri.toString());
              ResultSet res = statement.executeQuery();
              try {
                  res.next();
                  return res.getLong(1);
              } finally {
                  close(res);
              }
          } finally {
              close(statement);
          }
      }
      
      private void insertEmptyContent(Connection connection, long versionContentId) 
          throws SQLException 
      {
          PreparedStatement statement = connection.prepareStatement(
              "insert into VERSION_CONTENT (VERSION_ID, CONTENT) values (?, 
EMPTY_BLOB())");
          try {
              statement.setLong(1, versionContentId);
              statement.executeUpdate();
          } finally {
              close(statement);
          }
      }
      
      private void close(ResultSet resultSet) {
          try {
              if (resultSet != null) {
                  resultSet.close();
              }
          } catch (SQLException e) {
              getLogger().log(e, LOG_CHANNEL, Logger.WARNING);
          }
      }
      
      private void close(InputStream in) {
          try {
              if (in != null) {
                  in.close();
              }
          } catch (IOException e) {
              getLogger().log(e, LOG_CHANNEL, Logger.WARNING);
          }
      }
      
      private void close(OutputStream out) {
          try {
              if (out != null) {
                  out.close();
              }
          } catch (IOException e) {
              getLogger().log(e, LOG_CHANNEL, Logger.WARNING);
          }
      }
      
      private static void copy(InputStream in, OutputStream out, int bufferSize) 
          throws IOException 
      {
          int read = 0;
          byte buffer[] = new byte[bufferSize];
          while ((read = in.read(buffer, 0, bufferSize)) != -1) {
              out.write(buffer, 0, read);
          }
      }
      
  }
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to