fmk             Mon Aug 14 18:39:30 2006 UTC

  Modified files:              
    /php-src    php.ini-dist php.ini-recommended 
    /php-src/ext/fbsql  php_fbsql.c php_fbsql.h 
  Log:
  Cleanup before reusing failed persistant connection. Better formating of 
timestamp and decimal values
  
http://cvs.php.net/viewvc.cgi/php-src/php.ini-dist?r1=1.251&r2=1.252&diff_format=u
Index: php-src/php.ini-dist
diff -u php-src/php.ini-dist:1.251 php-src/php.ini-dist:1.252
--- php-src/php.ini-dist:1.251  Thu Aug 10 13:56:54 2006
+++ php-src/php.ini-dist        Mon Aug 14 18:39:30 2006
@@ -1072,6 +1072,7 @@
 [FrontBase]
 ;fbsql.allow_persistent = On
 ;fbsql.autocommit = On
+;fbsql.show_timestamp_decimals = Off
 ;fbsql.default_database =
 ;fbsql.default_database_password =
 ;fbsql.default_host =
http://cvs.php.net/viewvc.cgi/php-src/php.ini-recommended?r1=1.200&r2=1.201&diff_format=u
Index: php-src/php.ini-recommended
diff -u php-src/php.ini-recommended:1.200 php-src/php.ini-recommended:1.201
--- php-src/php.ini-recommended:1.200   Thu Aug 10 13:56:54 2006
+++ php-src/php.ini-recommended Mon Aug 14 18:39:30 2006
@@ -1103,6 +1103,7 @@
 [FrontBase]
 ;fbsql.allow_persistent = On
 ;fbsql.autocommit = On
+;fbsql.show_timestamp_decimals = Off
 ;fbsql.default_database =
 ;fbsql.default_database_password =
 ;fbsql.default_host =
http://cvs.php.net/viewvc.cgi/php-src/ext/fbsql/php_fbsql.c?r1=1.119&r2=1.120&diff_format=u
Index: php-src/ext/fbsql/php_fbsql.c
diff -u php-src/ext/fbsql/php_fbsql.c:1.119 php-src/ext/fbsql/php_fbsql.c:1.120
--- php-src/ext/fbsql/php_fbsql.c:1.119 Wed Jun 14 21:29:22 2006
+++ php-src/ext/fbsql/php_fbsql.c       Mon Aug 14 18:39:30 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_fbsql.c,v 1.119 2006/06/14 21:29:22 bjori Exp $ */
+/* $Id: php_fbsql.c,v 1.120 2006/08/14 18:39:30 fmk Exp $ */
 
 /* TODO:
  *
@@ -58,6 +58,10 @@
 
 #define HAVE_FBSQL 1
 
+#ifndef min
+# define min(a,b) ((a)<(b)?(a):(b))
+#endif
+
 #if HAVE_FBSQL
 #include "php_fbsql.h"
 #include <signal.h>
@@ -737,6 +741,7 @@
        STD_PHP_INI_BOOLEAN  ("fbsql.allow_persistent",                         
"1",            PHP_INI_SYSTEM, OnUpdateBool,   allowPersistent,  
zend_fbsql_globals, fbsql_globals)
        STD_PHP_INI_BOOLEAN  ("fbsql.generate_warnings",                        
"0",            PHP_INI_SYSTEM, OnUpdateBool,   generateWarnings, 
zend_fbsql_globals, fbsql_globals)
        STD_PHP_INI_BOOLEAN  ("fbsql.autocommit",                               
        "1",            PHP_INI_SYSTEM, OnUpdateBool,   autoCommit,           
zend_fbsql_globals, fbsql_globals)
+       STD_PHP_INI_BOOLEAN  ("fbsql.show_timestamp_decimals",          "0",    
        PHP_INI_SYSTEM, OnUpdateBool,   showTimestampDecimals,  
zend_fbsql_globals,     fbsql_globals)
        STD_PHP_INI_ENTRY_EX ("fbsql.max_persistent",                           
"-1",           PHP_INI_SYSTEM, OnUpdateLong,   maxPersistent,    
zend_fbsql_globals, fbsql_globals, display_link_numbers)
        STD_PHP_INI_ENTRY_EX ("fbsql.max_links",                                
        "128",          PHP_INI_SYSTEM, OnUpdateLong,   maxLinks,         
zend_fbsql_globals, fbsql_globals, display_link_numbers)
        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 @@
        if (persistent) {
                if (zend_hash_find(&EG(persistent_list), name, strlen(name) + 
1, (void **)&lep) == SUCCESS)
                {
+                       FBCMetaData *md;
                        phpLink = (PHPFBLink*)lep->ptr;
+                       // Check if connection still there.
+                       md = fbcdcRollback(phpLink->connection);
+                       if ( !mdOk(phpLink, md, "Rollback;") ) {
+                               if (FB_SQL_G(generateWarnings)) {
+                                       php_error_docref(NULL TSRMLS_CC, 
E_WARNING, "FrontBase link is not connected, ty to reconnect.");
+                               }
+                               // Make sure select_db will reconnect.
+                               fbcmdRelease(md);
+                               fbcdcClose(phpLink->connection);
+                               fbcdcRelease(phpLink->connection);
+                               free(phpLink->connection);
+                               phpLink->connection = NULL;
+                               if (phpLink->databaseName) 
free(phpLink->databaseName);
+                               phpLink->databaseName = NULL;
+                       }
+                       else {
+                               fbcmdRelease(md);
+                       }
                }
                else {
                        zend_rsrc_list_entry le;
@@ -2866,8 +2890,6 @@
                case FB_Float:
                case FB_Real:
                case FB_Double:
-               case FB_Numeric:
-               case FB_Decimal:
                {
                        double v = *((double*)data);
                        char b[128];
@@ -2876,6 +2898,18 @@
                }
                break;
 
+               case FB_Numeric:
+               case FB_Decimal:
+               {
+                       unsigned precision = fbcdmdPrecision(dtmd);
+                       unsigned scale = fbcdmdScale(dtmd);
+                       double v = *((double*)data);
+                       char b[128];
+                       snprintf(b, sizeof(b), "%.*f", scale, v);
+                       phpfbestrdup(b, length, value);
+               }
+               break;
+               
                case FB_Character:
                case FB_VCharacter:
                {
@@ -2946,7 +2980,6 @@
                case FB_Date:
                case FB_Time:
                case FB_TimeTZ:
-               case FB_Timestamp:
                case FB_TimestampTZ:
                {
                        char* v = (char*)data;
@@ -2954,6 +2987,27 @@
                }
                break;
 
+               case FB_Timestamp:
+               {
+                       char* v = (char*)data;
+                       if (FB_SQL_G(showTimestampDecimals)) {
+                               phpfbestrdup(v, length, value);
+                       }
+                       // Copy only YYYY-MM-DD HH:MM:SS
+                       else {
+                               int stringLength = strlen(v);
+                               stringLength = min(stringLength, 19);
+                               if (value) {
+                                       char* r = emalloc(stringLength+1);
+                                       memcpy(r, v, stringLength);
+                                       r[stringLength] = 0;
+                                       *value = r;
+                               }
+                               *length = stringLength;
+                       }
+               }
+               break;
+               
                case FB_YearMonth:
                {
                        char b[128];
http://cvs.php.net/viewvc.cgi/php-src/ext/fbsql/php_fbsql.h?r1=1.32&r2=1.33&diff_format=u
Index: php-src/ext/fbsql/php_fbsql.h
diff -u php-src/ext/fbsql/php_fbsql.h:1.32 php-src/ext/fbsql/php_fbsql.h:1.33
--- php-src/ext/fbsql/php_fbsql.h:1.32  Sun Jan  1 13:09:49 2006
+++ php-src/ext/fbsql/php_fbsql.h       Mon Aug 14 18:39:30 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_fbsql.h,v 1.32 2006/01/01 13:09:49 sniper Exp $ */
+/* $Id: php_fbsql.h,v 1.33 2006/08/14 18:39:30 fmk Exp $ */
 
 #define HAVE_FBSQL 1
 
@@ -108,23 +108,23 @@
 static void php_fbsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent);
 
 ZEND_BEGIN_MODULE_GLOBALS(fbsql)
-   zend_bool allowPersistent;
-   zend_bool generateWarnings;
-   zend_bool autoCommit;
-   long maxPersistent;
-   long maxLinks;
-   long maxConnections;
-   long maxResults;
-   long batchSize;
-   char *hostName;
-   char *databaseName;
-   char *databasePassword;
-   char *userName;
-   char *userPassword;
-   long persistentCount;
-   long linkCount;
-   long linkIndex;
-
+       zend_bool allowPersistent;
+       zend_bool generateWarnings;
+       zend_bool autoCommit;
+       zend_bool showTimestampDecimals;
+       long maxPersistent;
+       long maxLinks;
+       long maxConnections;
+       long maxResults;
+       long batchSize;
+       char *hostName;
+       char *databaseName;
+       char *databasePassword;
+       char *userName;
+       char *userPassword;
+       long persistentCount;
+       long linkCount;
+       long linkIndex;
 ZEND_END_MODULE_GLOBALS(fbsql)
 
 #ifdef ZTS

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to