metadataengine/server/src/mdsrelationdef.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 18 Jan 2010 20:34:07 +0200
changeset 0 c53acadfccc6
child 14 646a02f170b9
permissions -rw-r--r--
Revision: 201001 Kit: 201003

/*
* Copyright (c) 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:  Class to hold description about one relation
*
*/

#include "mdsrelationdef.h"

#include "mdcdef.h"
#include "mdssqliteconnection.h"
#include "mdcserializationbuffer.h"
#include "mdsindexer.h"


/**
 * NewLC
 */
CMdsRelationDef* CMdsRelationDef::NewLC(const TDesC& aName )
	{
	CMdsRelationDef* ret = new( ELeave ) CMdsRelationDef();
	CleanupStack::PushL( ret );
	ret->ConstructL( aName );
	return ret;
	}
	
/**
 * NewL
 */
CMdsRelationDef* CMdsRelationDef::NewL(const TDesC& aName )
	{
	CMdsRelationDef* ret = CMdsRelationDef::NewLC( aName );
	CleanupStack::Pop( ret );
	return ret;
	}

/**
 * ConstructL
 */
void CMdsRelationDef::ConstructL( const TDesC& aName )
	{
	// check that only allowed characters (A-Z, a-z) are used
	CheckAllowerCharatersL( aName, EFalse );
	
	CMdsItemDef::ConstructL( aName );
	}

/**
 * Destructor
 */
CMdsRelationDef::~CMdsRelationDef()
	{
	}
	
void CMdsRelationDef::StoreToDBL( const TDefId aNamespaceDefId )
	{
	_LIT( KMdsSqlClauseAddRelationDef, "INSERT INTO RelationDef (NamespaceDefId,Name) Values(?,?);" );

	if ( GetStoredInDB() )
		{
		return;
		}

    RRowData rowData;
    CleanupClosePushL( rowData );

	rowData.AppendL( TColumn( aNamespaceDefId ) );
	rowData.AppendL( TColumn( GetName().AllocL() ) );
	TDefId id =  MMdSIndexer::ExecuteAndGetIndexL( KMdsSqlClauseAddRelationDef, rowData );
	if ( id != KNoDefId )
		{
		SetId( id );
		}
	SetStoredInDB();
	CleanupStack::PopAndDestroy( &rowData );
	}

TBool CMdsRelationDef::operator==( const CMdsRelationDef& aRelationDef ) const
	{
	return GetName() == aRelationDef.GetName();
	}

TUint32 CMdsRelationDef::RequiredBufferSize()
	{
	return sizeof(TMdCRelationDef) + CMdsItemDef::RequiredBufferSize();
	}

TMdCOffset CMdsRelationDef::SerializeL(CMdCSerializationBuffer& aBuffer, TMdCOffset aFreeSpace)
	{
	TMdCRelationDef relationDef;
	relationDef.iDefId = GetId();
	
	// store name
	relationDef.iName.iPtr.iCount = GetName().Length();
	relationDef.iName.iPtr.iOffset = aFreeSpace;
	relationDef.SerializeL( aBuffer );
	
	aBuffer.PositionL( aFreeSpace );
	return CMdsItemDef::SerializeL( aBuffer );
	}