fmk Mon Aug 14 18:40:20 2006 UTC
Modified files: (Branch: PHP_5_1)
/php-src php.ini-dist php.ini-recommended
/php-src/ext/fbsql php_fbsql.c php_fbsql.h
Log:
MFH: 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.231.2.10&r2=1.231.2.11&diff_format=u
Index: php-src/php.ini-dist
diff -u php-src/php.ini-dist:1.231.2.10 php-src/php.ini-dist:1.231.2.11
--- php-src/php.ini-dist:1.231.2.10 Wed Feb 8 23:43:48 2006
+++ php-src/php.ini-dist Mon Aug 14 18:40:19 2006
@@ -1148,6 +1148,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.179.2.11&r2=1.179.2.12&diff_format=u
Index: php-src/php.ini-recommended
diff -u php-src/php.ini-recommended:1.179.2.11
php-src/php.ini-recommended:1.179.2.12
--- php-src/php.ini-recommended:1.179.2.11 Wed Feb 8 23:43:48 2006
+++ php-src/php.ini-recommended Mon Aug 14 18:40:19 2006
@@ -1206,6 +1206,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.114.2.3&r2=1.114.2.4&diff_format=u
Index: php-src/ext/fbsql/php_fbsql.c
diff -u php-src/ext/fbsql/php_fbsql.c:1.114.2.3
php-src/ext/fbsql/php_fbsql.c:1.114.2.4
--- php-src/ext/fbsql/php_fbsql.c:1.114.2.3 Sun Jan 1 12:50:06 2006
+++ php-src/ext/fbsql/php_fbsql.c Mon Aug 14 18:40:20 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_fbsql.c,v 1.114.2.3 2006/01/01 12:50:06 sniper Exp $ */
+/* $Id: php_fbsql.c,v 1.114.2.4 2006/08/14 18:40:20 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>
@@ -379,6 +383,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)
@@ -540,7 +545,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;
@@ -2509,8 +2533,6 @@
case FB_Float:
case FB_Real:
case FB_Double:
- case FB_Numeric:
- case FB_Decimal:
{
double v = *((double*)data);
char b[128];
@@ -2519,6 +2541,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:
{
@@ -2589,7 +2623,6 @@
case FB_Date:
case FB_Time:
case FB_TimeTZ:
- case FB_Timestamp:
case FB_TimestampTZ:
{
char* v = (char*)data;
@@ -2597,6 +2630,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.31.2.1&r2=1.31.2.2&diff_format=u
Index: php-src/ext/fbsql/php_fbsql.h
diff -u php-src/ext/fbsql/php_fbsql.h:1.31.2.1
php-src/ext/fbsql/php_fbsql.h:1.31.2.2
--- php-src/ext/fbsql/php_fbsql.h:1.31.2.1 Sun Jan 1 12:50:06 2006
+++ php-src/ext/fbsql/php_fbsql.h Mon Aug 14 18:40:20 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_fbsql.h,v 1.31.2.1 2006/01/01 12:50:06 sniper Exp $ */
+/* $Id: php_fbsql.h,v 1.31.2.2 2006/08/14 18:40:20 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