You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2009/10/13 12:00:27 UTC
svn commit: r824657 - in /db/derby/code/trunk/java/engine/org/apache/derby:
iapi/sql/execute/ExecPreparedStatement.java
impl/sql/GenericPreparedStatement.java impl/sql/execute/BaseActivation.java
Author: kahatlen
Date: Tue Oct 13 10:00:27 2009
New Revision: 824657
URL: http://svn.apache.org/viewvc?rev=824657&view=rev
Log:
DERBY-3024 (partial) Validation of shared plans hurts scalability
Moved some code that synchronized on a GenericPreparedStatement from
BaseActivation to GenericPreparedStatement for better encapsulation. This
also prevented the code from synchronizing on the same object twice, which
had a positive effect on the performance when the monitor was contented.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/execute/ExecPreparedStatement.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/BaseActivation.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/execute/ExecPreparedStatement.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/execute/ExecPreparedStatement.java?rev=824657&r1=824656&r2=824657&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/execute/ExecPreparedStatement.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/execute/ExecPreparedStatement.java Tue Oct 13 10:00:27 2009
@@ -89,6 +89,27 @@
*/
GeneratedClass getActivationClass() throws StandardException;
+ /**
+ * <p>
+ * Checks whether this PreparedStatement is up to date and its activation
+ * class is identical to the supplied generated class. A call to {@code
+ * upToDate(gc)} is supposed to perform the same work as the following code
+ * in one atomic operation:
+ * </p>
+ *
+ * <pre>
+ * getActivationClass() == gc && upToDate()
+ * </pre>
+ *
+ * @param gc a generated class that must be identical to {@code
+ * getActivationClass()} for this method to return {@code true}
+ * @return {@code true} if this statement is up to date and its activation
+ * class is identical to {@code gc}, {@code false} otherwise
+ * @see PreparedStatement#upToDate()
+ * @see #getActivationClass()
+ */
+ boolean upToDate(GeneratedClass gc) throws StandardException;
+
/**
* Mark the statement as unusable, i.e. the system is
* finished with it and no one should be able to use it.
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java?rev=824657&r1=824656&r2=824657&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java Tue Oct 13 10:00:27 2009
@@ -200,9 +200,29 @@
public synchronized boolean upToDate()
throws StandardException
{
- return isValid && (activationClass != null) && !compilingStatement;
+ return isUpToDate();
}
+ /**
+ * Check whether this statement is up to date and its generated class is
+ * identical to the supplied class object.
+ * @see ExecPreparedStatement#upToDate(GeneratedClass)
+ */
+ public synchronized boolean upToDate(GeneratedClass gc) {
+ return (activationClass == gc) && isUpToDate();
+ }
+
+ /**
+ * Unsynchronized helper method for {@link #upToDate()} and {@link
+ * #upToDate(GeneratedClass)}. Checks whether this statement is up to date.
+ *
+ * @return {@code true} if this statement is up to date, {@code false}
+ * otherwise
+ */
+ private boolean isUpToDate() {
+ return isValid && (activationClass != null) && !compilingStatement;
+ }
+
public void rePrepare(LanguageConnectionContext lcc)
throws StandardException {
if (!upToDate()) {
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/BaseActivation.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/BaseActivation.java?rev=824657&r1=824656&r2=824657&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/BaseActivation.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/BaseActivation.java Tue Oct 13 10:00:27 2009
@@ -267,15 +267,9 @@
public final void checkStatementValidity() throws StandardException {
- if (preStmt == null)
+ if (preStmt == null || preStmt.upToDate(gc))
return;
- synchronized (preStmt) {
-
- if ((gc == preStmt.getActivationClass()) && preStmt.upToDate())
- return;
- }
-
StandardException se = StandardException.newException(SQLState.LANG_STATEMENT_NEEDS_RECOMPILE);
se.setReport(StandardException.REPORT_NEVER);
throw se;