compatability static methods DB::whatever() will still be the recommended method of use, but the new object oriented approach is now available to those who want it
316 lines
11 KiB
PHP
316 lines
11 KiB
PHP
<?php
|
|
class ObjectTest extends SimpleTest {
|
|
public $mdb;
|
|
|
|
function __construct() {
|
|
$this->mdb = new MeekroDB();
|
|
|
|
foreach ($this->mdb->tableList() as $table) {
|
|
$this->mdb->query("DROP TABLE $table");
|
|
}
|
|
}
|
|
|
|
|
|
function test_1_create_table() {
|
|
$this->mdb->query("CREATE TABLE `accounts` (
|
|
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
|
`username` VARCHAR( 255 ) NOT NULL ,
|
|
`password` VARCHAR( 255 ) NOT NULL ,
|
|
`age` INT NOT NULL DEFAULT '10',
|
|
`height` DOUBLE NOT NULL DEFAULT '10.0',
|
|
`favorite_word` VARCHAR( 255 ) NULL DEFAULT 'hi'
|
|
) ENGINE = InnoDB");
|
|
}
|
|
|
|
function test_1_5_empty_table() {
|
|
$counter = $this->mdb->queryFirstField("SELECT COUNT(*) FROM accounts");
|
|
$this->assert($counter === strval(0));
|
|
|
|
$row = $this->mdb->queryFirstRow("SELECT * FROM accounts");
|
|
$this->assert($row === null);
|
|
|
|
$field = $this->mdb->queryFirstField("SELECT * FROM accounts");
|
|
$this->assert($field === null);
|
|
|
|
$field = $this->mdb->queryOneField('nothere', "SELECT * FROM accounts");
|
|
$this->assert($field === null);
|
|
|
|
$column = $this->mdb->queryFirstColumn("SELECT * FROM accounts");
|
|
$this->assert(is_array($column) && count($column) === 0);
|
|
|
|
$column = $this->mdb->queryOneColumn('nothere', "SELECT * FROM accounts"); //TODO: is this what we want?
|
|
$this->assert(is_array($column) && count($column) === 0);
|
|
}
|
|
|
|
function test_2_insert_row() {
|
|
$this->mdb->insert('accounts', array(
|
|
'username' => 'Abe',
|
|
'password' => 'hello'
|
|
));
|
|
|
|
$this->assert($this->mdb->affectedRows() === 1);
|
|
|
|
$counter = $this->mdb->queryFirstField("SELECT COUNT(*) FROM accounts");
|
|
$this->assert($counter === strval(1));
|
|
}
|
|
|
|
function test_3_more_inserts() {
|
|
$this->mdb->insert('`accounts`', array(
|
|
'username' => 'Bart',
|
|
'password' => 'hello',
|
|
'age' => 15,
|
|
'height' => 10.371
|
|
));
|
|
$dbname = $this->mdb->dbName;
|
|
$this->mdb->insert("`$dbname`.`accounts`", array(
|
|
'username' => 'Charlie\'s Friend',
|
|
'password' => 'goodbye',
|
|
'age' => 30,
|
|
'height' => 155.23,
|
|
'favorite_word' => null,
|
|
));
|
|
|
|
$this->assert($this->mdb->insertId() === 3);
|
|
|
|
$counter = $this->mdb->queryFirstField("SELECT COUNT(*) FROM accounts");
|
|
$this->assert($counter === strval(3));
|
|
|
|
$password = $this->mdb->queryFirstField("SELECT password FROM accounts WHERE favorite_word IS NULL");
|
|
$this->assert($password === 'goodbye');
|
|
|
|
$this->mdb->param_char = '###';
|
|
$bart = $this->mdb->queryFirstRow("SELECT * FROM accounts WHERE age IN ###li AND height IN ###ld AND username IN ###ls",
|
|
array(15, 25), array(10.371, 150.123), array('Bart', 'Barts'));
|
|
$this->assert($bart['username'] === 'Bart');
|
|
$this->mdb->param_char = '%';
|
|
|
|
$charlie_password = $this->mdb->queryFirstField("SELECT password FROM accounts WHERE username IN %ls AND username = %s",
|
|
array('Charlie', 'Charlie\'s Friend'), 'Charlie\'s Friend');
|
|
$this->assert($charlie_password === 'goodbye');
|
|
|
|
$charlie_password = $this->mdb->queryOneField('password', "SELECT * FROM accounts WHERE username IN %ls AND username = %s",
|
|
array('Charlie', 'Charlie\'s Friend'), 'Charlie\'s Friend');
|
|
$this->assert($charlie_password === 'goodbye');
|
|
|
|
$passwords = $this->mdb->queryFirstColumn("SELECT password FROM accounts WHERE username=%s", 'Bart');
|
|
$this->assert(count($passwords) === 1);
|
|
$this->assert($passwords[0] === 'hello');
|
|
|
|
$username = $password = $age = null;
|
|
list($age, $username, $password) = $this->mdb->queryOneList("SELECT age,username,password FROM accounts WHERE username=%s", 'Bart');
|
|
$this->assert($username === 'Bart');
|
|
$this->assert($password === 'hello');
|
|
$this->assert($age == 15);
|
|
|
|
$mysqli_result = $this->mdb->queryRaw("SELECT * FROM accounts WHERE favorite_word IS NULL");
|
|
$this->assert($mysqli_result instanceof MySQLi_Result);
|
|
$row = $mysqli_result->fetch_assoc();
|
|
$this->assert($row['password'] === 'goodbye');
|
|
$this->assert($mysqli_result->fetch_assoc() === null);
|
|
}
|
|
|
|
function test_4_query() {
|
|
$results = $this->mdb->query("SELECT * FROM accounts WHERE username=%s", 'Charlie\'s Friend');
|
|
$this->assert(count($results) === 1);
|
|
$this->assert($results[0]['age'] == 30 && $results[0]['password'] == 'goodbye');
|
|
|
|
$results = $this->mdb->query("SELECT * FROM accounts WHERE username!=%s", "Charlie's Friend");
|
|
$this->assert(count($results) === 2);
|
|
|
|
$columnlist = $this->mdb->columnList('accounts');
|
|
$this->assert(count($columnlist) === 6);
|
|
$this->assert($columnlist[0] === 'id');
|
|
$this->assert($columnlist[4] === 'height');
|
|
|
|
$tablelist = $this->mdb->tableList();
|
|
$this->assert(count($tablelist) === 1);
|
|
$this->assert($tablelist[0] === 'accounts');
|
|
|
|
$tablelist = null;
|
|
$tablelist = $this->mdb->tableList($this->mdb->dbName);
|
|
$this->assert(count($tablelist) === 1);
|
|
$this->assert($tablelist[0] === 'accounts');
|
|
}
|
|
|
|
function test_4_1_query() {
|
|
$this->mdb->insert('accounts', array(
|
|
'username' => 'newguy',
|
|
'password' => $this->mdb->sqleval("REPEAT('blah', %i)", '3'),
|
|
'age' => $this->mdb->sqleval('171+1'),
|
|
'height' => 111.15
|
|
));
|
|
|
|
$row = $this->mdb->queryOneRow("SELECT * FROM accounts WHERE password=%s", 'blahblahblah');
|
|
$this->assert($row['username'] === 'newguy');
|
|
$this->assert($row['age'] === '172');
|
|
|
|
$this->mdb->update('accounts', array(
|
|
'password' => $this->mdb->sqleval("REPEAT('blah', %i)", 4),
|
|
'favorite_word' => null,
|
|
), 'username=%s', 'newguy');
|
|
|
|
$row = null;
|
|
$row = $this->mdb->queryOneRow("SELECT * FROM accounts WHERE username=%s", 'newguy');
|
|
$this->assert($row['password'] === 'blahblahblahblah');
|
|
$this->assert($row['favorite_word'] === null);
|
|
|
|
$this->mdb->query("DELETE FROM accounts WHERE password=%s", 'blahblahblahblah');
|
|
$this->assert($this->mdb->affectedRows() === 1);
|
|
}
|
|
|
|
function test_4_2_delete() {
|
|
$this->mdb->insert('accounts', array(
|
|
'username' => 'gonesoon',
|
|
'password' => 'something',
|
|
'age' => 61,
|
|
'height' => 199.194
|
|
));
|
|
|
|
$ct = $this->mdb->queryFirstField("SELECT COUNT(*) FROM accounts WHERE username=%s AND height=%d", 'gonesoon', 199.194);
|
|
$this->assert(intval($ct) === 1);
|
|
|
|
$ct = $this->mdb->queryFirstField("SELECT COUNT(*) FROM accounts WHERE username=%s1 AND height=%d0 AND height=%d", 199.194, 'gonesoon');
|
|
$this->assert(intval($ct) === 1);
|
|
|
|
$this->mdb->delete('accounts', 'username=%s AND age=%i AND height=%d', 'gonesoon', '61', '199.194');
|
|
$this->assert($this->mdb->affectedRows() === 1);
|
|
|
|
$ct = $this->mdb->queryFirstField("SELECT COUNT(*) FROM accounts WHERE username=%s AND height=%d", 'gonesoon', '199.194');
|
|
$this->assert(intval($ct) === 0);
|
|
}
|
|
|
|
function test_4_3_insertmany() {
|
|
$ins[] = array(
|
|
'username' => '1ofmany',
|
|
'password' => 'something',
|
|
'age' => 23,
|
|
'height' => 190.194
|
|
);
|
|
$ins[] = array(
|
|
'password' => 'somethingelse',
|
|
'username' => '2ofmany',
|
|
'age' => 25,
|
|
'height' => 190.194
|
|
);
|
|
|
|
$this->mdb->insert('accounts', $ins);
|
|
$this->assert($this->mdb->affectedRows() === 2);
|
|
|
|
$rows = $this->mdb->query("SELECT * FROM accounts WHERE height=%d ORDER BY age ASC", 190.194);
|
|
$this->assert(count($rows) === 2);
|
|
$this->assert($rows[0]['username'] === '1ofmany');
|
|
$this->assert($rows[0]['age'] === '23');
|
|
$this->assert($rows[1]['age'] === '25');
|
|
$this->assert($rows[1]['password'] === 'somethingelse');
|
|
$this->assert($rows[1]['username'] === '2ofmany');
|
|
|
|
}
|
|
|
|
|
|
|
|
function test_5_insert_blobs() {
|
|
$this->mdb->query("CREATE TABLE `storedata` (
|
|
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
|
`picture` BLOB
|
|
) ENGINE = InnoDB");
|
|
|
|
|
|
$smile = file_get_contents('smile1.jpg');
|
|
$this->mdb->insert('storedata', array(
|
|
'picture' => $smile,
|
|
));
|
|
$this->mdb->query("INSERT INTO storedata (picture) VALUES (%s)", $smile);
|
|
$this->mdb->query("INSERT INTO storedata (picture) VALUES (?)", 's', $smile);
|
|
|
|
$getsmile = $this->mdb->queryFirstField("SELECT picture FROM storedata WHERE id=1");
|
|
$getsmile2 = $this->mdb->queryFirstField("SELECT picture FROM storedata WHERE id=2");
|
|
$getsmile3 = $this->mdb->queryFirstField("SELECT picture FROM storedata WHERE id=3");
|
|
$this->assert($smile === $getsmile);
|
|
$this->assert($smile === $getsmile2);
|
|
$this->assert($smile === $getsmile3);
|
|
}
|
|
|
|
function test_6_insert_ignore() {
|
|
$this->mdb->insertIgnore('accounts', array(
|
|
'id' => 1, //duplicate primary key
|
|
'username' => 'gonesoon',
|
|
'password' => 'something',
|
|
'age' => 61,
|
|
'height' => 199.194
|
|
));
|
|
}
|
|
|
|
function test_7_insert_update() {
|
|
$this->mdb->insertUpdate('accounts', array(
|
|
'id' => 2, //duplicate primary key
|
|
'username' => 'gonesoon',
|
|
'password' => 'something',
|
|
'age' => 61,
|
|
'height' => 199.194
|
|
), 'age = age + %i', 1);
|
|
|
|
$this->assert($this->mdb->affectedRows() === 2); // a quirk of MySQL, even though only 1 row was updated
|
|
|
|
$result = $this->mdb->query("SELECT * FROM accounts WHERE age = %i", 16);
|
|
$this->assert(count($result) === 1);
|
|
$this->assert($result[0]['height'] === '10.371');
|
|
|
|
$this->mdb->insertUpdate('accounts', array(
|
|
'id' => 2, //duplicate primary key
|
|
'username' => 'blahblahdude',
|
|
'age' => 233,
|
|
'height' => 199.194
|
|
));
|
|
|
|
$result = $this->mdb->query("SELECT * FROM accounts WHERE age = %i", 233);
|
|
$this->assert(count($result) === 1);
|
|
$this->assert($result[0]['height'] === '199.194');
|
|
$this->assert($result[0]['username'] === 'blahblahdude');
|
|
|
|
$this->mdb->insertUpdate('accounts', array(
|
|
'id' => 2, //duplicate primary key
|
|
'username' => 'gonesoon',
|
|
'password' => 'something',
|
|
'age' => 61,
|
|
'height' => 199.194
|
|
), array(
|
|
'age' => 74,
|
|
));
|
|
|
|
$result = $this->mdb->query("SELECT * FROM accounts WHERE age = %i", 74);
|
|
$this->assert(count($result) === 1);
|
|
$this->assert($result[0]['height'] === '199.194');
|
|
$this->assert($result[0]['username'] === 'blahblahdude');
|
|
|
|
$multiples[] = array(
|
|
'id' => 3, //duplicate primary key
|
|
'username' => 'gonesoon',
|
|
'password' => 'something',
|
|
'age' => 61,
|
|
'height' => 199.194
|
|
);
|
|
$multiples[] = array(
|
|
'id' => 1, //duplicate primary key
|
|
'username' => 'gonesoon',
|
|
'password' => 'something',
|
|
'age' => 61,
|
|
'height' => 199.194
|
|
);
|
|
|
|
$this->mdb->insertUpdate('accounts', $multiples, array('age' => 914));
|
|
$this->assert($this->mdb->affectedRows() === 4);
|
|
|
|
$result = $this->mdb->query("SELECT * FROM accounts WHERE age=914 ORDER BY id ASC");
|
|
$this->assert(count($result) === 2);
|
|
$this->assert($result[0]['username'] === 'Abe');
|
|
$this->assert($result[1]['username'] === 'Charlie\'s Friend');
|
|
|
|
$this->mdb->query("UPDATE accounts SET age=15, username='Bart' WHERE age=%i", 74);
|
|
$this->assert($this->mdb->affectedRows() === 1);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
?>
|