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