Add config parameter to toggle automatic SQL migrations

- Add two command line opterations to show schema version
and to execute SQL migrations
- Add new configuration parameter to enable or disable
SQL migrations
This commit is contained in:
Frederic Guillot
2016-12-02 19:16:50 -05:00
parent b5671a2dc0
commit f2fd5d75d9
6 changed files with 97 additions and 5 deletions

View File

@@ -3,6 +3,8 @@
namespace Kanboard\ServiceProvider;
use Kanboard\Console\CronjobCommand;
use Kanboard\Console\DatabaseMigrationCommand;
use Kanboard\Console\DatabaseVersionCommand;
use Kanboard\Console\LocaleComparatorCommand;
use Kanboard\Console\LocaleSyncCommand;
use Kanboard\Console\PluginInstallCommand;
@@ -55,6 +57,8 @@ class CommandProvider implements ServiceProviderInterface
$application->add(new PluginUpgradeCommand($container));
$application->add(new PluginInstallCommand($container));
$application->add(new PluginUninstallCommand($container));
$application->add(new DatabaseMigrationCommand($container));
$application->add(new DatabaseVersionCommand($container));
$container['cli'] = $application;
return $container;

View File

@@ -27,6 +27,10 @@ class DatabaseProvider implements ServiceProviderInterface
{
$container['db'] = $this->getInstance();
if (DB_RUN_MIGRATIONS) {
self::runMigrations($container['db']);
}
if (DEBUG) {
$container['db']->getStatementHandler()
->withLogging()
@@ -38,7 +42,7 @@ class DatabaseProvider implements ServiceProviderInterface
}
/**
* Setup the database driver and execute schema migration
* Setup the database driver
*
* @access public
* @return \PicoDb\Database
@@ -59,12 +63,39 @@ class DatabaseProvider implements ServiceProviderInterface
throw new LogicException('Database driver not supported');
}
if ($db->schema()->check(\Schema\VERSION)) {
return $db;
} else {
return $db;
}
/**
* Get current database version
*
* @static
* @access public
* @param Database $db
* @return int
*/
public static function getSchemaVersion(Database $db)
{
return $db->getDriver()->getSchemaVersion();
}
/**
* Execute database migrations
*
* @static
* @access public
* @throws RuntimeException
* @param Database $db
* @return bool
*/
public static function runMigrations(Database $db)
{
if (! $db->schema()->check(\Schema\VERSION)) {
$messages = $db->getLogMessages();
throw new RuntimeException('Unable to run SQL migrations: '.implode(', ', $messages).' (You may have to fix it manually)');
}
return true;
}
/**
@@ -79,7 +110,7 @@ class DatabaseProvider implements ServiceProviderInterface
return new Database(array(
'driver' => 'sqlite',
'filename' => DB_FILENAME
'filename' => DB_FILENAME,
));
}