@@ -26,6 +26,14 @@ private function createDB(): PDO
2626 return new PDO ('sqlite::memory: ' );
2727 }
2828
29+ private function createDBWithNewSubclass (): PDO \Sqlite
30+ {
31+ if (!class_exists ('Pdo\Sqlite ' )) {
32+ $ this ->markTestSkipped ('Pdo\Sqlite class is not available in this PHP version ' );
33+ }
34+ return PDO ::connect ('sqlite::memory: ' );
35+ }
36+
2937 private function fillDB ():string
3038 {
3139 return <<<SQL
@@ -72,6 +80,34 @@ public function test_pdo_construct(): void
7280 $ this ->assertEquals ('sqlite ' , $ span ->getAttributes ()->get (TraceAttributes::DB_SYSTEM_NAME ));
7381 }
7482
83+ public function test_pdo_sqlite_subclass (): void
84+ {
85+ $ this ->assertCount (0 , $ this ->storage );
86+ $ db = self ::createDBWithNewSubclass ();
87+ $ this ->assertCount (1 , $ this ->storage );
88+ $ span = $ this ->storage ->offsetGet (0 );
89+ $ this ->assertSame ('PDO::connect ' , $ span ->getName ());
90+ $ this ->assertEquals ('sqlite ' , $ span ->getAttributes ()->get (TraceAttributes::DB_SYSTEM_NAME ));
91+
92+ // Test that the subclass-specific methods work
93+ $ db ->createFunction ('test_function ' , static fn ($ value ) => strtoupper ($ value ));
94+
95+ // Test that standard PDO operations still work
96+ $ db ->exec ($ this ->fillDB ());
97+ $ span = $ this ->storage ->offsetGet (1 );
98+ $ this ->assertSame ('PDO::exec ' , $ span ->getName ());
99+ $ this ->assertEquals ('sqlite ' , $ span ->getAttributes ()->get (TraceAttributes::DB_SYSTEM_NAME ));
100+ $ this ->assertCount (2 , $ this ->storage );
101+
102+ // Test that the custom function works
103+ $ result = $ db ->query ("SELECT test_function('hello') " )->fetchColumn ();
104+ $ this ->assertEquals ('HELLO ' , $ result );
105+ $ span = $ this ->storage ->offsetGet (2 );
106+ $ this ->assertSame ('PDO::query ' , $ span ->getName ());
107+ $ this ->assertEquals ('sqlite ' , $ span ->getAttributes ()->get (TraceAttributes::DB_SYSTEM_NAME ));
108+ $ this ->assertCount (3 , $ this ->storage );
109+ }
110+
75111 public function test_constructor_exception (): void
76112 {
77113 $ this ->expectException (\PDOException::class);
0 commit comments