Beispiel #1
0
 /**
  * Create DB tables.
  *
  * @since 160524 DB utils.
  */
 public function createTables()
 {
     $table_prefix = $this->prefix();
     // For the app.
     $tables_dir = $this->App->Config->©fs_paths['§mysql']['§tables_dir'];
     $indexes_dir = $this->App->Config->©fs_paths['§mysql']['§indexes_dir'];
     $triggers_dir = $this->App->Config->©fs_paths['§mysql']['§triggers_dir'];
     if (!$tables_dir || !is_dir($tables_dir)) {
         return;
         // Not possible; no tables.
     }
     foreach ($this->c::dirRegexRecursiveIterator($tables_dir, '/\\.sql$/ui') as $_Resource) {
         if (!$_Resource->isFile()) {
             // Not a file?
             continue;
             // Bypass; files only.
         }
         $_sql_file = $_Resource->getPathname();
         $_sql_file_table = basename($_sql_file, '.sql');
         $_sql_file_table = str_replace('-', '_', $_sql_file_table);
         $_sql_file_table = $table_prefix . $_sql_file_table;
         $_sql = $this->c::mbTrim(file_get_contents($_sql_file));
         $_sql = str_replace('%%table%%', $_sql_file_table, $_sql);
         $_sql = $this->charsetCompat($this->engineCompat($this->ifNotExists($_sql)));
         $_sql_check = $this->wp->prepare('SHOW TABLES LIKE %s', $_sql_file_table);
         if ($this->wp->get_var($_sql_check) === $_sql_file_table) {
             continue;
             // Table exists already. Nothing to do.
         }
         if (!$_sql || $this->wp->query($_sql) === false) {
             // Table creation failure?
             throw $this->c::issue(sprintf('DB table creation failure. Table: `%1$s`. SQL: `%2$s`.', $_sql_file_table, $_sql));
         }
         foreach ([$indexes_dir, $triggers_dir] as $_tables_after_dir) {
             if ($_tables_after_dir && is_dir($_tables_after_dir)) {
                 // ↓ Looking for additional files for this specific table.
                 $_tables_after_regex = '/\\/' . c::escRegex(basename($_sql_file)) . '$/ui';
                 foreach ($this->c::dirRegexRecursiveIterator($_tables_after_dir, $_tables_after_regex) as $__Resource) {
                     if (!$__Resource->isFile()) {
                         // Not a file?
                         continue;
                         // Bypass; files only.
                     }
                     $__sql_file = $__Resource->getPathname();
                     $__sql = $this->c::mbTrim(file_get_contents($__sql_file));
                     $__sql = str_replace('%%table%%', $_sql_file_table, $__sql);
                     if ($this->wp->query($__sql) === false) {
                         // Index creation failure?
                         throw $this->c::issue(sprintf('DB query failure. Table: `%1$s`. SQL: `%2$s`.', $_sql_file_table, $__sql));
                     }
                 }
                 // unset($__Resource, $__sql_file, $__sql);
             }
         }
         // unset($_tables_after_dir, $_tables_after_regex);
     }
     // unset($_Resource, $_sql_file, $_sql_file_table, $_sql_check, $_sql);
 }