cvs: php4 /ext/mssql php_mssql.c php_mssql.h

From: Date: Tue, 23 Oct 2001 16:34:52 +0000
Subject: cvs: php4 /ext/mssql php_mssql.c php_mssql.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-7964@lists.php.net to get a copy of this message
fmk Tue Oct 23 12:34:52 2001 EDT Modified files: /php4/ext/mssql php_mssql.h php_mssql.c Log: Patch for correct handling of DATETIME values. The patch is implemented with a parameter in php.ini controling if datetime values are converted with the new or the old method. Thanks to Michael Bretterklieber <mbretter@jawa.at> Index: php4/ext/mssql/php_mssql.h diff -u php4/ext/mssql/php_mssql.h:1.16 php4/ext/mssql/php_mssql.h:1.17 --- php4/ext/mssql/php_mssql.h:1.16 Sun Jul 29 21:56:30 2001 +++ php4/ext/mssql/php_mssql.h Tue Oct 23 12:34:52 2001 @@ -17,7 +17,7 @@ */ -/* $Id: php_mssql.h,v 1.16 2001/07/30 01:56:30 zeev Exp $ */ +/* $Id: php_mssql.h,v 1.17 2001/10/23 16:34:52 fmk Exp $ */ #ifndef PHP_MSSQL_H #define PHP_MSSQL_H @@ -114,8 +114,9 @@ long min_error_severity, min_message_severity; long cfg_min_error_severity, cfg_min_message_severity; long compatability_mode, connect_timeout, timeout; - void (*get_column_content)(mssql_link *mssql_ptr,int offset,pval *result,int column_type); + void (*get_column_content)(mssql_link *mssql_ptr,int offset,pval *result,int column_type TSRMLS_DC); long textsize, textlimit, batchsize; + long datetimeconvert; HashTable *resource_list, *resource_plist; ZEND_END_MODULE_GLOBALS(mssql) Index: php4/ext/mssql/php_mssql.c diff -u php4/ext/mssql/php_mssql.c:1.70 php4/ext/mssql/php_mssql.c:1.71 --- php4/ext/mssql/php_mssql.c:1.70 Thu Oct 11 19:33:16 2001 +++ php4/ext/mssql/php_mssql.c Tue Oct 23 12:34:52 2001 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_mssql.c,v 1.70 2001/10/11 23:33:16 ssb Exp $ */ +/* $Id: php_mssql.c,v 1.71 2001/10/23 16:34:52 fmk Exp $ */ #ifdef COMPILE_DL_MSSQL #define HAVE_MSSQL 1 @@ -42,8 +42,8 @@ static int le_result, le_link, le_plink, le_statement; -static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type); -static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type); +static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type TSRMLS_DC); +static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type TSRMLS_DC); static void _mssql_bind_hash_dtor(void *data); static unsigned char a3_arg_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE }; @@ -134,6 +134,7 @@ STD_PHP_INI_ENTRY_EX("mssql.textsize", "-1", PHP_INI_ALL, OnUpdateInt, textsize, zend_mssql_globals, mssql_globals, display_text_size) STD_PHP_INI_ENTRY_EX("mssql.textlimit", "-1", PHP_INI_ALL, OnUpdateInt, textlimit, zend_mssql_globals, mssql_globals, display_text_size) STD_PHP_INI_ENTRY_EX("mssql.batchsize", "0", PHP_INI_ALL, OnUpdateInt, batchsize, zend_mssql_globals, mssql_globals, display_link_numbers) + STD_PHP_INI_BOOLEAN("mssql.datetimeconvert", "1", PHP_INI_ALL, OnUpdateBool, datetimeconvert, zend_mssql_globals, mssql_globals) PHP_INI_END() /* error handler */ @@ -736,7 +737,7 @@ /* }}} */ -static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type) +static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type TSRMLS_DC) { if (dbdatlen(mssql_ptr->link,offset) == 0) { ZVAL_NULL(result); @@ -793,13 +794,28 @@ default: { if (dbwillconvert(column_type,SQLCHAR)) { char *res_buf; + DBDATEREC dateinfo; int res_length = dbdatlen(mssql_ptr->link,offset); - if (column_type == SQLDATETIM4) res_length += 14; - if (column_type == SQLDATETIME) res_length += 10; + + + if ((column_type != SQLDATETIME) || MS_SQL_G(datetimeconvert)) { + + if (column_type == SQLDATETIM4) res_length += 14; + if (column_type == SQLDATETIME) res_length += 10; + + res_buf = (unsigned char *) emalloc(res_length + 1); + res_length = dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length, SQLCHAR,res_buf,-1); + + } else { + + dbdatecrack(mssql_ptr->link, &dateinfo, (DBDATETIME *) dbdata(mssql_ptr->link,offset)); - res_buf = (char *) emalloc(res_length + 1); - res_length = dbconvert(NULL,column_type,dbdata(mssql_ptr->link,offset), res_length,SQLCHAR,res_buf,-1); + res_length = 20; + res_buf = (unsigned char *) emalloc(res_length + 1); + sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" , dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute, dateinfo.second); + } + Z_STRVAL_P(result) = res_buf; Z_STRLEN_P(result) = res_length; Z_TYPE_P(result) = IS_STRING; @@ -811,7 +827,7 @@ } } -static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type) +static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type TSRMLS_DC) { if (dbdatlen(mssql_ptr->link,offset) == 0) { ZVAL_NULL(result); @@ -835,12 +851,26 @@ } else if (dbwillconvert(coltype(offset),SQLCHAR)) { unsigned char *res_buf; + DBDATEREC dateinfo; int res_length = dbdatlen(mssql_ptr->link,offset); - if (column_type == SQLDATETIM4) res_length += 14; - if (column_type == SQLDATETIME) res_length += 10; - - res_buf = (unsigned char *) emalloc(res_length + 1); - res_length = dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length, SQLCHAR,res_buf,-1); + + if ((column_type != SQLDATETIME) || MS_SQL_G(datetimeconvert)) { + + if (column_type == SQLDATETIM4) res_length += 14; + if (column_type == SQLDATETIME) res_length += 10; + + res_buf = (unsigned char *) emalloc(res_length + 1); + res_length = dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length, SQLCHAR,res_buf,-1); + + } else { + + dbdatecrack(mssql_ptr->link, &dateinfo, (DBDATETIME *) dbdata(mssql_ptr->link,offset)); + + res_length = 20; + res_buf = (unsigned char *) emalloc(res_length + 1); + + sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" , dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute, dateinfo.second); + } Z_STRVAL_P(result) = res_buf; Z_STRLEN_P(result) = res_length; @@ -913,7 +943,7 @@ result->data[i] = (zval *) emalloc(sizeof(zval)*result->num_fields); for (j=0; j<result->num_fields; j++) { INIT_ZVAL(result->data[i][j]); - MS_SQL_G(get_column_content(mssql_ptr, j+1, &result->data[i][j], column_types[j])); + MS_SQL_G(get_column_content(mssql_ptr, j+1, &result->data[i][j], column_types[j] TSRMLS_CC)); } if (i<result->batchsize || result->batchsize==0) { i++;

« previous php.cvs (#7964) next »