private static function createElementsTable() { $query = 'CREATE TABLE `' . self::elementsTableName() . '` ('; $query .= '`parent_id` BIGINT UNSIGNED NOT NULL, '; $query .= '`element_id` BIGINT UNSIGNED NOT NULL, '; $query .= '`manual_order` BIGINT UNSIGNED NOT NULL, '; $query .= 'PRIMARY KEY (`parent_id`, `element_id`)'; //// TODO: Put foreign key constraints back when creation of tables can have topological order imposed. //if ($type != __CLASS__) // $query .= ', FOREIGN KEY (`parent_id`, `element_id`) REFERENCES `' . self::elementsTableName($class->getParentClass()->getName()) . '` (`parent_id`, `element_id`) ON DELETE CASCADE'; $query .= ') engine=' . Options::dbEngine() . ';'; Database::query($query, "Set elements table"); }
private static function createTable($type) { $class = new ReflectionClass($type); $columns = $class->getStaticPropertyValue('columns', array()); $columns['id'] = 'identifier'; $declarations = ""; foreach ($columns as $name => $typeName) { $declarations .= "`{$name}` " . Type::get($typeName)->mySqlName() . ", "; } $query = "CREATE TABLE `" . self::tableName($type) . "` ("; $query .= $declarations; $query .= "PRIMARY KEY (`id`)"; //// TODO: Put foreign key constraints back when creation of tables can have topological order imposed. //if ($type != __CLASS__) // $query .= ", FOREIGN KEY (`id`) REFERENCES `" . self::tableName($class->getParentClass()->getName()) . "` (`id`) ON DELETE CASCADE"; $query .= ") engine=" . Options::dbEngine() . ";"; Database::query($query, "{$type} table"); }