cvs: php4 /ext/mssql php_mssql.c php_mssql.h
| From: | Frank M. Kromann | 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++;