inc/mdssqlrow.inl
changeset 0 c53acadfccc6
equal deleted inserted replaced
-1:000000000000 0:c53acadfccc6
       
     1 /*
       
     2 * Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Abstract SQL connection class*
       
    15 */
       
    16 
       
    17 // -----------------------------------
       
    18 // TColumn
       
    19 // -----------------------------------
       
    20 
       
    21 inline TColumn::TColumn( TColumnDataType aType ) :
       
    22 	iType( aType )
       
    23     {
       
    24     iData.iInt32 = 0;
       
    25     }
       
    26 
       
    27 inline TColumnDataType TColumn::Type() const
       
    28     {
       
    29     // the HBuf types are internal and hidden.
       
    30     switch ( iType )
       
    31 	    {
       
    32 	    case EColumnHBuf8:
       
    33 	    	return EColumnDes8;
       
    34 	    case EColumnHBuf16:
       
    35 	    	return EColumnDes16;
       
    36 		case EColumnNullDes8:
       
    37 			return EColumnDes8;
       
    38 		case EColumnNullDes16:
       
    39 			return EColumnDes16;
       
    40 		default:
       
    41 			return iType;
       
    42 	    }
       
    43     }
       
    44 
       
    45 inline void TColumn::Free()
       
    46     {
       
    47     if ( iType == EColumnHBuf8 )
       
    48         {
       
    49         delete (HBufC8*)iData.iText.iPtr;
       
    50         iData.iText.iPtr = 0;
       
    51         }
       
    52     else if ( iType == EColumnHBuf16 )
       
    53         {
       
    54         delete (HBufC16*)iData.iText.iPtr;
       
    55         iData.iText.iPtr = 0;
       
    56         }
       
    57     }
       
    58 
       
    59 inline void TColumn::Set( TInt32 aVal ) 
       
    60     {
       
    61     iType = EColumnInt32;
       
    62     iData.iInt32 = aVal;
       
    63     }
       
    64 
       
    65 inline void TColumn::Set( TUint32 aVal ) 
       
    66     {
       
    67     iType = EColumnUint32;
       
    68     iData.iUint32 = aVal;
       
    69     }
       
    70 
       
    71 inline void TColumn::Set( TBool aVal )
       
    72     {
       
    73     iType = EColumnBool;
       
    74     iData.iInt32 = aVal;
       
    75     }
       
    76 
       
    77 inline void TColumn::Set( TInt64 aVal )
       
    78     {
       
    79     iType = EColumnInt64;
       
    80     iData.iInt64 = aVal;
       
    81     }
       
    82 
       
    83 inline void TColumn::Set( TReal32 aVal ) 
       
    84     {
       
    85     iType = EColumnReal32;
       
    86     iData.iReal32 = aVal;
       
    87     }
       
    88 
       
    89 inline void TColumn::Set( TReal64 aVal ) 
       
    90     {
       
    91     iType = EColumnReal64;
       
    92     iData.iReal64 = aVal;
       
    93     }
       
    94 
       
    95 inline void TColumn::Set( TTime aVal )
       
    96     {
       
    97     iType = EColumnTime;
       
    98     iData.iInt64 = aVal.Int64();
       
    99     }
       
   100 
       
   101 inline void TColumn::Set( const TDesC8& aVal )
       
   102     {
       
   103     iType = EColumnDes8;
       
   104     iData.iText.iPtr = (TAny*)aVal.Ptr();
       
   105     iData.iText.iLen = aVal.Length();
       
   106     }
       
   107 
       
   108 inline void TColumn::Set( const TDesC16& aVal )
       
   109     {
       
   110     iType = EColumnDes16;
       
   111     iData.iText.iPtr = (TAny*)aVal.Ptr();
       
   112     iData.iText.iLen = aVal.Length();
       
   113     }
       
   114 
       
   115 inline void TColumn::Set( const HBufC8* aVal )
       
   116     {
       
   117     iType = ( aVal ? EColumnHBuf8 : EColumnNullDes8 );
       
   118     iData.iText.iPtr = (TAny*)aVal;
       
   119     }
       
   120 
       
   121 inline void TColumn::Set( const HBufC16* aVal )
       
   122     {
       
   123     iType = ( aVal ? EColumnHBuf16 : EColumnNullDes16 );
       
   124     iData.iText.iPtr = (TAny*)aVal;
       
   125     }
       
   126 
       
   127 inline void TColumn::NotUsed()
       
   128     {
       
   129     iType = EColumnNotUsed;
       
   130     iData.iText.iPtr = 0;
       
   131     }
       
   132 
       
   133 
       
   134 inline void TColumn::Get( TInt32& aValue ) const
       
   135     {
       
   136     if( EColumnNullDes16 == iType )
       
   137     	{
       
   138     	aValue = 0;
       
   139     	return;
       
   140     	}
       
   141 
       
   142     __ASSERT_DEBUG( iType == EColumnInt32, MMdCCommon::Panic( EDatabaseFault ) );
       
   143     aValue = iData.iInt32;
       
   144     }
       
   145 
       
   146 inline void TColumn::Get( TUint32& aValue ) const
       
   147     {
       
   148     if( EColumnNullDes16 == iType )
       
   149     	{
       
   150     	aValue = 0;
       
   151     	return;
       
   152     	}
       
   153 
       
   154 	__ASSERT_DEBUG( iType == EColumnUint32, MMdCCommon::Panic( EDatabaseFault ) );
       
   155     aValue = iData.iUint32;
       
   156     }
       
   157 
       
   158 inline void TColumn::Get( TBool& aValue ) const 
       
   159     {
       
   160     if( EColumnNullDes16 == iType )
       
   161     	{
       
   162     	aValue = EFalse;
       
   163     	return;
       
   164     	}
       
   165 
       
   166 	__ASSERT_DEBUG( iType == EColumnBool, MMdCCommon::Panic( EDatabaseFault ) );
       
   167     aValue = iData.iInt32;
       
   168     }
       
   169 
       
   170 inline void TColumn::Get( TInt64& aValue ) const
       
   171     {
       
   172     if( EColumnNullDes16 == iType )
       
   173     	{
       
   174     	aValue = 0;
       
   175     	return;
       
   176     	}
       
   177 
       
   178 	__ASSERT_DEBUG( iType == EColumnInt64, MMdCCommon::Panic( EDatabaseFault ) );
       
   179     aValue = iData.iInt64;
       
   180     }
       
   181 
       
   182 inline void TColumn::Get( TReal32& aValue ) const
       
   183     {
       
   184     if( EColumnNullDes16 == iType )
       
   185     	{
       
   186     	aValue = 0.0f;
       
   187     	return;
       
   188     	}
       
   189 
       
   190 	__ASSERT_DEBUG( iType == EColumnReal32, MMdCCommon::Panic( EDatabaseFault ) );
       
   191     aValue = iData.iReal32;
       
   192     }
       
   193 
       
   194 inline void TColumn::Get( TReal64& aValue ) const
       
   195     {
       
   196     if( EColumnNullDes16 == iType )
       
   197     	{
       
   198     	aValue = 0.0f;
       
   199     	return;
       
   200     	}
       
   201 
       
   202 	__ASSERT_DEBUG( iType == EColumnReal64, MMdCCommon::Panic( EDatabaseFault ) );
       
   203     aValue = iData.iReal64;
       
   204     }
       
   205 
       
   206 inline void TColumn::Get( TTime& aValue ) const
       
   207     {
       
   208     if( EColumnNullDes16 == iType )
       
   209     	{
       
   210     	aValue = TTime( 0 );
       
   211     	return;
       
   212     	}
       
   213     
       
   214 	__ASSERT_DEBUG( iType == EColumnTime, MMdCCommon::Panic( EDatabaseFault ) );
       
   215     aValue = TTime(iData.iInt64);
       
   216     }
       
   217 
       
   218 inline void TColumn::Get( TPtrC8& aValue ) const
       
   219     {
       
   220     if ( iType == EColumnDes8 )
       
   221         {
       
   222         aValue.Set(
       
   223             (TUint8*)iData.iText.iPtr,
       
   224             iData.iText.iLen );
       
   225         }
       
   226     else if ( iType == EColumnHBuf8 )
       
   227         {
       
   228         aValue.Set(
       
   229             ((HBufC8*)iData.iText.iPtr)->Des() );
       
   230         }
       
   231     else if ( iType == EColumnNullDes8 ||
       
   232         iType == EColumnNullDes16 )
       
   233         {
       
   234         aValue.Set( KNullDesC8().Ptr(), 0 );
       
   235         }
       
   236     else MMdCCommon::Panic( EDatabaseFault );
       
   237     }
       
   238 
       
   239 inline void TColumn::Get( TPtrC16& aValue ) const
       
   240     {
       
   241     if ( iType == EColumnDes16 )
       
   242         {
       
   243         aValue.Set(
       
   244             (TUint16*)iData.iText.iPtr,
       
   245             iData.iText.iLen );
       
   246         }
       
   247     else if ( iType == EColumnHBuf16 )
       
   248         {
       
   249         aValue.Set(
       
   250             ((HBufC16*)iData.iText.iPtr)->Des() );
       
   251         }
       
   252     else if ( iType == EColumnNullDes16 )
       
   253         {
       
   254         aValue.Set( KNullDesC16().Ptr(), 0 );
       
   255         }
       
   256     else MMdCCommon::Panic( EDatabaseFault );
       
   257     }
       
   258 
       
   259 inline TBool TColumn::IsNull()
       
   260     {
       
   261     return ( iType == EColumnNullDes8 ||
       
   262         iType == EColumnNullDes16  ||
       
   263         ( iData.iText.iPtr == NULL &&
       
   264           ( iType == EColumnDes8 || iType == EColumnDes16 ||
       
   265             iType == EColumnHBuf8 || iType == EColumnHBuf16 ) ) );
       
   266     }
       
   267 
       
   268 // -----------------------------------
       
   269 // RRowData
       
   270 // -----------------------------------
       
   271 
       
   272 
       
   273 inline RRowData::RRowData()
       
   274     : iColumns( 16 )
       
   275     {
       
   276     }
       
   277 
       
   278 inline void RRowData::Close()
       
   279     {
       
   280     Free();
       
   281     iColumns.Close();
       
   282     }
       
   283 
       
   284 inline void RRowData::Free()
       
   285     {
       
   286     const TInt count( Size() );
       
   287     for ( TInt i=0; i<count; ++i )
       
   288         {
       
   289         iColumns[i].Free();
       
   290         }
       
   291     }
       
   292 
       
   293 inline TInt RRowData::Size() const
       
   294     {
       
   295     return iColumns.Count();
       
   296     }
       
   297 
       
   298 inline TColumn& RRowData::Column( TInt aIndex )
       
   299     {
       
   300     return iColumns[aIndex];
       
   301     }
       
   302 
       
   303 inline const TColumn& RRowData::Column( TInt aIndex ) const
       
   304     {
       
   305     return iColumns[aIndex];
       
   306     }
       
   307 
       
   308 inline TColumn& RRowData::AppendL( const TColumn& aColumn )
       
   309     {
       
   310     iColumns.AppendL( aColumn );
       
   311     return iColumns[ Size()-1 ];
       
   312     }
       
   313 
       
   314 inline void RRowData::Reset()
       
   315     {
       
   316     iColumns.Reset();
       
   317     }
       
   318 
       
   319 inline void RRowData::AppendColumnTypesL( RRowData& aColumnTypeRow )
       
   320 	{
       
   321 	Free();
       
   322 	Reset();
       
   323 	
       
   324 	const TInt columnCount = aColumnTypeRow.Size();
       
   325 	ReserveL( columnCount );
       
   326 
       
   327 	for( TInt i = 0; i < columnCount; i++ )
       
   328 		{
       
   329 	    iColumns.Append( aColumnTypeRow.Column( i ).Type() ); 
       
   330 		}
       
   331 	}
       
   332 
       
   333 inline void RRowData::ReserveL( TInt aColumnCount )
       
   334 	{
       
   335 	iColumns.ReserveL( aColumnCount );
       
   336 	}