persistentstorage/dbms/pcdbms/utable/UT_ROW.CPP
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/dbms/pcdbms/utable/UT_ROW.CPP	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,99 @@
+// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "UT_STD.H"
+
+// Class RDbTableRow
+
+void RDbTableRow::Open(CDbTable* aTable)
+//
+// Initialise the row buffer for using the table
+//
+	{
+	__ASSERT(!iTable);
+	__ASSERT(aTable);
+	iTable=aTable;
+	iMark.Construct(aTable->Generation());
+	}
+
+void RDbTableRow::Close()
+	{
+	if (iTable)
+		iTable->Close();
+	RDbRow::Close();
+	}
+
+EXPORT_C void RDbTableRow::ReadL(TDbRecordId aRecordId)
+	{
+	if (aRecordId==KDbNullRecordId)
+		{
+		Reset();
+		iRecord=aRecordId;
+		iMark.Mark();
+		}
+	else if (aRecordId!=iRecord || iMark.Changed())
+		{
+		Reset();
+		iRecord=KDbNullRecordId;
+		iTable->ReadRowL(*this,aRecordId);
+		iRecord=aRecordId;
+		iMark.Mark();
+		}
+	}
+
+void RDbTableRow::NewL(TDbRecordId aCopyRecord)
+//
+// Set the row buffer for a new row
+//
+	{
+	ReadL(aCopyRecord);			// copy or empty the row
+	if (aCopyRecord!=KDbNullRecordId)
+		{
+		iRecord=KDbNullRecordId;
+		iTable->DuplicateBlobsL(*this);		// duplicate any Blobs
+		}
+	iTable->NewRowL(*this);
+	}
+
+void RDbTableRow::PrepareAppendL()
+	{
+	iTable->PrepareAppendL(*this);
+	}
+
+TDbRecordId RDbTableRow::AppendL()
+	{
+	iRecord=iTable->AppendRowL(*this);
+	iMark.Mark();
+	return iRecord;
+	}
+
+void RDbTableRow::PrepareReplaceL()
+	{
+	if (iMark.Changed())
+		__LEAVE(KErrAccessDenied);
+	iTable->PrepareReplaceL(*this,iRecord);
+	}
+
+TDbRecordId RDbTableRow::ReplaceL()
+	{
+	iTable->ReplaceRowL(*this,iRecord);
+	iMark.Mark();
+	return iRecord;
+	}
+
+void RDbTableRow::DeleteL(TDbRecordId aRecordId)
+	{
+	iTable->DeleteRowL(*this,aRecordId);
+	}