58
58
59
59
#define HAVE_FBSQL 1
60
60
61
+ #ifndef min
62
+ # define min (a ,b ) ((a)<(b)?(a):(b))
63
+ #endif
64
+
61
65
#if HAVE_FBSQL
62
66
#include "php_fbsql.h"
63
67
#include <signal.h>
@@ -737,6 +741,7 @@ PHP_INI_BEGIN()
737
741
STD_PHP_INI_BOOLEAN ("fbsql.allow_persistent" , "1" , PHP_INI_SYSTEM , OnUpdateBool , allowPersistent , zend_fbsql_globals , fbsql_globals )
738
742
STD_PHP_INI_BOOLEAN ("fbsql.generate_warnings" , "0" , PHP_INI_SYSTEM , OnUpdateBool , generateWarnings , zend_fbsql_globals , fbsql_globals )
739
743
STD_PHP_INI_BOOLEAN ("fbsql.autocommit" , "1" , PHP_INI_SYSTEM , OnUpdateBool , autoCommit , zend_fbsql_globals , fbsql_globals )
744
+ STD_PHP_INI_BOOLEAN ("fbsql.show_timestamp_decimals" , "0" , PHP_INI_SYSTEM , OnUpdateBool , showTimestampDecimals , zend_fbsql_globals , fbsql_globals )
740
745
STD_PHP_INI_ENTRY_EX ("fbsql.max_persistent" , "-1" , PHP_INI_SYSTEM , OnUpdateLong , maxPersistent , zend_fbsql_globals , fbsql_globals , display_link_numbers )
741
746
STD_PHP_INI_ENTRY_EX ("fbsql.max_links" , "128" , PHP_INI_SYSTEM , OnUpdateLong , maxLinks , zend_fbsql_globals , fbsql_globals , display_link_numbers )
742
747
STD_PHP_INI_ENTRY_EX ("fbsql.max_connections" , "128" , PHP_INI_SYSTEM , OnUpdateLong , maxConnections , zend_fbsql_globals , fbsql_globals , display_link_numbers )
@@ -896,7 +901,26 @@ static void php_fbsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
896
901
if (persistent ) {
897
902
if (zend_hash_find (& EG (persistent_list ), name , strlen (name ) + 1 , (void * * )& lep ) == SUCCESS )
898
903
{
904
+ FBCMetaData * md ;
899
905
phpLink = (PHPFBLink * )lep -> ptr ;
906
+ // Check if connection still there.
907
+ md = fbcdcRollback (phpLink -> connection );
908
+ if ( !mdOk (phpLink , md , "Rollback;" ) ) {
909
+ if (FB_SQL_G (generateWarnings )) {
910
+ php_error_docref (NULL TSRMLS_CC , E_WARNING , "FrontBase link is not connected, ty to reconnect." );
911
+ }
912
+ // Make sure select_db will reconnect.
913
+ fbcmdRelease (md );
914
+ fbcdcClose (phpLink -> connection );
915
+ fbcdcRelease (phpLink -> connection );
916
+ free (phpLink -> connection );
917
+ phpLink -> connection = NULL ;
918
+ if (phpLink -> databaseName ) free (phpLink -> databaseName );
919
+ phpLink -> databaseName = NULL ;
920
+ }
921
+ else {
922
+ fbcmdRelease (md );
923
+ }
900
924
}
901
925
else {
902
926
zend_rsrc_list_entry le ;
@@ -2866,8 +2890,6 @@ void phpfbColumnAsString(PHPFBResult* result, int column, void* data , int* leng
2866
2890
case FB_Float :
2867
2891
case FB_Real :
2868
2892
case FB_Double :
2869
- case FB_Numeric :
2870
- case FB_Decimal :
2871
2893
{
2872
2894
double v = * ((double * )data );
2873
2895
char b [128 ];
@@ -2876,6 +2898,18 @@ void phpfbColumnAsString(PHPFBResult* result, int column, void* data , int* leng
2876
2898
}
2877
2899
break ;
2878
2900
2901
+ case FB_Numeric :
2902
+ case FB_Decimal :
2903
+ {
2904
+ unsigned precision = fbcdmdPrecision (dtmd );
2905
+ unsigned scale = fbcdmdScale (dtmd );
2906
+ double v = * ((double * )data );
2907
+ char b [128 ];
2908
+ snprintf (b , sizeof (b ), "%.*f" , scale , v );
2909
+ phpfbestrdup (b , length , value );
2910
+ }
2911
+ break ;
2912
+
2879
2913
case FB_Character :
2880
2914
case FB_VCharacter :
2881
2915
{
@@ -2946,14 +2980,34 @@ void phpfbColumnAsString(PHPFBResult* result, int column, void* data , int* leng
2946
2980
case FB_Date :
2947
2981
case FB_Time :
2948
2982
case FB_TimeTZ :
2949
- case FB_Timestamp :
2950
2983
case FB_TimestampTZ :
2951
2984
{
2952
2985
char * v = (char * )data ;
2953
2986
phpfbestrdup (v , length , value );
2954
2987
}
2955
2988
break ;
2956
2989
2990
+ case FB_Timestamp :
2991
+ {
2992
+ char * v = (char * )data ;
2993
+ if (FB_SQL_G (showTimestampDecimals )) {
2994
+ phpfbestrdup (v , length , value );
2995
+ }
2996
+ // Copy only YYYY-MM-DD HH:MM:SS
2997
+ else {
2998
+ int stringLength = strlen (v );
2999
+ stringLength = min (stringLength , 19 );
3000
+ if (value ) {
3001
+ char * r = emalloc (stringLength + 1 );
3002
+ memcpy (r , v , stringLength );
3003
+ r [stringLength ] = 0 ;
3004
+ * value = r ;
3005
+ }
3006
+ * length = stringLength ;
3007
+ }
3008
+ }
3009
+ break ;
3010
+
2957
3011
case FB_YearMonth :
2958
3012
{
2959
3013
char b [128 ];
0 commit comments