/**
  * Test for PMA\libraries\plugins\export\ExportCodegen::cgMakeIdentifier
  *
  * @return void
  */
 public function testCgMakeIdentifier()
 {
     $this->assertEquals('_Ⅲfoo', ExportCodegen::cgMakeIdentifier('Ⅲ{}96`{}foo', true));
     $this->assertEquals('TestⅢ', ExportCodegen::cgMakeIdentifier('`98testⅢ{}96`{}', true));
     $this->assertEquals('testⅢ', ExportCodegen::cgMakeIdentifier('`98testⅢ{}96`{}', false));
 }
 /**
  * XML Handler
  *
  * @param string $db      database name
  * @param string $table   table name
  * @param string $crlf    line separator
  * @param array  $aliases Aliases of db/table/columns
  *
  * @return string containing XML code lines, separated by "\n"
  */
 private function _handleNHibernateXMLBody($db, $table, $crlf, $aliases = array())
 {
     $db_alias = $db;
     $table_alias = $table;
     $this->initAlias($aliases, $db_alias, $table_alias);
     $lines = array();
     $lines[] = '<?xml version="1.0" encoding="utf-8" ?' . '>';
     $lines[] = '<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" ' . 'namespace="' . ExportCodegen::cgMakeIdentifier($db_alias) . '" ' . 'assembly="' . ExportCodegen::cgMakeIdentifier($db_alias) . '">';
     $lines[] = '    <class ' . 'name="' . ExportCodegen::cgMakeIdentifier($table_alias) . '" ' . 'table="' . ExportCodegen::cgMakeIdentifier($table_alias) . '">';
     $result = $GLOBALS['dbi']->query(sprintf("DESC %s.%s", PMA\libraries\Util::backquote($db), PMA\libraries\Util::backquote($table)));
     if ($result) {
         while ($row = $GLOBALS['dbi']->fetchRow($result)) {
             $col_as = $this->getAlias($aliases, $row[0], 'col', $db, $table);
             if (!empty($col_as)) {
                 $row[0] = $col_as;
             }
             $tableProperty = new TableProperty($row);
             if ($tableProperty->isPK()) {
                 $lines[] = $tableProperty->formatXml('        <id name="#ucfirstName#" type="#dotNetObjectType#"' . ' unsaved-value="0">' . "\n" . '            <column name="#name#" sql-type="#type#"' . ' not-null="#notNull#" unique="#unique#"' . ' index="PRIMARY"/>' . "\n" . '            <generator class="native" />' . "\n" . '        </id>');
             } else {
                 $lines[] = $tableProperty->formatXml('        <property name="#ucfirstName#"' . ' type="#dotNetObjectType#">' . "\n" . '            <column name="#name#" sql-type="#type#"' . ' not-null="#notNull#" #indexName#/>' . "\n" . '        </property>');
             }
         }
         $GLOBALS['dbi']->freeResult($result);
     }
     $lines[] = '    </class>';
     $lines[] = '</hibernate-mapping>';
     return implode($crlf, $lines);
 }