1--TEST--
2PDO_DBLIB: Uniqueidentifier column data type stringifying
3--SKIPIF--
4<?php
5if (!extension_loaded('pdo_dblib')) die('skip not loaded');
6require __DIR__ . '/config.inc';
7if (in_array($db->getAttribute(PDO::DBLIB_ATTR_TDS_VERSION), ['4.2', '4.6'])) die('skip feature unsupported by this TDS version');
8?>
9--FILE--
10<?php
11require __DIR__ . '/config.inc';
12
13
14$testGUID = '82A88958-672B-4C22-842F-216E2B88E72A';
15$testGUIDBinary = base64_decode('WImogitnIkyELyFuK4jnKg==');
16
17$sql = "SELECT CAST('$testGUID' as uniqueidentifier) as [guid]";
18
19//--------------------------------------------------------------------------------
20// 1. Get and Set the attribute
21//--------------------------------------------------------------------------------
22$db->setAttribute(PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER, true);
23var_dump(true === $db->getAttribute(PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER));
24$db->setAttribute(PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER, false);
25var_dump(false === $db->getAttribute(PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER));
26
27
28//--------------------------------------------------------------------------------
29// 2. Binary
30//--------------------------------------------------------------------------------
31$stmt = $db->query($sql);
32$row = $stmt->fetch(PDO::FETCH_ASSOC);
33
34var_dump($row['guid'] === $testGUIDBinary);
35
36
37//--------------------------------------------------------------------------------
38// 3. PDO::ATTR_STRINGIFY_FETCHES must not affect `uniqueidentifier` representation
39//--------------------------------------------------------------------------------
40$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
41$stmt = $db->query($sql);
42$row = $stmt->fetch(PDO::FETCH_ASSOC);
43$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
44
45var_dump($row['guid'] === $testGUIDBinary);
46
47
48//--------------------------------------------------------------------------------
49// 4. Stringifying
50// ! With TDS protocol version <7.0 binary will be returned and the test will fail !
51// TODO: something from PDO::ATTR_SERVER_VERSION, PDO::ATTR_CLIENT_VERSION or PDO::ATTR_SERVER_INFO should be used
52// to get TDS version and skip this test in this case.
53//--------------------------------------------------------------------------------
54$db->setAttribute(PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER, true);
55$stmt = $db->query($sql);
56$row = $stmt->fetch(PDO::FETCH_ASSOC);
57
58var_dump($row['guid'] === $testGUID);
59var_dump($row['guid']);
60
61?>
62--EXPECT--
63bool(true)
64bool(true)
65bool(true)
66bool(true)
67bool(true)
68string(36) "82A88958-672B-4C22-842F-216E2B88E72A"
69