From 4121935b5838132ede5730968bd75b37b66ce8a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Thu, 2 Oct 2014 22:37:28 +0200 Subject: [PATCH] 2014-10-02 22:37 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * contrib/sddsqlt3/core.c * decalre default size for numeric, blob and any fields larger enough to store data after COPY TO * decalre default size for string fields to at least 10 * some simplifications --- ChangeLog.txt | 7 +++ contrib/sddsqlt3/core.c | 117 +++++++++++++++------------------------- 2 files changed, 50 insertions(+), 74 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index c44da00e38..8adb718c70 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,13 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2014-10-02 22:37 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * contrib/sddsqlt3/core.c + * decalre default size for numeric, blob and any fields + larger enough to store data after COPY TO + * decalre default size for string fields to at least 10 + * some simplifications + 2014-10-02 22:01 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * contrib/sddsqlt3/core.c * set default number of decimal places in float SQLITE3 values diff --git a/contrib/sddsqlt3/core.c b/contrib/sddsqlt3/core.c index af5b256730..b1414468e9 100644 --- a/contrib/sddsqlt3/core.c +++ b/contrib/sddsqlt3/core.c @@ -50,6 +50,7 @@ #include "hbapistr.h" #include "hbdate.h" #include "hbvm.h" +#include "hbset.h" #include "hbrddsql.h" @@ -299,7 +300,7 @@ static HB_ERRCODE sqlite3Open( SQLBASEAREAP pArea ) HB_SIZE nQueryLen; void * hQuery; HB_USHORT uiFields, uiIndex; - PHB_ITEM pItemEof, pItem; + PHB_ITEM pItemEof, pItem, pName = NULL; HB_ERRCODE errCode; char * szError; HB_BOOL bError; @@ -338,95 +339,63 @@ static HB_ERRCODE sqlite3Open( SQLBASEAREAP pArea ) uiFields = ( HB_USHORT ) sqlite3_column_count( st ); SELF_SETFIELDEXTENT( ( AREAP ) pArea, uiFields ); - pItemEof = hb_itemArrayNew( uiFields ); - -#if 0 - HB_TRACE( HB_TR_ALWAYS, ( "fieldcount=%d", iNameLen ) ); -#endif - errCode = 0; bError = HB_FALSE; + pItemEof = hb_itemArrayNew( uiFields ); for( uiIndex = 0; uiIndex < uiFields; ++uiIndex ) { DBFIELDINFO pFieldInfo; - PHB_ITEM pName; - - int iDataType; - int iSize; - int iDec; - - pName = S_HB_ITEMPUTSTR( NULL, sqlite3_column_name( st, uiIndex ) ); + memset( &pFieldInfo, 0, sizeof( pFieldInfo ) ); + pName = S_HB_ITEMPUTSTR( pName, sqlite3_column_name( st, uiIndex ) ); pFieldInfo.atomName = hb_itemGetCPtr( pName ); + pFieldInfo.uiType = sqlite3DeclType( st, uiIndex ); + pItem = hb_arrayGetItemPtr( pItemEof, uiIndex + 1 ); - iDataType = sqlite3DeclType( st, uiIndex ); - iSize = sqlite3_column_bytes( st, uiIndex ); - iDec = iDataType == HB_FT_LONG ? hb_setGetDecimals() : 0; - - pFieldInfo.uiType = ( HB_USHORT ) iDataType; - pFieldInfo.uiLen = ( HB_USHORT ) iSize; - pFieldInfo.uiDec = ( HB_USHORT ) iDec; - -#if 0 - HB_TRACE( HB_TR_ALWAYS, ( "field: name=%s type=%d len=%d dec=%d nullable=%d", pFieldInfo.atomName, iDataType, iSize, iDec ) ); -#endif - - if( pFieldInfo.uiType == HB_FT_NONE ) + switch( pFieldInfo.uiType ) { -#if 0 - HB_TRACE( HB_TR_ALWAYS, ( "new sql type=%d", iDataType ) ); -#endif - bError = HB_TRUE; - errCode = ( HB_ERRCODE ) iDataType; - pFieldInfo.uiType = HB_FT_NONE; + case HB_FT_STRING: + { + int iSize = sqlite3_column_bytes( st, uiIndex ); + char * pStr; + + pFieldInfo.uiLen = ( HB_USHORT ) HB_MAX( iSize, 10 ); + pStr = ( char * ) hb_xgrab( ( HB_SIZE ) pFieldInfo.uiLen + 1 ); + memset( pStr, ' ', pFieldInfo.uiLen ); + hb_itemPutCLPtr( pItem, pStr, pFieldInfo.uiLen ); + break; + } + case HB_FT_BLOB: + pFieldInfo.uiLen = 4; + hb_itemPutC( pItem, NULL ); + break; + + case HB_FT_INTEGER: + pFieldInfo.uiLen = 8; + hb_itemPutNInt( pItem, 0 ); + break; + + case HB_FT_LONG: + pFieldInfo.uiLen = 20; + pFieldInfo.uiDec = ( HB_USHORT ) hb_setGetDecimals(); + hb_itemPutNDDec( pItem, 0.0, pFieldInfo.uiDec ); + break; + + case HB_FT_ANY: + pFieldInfo.uiLen = 6; + break; + + default: + bError = HB_TRUE; } if( ! bError ) - { - switch( pFieldInfo.uiType ) - { - case HB_FT_STRING: - { - char * pStr = ( char * ) hb_xgrab( ( HB_SIZE ) pFieldInfo.uiLen + 1 ); - memset( pStr, ' ', pFieldInfo.uiLen ); - pStr[ pFieldInfo.uiLen ] = '\0'; - - pItem = hb_itemPutCLPtr( NULL, pStr, pFieldInfo.uiLen ); - break; - } - case HB_FT_BLOB: - pItem = hb_itemPutC( NULL, NULL ); - break; - - case HB_FT_INTEGER: - pItem = hb_itemPutNIntLen( NULL, 0, pFieldInfo.uiLen ); - break; - - case HB_FT_LONG: - pItem = hb_itemPutNDLen( NULL, 0.0, pFieldInfo.uiLen, pFieldInfo.uiDec ); - break; - - case HB_FT_ANY: - pItem = hb_itemNew( NULL ); - break; - - default: - pItem = hb_itemNew( NULL ); - bError = HB_TRUE; - } - - hb_arraySetForward( pItemEof, uiIndex + 1, pItem ); - hb_itemRelease( pItem ); - - if( ! bError ) - bError = ( SELF_ADDFIELD( ( AREAP ) pArea, &pFieldInfo ) == HB_FAILURE ); - } - - hb_itemRelease( pName ); + bError = ( SELF_ADDFIELD( ( AREAP ) pArea, &pFieldInfo ) == HB_FAILURE ); if( bError ) break; } + hb_itemRelease( pName ); if( bError ) {