Improved DB + PostgreSQL support

This commit is contained in:
Dmitry Khomutov 2017-01-29 09:49:43 +07:00
commit c90c292629
No known key found for this signature in database
GPG key ID: 7EB36C9576F9ECB9
26 changed files with 186 additions and 147 deletions

View file

@ -15,6 +15,7 @@ use PDO;
use b8\Config;
use b8\Store\Factory;
use PHPCensor\Helper\Lang;
use PHPCensor\Model\ProjectGroup;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\QuestionHelper;
use Symfony\Component\Console\Input\InputInterface;
@ -43,6 +44,7 @@ class InstallCommand extends Command
$this
->setName('php-censor:install')
->addOption('url', null, InputOption::VALUE_OPTIONAL, Lang::get('installation_url'))
->addOption('db-type', null, InputOption::VALUE_OPTIONAL, Lang::get('db_host'))
->addOption('db-host', null, InputOption::VALUE_OPTIONAL, Lang::get('db_host'))
->addOption('db-port', null, InputOption::VALUE_OPTIONAL, Lang::get('db_port'))
->addOption('db-name', null, InputOption::VALUE_OPTIONAL, Lang::get('db_name'))
@ -104,8 +106,11 @@ class InstallCommand extends Command
$this->writeConfigFile($conf);
$this->setupDatabase($output);
$admin = $this->getAdminInformation($input, $output);
$this->createAdminUser($admin, $output);
$this->createDefaultGroup($output);
}
/**
@ -127,7 +132,7 @@ class InstallCommand extends Command
}
// Check required extensions are present:
$requiredExtensions = ['PDO', 'pdo_mysql'];
$requiredExtensions = ['PDO'];
foreach ($requiredExtensions as $extension) {
if (!extension_loaded($extension)) {
@ -300,6 +305,11 @@ class InstallCommand extends Command
/** @var $helper QuestionHelper */
$helper = $this->getHelperSet()->get('question');
if (!$dbType = $input->getOption('db-type')) {
$questionType = new Question(Lang::get('enter_db_type'), 'mysql');
$dbType = $helper->ask($input, $output, $questionType);
}
if (!$dbHost = $input->getOption('db-host')) {
$questionHost = new Question(Lang::get('enter_db_host'), 'localhost');
$dbHost = $helper->ask($input, $output, $questionHost);
@ -327,12 +337,18 @@ class InstallCommand extends Command
$dbPass = $helper->ask($input, $output, $questionPass);
}
$db['servers']['read'] = $dbHost;
$db['servers']['write'] = $dbHost;
$db['port'] = $dbPort;
$db['name'] = $dbName;
$db['username'] = $dbUser;
$db['password'] = $dbPass;
$db['servers']['read'] = [[
'host' => $dbHost,
'port' => $dbPort,
]];
$db['servers']['write'] = [[
'host' => $dbHost,
'port' => $dbPort,
]];
$db['type'] = $dbType;
$db['name'] = $dbName;
$db['username'] = $dbUser;
$db['password'] = $dbPass;
return $db;
}
@ -347,7 +363,7 @@ class InstallCommand extends Command
{
try {
$pdo = new PDO(
'mysql:host='.$db['servers']['write'].';port='.$db['port'].'dbname='.$db['name'],
$db['type'] . ':host=' . $db['servers']['write'][0]['host'] . ';port=' . $db['servers']['write'][0]['host'] . 'dbname=' . $db['name'],
$db['username'],
$db['password'],
[
@ -413,6 +429,24 @@ class InstallCommand extends Command
}
}
/**
* @param OutputInterface $output
*/
protected function createDefaultGroup($output)
{
try {
$group = new ProjectGroup();
$group->setTitle('Projects');
Factory::getStore('ProjectGroup')->save($group);
$output->writeln('<info>'.Lang::get('default_group_created').'</info>');
} catch (\Exception $ex) {
$output->writeln('<error>'.Lang::get('default_group_failed_to_create').'</error>');
$output->writeln('<error>' . $ex->getMessage() . '</error>');
}
}
protected function reloadConfig()
{
$config = Config::getInstance();

View file

@ -33,8 +33,9 @@ class Application extends BaseApplication
'default_migration_table' => 'migration',
'default_database' => 'php-censor',
'php-censor' => [
'adapter' => 'mysql',
'host' => $databaseSettings['servers']['write'],
'adapter' => $databaseSettings['type'],
'host' => $databaseSettings['servers']['write'][0]['host'],
'port' => $databaseSettings['servers']['write'][0]['port'],
'name' => $databaseSettings['name'],
'user' => $databaseSettings['username'],
'pass' => $databaseSettings['password'],

View file

@ -6,13 +6,6 @@ class FixDatabaseColumns extends AbstractMigration
{
public function up()
{
$dbAdapter = $this->getAdapter();
if ($dbAdapter instanceof \Phinx\Db\Adapter\PdoAdapter) {
$pdo = $dbAdapter->getConnection();
$pdo->exec('SET foreign_key_checks = 0');
}
$build = $this->table('build');
$build->changeColumn('project_id', 'integer', ['null' => false]);
@ -53,11 +46,6 @@ class FixDatabaseColumns extends AbstractMigration
$user->changeColumn('hash', 'string', ['limit' => 250, 'null' => false]);
$user->changeColumn('is_admin', 'integer', ['null' => false, 'default' => 0]);
$user->changeColumn('name', 'string', ['limit' => 250, 'null' => false]);
if ($dbAdapter instanceof \Phinx\Db\Adapter\PdoAdapter) {
$pdo = $dbAdapter->getConnection();
$pdo->exec('SET foreign_key_checks = 1');
}
}
public function down()

View file

@ -9,7 +9,7 @@ class ArchiveProject extends AbstractMigration
$project = $this->table('project');
if (!$project->hasColumn('archived')) {
$project->addColumn('archived', 'boolean', ['default' => 0])->save();
$project->addColumn('archived', 'boolean', ['default' => false])->save();
}
}

View file

@ -1,7 +1,6 @@
<?php
use Phinx\Migration\AbstractMigration;
use Phinx\Db\Adapter\MysqlAdapter;
class FixColumnTypes extends AbstractMigration
{
@ -9,11 +8,11 @@ class FixColumnTypes extends AbstractMigration
{
$build = $this->table('build');
$build->changeColumn('log', 'text', ['null' => true, 'limit' => MysqlAdapter::TEXT_MEDIUM]);
$build->changeColumn('log', 'text', ['null' => true]);
$buildMeta = $this->table('build_meta');
$buildMeta->changeColumn('meta_value', 'text', ['null' => false, 'limit' => MysqlAdapter::TEXT_MEDIUM]);
$buildMeta->changeColumn('meta_value', 'text', ['null' => false]);
}
public function down()

View file

@ -1,6 +1,5 @@
<?php
use Phinx\Db\Adapter\MysqlAdapter;
use Phinx\Migration\AbstractMigration;
class AddUserProviders extends AbstractMigration
@ -16,12 +15,12 @@ class AddUserProviders extends AbstractMigration
// The provider name
->addColumn('provider_key', 'string', [
'default' => 'internal',
'limit' => MysqlAdapter::TEXT_SMALL
'limit' => 255
])
// A data used by the provider
->addColumn('provider_data', 'string', [
'null' => true,
'limit' => MysqlAdapter::TEXT_SMALL
'limit' => 255
])
->save();
}

View file

@ -13,12 +13,14 @@ class AddProjectGroups extends AbstractMigration
}
if (!$table->hasColumn('title')) {
$table->addColumn('title', 'string', ['limit' => 100, 'null' => false])->save();
$table
->addColumn('title', 'string', ['limit' => 100, 'null' => false])
->save();
$group = new \PHPCensor\Model\ProjectGroup();
/* $group = new \PHPCensor\Model\ProjectGroup();
$group->setTitle('Projects');
\b8\Store\Factory::getStore('ProjectGroup')->save($group);
\b8\Store\Factory::getStore('ProjectGroup')->save($group);*/
}
$table = $this->table('project');

View file

@ -9,11 +9,11 @@ class RemoveUniqueNameIndex extends AbstractMigration
$user = $this->table('user');
if ($user->hasIndex('name', ['unique' => true])) {
$user->removeIndex('name', ['unique' => true])->save();
$user->removeIndex(['name'], ['unique' => true])->save();
}
if (!$user->hasIndex('name', ['unique' => true])) {
$user->addIndex('name', ['unique' => false])->save();
$user->addIndex(['name'], ['unique' => false])->save();
}
}
}

View file

@ -1,7 +1,6 @@
<?php
use Phinx\Migration\AbstractMigration;
use Phinx\Db\Adapter\MysqlAdapter;
class ErrorsTable extends AbstractMigration
{
@ -34,7 +33,7 @@ class ErrorsTable extends AbstractMigration
}
if (!$table->hasColumn('severity')) {
$table->addColumn('severity', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY])->save();
$table->addColumn('severity', 'integer', ['signed' => false, 'limit' => 255])->save();
}
if (!$table->hasColumn('message')) {

View file

@ -1,17 +1,13 @@
<?php
use Phinx\Migration\AbstractMigration;
use Phinx\Db\Adapter\MysqlAdapter;
class ProjectTableDefaults extends AbstractMigration
{
public function change()
{
$this->table('project')
->changeColumn('build_config', MysqlAdapter::PHINX_TYPE_TEXT, ['null' => true])
->changeColumn('archived', MysqlAdapter::PHINX_TYPE_INTEGER, [
'length' => MysqlAdapter::INT_TINY,
'default' => 0,
])->save();
->changeColumn('build_config', 'text', ['null' => true])
->save();
}
}

View file

@ -16,7 +16,6 @@ use PHPCensor\Plugin\Util\TestResultParsers\Codeception as Parser;
use PHPCensor\Plugin;
use Symfony\Component\Yaml\Parser as YamlParser;
use PHPCensor\ZeroConfigPluginInterface;
use Psr\Log\LogLevel;
/**
* Codeception Plugin - Enables full acceptance, unit, and functional testing.

View file

@ -38,8 +38,8 @@ class BuildErrorStoreBase extends Store
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `build_error` WHERE `id` = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{build_error}} WHERE {{id}} = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':id', $value);
if ($stmt->execute()) {
@ -62,8 +62,8 @@ class BuildErrorStoreBase extends Store
}
$query = 'SELECT * FROM `build_error` WHERE `build_id` = :build_id LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{build_error}} WHERE {{build_id}} = :build_id LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':build_id', $value);
$stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT);

View file

@ -38,8 +38,8 @@ class BuildMetaStoreBase extends Store
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `build_meta` WHERE `id` = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{build_meta}} WHERE {{id}} = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':id', $value);
if ($stmt->execute()) {
@ -62,8 +62,8 @@ class BuildMetaStoreBase extends Store
}
$query = 'SELECT * FROM `build_meta` WHERE `project_id` = :project_id LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{build_meta}} WHERE {{project_id}} = :project_id LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':project_id', $value);
$stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT);
@ -94,8 +94,8 @@ class BuildMetaStoreBase extends Store
}
$query = 'SELECT * FROM `build_meta` WHERE `build_id` = :build_id LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{build_meta}} WHERE {{build_id}} = :build_id LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':build_id', $value);
$stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT);

View file

@ -38,8 +38,8 @@ class BuildStoreBase extends Store
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `build` WHERE `id` = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{build}} WHERE {{id}} = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':id', $value);
if ($stmt->execute()) {
@ -62,8 +62,8 @@ class BuildStoreBase extends Store
}
$query = 'SELECT * FROM `build` WHERE `project_id` = :project_id LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{build}} WHERE {{project_id}} = :project_id LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':project_id', $value);
$stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT);
@ -94,8 +94,8 @@ class BuildStoreBase extends Store
}
$query = 'SELECT * FROM `build` WHERE `status` = :status LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{build}} WHERE {{status}} = :status LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':status', $value);
$stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT);

View file

@ -38,8 +38,8 @@ class ProjectGroupStoreBase extends Store
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `project_group` WHERE `id` = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{project_group}} WHERE {{id}} = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':id', $value);
if ($stmt->execute()) {

View file

@ -38,8 +38,8 @@ class ProjectStoreBase extends Store
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `project` WHERE `id` = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{project}} WHERE {{id}} = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':id', $value);
if ($stmt->execute()) {
@ -62,8 +62,8 @@ class ProjectStoreBase extends Store
}
$query = 'SELECT * FROM `project` WHERE `title` = :title LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{project}} WHERE {{title}} = :title LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':title', $value);
$stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT);
@ -94,8 +94,8 @@ class ProjectStoreBase extends Store
}
$query = 'SELECT * FROM `project` WHERE `group_id` = :group_id LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{project}} WHERE {{group_id}} = :group_id LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':group_id', $value);
$stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT);

View file

@ -38,8 +38,8 @@ class UserStoreBase extends Store
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `user` WHERE `id` = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{user}} WHERE {{id}} = :id LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':id', $value);
if ($stmt->execute()) {
@ -67,8 +67,8 @@ class UserStoreBase extends Store
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `user` WHERE `email` = :email LIMIT 1';
$stmt = Database::getConnection()->prepare($query);
$query = 'SELECT * FROM {{user}} WHERE {{email}} = :email LIMIT 1';
$stmt = Database::getConnection()->prepareCommon($query);
$stmt->bindValue(':email', $value);
if ($stmt->execute()) {
@ -96,8 +96,8 @@ class UserStoreBase extends Store
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `user` WHERE `email` = :value OR `name` = :value LIMIT 1';
$stmt = Database::getConnection()->prepare($query);
$query = 'SELECT * FROM {{user}} WHERE {{email}} = :value OR {{name}} = :value LIMIT 1';
$stmt = Database::getConnection()->prepareCommon($query);
$stmt->bindValue(':value', $value);
if ($stmt->execute()) {
@ -119,9 +119,8 @@ class UserStoreBase extends Store
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `user` WHERE `name` = :name LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{user}} WHERE {{name}} = :name LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':name', $value);
$stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT);

View file

@ -24,8 +24,7 @@ class BuildErrorStore extends BuildErrorStoreBase
*/
public function getErrorsForBuild($buildId, $since = null)
{
$query = 'SELECT * FROM build_error
WHERE build_id = :build';
$query = 'SELECT * FROM {{build_error}} WHERE {{build_id}} = :build';
if (!is_null($since)) {
$query .= ' AND created_date > :since';
@ -33,7 +32,7 @@ class BuildErrorStore extends BuildErrorStoreBase
$query .= ' LIMIT 15000';
$stmt = Database::getConnection('read')->prepare($query);
$stmt = Database::getConnection('read')->prepareCommon($query);
$stmt->bindValue(':build', $buildId, \PDO::PARAM_INT);
@ -63,10 +62,10 @@ class BuildErrorStore extends BuildErrorStoreBase
*/
public function getErrorTotalForBuild($buildId)
{
$query = 'SELECT COUNT(*) AS total FROM build_error
WHERE build_id = :build';
$query = 'SELECT COUNT(*) AS {{total}} FROM {{build_error}}
WHERE {{build_id}} = :build';
$stmt = Database::getConnection('read')->prepare($query);
$stmt = Database::getConnection('read')->prepareCommon($query);
$stmt->bindValue(':build', $buildId, \PDO::PARAM_INT);

View file

@ -28,11 +28,11 @@ class BuildMetaStore extends BuildMetaStoreBase
*/
public function getErrorsForUpgrade($limit)
{
$query = 'SELECT * FROM build_meta
WHERE meta_key IN (\'phpmd-data\', \'phpcs-data\', \'phpdoccheck-data\', \'technical_debt - data\')
ORDER BY id ASC LIMIT :limit';
$query = 'SELECT * FROM {{build_meta}}
WHERE {{meta_key}} IN (\'phpmd-data\', \'phpcs-data\', \'phpdoccheck-data\', \'technical_debt - data\')
ORDER BY {{id}} ASC LIMIT :limit';
$stmt = Database::getConnection('read')->prepare($query);
$stmt = Database::getConnection('read')->prepareCommon($query);
$stmt->bindValue(':limit', $limit, \PDO::PARAM_INT);

View file

@ -30,12 +30,12 @@ class BuildStore extends BuildStoreBase
public function getLatestBuilds($projectId = null, $limit = 5)
{
if (!is_null($projectId)) {
$query = 'SELECT * FROM build WHERE `project_id` = :pid ORDER BY id DESC LIMIT :limit';
$query = 'SELECT * FROM {{build}} WHERE {{project_id}} = :pid ORDER BY {{id}} DESC LIMIT :limit';
} else {
$query = 'SELECT * FROM build ORDER BY id DESC LIMIT :limit';
$query = 'SELECT * FROM {{build}} ORDER BY {{id}} DESC LIMIT :limit';
}
$stmt = Database::getConnection('read')->prepare($query);
$stmt = Database::getConnection('read')->prepareCommon($query);
if (!is_null($projectId)) {
$stmt->bindValue(':pid', $projectId);
@ -65,8 +65,8 @@ class BuildStore extends BuildStoreBase
*/
public function getLastBuildByStatus($projectId = null, $status = Build::STATUS_SUCCESS)
{
$query = 'SELECT * FROM build WHERE project_id = :pid AND status = :status ORDER BY id DESC LIMIT 1';
$stmt = Database::getConnection('read')->prepare($query);
$query = 'SELECT * FROM {{build}} WHERE {{project_id}} = :pid AND {{status}} = :status ORDER BY {{id}} DESC LIMIT 1';
$stmt = Database::getConnection('read')->prepareCommon($query);
$stmt->bindValue(':pid', $projectId);
$stmt->bindValue(':status', $status);
@ -87,8 +87,8 @@ class BuildStore extends BuildStoreBase
*/
public function getByProjectAndCommit($projectId, $commitId)
{
$query = 'SELECT * FROM `build` WHERE `project_id` = :project_id AND `commit_id` = :commit_id';
$stmt = Database::getConnection('read')->prepare($query);
$query = 'SELECT * FROM {{build}} WHERE {{project_id}} = :project_id AND {{commit_id}} = :commit_id';
$stmt = Database::getConnection('read')->prepareCommon($query);
$stmt->bindValue(':project_id', $projectId);
$stmt->bindValue(':commit_id', $commitId);
@ -116,8 +116,8 @@ class BuildStore extends BuildStoreBase
*/
public function getBuildBranches($projectId)
{
$query = 'SELECT DISTINCT `branch` FROM `build` WHERE `project_id` = :project_id';
$stmt = Database::getConnection('read')->prepare($query);
$query = 'SELECT DISTINCT {{branch}} FROM {{build}} WHERE {{project_id}} = :project_id';
$stmt = Database::getConnection('read')->prepareCommon($query);
$stmt->bindValue(':project_id', $projectId);
if ($stmt->execute()) {
@ -140,8 +140,8 @@ class BuildStore extends BuildStoreBase
public function getMeta($key, $projectId, $buildId = null, $branch = null, $numResults = 1)
{
$query = 'SELECT bm.build_id, bm.meta_key, bm.meta_value
FROM build_meta AS bm
LEFT JOIN build b ON b.id = bm.build_id
FROM {{build_meta}} AS {{bm}}
LEFT JOIN {{build}} AS {{b}} ON b.id = bm.build_id
WHERE bm.meta_key = :key
AND bm.project_id = :projectId';
@ -160,7 +160,7 @@ class BuildStore extends BuildStoreBase
$query .= ' ORDER BY bm.id DESC LIMIT :numResults';
$stmt = Database::getConnection('read')->prepare($query);
$stmt = Database::getConnection('read')->prepareCommon($query);
$stmt->bindValue(':key', $key, \PDO::PARAM_STR);
$stmt->bindValue(':projectId', (int)$projectId, \PDO::PARAM_INT);
$stmt->bindValue(':buildId', (int)$buildId, \PDO::PARAM_INT);
@ -199,10 +199,10 @@ class BuildStore extends BuildStoreBase
*/
public function setMeta($projectId, $buildId, $key, $value)
{
$cols = '`project_id`, `build_id`, `meta_key`, `meta_value`';
$query = 'REPLACE INTO build_meta ('.$cols.') VALUES (:projectId, :buildId, :key, :value)';
$cols = '{{project_id}}, {{build_id}}, {{meta_key}}, {{meta_value}}';
$query = 'INSERT INTO {{build_meta}} ('.$cols.') VALUES (:projectId, :buildId, :key, :value)';
$stmt = Database::getConnection('read')->prepare($query);
$stmt = Database::getConnection('read')->prepareCommon($query);
$stmt->bindValue(':key', $key, \PDO::PARAM_STR);
$stmt->bindValue(':projectId', (int)$projectId, \PDO::PARAM_INT);
$stmt->bindValue(':buildId', (int)$buildId, \PDO::PARAM_INT);

View file

@ -28,8 +28,8 @@ class ProjectStore extends ProjectStoreBase
*/
public function getKnownBranches($projectId)
{
$query = 'SELECT DISTINCT branch from build WHERE project_id = :pid';
$stmt = Database::getConnection('read')->prepare($query);
$query = 'SELECT DISTINCT {{branch}} from {{build}} WHERE {{project_id}} = :pid';
$stmt = Database::getConnection('read')->prepareCommon($query);
$stmt->bindValue(':pid', $projectId);
if ($stmt->execute()) {
@ -57,8 +57,8 @@ class ProjectStore extends ProjectStoreBase
{
$archived = (integer)$archived;
$query = 'SELECT * FROM `project` WHERE `archived` = :archived ORDER BY `title` ASC';
$stmt = Database::getConnection('read')->prepare($query);
$query = 'SELECT * FROM {{project}} WHERE {{archived}} = :archived ORDER BY {{title}} ASC';
$stmt = Database::getConnection('read')->prepareCommon($query);
$stmt->bindValue(':archived', $archived);
@ -98,8 +98,8 @@ class ProjectStore extends ProjectStoreBase
}
$archived = (integer)$archived;
$query = 'SELECT * FROM `project` WHERE `group_id` = :group_id AND `archived` = :archived ORDER BY title LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepare($query);
$query = 'SELECT * FROM {{project}} WHERE {{group_id}} = :group_id AND {{archived}} = :archived ORDER BY {{title}} LIMIT :limit';
$stmt = Database::getConnection($useConnection)->prepareCommon($query);
$stmt->bindValue(':group_id', $value);
$stmt->bindValue(':archived', $archived);