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) ->and_open() ->where("inner1", "=", 1) ->orwhere("inner2", "=", 2) ->close() ->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() ->and_open() ->where("inner1", "=", 1) ->orwhere("inner2", "=", 2) ->close() ->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) ->and_open() ->where("inner1", "=", 1) ->orwhere("inner2", "=", 2) ->orwhere("inner3", "=", 3)) ->close() ->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) ->or_open() ->where("inner1", "NOT LIKE", 1) ->close() ->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)) { $sql = $this->add_table_prefixes($sql); } return $sql; } }