1616use function array_values ;
1717use function dom_import_simplexml ;
1818use function file_get_contents ;
19+ use function preg_replace ;
1920use function simplexml_load_string ;
2021use function str_replace ;
2122
@@ -40,6 +41,7 @@ class TestCase extends \PHPUnit\Framework\TestCase
4041 use SchemaBuilderTrait;
4142
4243 protected string |null $ dsn = null ;
44+ protected string $ driverName = 'sqlite ' ;
4345 protected string $ fixtureDirectory = __DIR__ . '/support/data/ ' ;
4446 protected string $ password = '' ;
4547 protected string $ username = '' ;
@@ -105,12 +107,12 @@ protected function assertQueryHasOrderBy(ActiveQuery $query, string $methodName)
105107
106108 self ::assertStringContainsString (
107109 'ORDER BY ' ,
108- $ sql ,
110+ $ this -> replaceQuotes ( $ sql) ,
109111 "' {$ methodName }' query should include 'ORDER BY' clause for deterministic results. " ,
110112 );
111113
112114 self ::assertStringContainsString (
113- ' ` lft` ' ,
115+ $ this -> replaceQuotes ( ' [[ lft]] ' ) ,
114116 $ sql ,
115117 "' {$ methodName }' query should order by 'left' attribute for consistent ordering. " ,
116118 );
@@ -362,6 +364,40 @@ protected function mockConsoleApplication(): void
362364 );
363365 }
364366
367+ /**
368+ * Adjust dbms specific escaping.
369+ *
370+ * @param string $sql SQL to adjust.
371+ *
372+ * @return string Adjusted SQL.
373+ */
374+ protected function replaceQuotes (string $ sql ): string
375+ {
376+ return match ($ this ->driverName ) {
377+ 'mysql ' , 'sqlite ' => str_replace (
378+ ['[[ ' , ']] ' ],
379+ '` ' ,
380+ $ sql ,
381+ ),
382+ 'oci ' => str_replace (
383+ ['[[ ' , ']] ' ],
384+ '" ' ,
385+ $ sql ,
386+ ),
387+ 'pgsql ' => str_replace (
388+ ['\\[ ' , '\\] ' ],
389+ ['[ ' , '] ' ],
390+ preg_replace ('/(\[\[)|((?<!(\[))\]\])/ ' , '" ' , $ sql ) ?? $ sql ,
391+ ),
392+ 'sqlsrv ' => str_replace (
393+ ['[[ ' , ']] ' ],
394+ ['[ ' , '] ' ],
395+ $ sql ,
396+ ),
397+ default => $ sql ,
398+ };
399+ }
400+
365401 /**
366402 * Applies database updates to tree nodes.
367403 *
0 commit comments