diff options
author | Tim Almdal <tnalmdal@shaw.ca> | 2009-02-27 03:25:29 +0000 |
---|---|---|
committer | Tim Almdal <tnalmdal@shaw.ca> | 2009-02-27 03:25:29 +0000 |
commit | ab973bd87168ab11ff5242824738edb89f0bc3e2 (patch) | |
tree | afdc2a9650a9f19a43fa9ccf89c159032e705fab /core | |
parent | 0b055835fdecd9e560784ee23afa480328d8e742 (diff) |
Replace the string [table_name] with {$prefix}table_name. Slowly
working through setting up the database access to support table
prefixes. (Ticket#68)
Before going ahead, just wanted to check this approach... whatcha think?
Diffstat (limited to 'core')
-rw-r--r-- | core/libraries/MY_Database.php | 16 | ||||
-rw-r--r-- | core/tests/Database_Test.php | 33 |
2 files changed, 49 insertions, 0 deletions
diff --git a/core/libraries/MY_Database.php b/core/libraries/MY_Database.php index f5e412a6..7d6c3ece 100644 --- a/core/libraries/MY_Database.php +++ b/core/libraries/MY_Database.php @@ -42,4 +42,20 @@ class Database extends Database_Core { throw new Kohana_Database_Exception('database.missing_open_paren'); } + + /** + * Parse the query string and convert any strings of the form `\([a-zA-Z0-9_]*?)\] + * table prefix . $1 + */ + public function query($sql = '') { + if (!empty($sql)) { + $sql = $this->add_table_prefixes($sql); + } + return parent::query($sql); + } + + public function add_table_prefixes($sql) { + $prefix = $this->config["table_prefix"]; + return preg_replace("#\[([a-zA-Z0-9_]+)\]#", "{$prefix}$1", $sql); + } }
\ No newline at end of file diff --git a/core/tests/Database_Test.php b/core/tests/Database_Test.php index 0d4351c9..e9ec5ebb 100644 --- a/core/tests/Database_Test.php +++ b/core/tests/Database_Test.php @@ -83,4 +83,37 @@ class Database_Test extends Unit_Test_Case { "SELECT * WHERE `outer1` = 1 OR ( `inner1` NOT LIKE '%1%')", $sql); } + + function prefix_replacement_test() { + $db = Database_For_Test::instance(); + $sql = "UPDATE `[access_caches]` SET `edit_1` = 1 " . + "WHERE `item_id` IN " . + " (SELECT `id` FROM `[items]` " . + " WHERE `left` >= 1 " . + " AND `right` <= 6)"; + $sql = $db->add_table_prefixes($sql); + + $expected = "UPDATE `g3test_access_caches` SET `edit_1` = 1 " . + "WHERE `item_id` IN " . + " (SELECT `id` FROM `g3test_items` " . + " WHERE `left` >= 1 " . + " AND `right` <= 6)"; + + $this->assert_same($expected, $sql); + } + + public function setup() { + } + + public function teardown() { + } + +} + +class Database_For_Test extends Database { + static function instance() { + $db = new Database_For_Test(); + $db->config["table_prefix"] = "g3test_"; + return $db; + } } |