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]