]> granicus.if.org Git - php/commitdiff
Treat DATETIME2 columns like DATETIME
authorfandrieu <fandrieu@gmail.com>
Fri, 10 Nov 2017 22:18:59 +0000 (17:18 -0500)
committerAdam Baratz <adambaratz@php.net>
Fri, 10 Nov 2017 22:20:33 +0000 (17:20 -0500)
NEWS
ext/pdo_dblib/dblib_stmt.c
ext/pdo_dblib/php_pdo_dblib_int.h
ext/pdo_dblib/tests/datetime2.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 9567993c76c48e94197087aacf77dec55c40ae1e..40234dc2b7e47b5643d11ca8de9bca6c1f48f446 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -84,6 +84,7 @@ PHP                                                                        NEWS
   . Fixed bug #74243 (allow locales.conf to drive datetime format). (fandrieu)
   . Expose TDS version as \PDO::DBLIB_ATTR_TDS_VERSION attribute on \PDO
     instance. (fandrieu)
+  . Treat DATETIME2 columns like DATETIME. (fandrieu)
 
 - PDO_OCI:
   . Fixed bug #74631 (PDO_PCO with PHP-FPM: OCI environment initialized
index 3e4625ee67066b797f65c5c5b1c9c08d63ed636b..b4e437282126925aff64883220d2af1c05246ed2 100644 (file)
@@ -294,6 +294,9 @@ static int pdo_dblib_stmt_should_stringify_col(pdo_stmt_t *stmt, int coltype)
                        }
                        break;
 
+#ifdef SQLMSDATETIME2
+               case SQLMSDATETIME2:
+#endif
                case SQLDATETIME:
                case SQLDATETIM4:
                        if (H->datetime_convert) {
@@ -388,6 +391,9 @@ static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr,
 
                                        break;
                                }
+#ifdef SQLMSDATETIME2
+                               case SQLMSDATETIME2:
+#endif
                                case SQLDATETIME:
                                case SQLDATETIM4: {
                                        size_t dl;
index d1be37ee79b928d7b222613bc48223ed1b3c3ac4..cae7b77394ecb237e7b903fc91213c5f5aaeacba 100644 (file)
@@ -64,6 +64,9 @@
 # define SQLDATETIME   SYBDATETIME
 # define SQLDATETIM4   SYBDATETIME4
 # define SQLDATETIMN   SYBDATETIMN
+# ifdef SYBMSDATETIME2
+# define SQLMSDATETIME2  SYBMSDATETIME2
+# endif
 # define SQLMONEY              SYBMONEY
 # define SQLMONEY4             SYBMONEY4
 # define SQLMONEYN             SYBMONEYN
diff --git a/ext/pdo_dblib/tests/datetime2.phpt b/ext/pdo_dblib/tests/datetime2.phpt
new file mode 100644 (file)
index 0000000..becf1b0
--- /dev/null
@@ -0,0 +1,36 @@
+--TEST--
+PDO_DBLIB: DATETIME2 column data
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo_dblib')) die('skip not loaded');
+require __DIR__ . '/config.inc';
+if (in_array($db->getAttribute(PDO::DBLIB_ATTR_TDS_VERSION), ['4.2', '4.6', '5.0', '6.0', '7.0', '7.1', '7.2'])) die('skip feature unsupported by this TDS version');
+?>
+--FILE--
+<?php
+require __DIR__ . '/config.inc';
+
+$sql = "SELECT convert(datetime2, '10231017 10:22:44.1355318') AS [d]";
+
+var_dump($db->getAttribute(PDO::DBLIB_ATTR_DATETIME_CONVERT));
+
+$stmt = $db->query($sql);
+var_dump($stmt->fetch(PDO::FETCH_ASSOC));
+
+$db->setAttribute(PDO::DBLIB_ATTR_DATETIME_CONVERT, 1);
+var_dump($db->getAttribute(PDO::DBLIB_ATTR_DATETIME_CONVERT));
+$stmt = $db->query($sql);
+var_dump($stmt->fetch(PDO::FETCH_ASSOC));
+
+?>
+--EXPECT--
+bool(false)
+array(1) {
+  ["d"]=>
+  string(19) "1023-10-17 10:22:44"
+}
+bool(true)
+array(1) {
+  ["d"]=>
+  string(30) "Oct 17 1023 10:22:44:1355318AM"
+}