/**
  * @param bool $sort = true
  * @return array
  */
 public function getCreateStatements($sort = true)
 {
     if (!$sort || $this->createsSorted) {
         return $this->changes['createTables'];
     }
     $resolved = [];
     $dependencyMap = [];
     $pending = [];
     //resolve simple tables (no dependencies)
     foreach ($this->changes['createTables'] as $query) {
         $table = new Table($query);
         $tableName = $table->getName();
         $depends = $table->getDependencies();
         if (!$depends) {
             $resolved[$tableName] = $query;
         } elseif ($this->dependenciesMet($resolved, $depends)) {
             $resolved[$tableName] = $query;
         } else {
             $dependencyMap[$tableName] = $depends;
             $pending[$tableName] = ['query' => $query, 'parsed' => $table];
         }
     }
     //keep checking pending alters until we can't resolve any more queries
     $afterCount = count($resolved);
     do {
         $preCount = $afterCount;
         foreach ($dependencyMap as $name => $depends) {
             if ($this->dependenciesMet($resolved, $depends)) {
                 $resolved[$name] = $pending[$name]['query'];
                 unset($pending[$name]);
             } else {
                 //remove dependencies that might not be in create list here
                 $clean = [];
                 foreach ($depends as $name) {
                     if (isset($resolved[$name]) || isset($pending[$name])) {
                         $clean[] = $name;
                     }
                 }
                 //rework map
                 $dependencyMap[$name] = $clean;
             }
         }
         $afterCount = count($resolved);
     } while ($preCount != $afterCount);
     $this->changes['createTables'] = $this->addMarkedCreates($pending, $resolved);
     $this->createsSorted = true;
     return $this->changes['createTables'];
 }