db-derby-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bakk...@apache.org
Subject svn commit: r329187 [10/66] - in /db/derby/code/trunk: ./ frameworks/NetworkServer/ frameworks/NetworkServer/bin/ frameworks/embedded/bin/ java/build/ java/build/org/apache/derbyBuild/ java/build/org/apache/derbyBuild/eclipse/ java/build/org/apache/der...
Date Fri, 28 Oct 2005 12:52:21 GMT
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/CompressSpacePageOperation.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/CompressSpacePageOperation.java?rev=329187&r1=329186&r2=329187&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/CompressSpacePageOperation.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/CompressSpacePageOperation.java Fri Oct 28 04:51:50 2005
@@ -1,222 +1,222 @@
-/*
-
-   Derby - Class org.apache.derby.impl.store.raw.data.ChainAllocPageOperation
-
-   Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
-
-   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.derby.impl.store.raw.data;
-
-import org.apache.derby.impl.store.raw.data.PhysicalPageOperation;
-import org.apache.derby.impl.store.raw.data.BasePage;
-
-import org.apache.derby.iapi.services.io.FormatIdUtil;
-import org.apache.derby.iapi.services.io.StoredFormatIds;
-import org.apache.derby.iapi.services.sanity.SanityManager;
-
-import org.apache.derby.iapi.error.StandardException;
-import org.apache.derby.iapi.store.raw.ContainerHandle;
-import org.apache.derby.iapi.store.raw.data.RawContainerHandle;
-import org.apache.derby.iapi.store.raw.Transaction;
-import org.apache.derby.iapi.store.raw.log.LogInstant;
-
-import org.apache.derby.iapi.services.io.CompressedNumber;
-
-import java.io.OutputStream;
-import java.io.ObjectOutput;
-import java.io.IOException;
-import org.apache.derby.iapi.services.io.LimitObjectInput;
-import java.io.ObjectInput;
-
-
-/**
-
-Log operation to implement compressing space from a container and returning
-it to the operating system.
-
-**/
-
-public final class CompressSpacePageOperation extends PhysicalPageOperation
-{
-    /**************************************************************************
-     * Fields of the class
-     **************************************************************************
-     */
-
-    /**
-     * The new highest page on this allocation page.  The number is the
-     * offset of the page in the array of pages maintained by this 
-     * allocation page, for instance a value of 0 indicates all page except
-     * the first one are to be truncated.  If all pages are truncated then 
-     * the offset is set to -1.
-     **/
-	protected int newHighestPage;	    
-
-    /**
-     * The number of allocated pages in this allocation page prior to 
-     * the truncate.  Note that all pages from NewHighestPage+1 through
-     * newHighestPage+num_pages_truncated should be FREE.
-     **/
-	protected int num_pages_truncated; 
-
-    /**************************************************************************
-     * Constructors for This class:
-     **************************************************************************
-     */
-	public CompressSpacePageOperation(
-    AllocPage   allocPage, 
-    int         highest_page, 
-    int         num_truncated)
-		 throws StandardException
-	{
-		super(allocPage);
-
-        newHighestPage      = highest_page;
-        num_pages_truncated = num_truncated;
-	}
-	
-    /**************************************************************************
-     * Public Methods of Formatable interface.
-     **************************************************************************
-     */
-
-	// no-arg constructor, required by Formatable 
-	public CompressSpacePageOperation() { super(); }
-
-	public void writeExternal(ObjectOutput out) throws IOException 
-	{
-		super.writeExternal(out);
-		CompressedNumber.writeInt(out, newHighestPage);
-		CompressedNumber.writeInt(out, num_pages_truncated);
-	}
-
-	/**
-		@exception IOException error reading from log stream
-		@exception ClassNotFoundException cannot read object from input
-	*/
-	public void readExternal(ObjectInput in)
-		 throws IOException, ClassNotFoundException
-	{
-		super.readExternal(in);
-		newHighestPage      = CompressedNumber.readInt(in);
-		num_pages_truncated = CompressedNumber.readInt(in);
-	}
-
-	/**
-		Return my format identifier.
-	*/
-	public int getTypeFormatId() {
-		return StoredFormatIds.LOGOP_COMPRESS_SPACE;
-	}
-
-    /**************************************************************************
-     * Public Methods of Loggable interface.
-     **************************************************************************
-     */
-
-    /**
-     * Compress space from container.
-     * <p>
-     * Compress the indicate space from the container, returning the free
-     * pages to the OS.  Update the allocation page to reflect the file
-     * change.
-     *
-     * @param tran      transaction doing the operation.
-     * @param instant   log instant for this operation.
-     * @param in        unused by this log operation.
-     *
-	 * @exception  StandardException  Standard exception policy.
-     **/
-	public final void doMe(
-    Transaction         tran, 
-    LogInstant          instant, 
-    LimitObjectInput    in) 
-		 throws StandardException
-	{
-		if (SanityManager.DEBUG) 
-        {
-			SanityManager.ASSERT(this.page instanceof AllocPage);
-		}
-
-		((AllocPage)page).compressSpace(
-             instant, newHighestPage, num_pages_truncated);
-	}
-
-    /**************************************************************************
-     * Public Methods of Undoable interface.
-     **************************************************************************
-     */
-
-    /**
-     * Compress space undo.
-     * <p>
-     *
-	 * @exception StandardException Thrown by methods I call 
-     * @see PhysicalPageOperation#undoMe
-     **/
-	public void undoMe(
-    Transaction         xact, 
-    BasePage            undoPage, 
-    LogInstant          CLRInstant, 
-    LimitObjectInput    in)
-		 throws StandardException
-	{
-		if (SanityManager.DEBUG) 
-        {
-			SanityManager.ASSERT(undoPage != null, "undo Page null");
-			SanityManager.ASSERT(
-                undoPage instanceof AllocPage, 
-				"undo Page is not an allocPage");
-		}
-
-		((AllocPage)undoPage).undoCompressSpace(
-             CLRInstant, newHighestPage, num_pages_truncated);
-	}
-
-	/*
-	 * method to support BeforeImageLogging
-	 */
-	public void restoreMe(
-    Transaction         xact, 
-    BasePage            undoPage, 
-    LogInstant          CLRinstant, 
-    LimitObjectInput    in)
-	{
-		// nobody should be calling this since there is no corresponding 
-        // BI operation.
-		if (SanityManager.DEBUG)
-			SanityManager.THROWASSERT(
-                "cannot call restoreMe on CompressSpaceOperation.");
-	}
-
-
-	/** debug */
-	public String toString()
-	{
-		if (SanityManager.DEBUG)
-		{
-			String str = super.toString();
-			str += " CompressSpaceOperation: " + 
-                "newHighestPage = " + newHighestPage +
-                ";num_pages_truncated = " + num_pages_truncated +
-				" to " + getPageId();
-
-			return str;
-		}
-		else
-			return null;
-	}
-}
+/*
+
+   Derby - Class org.apache.derby.impl.store.raw.data.ChainAllocPageOperation
+
+   Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+   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.derby.impl.store.raw.data;
+
+import org.apache.derby.impl.store.raw.data.PhysicalPageOperation;
+import org.apache.derby.impl.store.raw.data.BasePage;
+
+import org.apache.derby.iapi.services.io.FormatIdUtil;
+import org.apache.derby.iapi.services.io.StoredFormatIds;
+import org.apache.derby.iapi.services.sanity.SanityManager;
+
+import org.apache.derby.iapi.error.StandardException;
+import org.apache.derby.iapi.store.raw.ContainerHandle;
+import org.apache.derby.iapi.store.raw.data.RawContainerHandle;
+import org.apache.derby.iapi.store.raw.Transaction;
+import org.apache.derby.iapi.store.raw.log.LogInstant;
+
+import org.apache.derby.iapi.services.io.CompressedNumber;
+
+import java.io.OutputStream;
+import java.io.ObjectOutput;
+import java.io.IOException;
+import org.apache.derby.iapi.services.io.LimitObjectInput;
+import java.io.ObjectInput;
+
+
+/**
+
+Log operation to implement compressing space from a container and returning
+it to the operating system.
+
+**/
+
+public final class CompressSpacePageOperation extends PhysicalPageOperation
+{
+    /**************************************************************************
+     * Fields of the class
+     **************************************************************************
+     */
+
+    /**
+     * The new highest page on this allocation page.  The number is the
+     * offset of the page in the array of pages maintained by this 
+     * allocation page, for instance a value of 0 indicates all page except
+     * the first one are to be truncated.  If all pages are truncated then 
+     * the offset is set to -1.
+     **/
+	protected int newHighestPage;	    
+
+    /**
+     * The number of allocated pages in this allocation page prior to 
+     * the truncate.  Note that all pages from NewHighestPage+1 through
+     * newHighestPage+num_pages_truncated should be FREE.
+     **/
+	protected int num_pages_truncated; 
+
+    /**************************************************************************
+     * Constructors for This class:
+     **************************************************************************
+     */
+	public CompressSpacePageOperation(
+    AllocPage   allocPage, 
+    int         highest_page, 
+    int         num_truncated)
+		 throws StandardException
+	{
+		super(allocPage);
+
+        newHighestPage      = highest_page;
+        num_pages_truncated = num_truncated;
+	}
+	
+    /**************************************************************************
+     * Public Methods of Formatable interface.
+     **************************************************************************
+     */
+
+	// no-arg constructor, required by Formatable 
+	public CompressSpacePageOperation() { super(); }
+
+	public void writeExternal(ObjectOutput out) throws IOException 
+	{
+		super.writeExternal(out);
+		CompressedNumber.writeInt(out, newHighestPage);
+		CompressedNumber.writeInt(out, num_pages_truncated);
+	}
+
+	/**
+		@exception IOException error reading from log stream
+		@exception ClassNotFoundException cannot read object from input
+	*/
+	public void readExternal(ObjectInput in)
+		 throws IOException, ClassNotFoundException
+	{
+		super.readExternal(in);
+		newHighestPage      = CompressedNumber.readInt(in);
+		num_pages_truncated = CompressedNumber.readInt(in);
+	}
+
+	/**
+		Return my format identifier.
+	*/
+	public int getTypeFormatId() {
+		return StoredFormatIds.LOGOP_COMPRESS_SPACE;
+	}
+
+    /**************************************************************************
+     * Public Methods of Loggable interface.
+     **************************************************************************
+     */
+
+    /**
+     * Compress space from container.
+     * <p>
+     * Compress the indicate space from the container, returning the free
+     * pages to the OS.  Update the allocation page to reflect the file
+     * change.
+     *
+     * @param tran      transaction doing the operation.
+     * @param instant   log instant for this operation.
+     * @param in        unused by this log operation.
+     *
+	 * @exception  StandardException  Standard exception policy.
+     **/
+	public final void doMe(
+    Transaction         tran, 
+    LogInstant          instant, 
+    LimitObjectInput    in) 
+		 throws StandardException
+	{
+		if (SanityManager.DEBUG) 
+        {
+			SanityManager.ASSERT(this.page instanceof AllocPage);
+		}
+
+		((AllocPage)page).compressSpace(
+             instant, newHighestPage, num_pages_truncated);
+	}
+
+    /**************************************************************************
+     * Public Methods of Undoable interface.
+     **************************************************************************
+     */
+
+    /**
+     * Compress space undo.
+     * <p>
+     *
+	 * @exception StandardException Thrown by methods I call 
+     * @see PhysicalPageOperation#undoMe
+     **/
+	public void undoMe(
+    Transaction         xact, 
+    BasePage            undoPage, 
+    LogInstant          CLRInstant, 
+    LimitObjectInput    in)
+		 throws StandardException
+	{
+		if (SanityManager.DEBUG) 
+        {
+			SanityManager.ASSERT(undoPage != null, "undo Page null");
+			SanityManager.ASSERT(
+                undoPage instanceof AllocPage, 
+				"undo Page is not an allocPage");
+		}
+
+		((AllocPage)undoPage).undoCompressSpace(
+             CLRInstant, newHighestPage, num_pages_truncated);
+	}
+
+	/*
+	 * method to support BeforeImageLogging
+	 */
+	public void restoreMe(
+    Transaction         xact, 
+    BasePage            undoPage, 
+    LogInstant          CLRinstant, 
+    LimitObjectInput    in)
+	{
+		// nobody should be calling this since there is no corresponding 
+        // BI operation.
+		if (SanityManager.DEBUG)
+			SanityManager.THROWASSERT(
+                "cannot call restoreMe on CompressSpaceOperation.");
+	}
+
+
+	/** debug */
+	public String toString()
+	{
+		if (SanityManager.DEBUG)
+		{
+			String str = super.toString();
+			str += " CompressSpaceOperation: " + 
+                "newHighestPage = " + newHighestPage +
+                ";num_pages_truncated = " + num_pages_truncated +
+				" to " + getPageId();
+
+			return str;
+		}
+		else
+			return null;
+	}
+}

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/CompressSpacePageOperation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/ContainerActionOnCommit.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/ContainerBasicOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/ContainerHandleActionOnCommit.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/ContainerOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/ContainerUndoOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/CopyRowsOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/D_BaseContainerHandle.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/D_DiagnosticUtil.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/D_RecordId.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/D_StoredPage.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/DecryptInputStream.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/DeleteOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/DirectActions.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/DirectAllocActions.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/DropOnCommit.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/FileContainer.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/InitPageOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/InputStreamContainer.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/InsertOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/InvalidatePageOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/LoggableActions.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/LoggableAllocActions.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/LogicalPageOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/LogicalUndoOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/LongColumnException.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/MemByteHolder.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/NoSpaceOnPage.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/OverflowInputStream.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/PageActions.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/PageBasicOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/PageVersion.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/PhysicalPageOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/PhysicalUndoOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/PurgeOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RAFContainer.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RFResource.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RawField.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/ReclaimSpace.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/ReclaimSpaceHelper.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RecordId.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RememberBytesInputStream.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RemoveFileOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/SetReservedSpaceOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/SpaceInformation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/StoredFieldHeader.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/StoredPage.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/StoredRecordHeader.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/StreamFileContainer.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/StreamFileContainerHandle.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/SyncOnCommit.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/TempRAFContainer.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/TruncateOnCommit.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/UpdateFieldOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/UpdateOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/CheckpointOperation.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/D_FlushedScan.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/D_LogToFile.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/FileLogger.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/FlushedScan.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/FlushedScanHandle.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogAccessFile.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogAccessFileBuffer.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogCounter.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogRecord.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/ReadOnly.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/Scan.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/StreamLogScan.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/BeginXact.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/ContainerLocking2.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/ContainerLocking3.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/D_Xact.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/EndXact.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/EscalateContainerKey.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/GlobalXactId.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/InternalXact.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/NoLocking.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/RowLocking1.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/RowLocking2.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/RowLocking2nohold.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/RowLocking3.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/RowLocking3Escalate.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/RowLockingRR.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/SavePoint.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/TransactionTable.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/TransactionTableEntry.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/Xact.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/XactContext.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/XactFactory.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/XactId.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/xact/XactXAResourceManager.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/io/StorageFactory.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/io/StorageFile.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/io/StorageRandomAccessFile.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/io/WritableStorageFactory.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/io/build.xml
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/Driver169.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/Driver20.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/Driver30.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedXAConnection.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbeddedConnectionPoolDataSource.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbeddedDataSource.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbeddedDriver.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbeddedXADataSource.java
            ('svn:executable' removed)

Modified: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/InternalDriver.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/jdbc/InternalDriver.java?rev=329187&r1=329186&r2=329187&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/jdbc/InternalDriver.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/jdbc/InternalDriver.java Fri Oct 28 04:51:50 2005
@@ -1,502 +1,502 @@
-/*
-
-   Derby - Class org.apache.derby.jdbc.InternalDriver
-
-   Copyright 1997, 2005 The Apache Software Foundation or its licensors, as applicable.
-
-   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.derby.jdbc;
-
-import org.apache.derby.iapi.reference.Attribute;
-import org.apache.derby.iapi.reference.SQLState;
-import org.apache.derby.iapi.reference.MessageId;
-import org.apache.derby.iapi.services.io.FormatableProperties;
-
-import org.apache.derby.iapi.jdbc.ConnectionContext;
-
-import org.apache.derby.iapi.services.monitor.ModuleControl;
-import org.apache.derby.iapi.services.monitor.Monitor;
-import org.apache.derby.iapi.services.context.ContextService;
-import org.apache.derby.iapi.services.context.ContextManager;
-import org.apache.derby.iapi.services.sanity.SanityManager;
-import org.apache.derby.iapi.error.StandardException;
-import org.apache.derby.iapi.services.i18n.MessageService;
-
-import org.apache.derby.iapi.sql.ResultSet;
-
-import org.apache.derby.iapi.jdbc.AuthenticationService;
-
-import org.apache.derby.impl.jdbc.*;
-
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.SQLException;
-
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-
-/**
-	Abstract factory class and api for JDBC objects.
-	@author djd
-*/
-
-public abstract class InternalDriver implements ModuleControl {
-
-	private static final Object syncMe = new Object();
-	private static InternalDriver activeDriver;
-
-	protected boolean active;
-	private ContextService contextServiceFactory;
-	private AuthenticationService	authenticationService;
-
-	public static final InternalDriver activeDriver()
-	{
-		return activeDriver;
-	}
-
-	public InternalDriver() {
-		contextServiceFactory = ContextService.getFactory();
-	}
-
-	/*
-	**	Methods from ModuleControl
-	*/
-
-	public void boot(boolean create, Properties properties) throws StandardException {
-
-		synchronized (InternalDriver.syncMe)
-		{
-			InternalDriver.activeDriver = this;
-		}
-
-		active = true;
-	}
-
-	public void stop() {
-
-		synchronized (InternalDriver.syncMe)
-		{
-			InternalDriver.activeDriver = null;
-		}
-
-		active = false;
-
-		contextServiceFactory = null;
-	}
-
-	/*
-	** Methods from java.sql.Driver
-	*/
-	public boolean acceptsURL(String url) {
-		return active &&
-		//	need to reject network driver's URL's
-		!url.startsWith(Attribute.JCC_PROTOCOL) && !url.startsWith(Attribute.DNC_PROTOCOL) &&
-		(url.startsWith(Attribute.PROTOCOL) || url.equals(Attribute.SQLJ_NESTED));
-				
-	}
-
-	public Connection connect(String url, Properties info)
-		 throws SQLException 
-	{
-		if (!acceptsURL(url)) { return null; }
-
-			
-		/*
-		** A url "jdbc:default:connection" means get the current
-		** connection.  From within a method called from JSQL, the
-		** "current" connection is the one that is running the
-		** JSQL statement containing the method call.
-		*/
-		boolean current = url.equals(Attribute.SQLJ_NESTED);
-		
-		/* If jdbc:default:connection, see if user already has a
-		 * connection. All connection attributes are ignored.
-		 */
-		if (current) {
-
-			ConnectionContext connContext = getConnectionContext();
-
-			if (connContext != null) {
-						
-				return connContext.getNestedConnection(false);
-				
-			}
-			// there is no cloudscape connection, so
-			// return null, as we are not the driver to handle this
-			return null;
-		}
-
-		// convert the ;name=value attributes in the URL into
-		// properties.
-		FormatableProperties finfo = getAttributes(url, info);
-		info = null; // ensure we don't use this reference directly again.
-		try {
-
-			/*
-			** A property "shutdown=true" means shut the system or database down
-			*/
-			boolean shutdown = Boolean.valueOf(finfo.getProperty(Attribute.SHUTDOWN_ATTR)).booleanValue();
-			
-			if (shutdown) {
-				
-				// If we are shutting down the system don't attempt to create
-				// a connection; but we validate users credentials if we have to.
-				// In case of datbase shutdown, we ask the database authentication
-				// service to authenticate the user. If it is a system shutdown,
-				// then we ask the Driver to do the authentication.
-				//
-				if (InternalDriver.getDatabaseName(url, finfo).length() == 0) {
-					//
-					// We need to authenticate the user if authentication is
-					// ON. Note that this is a system shutdown.
-					// check that we do have a authentication service
-					// it is _always_ expected.
-					if (this.getAuthenticationService() == null)
-						throw Util.generateCsSQLException(
-                        SQLState.LOGIN_FAILED, 
-						MessageService.getTextMessage(MessageId.AUTH_NO_SERVICE_FOR_SYSTEM));
-					
-						
-					if (!this.getAuthenticationService().authenticate((String) null, finfo)) {
-
-						// not a valid user
-						throw Util.generateCsSQLException(
-                                  SQLState.LOGIN_FAILED, MessageService.getTextMessage(MessageId.AUTH_INVALID));
-					}
-
-					Monitor.getMonitor().shutdown();
-					throw Util.generateCsSQLException(
-                                         SQLState.CLOUDSCAPE_SYSTEM_SHUTDOWN);
-				}
-			}
-			
-			EmbedConnection conn = getNewEmbedConnection(url, finfo);
-
-			// if this is not the correct driver a EmbedConnection
-			// object is returned in the closed state.
-			if (conn.isClosed()) {
-				return null;
-			}
-
-			return conn;
-		}
-		finally {
-			// break any link with the user's Properties set.
-			finfo.clearDefaults();
-		}
-	}
-
-	public int getMajorVersion() {
-		return Monitor.getMonitor().getEngineVersion().getMajorVersion();
-	}
-	
-	public int getMinorVersion() {
-		return Monitor.getMonitor().getEngineVersion().getMinorVersion();
-	}
-
-	public boolean jdbcCompliant() {
-		return true;
-	}
-
-	/*
-	** URL manipulation
-	*/
-
-	/**
-		Convert all the attributes in the url into properties and
-		combine them with the set provided. 
-		<BR>
-		If the caller passed in a set of attributes (info != null)
-		then we set that up as the default of the returned property
-		set as the user's set. This means we can easily break the link
-		with the user's set, ensuring that we don't hang onto the users object.
-		It also means that we don't add our attributes into the user's
-		own property object.
-
-		@exception SQLException thrown if URL form bad
-	*/
-	protected FormatableProperties getAttributes(String url, Properties info) 
-		throws SQLException {
-
-		// We use FormatableProperties here to take advantage
-		// of the clearDefaults, method.
-		FormatableProperties finfo = new FormatableProperties(info);
-		info = null; // ensure we don't use this reference directly again.
-
-
-		StringTokenizer st = new StringTokenizer(url, ";");
-		st.nextToken(); // skip the first part of the url
-
-		while (st.hasMoreTokens()) {
-
-			String v = st.nextToken();
-
-			int eqPos = v.indexOf('=');
-			if (eqPos == -1)
-				throw Util.generateCsSQLException(
-                                            SQLState.MALFORMED_URL, url);
-
-			//if (eqPos != v.lastIndexOf('='))
-			//	throw Util.malformedURL(url);
-
-			finfo.put((v.substring(0, eqPos)).trim(),
-					 (v.substring(eqPos + 1)).trim()
-					);
-		}
-
-		// now validate any attributes we can
-		//
-		// Boolean attributes -
-		//  dataEncryption,create,createSource,convertToSource,shutdown,upgrade,current
-
-
-		checkBoolean(finfo, Attribute.DATA_ENCRYPTION);
-		checkBoolean(finfo, Attribute.CREATE_ATTR);
-		checkBoolean(finfo, Attribute.SHUTDOWN_ATTR);
-		checkBoolean(finfo, Attribute.UPGRADE_ATTR);
-
-		return finfo;
-	}
-
-	private static void checkBoolean(Properties set, String attribute) throws SQLException
-    {
-        final String[] booleanChoices = {"true", "false"};
-        checkEnumeration( set, attribute, booleanChoices);
-	}
-
-
-	private static void checkEnumeration(Properties set, String attribute, String[] choices) throws SQLException
-    {
-		String value = set.getProperty(attribute);
-		if (value == null)
-			return;
-
-        for( int i = 0; i < choices.length; i++)
-        {
-            if( value.toUpperCase(java.util.Locale.ENGLISH).equals( choices[i].toUpperCase(java.util.Locale.ENGLISH)))
-                return;
-        }
-
-        // The attribute value is invalid. Construct a string giving the choices for
-        // display in the error message.
-        String choicesStr = "{";
-        for( int i = 0; i < choices.length; i++)
-        {
-            if( i > 0)
-                choicesStr += "|";
-            choicesStr += choices[i];
-        }
-        
-		throw Util.generateCsSQLException(
-                SQLState.INVALID_ATTRIBUTE, attribute, value, choicesStr + "}");
-	}
-
-
-	/**
-		Get the database name from the url.
-		Copes with three forms
-
-		jdbc:derby:dbname
-		jdbc:derby:dbname;...
-		jdbc:derby:;subname=dbname
-
-		@param url The url being used for the connection
-		@param info The properties set being used for the connection, must include
-		the properties derived from the attributes in the url
-
-		@return a String containing the database name or an empty string ("") if
-		no database name is present in the URL.
-	*/
-	public static String getDatabaseName(String url, Properties info) {
-
-		if (url.equals(Attribute.SQLJ_NESTED))
-		{
-			return "";
-		}	
-		
-		// skip the jdbc:derby:
-		int attributeStart = url.indexOf(';');
-		String dbname;
-		if (attributeStart == -1)
-			dbname = url.substring(Attribute.PROTOCOL.length());
-		else
-			dbname = url.substring(Attribute.PROTOCOL.length(), attributeStart);
-
-		// For security reasons we rely on here an non-null string being
-		// taken as the database name, before the databaseName connection
-		// attribute. Specifically, even if dbname is blank we still we
-		// to use it rather than the connection attribute, even though
-		// it will end up, after the trim, as a zero-length string.
-		// See EmbeddedDataSource.update()
-
-		if (dbname.length() == 0) {
-		    if (info != null)
-				dbname = info.getProperty(Attribute.DBNAME_ATTR, dbname);
-		}
-		// Beetle 4653 - trim database name to remove blanks that might make a difference on finding the database
-		// on unix platforms
-		dbname = dbname.trim();
-
-		return dbname;
-	}
-
-	public final ContextService getContextServiceFactory() {
-		return contextServiceFactory;
-	}
-
-	// returns the authenticationService handle
-	public AuthenticationService getAuthenticationService() {
-		//
-		// If authenticationService handle not cached in yet, then
-		// ask the monitor to find it for us and set it here in its
-		// attribute.
-		//
-		if (this.authenticationService == null) {
-			this.authenticationService = (AuthenticationService)
-				Monitor.findService(AuthenticationService.MODULE,
-									"authentication"
-								   );
-		}
-
-		// We should have a Authentication Service (always)
-		//
-		if (SanityManager.DEBUG)
-		{
-			SanityManager.ASSERT(this.authenticationService != null, 
-				"Unexpected - There is no valid authentication service!");
-		}
-		return this.authenticationService;
-	}
-
-	/*
-		Methods to be overloaded in sub-implementations such as
-		a tracing driver.
-	 */
-	protected abstract EmbedConnection getNewEmbedConnection(String url, Properties info) 
-		 throws SQLException ;
-
-
-	private ConnectionContext getConnectionContext() {
-
-		/*
-		** The current connection is the one in the current
-		** connection context, so get the context.
-		*/
-		ContextManager	cm = getCurrentContextManager();
-
-		ConnectionContext localCC = null;
-
-		/*
-			cm is null the very first time, and whenever
-			we aren't actually nested.
-		 */
-		if (cm != null) {
-			localCC = (ConnectionContext)
-				(cm.getContext(ConnectionContext.CONTEXT_ID));
-		}
-
-		return localCC;
-	}
-
-	private ContextManager getCurrentContextManager() {
-		return getContextServiceFactory().getCurrentContextManager();
-	}
-
-
-	/**
-		Return true if this driver is active. Package private method.
-	*/
-	public boolean isActive() {
-		return active;
-	}
-
-	/**
- 	 * Get a new nested connection.
-	 *
-	 * @param conn	The EmbedConnection.
-	 *
-	 * @return A nested connection object.
-	 *
-	 */
-	public abstract Connection getNewNestedConnection(EmbedConnection conn);
-
-	/*
-	** methods to be overridden by subimplementations wishing to insert
-	** their classes into the mix.
-	*/
-
-	public java.sql.Statement newEmbedStatement(
-				EmbedConnection conn,
-				boolean forMetaData,
-				int resultSetType,
-				int resultSetConcurrency,
-				int resultSetHoldability)
-	{
-		return new EmbedStatement(conn, forMetaData, resultSetType, resultSetConcurrency,
-		resultSetHoldability);
-	}
-	/**
-	 	@exception SQLException if fails to create statement
-	 */
-	public abstract java.sql.PreparedStatement newEmbedPreparedStatement(
-				EmbedConnection conn,
-				String stmt, 
-				boolean forMetaData, 
-				int resultSetType,
-				int resultSetConcurrency,
-				int resultSetHoldability,
-				int autoGeneratedKeys,
-				int[] columnIndexes,
-				String[] columnNames)
-		throws SQLException;
-
-	/**
-	 	@exception SQLException if fails to create statement
-	 */
-	public abstract java.sql.CallableStatement newEmbedCallableStatement(
-				EmbedConnection conn,
-				String stmt, 
-				int resultSetType,
-				int resultSetConcurrency,
-				int resultSetHoldability)
-		throws SQLException;
-
-	/**
-	 * Return a new java.sql.DatabaseMetaData instance for this implementation.
-	 	@exception SQLException on failure to create.
-	 */
-	public DatabaseMetaData newEmbedDatabaseMetaData(EmbedConnection conn,
-		String dbname) throws SQLException {
-		return new EmbedDatabaseMetaData(conn,dbname);
-	}
-
-	/**
-	 * Return a new java.sql.ResultSet instance for this implementation.
-	 * @param conn Owning connection
-	 * @param results Top level of language result set tree
-	 * @param forMetaData Is this for meta-data
-	 * @param statement The statement that is creating the SQL ResultSet
-	 * @param isAtomic 
-	 * @return a new java.sql.ResultSet
-	 * @throws SQLException
-	 */
-	public abstract EmbedResultSet
-		newEmbedResultSet(EmbedConnection conn, ResultSet results, boolean forMetaData, EmbedStatement statement, boolean isAtomic) throws SQLException;
-}
-
-
-
+/*
+
+   Derby - Class org.apache.derby.jdbc.InternalDriver
+
+   Copyright 1997, 2005 The Apache Software Foundation or its licensors, as applicable.
+
+   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.derby.jdbc;
+
+import org.apache.derby.iapi.reference.Attribute;
+import org.apache.derby.iapi.reference.SQLState;
+import org.apache.derby.iapi.reference.MessageId;
+import org.apache.derby.iapi.services.io.FormatableProperties;
+
+import org.apache.derby.iapi.jdbc.ConnectionContext;
+
+import org.apache.derby.iapi.services.monitor.ModuleControl;
+import org.apache.derby.iapi.services.monitor.Monitor;
+import org.apache.derby.iapi.services.context.ContextService;
+import org.apache.derby.iapi.services.context.ContextManager;
+import org.apache.derby.iapi.services.sanity.SanityManager;
+import org.apache.derby.iapi.error.StandardException;
+import org.apache.derby.iapi.services.i18n.MessageService;
+
+import org.apache.derby.iapi.sql.ResultSet;
+
+import org.apache.derby.iapi.jdbc.AuthenticationService;
+
+import org.apache.derby.impl.jdbc.*;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+
+/**
+	Abstract factory class and api for JDBC objects.
+	@author djd
+*/
+
+public abstract class InternalDriver implements ModuleControl {
+
+	private static final Object syncMe = new Object();
+	private static InternalDriver activeDriver;
+
+	protected boolean active;
+	private ContextService contextServiceFactory;
+	private AuthenticationService	authenticationService;
+
+	public static final InternalDriver activeDriver()
+	{
+		return activeDriver;
+	}
+
+	public InternalDriver() {
+		contextServiceFactory = ContextService.getFactory();
+	}
+
+	/*
+	**	Methods from ModuleControl
+	*/
+
+	public void boot(boolean create, Properties properties) throws StandardException {
+
+		synchronized (InternalDriver.syncMe)
+		{
+			InternalDriver.activeDriver = this;
+		}
+
+		active = true;
+	}
+
+	public void stop() {
+
+		synchronized (InternalDriver.syncMe)
+		{
+			InternalDriver.activeDriver = null;
+		}
+
+		active = false;
+
+		contextServiceFactory = null;
+	}
+
+	/*
+	** Methods from java.sql.Driver
+	*/
+	public boolean acceptsURL(String url) {
+		return active &&
+		//	need to reject network driver's URL's
+		!url.startsWith(Attribute.JCC_PROTOCOL) && !url.startsWith(Attribute.DNC_PROTOCOL) &&
+		(url.startsWith(Attribute.PROTOCOL) || url.equals(Attribute.SQLJ_NESTED));
+				
+	}
+
+	public Connection connect(String url, Properties info)
+		 throws SQLException 
+	{
+		if (!acceptsURL(url)) { return null; }
+
+			
+		/*
+		** A url "jdbc:default:connection" means get the current
+		** connection.  From within a method called from JSQL, the
+		** "current" connection is the one that is running the
+		** JSQL statement containing the method call.
+		*/
+		boolean current = url.equals(Attribute.SQLJ_NESTED);
+		
+		/* If jdbc:default:connection, see if user already has a
+		 * connection. All connection attributes are ignored.
+		 */
+		if (current) {
+
+			ConnectionContext connContext = getConnectionContext();
+
+			if (connContext != null) {
+						
+				return connContext.getNestedConnection(false);
+				
+			}
+			// there is no cloudscape connection, so
+			// return null, as we are not the driver to handle this
+			return null;
+		}
+
+		// convert the ;name=value attributes in the URL into
+		// properties.
+		FormatableProperties finfo = getAttributes(url, info);
+		info = null; // ensure we don't use this reference directly again.
+		try {
+
+			/*
+			** A property "shutdown=true" means shut the system or database down
+			*/
+			boolean shutdown = Boolean.valueOf(finfo.getProperty(Attribute.SHUTDOWN_ATTR)).booleanValue();
+			
+			if (shutdown) {
+				
+				// If we are shutting down the system don't attempt to create
+				// a connection; but we validate users credentials if we have to.
+				// In case of datbase shutdown, we ask the database authentication
+				// service to authenticate the user. If it is a system shutdown,
+				// then we ask the Driver to do the authentication.
+				//
+				if (InternalDriver.getDatabaseName(url, finfo).length() == 0) {
+					//
+					// We need to authenticate the user if authentication is
+					// ON. Note that this is a system shutdown.
+					// check that we do have a authentication service
+					// it is _always_ expected.
+					if (this.getAuthenticationService() == null)
+						throw Util.generateCsSQLException(
+                        SQLState.LOGIN_FAILED, 
+						MessageService.getTextMessage(MessageId.AUTH_NO_SERVICE_FOR_SYSTEM));
+					
+						
+					if (!this.getAuthenticationService().authenticate((String) null, finfo)) {
+
+						// not a valid user
+						throw Util.generateCsSQLException(
+                                  SQLState.LOGIN_FAILED, MessageService.getTextMessage(MessageId.AUTH_INVALID));
+					}
+
+					Monitor.getMonitor().shutdown();
+					throw Util.generateCsSQLException(
+                                         SQLState.CLOUDSCAPE_SYSTEM_SHUTDOWN);
+				}
+			}
+			
+			EmbedConnection conn = getNewEmbedConnection(url, finfo);
+
+			// if this is not the correct driver a EmbedConnection
+			// object is returned in the closed state.
+			if (conn.isClosed()) {
+				return null;
+			}
+
+			return conn;
+		}
+		finally {
+			// break any link with the user's Properties set.
+			finfo.clearDefaults();
+		}
+	}
+
+	public int getMajorVersion() {
+		return Monitor.getMonitor().getEngineVersion().getMajorVersion();
+	}
+	
+	public int getMinorVersion() {
+		return Monitor.getMonitor().getEngineVersion().getMinorVersion();
+	}
+
+	public boolean jdbcCompliant() {
+		return true;
+	}
+
+	/*
+	** URL manipulation
+	*/
+
+	/**
+		Convert all the attributes in the url into properties and
+		combine them with the set provided. 
+		<BR>
+		If the caller passed in a set of attributes (info != null)
+		then we set that up as the default of the returned property
+		set as the user's set. This means we can easily break the link
+		with the user's set, ensuring that we don't hang onto the users object.
+		It also means that we don't add our attributes into the user's
+		own property object.
+
+		@exception SQLException thrown if URL form bad
+	*/
+	protected FormatableProperties getAttributes(String url, Properties info) 
+		throws SQLException {
+
+		// We use FormatableProperties here to take advantage
+		// of the clearDefaults, method.
+		FormatableProperties finfo = new FormatableProperties(info);
+		info = null; // ensure we don't use this reference directly again.
+
+
+		StringTokenizer st = new StringTokenizer(url, ";");
+		st.nextToken(); // skip the first part of the url
+
+		while (st.hasMoreTokens()) {
+
+			String v = st.nextToken();
+
+			int eqPos = v.indexOf('=');
+			if (eqPos == -1)
+				throw Util.generateCsSQLException(
+                                            SQLState.MALFORMED_URL, url);
+
+			//if (eqPos != v.lastIndexOf('='))
+			//	throw Util.malformedURL(url);
+
+			finfo.put((v.substring(0, eqPos)).trim(),
+					 (v.substring(eqPos + 1)).trim()
+					);
+		}
+
+		// now validate any attributes we can
+		//
+		// Boolean attributes -
+		//  dataEncryption,create,createSource,convertToSource,shutdown,upgrade,current
+
+
+		checkBoolean(finfo, Attribute.DATA_ENCRYPTION);
+		checkBoolean(finfo, Attribute.CREATE_ATTR);
+		checkBoolean(finfo, Attribute.SHUTDOWN_ATTR);
+		checkBoolean(finfo, Attribute.UPGRADE_ATTR);
+
+		return finfo;
+	}
+
+	private static void checkBoolean(Properties set, String attribute) throws SQLException
+    {
+        final String[] booleanChoices = {"true", "false"};
+        checkEnumeration( set, attribute, booleanChoices);
+	}
+
+
+	private static void checkEnumeration(Properties set, String attribute, String[] choices) throws SQLException
+    {
+		String value = set.getProperty(attribute);
+		if (value == null)
+			return;
+
+        for( int i = 0; i < choices.length; i++)
+        {
+            if( value.toUpperCase(java.util.Locale.ENGLISH).equals( choices[i].toUpperCase(java.util.Locale.ENGLISH)))
+                return;
+        }
+
+        // The attribute value is invalid. Construct a string giving the choices for
+        // display in the error message.
+        String choicesStr = "{";
+        for( int i = 0; i < choices.length; i++)
+        {
+            if( i > 0)
+                choicesStr += "|";
+            choicesStr += choices[i];
+        }
+        
+		throw Util.generateCsSQLException(
+                SQLState.INVALID_ATTRIBUTE, attribute, value, choicesStr + "}");
+	}
+
+
+	/**
+		Get the database name from the url.
+		Copes with three forms
+
+		jdbc:derby:dbname
+		jdbc:derby:dbname;...
+		jdbc:derby:;subname=dbname
+
+		@param url The url being used for the connection
+		@param info The properties set being used for the connection, must include
+		the properties derived from the attributes in the url
+
+		@return a String containing the database name or an empty string ("") if
+		no database name is present in the URL.
+	*/
+	public static String getDatabaseName(String url, Properties info) {
+
+		if (url.equals(Attribute.SQLJ_NESTED))
+		{
+			return "";
+		}	
+		
+		// skip the jdbc:derby:
+		int attributeStart = url.indexOf(';');
+		String dbname;
+		if (attributeStart == -1)
+			dbname = url.substring(Attribute.PROTOCOL.length());
+		else
+			dbname = url.substring(Attribute.PROTOCOL.length(), attributeStart);
+
+		// For security reasons we rely on here an non-null string being
+		// taken as the database name, before the databaseName connection
+		// attribute. Specifically, even if dbname is blank we still we
+		// to use it rather than the connection attribute, even though
+		// it will end up, after the trim, as a zero-length string.
+		// See EmbeddedDataSource.update()
+
+		if (dbname.length() == 0) {
+		    if (info != null)
+				dbname = info.getProperty(Attribute.DBNAME_ATTR, dbname);
+		}
+		// Beetle 4653 - trim database name to remove blanks that might make a difference on finding the database
+		// on unix platforms
+		dbname = dbname.trim();
+
+		return dbname;
+	}
+
+	public final ContextService getContextServiceFactory() {
+		return contextServiceFactory;
+	}
+
+	// returns the authenticationService handle
+	public AuthenticationService getAuthenticationService() {
+		//
+		// If authenticationService handle not cached in yet, then
+		// ask the monitor to find it for us and set it here in its
+		// attribute.
+		//
+		if (this.authenticationService == null) {
+			this.authenticationService = (AuthenticationService)
+				Monitor.findService(AuthenticationService.MODULE,
+									"authentication"
+								   );
+		}
+
+		// We should have a Authentication Service (always)
+		//
+		if (SanityManager.DEBUG)
+		{
+			SanityManager.ASSERT(this.authenticationService != null, 
+				"Unexpected - There is no valid authentication service!");
+		}
+		return this.authenticationService;
+	}
+
+	/*
+		Methods to be overloaded in sub-implementations such as
+		a tracing driver.
+	 */
+	protected abstract EmbedConnection getNewEmbedConnection(String url, Properties info) 
+		 throws SQLException ;
+
+
+	private ConnectionContext getConnectionContext() {
+
+		/*
+		** The current connection is the one in the current
+		** connection context, so get the context.
+		*/
+		ContextManager	cm = getCurrentContextManager();
+
+		ConnectionContext localCC = null;
+
+		/*
+			cm is null the very first time, and whenever
+			we aren't actually nested.
+		 */
+		if (cm != null) {
+			localCC = (ConnectionContext)
+				(cm.getContext(ConnectionContext.CONTEXT_ID));
+		}
+
+		return localCC;
+	}
+
+	private ContextManager getCurrentContextManager() {
+		return getContextServiceFactory().getCurrentContextManager();
+	}
+
+
+	/**
+		Return true if this driver is active. Package private method.
+	*/
+	public boolean isActive() {
+		return active;
+	}
+
+	/**
+ 	 * Get a new nested connection.
+	 *
+	 * @param conn	The EmbedConnection.
+	 *
+	 * @return A nested connection object.
+	 *
+	 */
+	public abstract Connection getNewNestedConnection(EmbedConnection conn);
+
+	/*
+	** methods to be overridden by subimplementations wishing to insert
+	** their classes into the mix.
+	*/
+
+	public java.sql.Statement newEmbedStatement(
+				EmbedConnection conn,
+				boolean forMetaData,
+				int resultSetType,
+				int resultSetConcurrency,
+				int resultSetHoldability)
+	{
+		return new EmbedStatement(conn, forMetaData, resultSetType, resultSetConcurrency,
+		resultSetHoldability);
+	}
+	/**
+	 	@exception SQLException if fails to create statement
+	 */
+	public abstract java.sql.PreparedStatement newEmbedPreparedStatement(
+				EmbedConnection conn,
+				String stmt, 
+				boolean forMetaData, 
+				int resultSetType,
+				int resultSetConcurrency,
+				int resultSetHoldability,
+				int autoGeneratedKeys,
+				int[] columnIndexes,
+				String[] columnNames)
+		throws SQLException;
+
+	/**
+	 	@exception SQLException if fails to create statement
+	 */
+	public abstract java.sql.CallableStatement newEmbedCallableStatement(
+				EmbedConnection conn,
+				String stmt, 
+				int resultSetType,
+				int resultSetConcurrency,
+				int resultSetHoldability)
+		throws SQLException;
+
+	/**
+	 * Return a new java.sql.DatabaseMetaData instance for this implementation.
+	 	@exception SQLException on failure to create.
+	 */
+	public DatabaseMetaData newEmbedDatabaseMetaData(EmbedConnection conn,
+		String dbname) throws SQLException {
+		return new EmbedDatabaseMetaData(conn,dbname);
+	}
+
+	/**
+	 * Return a new java.sql.ResultSet instance for this implementation.
+	 * @param conn Owning connection
+	 * @param results Top level of language result set tree
+	 * @param forMetaData Is this for meta-data
+	 * @param statement The statement that is creating the SQL ResultSet
+	 * @param isAtomic 
+	 * @return a new java.sql.ResultSet
+	 * @throws SQLException
+	 */
+	public abstract EmbedResultSet
+		newEmbedResultSet(EmbedConnection conn, ResultSet results, boolean forMetaData, EmbedStatement statement, boolean isAtomic) throws SQLException;
+}
+
+
+

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/InternalDriver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/ReferenceableDataSource.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/ResourceAdapterImpl.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/XAStatementControl.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/XATransactionState.java
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/build.xml
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/loc/build.xml
            ('svn:executable' removed)

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.properties
            ('svn:executable' removed)



Mime
View raw message