unico       2005/05/18 10:34:31

  Modified:    src/stores/org/apache/slide/store/impl/rdbms
                        CommonRDBMSAdapter.java PostgresRDBMSAdapter.java
                        StandardRDBMSAdapter.java
  Log:
  Apply patch from Martin Kal�n: improve SQL performance for revokePermission 
also fixing bug 34343
  
  Revision  Changes    Path
  1.12      +19 -13    
jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/CommonRDBMSAdapter.java
  
  Index: CommonRDBMSAdapter.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/CommonRDBMSAdapter.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- CommonRDBMSAdapter.java   18 May 2005 15:58:18 -0000      1.11
  +++ CommonRDBMSAdapter.java   18 May 2005 17:34:30 -0000      1.12
  @@ -23,18 +23,23 @@
   
   package org.apache.slide.store.impl.rdbms;
   
  -import java.io.*;
  +import java.io.File;
  +import java.io.FileInputStream;
  +import java.io.FileOutputStream;
  +import java.io.IOException;
  +import java.io.InputStream;
   import java.sql.Connection;
   import java.sql.PreparedStatement;
   import java.sql.ResultSet;
   import java.sql.SQLException;
  +import java.sql.Types;
   
   import org.apache.slide.common.Service;
   import org.apache.slide.common.ServiceAccessException;
   import org.apache.slide.common.Uri;
  +import org.apache.slide.content.NodeRevisionContent;
   import org.apache.slide.content.NodeRevisionDescriptor;
   import org.apache.slide.content.NodeRevisionNumber;
  -import org.apache.slide.content.NodeRevisionContent;
   import org.apache.slide.lock.LockTokenNotFoundException;
   import org.apache.slide.lock.NodeLock;
   import org.apache.slide.security.NodePermission;
  @@ -226,18 +231,19 @@
           PreparedStatement statement = null;
           try {
               final NodeRevisionNumber revisionNumber = 
permission.getRevisionNumber();
  -            final String versionNoCriteria;
  -            
  -            if (revisionNumber == null) {
  -                versionNoCriteria = "IS NULL";
  -            } else {
  -                versionNoCriteria = "= '" + revisionNumber.toString() + "'";
  -            }
               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 " + versionNoCriteria + ")");
  +                    "delete from PERMISSIONS where (OBJECT_ID, SUBJECT_ID, 
ACTION_ID) IN" +
  +                    " (SELECT ou.URI_ID, su.URI_ID, au.URI_ID FROM URI ou, 
URI su, URI au " +
  +                    " WHERE ou.URI_STRING = ? and su.URI_STRING = ? and 
au.URI_STRING = ?)" +
  +                    " and VERSION_NO = ?");
               statement.setString(1, uri.toString());
               statement.setString(2, permission.getSubjectUri());
               statement.setString(3, permission.getActionUri());
  +            if (revisionNumber == null) {
  +                statement.setNull(4, Types.VARCHAR);
  +            } else {
  +                statement.setString(4, revisionNumber.toString());
  +            }
               statement.executeUpdate();
           } catch (SQLException e) {
               throw createException(e, uri.toString());
  
  
  
  1.17      +14 -8     
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.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- PostgresRDBMSAdapter.java 18 May 2005 15:58:18 -0000      1.16
  +++ PostgresRDBMSAdapter.java 18 May 2005 17:34:30 -0000      1.17
  @@ -27,6 +27,7 @@
   import java.sql.PreparedStatement;
   import java.sql.ResultSet;
   import java.sql.SQLException;
  +import java.sql.Types;
   
   import org.apache.slide.common.Service;
   import org.apache.slide.common.ServiceAccessException;
  @@ -35,9 +36,7 @@
   import org.apache.slide.content.NodeRevisionNumber;
   import org.apache.slide.lock.LockTokenNotFoundException;
   import org.apache.slide.lock.NodeLock;
  -import org.apache.slide.macro.ConflictException;
   import org.apache.slide.security.NodePermission;
  -import org.apache.slide.store.ConcurrencyConflictError;
   import org.apache.slide.structure.ObjectNode;
   import org.apache.slide.structure.ObjectNotFoundException;
   import org.apache.slide.util.logger.Logger;
  @@ -245,11 +244,18 @@
                        NodeRevisionNumber revisionNumber = 
permission.getRevisionNumber();
                        statement =
                                connection.prepareStatement(
  -                                     "delete 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 = ?");
  +                        "delete from PERMISSIONS where (OBJECT_ID, 
SUBJECT_ID, ACTION_ID) IN" +
  +                        " (SELECT ou.URI_ID, su.URI_ID, au.URI_ID FROM URI 
ou, URI su, URI au " +
  +                        " WHERE ou.URI_STRING = ? and su.URI_STRING = ? and 
au.URI_STRING = ?)" +
  +                        " and VERSION_NO = ?");
                        statement.setString(1, uri.toString());
                        statement.setString(2, permission.getSubjectUri());
                        statement.setString(3, permission.getActionUri());
  -            statement.setString(3, revisionNumber.toString());
  +            if (revisionNumber == null) {
  +                statement.setNull(4, Types.VARCHAR);
  +            } else {
  +                statement.setString(4, revisionNumber.toString());
  +            }
                        statement.executeUpdate();
                } catch (SQLException e) {
                        getLogger().log(e, LOG_CHANNEL, Logger.ERROR);
  
  
  
  1.44      +43 -17    
jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/StandardRDBMSAdapter.java
  
  Index: StandardRDBMSAdapter.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/StandardRDBMSAdapter.java,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- StandardRDBMSAdapter.java 18 May 2005 15:58:18 -0000      1.43
  +++ StandardRDBMSAdapter.java 18 May 2005 17:34:30 -0000      1.44
  @@ -23,8 +23,36 @@
   
   package org.apache.slide.store.impl.rdbms;
   
  -import org.apache.slide.common.*;
  -import org.apache.slide.content.*;
  +import java.io.File;
  +import java.io.FileInputStream;
  +import java.io.FileOutputStream;
  +import java.io.IOException;
  +import java.io.InputStream;
  +import java.lang.reflect.Constructor;
  +import java.sql.Connection;
  +import java.sql.PreparedStatement;
  +import java.sql.ResultSet;
  +import java.sql.SQLException;
  +import java.sql.Types;
  +import java.util.Date;
  +import java.util.Enumeration;
  +import java.util.Hashtable;
  +import java.util.Set;
  +import java.util.Vector;
  +
  +import org.apache.slide.common.Service;
  +import org.apache.slide.common.ServiceAccessException;
  +import org.apache.slide.common.ServiceParameterErrorException;
  +import org.apache.slide.common.ServiceParameterMissingException;
  +import org.apache.slide.common.Uri;
  +import org.apache.slide.content.NodeProperty;
  +import org.apache.slide.content.NodeRevisionContent;
  +import org.apache.slide.content.NodeRevisionDescriptor;
  +import org.apache.slide.content.NodeRevisionDescriptors;
  +import org.apache.slide.content.NodeRevisionNumber;
  +import org.apache.slide.content.RevisionAlreadyExistException;
  +import org.apache.slide.content.RevisionDescriptorNotFoundException;
  +import org.apache.slide.content.RevisionNotFoundException;
   import org.apache.slide.lock.LockTokenNotFoundException;
   import org.apache.slide.lock.NodeLock;
   import org.apache.slide.security.NodePermission;
  @@ -35,16 +63,6 @@
   import org.apache.slide.structure.ObjectNotFoundException;
   import org.apache.slide.util.logger.Logger;
   
  -import java.io.*;
  -import java.lang.reflect.Constructor;
  -import java.sql.Connection;
  -import java.sql.PreparedStatement;
  -import java.sql.ResultSet;
  -import java.sql.SQLException;
  -//import java.sql.Statement;
  -import java.util.*;
  -import java.util.Date;
  -
   /**
    * J2EENodeStore Implementation based on the modified NewSlide Schema.
    * This is combined store of DescriptorStore and ContentStore
  @@ -585,10 +603,18 @@
               NodeRevisionNumber revisionNumber = 
permission.getRevisionNumber();
               statement =
                   connection.prepareStatement(
  -                        deleteStatement("PERMISSIONS","p",", URI ou, URI su, 
URI au where p.OBJECT_ID = ou.URI_ID and ou.URI_STRING = ? and p.SUBJECT_ID = 
su.URI_ID and su.URI_STRING = ? and p.ACTION_ID = au.URI_ID and au.URI_STRING = 
? and p.VERSION_NO") + ((revisionNumber == null) ? " IS NULL " : " = '" + 
revisionNumber.toString() + "'"));
  +                        "delete from PERMISSIONS where (OBJECT_ID, 
SUBJECT_ID, ACTION_ID) IN" +
  +                        " (SELECT ou.URI_ID, su.URI_ID, au.URI_ID FROM URI 
ou, URI su, URI au " +
  +                        " WHERE ou.URI_STRING = ? and su.URI_STRING = ? and 
au.URI_STRING = ?)" +
  +                        " and VERSION_NO = ?");
               statement.setString(1, uri.toString());
               statement.setString(2, permission.getSubjectUri());
               statement.setString(3, permission.getActionUri());
  +            if (revisionNumber == null) {
  +                statement.setNull(4, Types.VARCHAR);
  +            } else {
  +                statement.setString(4, revisionNumber.toString());
  +            }
               statement.executeUpdate();
           } catch (SQLException e) {
               throw createException(e, uri.toString());
  
  
  

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

Reply via email to