From 66f3f44a4e43ac55016d8c491b95aa7d9ca12567 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Thu, 25 Sep 2014 00:04:42 +0200 Subject: [PATCH] 2014-09-25 00:04 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * contrib/sddsqlt3/core.c + map columns with SQLITE_NULL values as HB_FT_ANY fields --- ChangeLog.txt | 4 ++++ contrib/sddsqlt3/core.c | 30 +++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 60325b70f1..1f56b7e8ec 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,10 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2014-09-25 00:04 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * contrib/sddsqlt3/core.c + + map columns with SQLITE_NULL values as HB_FT_ANY fields + 2014-09-23 13:18 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * contrib/hbcurl/core.c ! added protection against operation on NULL pointers borrowed from diff --git a/contrib/sddsqlt3/core.c b/contrib/sddsqlt3/core.c index 70f2d16699..2ced3edeca 100644 --- a/contrib/sddsqlt3/core.c +++ b/contrib/sddsqlt3/core.c @@ -334,6 +334,10 @@ static HB_ERRCODE sqlite3Open( SQLBASEAREAP pArea ) pFieldInfo.uiType = HB_FT_BLOB; break; + case SQLITE_NULL: + pFieldInfo.uiType = HB_FT_ANY; + break; + default: #if 0 HB_TRACE( HB_TR_ALWAYS, ( "new sql type=%d", iDataType ) ); @@ -369,6 +373,10 @@ static HB_ERRCODE sqlite3Open( SQLBASEAREAP pArea ) 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; @@ -442,8 +450,28 @@ static HB_ERRCODE sqlite3GoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo ) { PHB_ITEM pItem = NULL; LPFIELD pField = pArea->area.lpFields + ui; + HB_USHORT uiType = pField->uiType; - switch( pField->uiType ) + if( uiType == HB_FT_ANY ) + { + switch( sqlite3_column_type( st, ui ) ) + { + case SQLITE_TEXT: + uiType = HB_FT_STRING; + break; + + case SQLITE_FLOAT: + case SQLITE_INTEGER: + uiType = HB_FT_LONG; + break; + + case SQLITE_BLOB: + uiType = HB_FT_BLOB; + break; + } + } + + switch( uiType ) { case HB_FT_STRING: pItem = S_HB_ITEMPUTSTR( NULL, ( const char * ) sqlite3_column_text( st, ui ) );