From 75f62663a9f73d275d66da7e2c869dfaa681e7e7 Mon Sep 17 00:00:00 2001 From: Thomas Keller Date: Thu, 19 Apr 2012 00:14:10 +0200 Subject: [PATCH] Make the project field in the tags table nullable so it is (hopefully) optional on setups with enabled foreign key constraints. --- src/IDF/Forge.php | 4 +- src/IDF/Migrations/25NullableProjectInTag.php | 46 +++++++++++++++++++ src/IDF/Tag.php | 5 +- src/IDF/Template/MarkdownForge.php | 2 +- 4 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 src/IDF/Migrations/25NullableProjectInTag.php diff --git a/src/IDF/Forge.php b/src/IDF/Forge.php index df199a0..7722a98 100644 --- a/src/IDF/Forge.php +++ b/src/IDF/Forge.php @@ -53,7 +53,7 @@ class IDF_Forge } public function getProjectLabelsWithCounts() { - $sql = new Pluf_SQL('project=0'); + $sql = new Pluf_SQL('project IS NULL'); $tagList = Pluf::factory('IDF_Tag')->getList(array( 'filter' => $sql->gen(), 'view' => 'join_projects', @@ -92,4 +92,4 @@ class IDF_Forge public function setCustomForgePageContent($content) { $this->conf->setVal('custom_forge_page_content', $content); } -} \ No newline at end of file +} diff --git a/src/IDF/Migrations/25NullableProjectInTag.php b/src/IDF/Migrations/25NullableProjectInTag.php new file mode 100644 index 0000000..22e10d7 --- /dev/null +++ b/src/IDF/Migrations/25NullableProjectInTag.php @@ -0,0 +1,46 @@ +execute('ALTER TABLE '.$db->pfx.'idf_tags ALTER COLUMN project DROP NOT NULL'); + } else if ($engine === 'MySQL') { + $db->execute('ALTER TABLE '.$db->pfx.'idf_tags MODIFY project MEDIUMINT NULL'); + // this is only needed for non-transactional setups where MySQL set 0 as default value + $db->execute('UPDATE '.$db->pfx.'idf_tags SET project=NULL WHERE project=0'); + } +} + +function IDF_Migrations_25NullableProjectInTag_down($params=null) +{ + $db = Pluf::db(); + if ($engine === 'PostgreSQL') { + $db->execute('ALTER TABLE '.$db->pfx.'idf_tags ALTER COLUMN project SET NOT NULL'); + } else if ($engine === 'MySQL') { + $db->execute('ALTER TABLE '.$db->pfx.'idf_tags MODIFY project MEDIUMINT NOT NULL'); + } +} diff --git a/src/IDF/Tag.php b/src/IDF/Tag.php index ee127ec..e3ecba5 100644 --- a/src/IDF/Tag.php +++ b/src/IDF/Tag.php @@ -48,7 +48,8 @@ class IDF_Tag extends Pluf_Model array( 'type' => 'Pluf_DB_Field_Foreignkey', 'model' => 'IDF_Project', - 'blank' => false, + 'blank' => true, + 'is_null' => true, 'verbose' => __('project'), ), 'class' => @@ -147,7 +148,7 @@ class IDF_Tag extends Pluf_Model $class = trim($class); $name = trim($name); $gtag = new IDF_Tag(); - $sql = new Pluf_SQL('class=%s AND lcname=%s AND project=0', + $sql = new Pluf_SQL('class=%s AND lcname=%s AND project IS NULL', array($class, mb_strtolower($name))); $tags = $gtag->getList(array('filter' => $sql->gen())); if ($tags->count() < 1) { diff --git a/src/IDF/Template/MarkdownForge.php b/src/IDF/Template/MarkdownForge.php index 1169095..8d3afe8 100644 --- a/src/IDF/Template/MarkdownForge.php +++ b/src/IDF/Template/MarkdownForge.php @@ -83,7 +83,7 @@ class IDF_Template_MarkdownForge extends Pluf_Template_Tag $name = $class; $class = IDF_TAG_DEFAULT_CLASS; } - $sql = new Pluf_SQL('class=%s AND lcname=%s AND project=0', + $sql = new Pluf_SQL('class=%s AND lcname=%s AND project IS NULL', array(strtolower($class), mb_strtolower($name))); $tag = Pluf::factory('IDF_Tag')->getOne(array('filter' => $sql->gen())); }