Skip to content

Commit 0e5bdf3

Browse files
author
SergeyGrishin
committed
fix some bugs and add supporting of numbers' types
1 parent e8ba4dd commit 0e5bdf3

File tree

3 files changed

+28
-15
lines changed

3 files changed

+28
-15
lines changed

lib/orm/DataBase/Table.php

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,27 +35,30 @@ abstract class Table
3535
*/
3636
protected $table_name = "";
3737

38+
/**
39+
* Init table, set fields' types and set name of table
40+
*/
3841
public function initTable()
3942
{
4043
$this->reflection_class = new \ReflectionClass($this);
4144
$this->table_fields = $this->getTableFields(true);
4245
$this->initTableName();
4346
}
4447

48+
/**
49+
* Migrate database from classes to sql and execute migration script.
50+
* @return bool, true if migration successfully finished
51+
* @throws MigrationException
52+
*/
4553
public function migrate()
4654
{
4755
try {
4856
$generator = $this->getQueryGeneratorInstance();
49-
$create_database_query = $generator->createDataBase(QueryMemento::createInstance()->getStorage()["dbname"]);
50-
$create_table_query = $generator->createTable($this->table_name, $this->table_fields);
51-
52-
print_r($create_table_query);
53-
54-
// (new QueryExecutor(PdoAdapter::getInstance()
55-
// ->getPdoObject()->prepare(
56-
// (new Migration($this->table_fields, $this->table_name))
57-
// ->buildMigrationSqlCode()), []))
58-
// ->executeSql();
57+
(new QueryExecutor($generator->createDataBase(QueryMemento::createInstance()->getStorage()["dbname"]), []))
58+
->executeSql();
59+
(new QueryExecutor($generator->createTable($this->table_name, $this->table_fields), []))
60+
->executeSql();
61+
return true;
5962
} catch (\PDOException $e) {
6063
throw new MigrationException($e->getMessage());
6164
}

lib/orm/Exceptions/ExceptionsMessages.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,9 @@ public static function sizeOfValueBiggerThanSizeOfField($valueSize, $fieldSize)
1616
return "Size of value bigger than size of field. Expected <b>{$valueSize}</b> symbols but received <b>{$fieldSize}</b>";
1717
}
1818

19+
public static function unsupportedTypeOfField($type)
20+
{
21+
return "{$type} is unsupported type of field";
22+
}
23+
1924
}

lib/orm/Query/MysqlQueryGenerator.php

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55

66
use orm\DataBase\fields\DateTime;
77
use orm\DataBase\fields\ForeignKey;
8+
use orm\DataBase\fields\Number;
89
use orm\DataBase\fields\PrimaryKey;
910
use orm\DataBase\fields\StringField;
11+
use orm\Exceptions\ExceptionsMessages;
1012
use orm\Exceptions\MigrationException;
1113

1214
class MysqlQueryGenerator implements QueryGeneratorInterface
@@ -55,7 +57,7 @@ public function selectAll($table)
5557

5658
public function createDataBase($dbname)
5759
{
58-
return $this->pdo->prepare("create database if not exists `{$dbname}` default character set utf8 collate" .
60+
return $this->pdo->prepare("create database if not exists `{$dbname}` default character set utf8 collate " .
5961
"utf8_general_ci;\nuse `{$dbname}`;\n");
6062
}
6163

@@ -69,20 +71,23 @@ public function createTable($table, $fields)
6971
$query .= "`{$key}` {$field->type}({$field->size}) not null primary key auto_increment,\n";
7072
} elseif ($field instanceof ForeignKey) {
7173
$query .= "`{$key}` int not null,\n";
72-
$table = new $field->table();
73-
$reflection = new \ReflectionClass($table);
74+
$current_table = new $field->table();
75+
$reflection = new \ReflectionClass($current_table);
7476
$property = $reflection->getProperty("table_name");
7577
$property->setAccessible(true);
7678
$foreign_keys .= "alter table `{$table}` add constraint `{$key}_fk` foreign key (`{$key}`)" .
77-
" references `{$property->getValue($table)}` (`{$field->field}`) on delete " .
79+
" references `{$property->getValue($current_table)}` (`{$field->field}`) on delete " .
7880
"{$field->on_delete} on update {$field->on_update};\n";
7981
$property->setAccessible(false);
8082
} elseif ($field instanceof StringField) {
8183
$query .= "`{$key}` {$field->type}({$field->size}) not null,\n";
8284
} elseif ($field instanceof DateTime) {
8385
$query .= "`{$key}` {$field->type} not null,\n";
86+
} elseif ($field instanceof Number) {
87+
$auto_increment = ($field->auto_increment) ? "auto_increment" : "";
88+
$query .= "`{$key}` {$field->type}({$field->size}) {$field->attribute} not null {$auto_increment},\n";
8489
} else {
85-
throw new MigrationException("Migration Exception");
90+
throw new MigrationException(ExceptionsMessages::unsupportedTypeOfField(gettype($field)));
8691
}
8792
}
8893
return $this->pdo->prepare(substr($query, 0, -2) . "\n) engine=InnoDB default charset=utf8;\n" .

0 commit comments

Comments
 (0)