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 ba...@apache.org on 2005/10/28 14:52:21 UTC
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...
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)