inc/mdssqlrow.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 09 Jun 2010 10:09:20 +0300
branchRCL_3
changeset 14 3e156c80c15d
parent 0 c53acadfccc6
permissions -rw-r--r--
Revision: 201021 Kit: 2010123

/*
* Copyright (c) 2002-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:  Abstract SQL connection class*
*/

#ifndef __MDSSQLCONNECTION_H__
#define __MDSSQLCONNECTION_H__

#include <e32base.h>
#include "mdccommon.pan"

#include "mdscommoninternal.h"


// types of columns
enum TColumnDataType
    {
    EColumnNotUsed,
    EColumnBool,
    EColumnInt32,
    EColumnUint32,
    EColumnInt64,
    EColumnReal32,
    EColumnReal64,
    EColumnTime,
    EColumnDes8,
    EColumnDes16,  // could be used as Unknown, because it checks the
                   // actual type from sqlite
    EColumnHBuf8,  // local pointer responsibility
    EColumnHBuf16, // local pointer responsibility
    EColumnNullDes8,
    EColumnNullDes16, // used when db column is null 
    //EColumnUnknown
    
    EColumnTItemId = EColumnUint32, // should be changed according to TItemId definition
    EColumnTDefId = EColumnUint32, // should be changed according to TDefId definition
    };

/**
* A class representing a database column.
* The column contains a type and an untyped pointer, which can
* be cast to represent various types.
*/
NONSHARABLE_CLASS(TColumn)
    {
    public:
        /** Returns column type. */
        inline TColumnDataType Type() const;

        /** Constructs a column with data type only. Use for queries. */
        inline TColumn( TColumnDataType aType = EColumnNotUsed );

        /** frees allocated memory in this column */
        inline void Free();

        // constructors

        TColumn( TInt32 aVal ) { Set( aVal ); }
        TColumn( TUint32 aVal ) { Set( aVal ); }
        TColumn( TBool aVal ) { Set( aVal ); }
        TColumn( TInt64 aVal ) { Set( aVal ); }
        TColumn( TReal32 aVal ) { Set( aVal ); }
        TColumn( TReal64 aVal ) { Set( aVal ); }
        TColumn( TTime aVal ) { Set( aVal ); }
        TColumn( const TDesC8& aVal ) { Set( aVal ); }
        TColumn( const TDesC16& aVal ) { Set( aVal ); }
        TColumn( const HBufC8* aVal ) { Set( aVal ); }
        TColumn( const HBufC16* aVal ) { Set( aVal ); }

        // data setters & getters
        
        inline void Set( TInt32 aVal );

        inline void Set( TUint32 aVal );

        inline void Set( TBool aVal );

        inline void Set( TInt64 aVal );

        inline void Set( TReal32 aVal );

        inline void Set( TReal64 aVal );

        inline void Set( TTime aVal );

        inline void Set( const TDesC8& aVal );

        inline void Set( const TDesC16& aVal );

        inline void Set( const HBufC8* aVal );

        inline void Set( const HBufC16* aVal );

        inline void NotUsed();

        // data getters

        inline void Get( TInt32& aValue ) const;

        inline void Get( TUint32& aValue ) const;

        inline void Get( TBool& aValue ) const;

        inline void Get( TInt64& aValue ) const;

        inline void Get( TReal32& aValue ) const;

        inline void Get( TReal64& aValue ) const;

        inline void Get( TTime& aValue ) const;

        inline void Get( TPtrC8& aValue ) const;

        inline void Get( TPtrC16& aValue ) const;

        inline TBool IsNull();

        /**
        * type of data in this column
        */
        TColumnDataType iType;

        /**
        * a structure to store multi-typed data
        */
        union TMultiTypeData
            {
            /*struct
                {
                TUint32 iLow;
                TUint32 iHigh;
                } iInt64;*/
            TInt64 iInt64;
            
            TReal32 iReal32;
            TReal64 iReal64;
            TInt32 iInt32;
            TUint32 iUint32;
            struct
                {
                TAny* iPtr;
                TInt iLen;
                } iText;
            };

        /**
        * multi-use data in this column
        */
        TMultiTypeData iData;
    };

/**
* A class representing a database row.
* The class describes each column type and the data in the column.
* where column data is located. The class is provided during
* query and is used when each row is read. Note that the
* buffer class MAY be modified by the user during the query.
* The same class is also used when replacing wildcards with
* variable data.
*/
class RRowData
    {
    public:

        /**
        * constructor
        */
        inline RRowData();

        /** Closes all the resources used by this object */
        inline void Close();

        /** frees allocated memory in this row */
        inline void Free();

        /** number of columns or variables */
        inline TInt Size() const;

        /** returns column by index */
        inline TColumn& Column( TInt aIndex );

        /** returns column by index */
        inline const TColumn& Column( TInt aIndex ) const;

        /** Appends a new column in row */
        inline TColumn& AppendL( const TColumn& aColumn );

        /** Resets the row */
        inline void Reset();

		/** Copy all columns */
		void AppendColumnTypesL( RRowData& aColumnTypeRow );

		/** Receive space to row */
		void ReserveL( TInt aColumnCount );
		
    protected:

        /** The array of columns */
        RArray<TColumn> iColumns;
    };


#include "mdssqlrow.inl" // inline methods

#endif	// __MDSSQLCONNECTION_H__


// End of File