where("a", 1) ->where("b", 2) ->compile(); $sql = str_replace("\n", " ", $sql); $this->assert_same("SELECT * WHERE `a` = 1 AND `b` = 2", $sql); } function compound_where_test() { $sql = Database::instance() ->where("outer1", 1) ->open_paren() ->where("inner1", 1) ->orwhere("inner2", 2) ->close_paren() ->where("outer2", 2) ->compile(); $sql = str_replace("\n", " ", $sql); $this->assert_same( "SELECT * WHERE `outer1` = 1 AND (`inner1` = 1 OR `inner2` = 2) AND `outer2` = 2", $sql); } function group_first_test() { $sql = Database::instance() ->open_paren() ->where("inner1", 1) ->orwhere("inner2", 2) ->close_paren() ->where("outer1", 1) ->where("outer2", 2) ->compile(); $sql = str_replace("\n", " ", $sql); $this->assert_same( "SELECT * WHERE (`inner1` = 1 OR `inner2` = 2) AND `outer1` = 1 AND `outer2` = 2", $sql); } function where_array_test() { $sql = Database::instance() ->where("outer1", 1) ->open_paren() ->where("inner1", 1) ->orwhere(array("inner2" => 2, "inner3" => 3)) ->close_paren() ->compile(); $sql = str_replace("\n", " ", $sql); $this->assert_same( "SELECT * WHERE `outer1` = 1 AND (`inner1` = 1 OR `inner2` = 2 OR `inner3` = 3)", $sql); } function notlike_test() { $sql = Database::instance() ->where("outer1", 1) ->open_paren() ->ornotlike("inner1", 1) ->close_paren() ->compile(); $sql = str_replace("\n", " ", $sql); $this->assert_same( "SELECT * WHERE `outer1` = 1 OR ( `inner1` NOT LIKE '%1%')", $sql); } function prefix_replacement_test() { $db = Database_For_Test::instance(); $converted = $db->add_table_prefixes("CREATE TABLE IF NOT EXISTS {test_tables} ( `id` int(9) NOT NULL auto_increment, `name` varchar(32) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY(`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8"); $expected = "CREATE TABLE IF NOT EXISTS g3test_test_tables ( `id` int(9) NOT NULL auto_increment, `name` varchar(32) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY(`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8"; $this->assert_same($expected, $converted); $sql = "UPDATE {test_tables} SET `name` = '{test string}' " . "WHERE `item_id` IN " . " (SELECT `id` FROM {items} " . " WHERE `left_ptr` >= 1 " . " AND `right_ptr` <= 6)"; $sql = $db->add_table_prefixes($sql); $expected = "UPDATE g3test_test_tables SET `name` = '{test string}' " . "WHERE `item_id` IN " . " (SELECT `id` FROM g3test_items " . " WHERE `left_ptr` >= 1 " . " AND `right_ptr` <= 6)"; $this->assert_same($expected, $sql); } function prefix_no_replacement_test() { $update = Database_For_Test::instance()->from("test_tables") ->where("1 = 1") ->set(array("name" => "Test Name")) ->update(); $expected = "UPDATE `g3test_test_tables` SET `name` = 'Test Name' WHERE 1 = 1"; $this->assert_same($expected, $update); } } class Database_For_Test extends Database { static function instance() { $db = new Database_For_Test(); $db->_table_names["{items}"] = "g3test_items"; $db->config["table_prefix"] = "g3test_"; return $db; } public function query($sql = '') { if (!empty($sql)) { print " query($sql)\n"; $sql = $this->add_table_prefixes($sql); } return $sql; } }