1--TEST--
2PDO_Firebird: Supported Firebird 4.0 datatypes
3--EXTENSIONS--
4pdo_firebird
5--SKIPIF--
6<?php require('skipif.inc');
7if (Pdo\Firebird::getApiVersion() < 40) {
8	die('skip: Firebird API version must be greater than or equal to 40');
9}
10require 'testdb.inc';
11$dbh = getDbConnection();
12$stmt = $dbh->query("SELECT RDB\$get_context('SYSTEM', 'ENGINE_VERSION') AS VERSION FROM RDB\$DATABASE");
13$data = $stmt->fetch(\PDO::FETCH_ASSOC);
14if (!$data || !array_key_exists('VERSION', $data) || version_compare($data['VERSION'], '4.0.0') < 0) {
15	die("skip Firebird Server version must be greater than or equal to 4.0.0");
16}
17?>
18--XLEAK--
19A bug in firebird causes a memory leak when calling `isc_attach_database()`.
20See https://github.com/FirebirdSQL/firebird/issues/7849
21--FILE--
22<?php
23require 'testdb.inc';
24
25$sql = <<<'SQL'
26	SELECT
27		CAST(15 AS BIGINT) AS i64,
28		CAST(15 AS INT128) AS i128,
29		123.97 AS N,
30		CAST(123.97 AS NUMERIC(38,2)) AS N2,
31		CAST('2024-05-04 12:59:34.239' AS TIMESTAMP) AS TS,
32		CAST('2024-05-04 12:59:34.239 Europe/Moscow' AS TIMESTAMP WITH TIME ZONE) AS TS_TZ,
33		CAST('12:59:34.239' AS TIME) AS T,
34		CAST('12:59:34.239 Europe/Moscow' AS TIME WITH TIME ZONE) AS T_TZ,
35		CAST(1.128 AS DECFLOAT(16)) AS df16,
36		CAST(1.128 AS DECFLOAT(34)) AS df34
37	FROM RDB$DATABASE
38SQL;
39
40$dbh = getDbConnection();
41
42$stmt = $dbh->prepare($sql);
43$stmt->execute();
44$data = $stmt->fetch(\PDO::FETCH_ASSOC);
45$stmt->closeCursor();
46$str = json_encode($data, JSON_PRETTY_PRINT);
47echo $str;
48echo "\ndone\n";
49?>
50--EXPECTF--
51{
52    "I64": 15,
53    "I128": "15",
54    "N": "123.97",
55    "N2": "123.97",
56    "TS": "2024-05-04 12:59:34",
57    "TS_TZ": "2024-05-04 12:59:34 Europe\/Moscow",
58    "T": "12:59:34",
59    "T_TZ": "12:59:34 Europe\/Moscow",
60    "DF16": "1.128",
61    "DF34": "1.128"
62}
63done
64