unico 2005/05/18 10:36:09
Modified: src/stores/org/apache/slide/store/impl/rdbms Tag:
SLIDE_2_1_RELEASE_BRANCH PostgresRDBMSAdapter.java
CommonRDBMSAdapter.java StandardRDBMSAdapter.java
Log:
Apply patch from Martin Kal?n: improve SQL performance for revokePermission
also fixing bug 34343
Revision Changes Path
No revision
No revision
1.10.2.4 +14 -6
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.10.2.3
retrieving revision 1.10.2.4
diff -u -r1.10.2.3 -r1.10.2.4
--- PostgresRDBMSAdapter.java 18 May 2005 15:59:50 -0000 1.10.2.3
+++ PostgresRDBMSAdapter.java 18 May 2005 17:36:08 -0000 1.10.2.4
@@ -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;
@@ -244,11 +245,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.4.2.5 +19 -6
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.4.2.4
retrieving revision 1.4.2.5
diff -u -r1.4.2.4 -r1.4.2.5
--- CommonRDBMSAdapter.java 18 May 2005 15:59:50 -0000 1.4.2.4
+++ CommonRDBMSAdapter.java 18 May 2005 17:36:08 -0000 1.4.2.5
@@ -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;
@@ -228,10 +233,18 @@
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" + ((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());
1.32.2.6 +42 -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.32.2.5
retrieving revision 1.32.2.6
diff -u -r1.32.2.5 -r1.32.2.6
--- StandardRDBMSAdapter.java 18 May 2005 15:59:50 -0000 1.32.2.5
+++ StandardRDBMSAdapter.java 18 May 2005 17:36:08 -0000 1.32.2.6
@@ -23,8 +23,35 @@
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.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;
@@ -34,16 +61,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
@@ -578,10 +595,18 @@
NodeRevisionNumber revisionNumber =
permission.getRevisionNumber();
statement =
connection.prepareStatement(
- "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" + ((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]