MSSQL extension BugFix FreeTDS, datetime with milliseconds

[email protected] (Michael Bretterklieber)
Newsgroups php.dev
Message-ID <[email protected]>
Hi Frank!

In the attached patches I fixed a bug when using the mssql extension 
with FreeTDS and deactivated datetimeconvert. FreeTDS returns the month 
starting with 0 (=jan), but the MSoft-lib starts with 1.

I added another php.ini switch (datetimemsec) for adding milliseconds to 
datetime-values when datetimeconvert is deactivated. This was a user 
request, because he has otherwise no chance to get the milliseconds back 
from the db.

I hope that these patches are good enough for a commit,

thanx,
bye,
-- 
------------------------------- -------------------------------------
Michael Bretterklieber        - [email protected]
JAWA Management Software GmbH - http://www.jawa.at
Liebenauer Hauptstr. 200        -------------- privat ---------------
A-8041 GRAZ                     GSM: ++43-(0)676-93 96 698
Tel: ++43-(0)316-403274-12      E-mail:   [email protected]
Fax: ++43-(0)316-403274-10      http://www.bretterklieber.com
------------------------------- -------------------------------------
"...the number of UNIX installations has grown to 10, with more
expected..." - Dennis Ritchie and Ken Thompson, June 1972
mssql_msec.diff (text/plain, 3.2 KB)
Index: php_mssql.c
===================================================================
RCS file: /repository/php4/ext/mssql/php_mssql.c,v
retrieving revision 1.86.2.15
diff -u -r1.86.2.15 php_mssql.c
--- php_mssql.c	11 Feb 2003 01:23:49 -0000	1.86.2.15
+++ php_mssql.c	2 Mar 2003 14:28:56 -0000
@@ -137,6 +137,7 @@
 	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)
+	STD_PHP_INI_BOOLEAN("mssql.datetimemsec",			"0",	PHP_INI_ALL,	OnUpdateBool,	datetimemsec,				zend_mssql_globals,		mssql_globals)
 	STD_PHP_INI_BOOLEAN("mssql.secure_connection",		"0",	PHP_INI_SYSTEM, OnUpdateBool,	secure_connection,			zend_mssql_globals,		mssql_globals)
 	STD_PHP_INI_ENTRY_EX("mssql.max_procs",				"25",	PHP_INI_ALL,	OnUpdateInt,	max_procs,					zend_mssql_globals,		mssql_globals,	display_link_numbers)
 PHP_INI_END()
@@ -839,11 +840,17 @@
 						dbdatecrack(mssql_ptr->link, &dateinfo, (DBDATETIME *) dbdata(mssql_ptr->link,offset));
 					}
 			
-					res_length = 19;
-					res_buf = (unsigned char *) emalloc(res_length+1);
+					res_buf = (unsigned char *) emalloc(30);
+#if HAVE_FREETDS
+					dateinfo.month++;
+#endif
 					sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" , dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute, dateinfo.second);
+					if (MS_SQL_G(datetimemsec)) {
+						sprintf(&res_buf[strlen(res_buf)],  ".%03d", dateinfo.millisecond);
+					}
+					res_length = strlen(res_buf);
 				}
-		
+
 				Z_STRVAL_P(result) = res_buf;
 				Z_STRLEN_P(result) = res_length;
 				Z_TYPE_P(result) = IS_STRING;
@@ -900,9 +907,16 @@
 				dbdatecrack(mssql_ptr->link, &dateinfo, (DBDATETIME *) dbdata(mssql_ptr->link,offset));
 			}
 			
-			res_length = 19;
-			res_buf = (unsigned char *) emalloc(res_length+1);
+			res_length = 30;
+			res_buf = (unsigned char *) emalloc(res_length);
+#if HAVE_FREETDS
+			dateinfo.month++;
+#endif
 			sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" , dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute, dateinfo.second);
+			if (MS_SQL_G(datetimemsec)) {
+				sprintf(&res_buf[strlen(res_buf)],  ".%03d", dateinfo.millisecond);
+			}
+			res_length = strlen(res_buf);
 		}
 
 		Z_STRVAL_P(result) = res_buf;
Index: php_mssql.h
===================================================================
RCS file: /repository/php4/ext/mssql/php_mssql.h,v
retrieving revision 1.23.4.7
diff -u -r1.23.4.7 php_mssql.h
--- php_mssql.h	9 Feb 2003 07:49:34 -0000	1.23.4.7
+++ php_mssql.h	2 Mar 2003 14:28:57 -0000
@@ -160,7 +160,7 @@
 	zend_bool compatability_mode;
 	void (*get_column_content)(mssql_link *mssql_ptr,int offset,pval *result,int column_type  TSRMLS_DC);
 	long textsize, textlimit, batchsize;
-	zend_bool datetimeconvert;
+	zend_bool datetimeconvert, datetimemsec;
 	HashTable *resource_list, *resource_plist;
 	zend_bool secure_connection;
 	long max_procs;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.