* dblayeroo : add a new dblayer class. More OO, supports more options than dblayer
* fts : The Full Text Search module for dummies git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@3459 bf3deb0d-5f1a-0410-827f-c0cc1f45334c
This commit is contained in:
@@ -6,6 +6,16 @@ spl_autoload_register(function ($class) {
|
||||
|
||||
define ("PHPUNIT", "ON-GOING");
|
||||
|
||||
|
||||
file_put_contents ("Tests/dblayerooSqliteTest.php",
|
||||
str_replace ("{ENGINE}", "sqlite",
|
||||
file_get_contents ("Tests/dblayerooComplet.php")));
|
||||
file_put_contents ("Tests/dblayerooMySQLTest.php",
|
||||
str_replace ("{ENGINE}", "mysql",
|
||||
file_get_contents ("Tests/dblayerooComplet.php")));
|
||||
file_put_contents ("Tests/dblayerooPostgreSQLTest.php",
|
||||
str_replace ("{ENGINE}", "pgsql",
|
||||
file_get_contents ("Tests/dblayerooComplet.php")));
|
||||
file_put_contents ("Tests/dblayerSqliteTest.php",
|
||||
str_replace ("{ENGINE}", "sqlite",
|
||||
file_get_contents ("Tests/dblayerComplet.php")));
|
||||
|
||||
363
Tests/dblayerooComplet.php
Normal file
363
Tests/dblayerooComplet.php
Normal file
@@ -0,0 +1,363 @@
|
||||
<?php
|
||||
/** DomFramework - Tests
|
||||
@package domframework
|
||||
@author Dominique Fournier <dominique@fournier38.fr> */
|
||||
|
||||
class test_dblayeroo_{ENGINE} extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
// Test with column name 'group', 'object', 'where', 'with space'
|
||||
// Test with table name 'group', 'object', 'where', 'with space'
|
||||
// For the 3 DB engines
|
||||
|
||||
public $engine="{ENGINE}";
|
||||
public $confs = array (
|
||||
"sqlite" => array (
|
||||
"dsn" => "sqlite:/tmp/databaseDBLayeroo.db",
|
||||
"username" => null,
|
||||
"password" => null,
|
||||
"driver_options" => null,
|
||||
"tableprefix" => "",
|
||||
),
|
||||
"mysql" => array (
|
||||
"dsn" => "mysql:host=127.0.0.1;port=3306;dbname=test",
|
||||
"username" => "root",
|
||||
"password" => "lqsym",
|
||||
"driver_options" => null,
|
||||
"tableprefix" => "",
|
||||
),
|
||||
"pgsql" => array (
|
||||
"dsn" => "pgsql:host=127.0.0.1;port=5432;dbname=dbname",
|
||||
"username" => "root",
|
||||
"password" => "root",
|
||||
"driver_options" => null,
|
||||
"tableprefix" => "",
|
||||
),
|
||||
);
|
||||
|
||||
private function db1 ()
|
||||
{
|
||||
$dbconfig = $this->confs["{ENGINE}"];
|
||||
$db1 = new dblayeroo ($dbconfig["dsn"], $dbconfig["username"],
|
||||
$dbconfig["password"], $dbconfig["driver_options"]);
|
||||
$db1->table ("groupedoo");
|
||||
$db1->fields (array ("group"=>array ("varchar(255)", "not null"),
|
||||
"object"=>array ("varchar(255)", "not null"),
|
||||
"where"=>array ("varchar(255)", "not null"),
|
||||
"with space"=>array ("varchar(255)")));
|
||||
$db1->unique (array ());
|
||||
$db1->primary ("group");
|
||||
return $db1;
|
||||
}
|
||||
|
||||
private function db2 ()
|
||||
{
|
||||
$dbconfig = $this->confs["{ENGINE}"];
|
||||
$db2 = new dblayeroo ($dbconfig["dsn"], $dbconfig["username"],
|
||||
$dbconfig["password"], $dbconfig["driver_options"]);
|
||||
$db2->table ("usersoo");
|
||||
$db2->fields (array ("uid"=>array ("integer", "not null", "autoincrement"),
|
||||
"gecos"=>array ("varchar(255)", "not null"),
|
||||
"password"=>array ("varchar(255)", "not null"),
|
||||
"group" => array ("varchar(255)", "not null"),
|
||||
));
|
||||
$db2->unique (array ("gecos","password"));
|
||||
$db2->primary ("uid");
|
||||
$db2->foreign (array ("group" => array ("groupedoo", "group", "ON DELETE CASCADE")));
|
||||
return $db2;
|
||||
}
|
||||
|
||||
private function db3 ()
|
||||
{
|
||||
$dbconfig = $this->confs["{ENGINE}"];
|
||||
$db3 = new dblayeroo ($dbconfig["dsn"], $dbconfig["username"],
|
||||
$dbconfig["password"], $dbconfig["driver_options"]);
|
||||
return $db3;
|
||||
}
|
||||
|
||||
public function test_dropTable ()
|
||||
{
|
||||
$dbconfig = $this->confs["{ENGINE}"];
|
||||
$db = new dblayeroo ($dbconfig["dsn"], $dbconfig["username"],
|
||||
$dbconfig["password"], $dbconfig["driver_options"]);
|
||||
foreach (array ("usersoo", "groupedoo", "multipleoo", "multiple2oo", "users3oo",
|
||||
"readORoo") as
|
||||
$table)
|
||||
{
|
||||
$db->table ($table);
|
||||
try
|
||||
{
|
||||
$res = $db->dropTable();
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
}
|
||||
}
|
||||
$db->disconnect ();
|
||||
// Never generate an error, just drop the table if it exists, and do noting
|
||||
// if it doesn't exists
|
||||
}
|
||||
|
||||
public function test_createTable1 ()
|
||||
{
|
||||
// Create a table named groupedoo
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->createTable ();
|
||||
$db1->disconnect ();
|
||||
$this->assertSame (0, $res);
|
||||
}
|
||||
|
||||
public function test_createTable2 ()
|
||||
{
|
||||
// Create a table named usersoo
|
||||
$db2 = $this->db2 ();
|
||||
$res = $db2->createTable ();
|
||||
$db2->disconnect ();
|
||||
$this->assertSame (0, $res);
|
||||
}
|
||||
|
||||
public function test_select1 ()
|
||||
{
|
||||
// Select all on the table : nothing
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->select()->execute ();
|
||||
$db1->disconnect ();
|
||||
$this->assertSame (array (), $res);
|
||||
}
|
||||
|
||||
public function test_insert1 ()
|
||||
{
|
||||
// Insert without value : raise an exception
|
||||
$this->setExpectedException ("Exception");
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->insert()->execute ();
|
||||
$db1->disconnect ();
|
||||
}
|
||||
|
||||
public function test_insert2 ()
|
||||
{
|
||||
// Insert : missing not null field : exception
|
||||
$this->setExpectedException ("Exception");
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->insert()
|
||||
->setValues(array ("group"=>"group1", "where"=>"where"))
|
||||
->execute ();
|
||||
$db1->disconnect ();
|
||||
}
|
||||
|
||||
public function test_insert3 ()
|
||||
{
|
||||
// Insert : first row inserted
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->insert()->setValues(array ("group"=>"group1", "where"=>"where",
|
||||
"object"=>"object"))->execute ();
|
||||
$db1->disconnect ();
|
||||
// As the key is not an autoincrement, the lastInsertID can be 0 or 1
|
||||
$this->assertGreaterThanOrEqual ($res, "0");
|
||||
}
|
||||
|
||||
public function test_select2 ()
|
||||
{
|
||||
// Select all on the table : nothing
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->select()->execute ();
|
||||
$db1->disconnect ();
|
||||
$this->assertSame (array (array ("group"=>"group1", "object"=>"object",
|
||||
"where"=>"where", "with space"=>null)),
|
||||
$res);
|
||||
}
|
||||
|
||||
public function test_update1 ()
|
||||
{
|
||||
// update the all the rows of the table (without WHERE)
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->update()->setValues(array ("group"=>"group2", "where"=>"where",
|
||||
"object"=>"object"))->execute ();
|
||||
$db1->disconnect ();
|
||||
$this->assertSame (1, $res);
|
||||
}
|
||||
|
||||
public function test_select3 ()
|
||||
{
|
||||
// Select all on the table after update
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->select()->execute ();
|
||||
$db1->disconnect ();
|
||||
$this->assertSame (array (array ("group"=>"group2", "object"=>"object",
|
||||
"where"=>"where", "with space"=>null)),
|
||||
$res);
|
||||
}
|
||||
|
||||
public function test_update2 ()
|
||||
{
|
||||
// update the all the rows of the table (with inexisting WHERE)
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->update()
|
||||
->setValues(array ("group"=>"group2", "where"=>"where",
|
||||
"object"=>"object"))
|
||||
->whereAdd ("group", "=", "group1")
|
||||
->execute ();
|
||||
$db1->disconnect ();
|
||||
$this->assertSame (0, $res);
|
||||
}
|
||||
|
||||
public function test_update3 ()
|
||||
{
|
||||
// update the all the rows of the table (with existing WHERE)
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->update()
|
||||
->setValues(array ("group"=>"group1", "where"=>"where",
|
||||
"object"=>"object"))
|
||||
->whereAdd ("group", "=", "group2")
|
||||
->execute ();
|
||||
$db1->disconnect ();
|
||||
$this->assertSame (1, $res);
|
||||
}
|
||||
|
||||
public function test_update4 ()
|
||||
{
|
||||
// update the all the rows of the table : NOT NULL value not provided
|
||||
// (already existing in the table)
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->update()
|
||||
->setValues(array ("group"=>"group1"))
|
||||
->execute ();
|
||||
$db1->disconnect ();
|
||||
$this->assertSame (1, $res);
|
||||
}
|
||||
|
||||
public function test_delete1 ()
|
||||
{
|
||||
// Delete : WHERE return nothing
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->delete ()
|
||||
->whereAdd ("group", "=", "group2")
|
||||
->execute ();
|
||||
$db1->disconnect ();
|
||||
$this->assertSame (0, $res);
|
||||
}
|
||||
|
||||
public function test_delete2 ()
|
||||
{
|
||||
// Delete all
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->delete ()
|
||||
->execute ();
|
||||
$db1->disconnect ();
|
||||
$this->assertSame (1, $res);
|
||||
}
|
||||
|
||||
public function test_select4 ()
|
||||
{
|
||||
// Select all on the table : nothing
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->select()->execute ();
|
||||
$db1->disconnect ();
|
||||
$this->assertSame (array (), $res);
|
||||
}
|
||||
|
||||
public function test_insert5 ()
|
||||
{
|
||||
// Insert : first row inserted for TABLE 2 tests
|
||||
$db1 = $this->db1 ();
|
||||
$res = $db1->insert()->setValues(array ("group"=>"group1", "where"=>"where",
|
||||
"object"=>"object"))->execute ();
|
||||
$db1->disconnect ();
|
||||
// As the key is not an autoincrement, the lastInsertID can be 0 or 1
|
||||
$this->assertGreaterThanOrEqual ($res, "0");
|
||||
}
|
||||
|
||||
///////////////////
|
||||
/// TABLE 2 ///
|
||||
///////////////////
|
||||
public function test_insertAutoincrement1 ()
|
||||
{
|
||||
// Test autoincrement
|
||||
$db1 = $this->db1 ();
|
||||
$db2 = $this->db2 ();
|
||||
$db2->setForeignObj ($db1);
|
||||
$res = $db2->insert()->setValues(array ("gecos"=>"name",
|
||||
"password"=>"toto",
|
||||
"group"=>"group1"))->execute ();
|
||||
$db1->disconnect ();
|
||||
$db2->disconnect ();
|
||||
$this->assertSame ("1", $res);
|
||||
}
|
||||
|
||||
public function test_insertAutoincrement2 ()
|
||||
{
|
||||
// Test autoincrement
|
||||
$db1 = $this->db1 ();
|
||||
$db2 = $this->db2 ();
|
||||
$db2->setForeignObj ($db1);
|
||||
$res = $db2->insert()->setValues(array ("gecos"=>"firstname2",
|
||||
"password"=>"toto2",
|
||||
"group"=>"group1"))->execute ();
|
||||
$db1->disconnect ();
|
||||
$db2->disconnect ();
|
||||
$this->assertSame ("2", $res);
|
||||
}
|
||||
|
||||
public function test_insertAutoincrement3 ()
|
||||
{
|
||||
// Test autoincrement
|
||||
$db1 = $this->db1 ();
|
||||
$db2 = $this->db2 ();
|
||||
$db2->setForeignObj ($db1);
|
||||
$res = $db2->insert()->setValues(array ("gecos"=>"firstname3",
|
||||
"password"=>"toto3",
|
||||
"group"=>"group1"))->execute ();
|
||||
$db1->disconnect ();
|
||||
$db2->disconnect ();
|
||||
$this->assertSame ("3", $res);
|
||||
}
|
||||
|
||||
public function test_delete3 ()
|
||||
{
|
||||
// Delete with WHERE clause
|
||||
$db1 = $this->db1 ();
|
||||
$db2 = $this->db2 ();
|
||||
$db2->setForeignObj ($db1);
|
||||
$res = $db2->delete ()
|
||||
->whereAdd ("gecos", "LIKE", "firstname%")
|
||||
->execute ();
|
||||
$db1->disconnect ();
|
||||
$db2->disconnect ();
|
||||
$this->assertSame (2, $res);
|
||||
}
|
||||
|
||||
public function test_select5 ()
|
||||
{
|
||||
// Select all on the table : one entry "gecos"=>"name"
|
||||
$db1 = $this->db1 ();
|
||||
$db2 = $this->db2 ();
|
||||
$db2->setForeignObj ($db1);
|
||||
$res = $db2->select()->execute ();
|
||||
$db1->disconnect ();
|
||||
$db2->disconnect ();
|
||||
$this->assertSame (array (array ("uid"=>1,
|
||||
"gecos"=>"name",
|
||||
"password"=>"toto",
|
||||
"group"=>"group1")), $res);
|
||||
}
|
||||
|
||||
/// SCHEMA MANAGEMENT ///
|
||||
public function test_getTableSchema1 ()
|
||||
{
|
||||
$db3 = $this->db3 ();
|
||||
$res = $db3->getTableSchema ("usersoo");
|
||||
$db3->disconnect ();
|
||||
$this->assertSame (
|
||||
array ("fields"=>array (
|
||||
"uid"=>array ("integer", "not null", "autoincrement"),
|
||||
"gecos"=>array ("varchar(255)", "not null"),
|
||||
"password"=>array ("varchar(255)", "not null"),
|
||||
"group" => array ("varchar(255)", "not null"),
|
||||
),
|
||||
"primary"=>"uid",
|
||||
"unique"=>array ("gecos","password"),
|
||||
"foreign" => array (
|
||||
"group" => array ('groupedoo', 'group', 'ON DELETE CASCADE'),
|
||||
),
|
||||
), $res);
|
||||
}
|
||||
}
|
||||
174
Tests/ftsTest.php
Normal file
174
Tests/ftsTest.php
Normal file
@@ -0,0 +1,174 @@
|
||||
<?php
|
||||
|
||||
require_once ("fts.php");
|
||||
|
||||
/** Test the FTS */
|
||||
class test_fts extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function test_tokenizerSearch0 ()
|
||||
{
|
||||
// Empty
|
||||
$fts = new fts ();
|
||||
$fts->search ("");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array (),
|
||||
"minuses"=>array ()));
|
||||
}
|
||||
|
||||
public function test_tokenizerSearch1 ()
|
||||
{
|
||||
// Too small
|
||||
$fts = new fts ();
|
||||
$fts->search ("X");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array (),
|
||||
"minuses"=>array ()));
|
||||
}
|
||||
|
||||
public function test_tokenizerSearch2 ()
|
||||
{
|
||||
// One word
|
||||
$fts = new fts ();
|
||||
$fts->search ("XYZ");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("XYZ"),
|
||||
"minuses"=>array ("")));
|
||||
}
|
||||
|
||||
public function test_tokenizerSearch3 ()
|
||||
{
|
||||
// Two word
|
||||
$fts = new fts ();
|
||||
$fts->search ("XYZ 123");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("XYZ", "123"),
|
||||
"minuses"=>array ("", "")));
|
||||
}
|
||||
|
||||
public function test_tokenizerSearch4 ()
|
||||
{
|
||||
// Three word
|
||||
$fts = new fts ();
|
||||
$fts->search ("XYZ 123 ABC");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("XYZ", "123", "ABC"),
|
||||
"minuses"=>array ("", "", "")));
|
||||
}
|
||||
|
||||
public function test_tokenizerSearch5 ()
|
||||
{
|
||||
// Three word
|
||||
$fts = new fts ();
|
||||
$fts->search ("XYZ 123 ABC KLM");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("XYZ", "123",
|
||||
"ABC", "KLM"),
|
||||
"minuses"=>array ("", "", "", "")));
|
||||
}
|
||||
|
||||
public function test_tokenizerSearch6 ()
|
||||
{
|
||||
// Three word
|
||||
$fts = new fts ();
|
||||
$fts->search ("Louis-XYZ 123 -AéBCé KLM");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("Louis-XYZ", "123",
|
||||
"AéBCé", "KLM"),
|
||||
"minuses"=>array ("", "", "-", "")));
|
||||
}
|
||||
|
||||
|
||||
public function test_tokenizerSentence0 ()
|
||||
{
|
||||
// Empty sentence
|
||||
$fts = new fts ();
|
||||
$fts->search ("\"\"");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array (),
|
||||
"minuses"=>array ()));
|
||||
}
|
||||
|
||||
public function test_tokenizerSentence1 ()
|
||||
{
|
||||
// One sentence only
|
||||
$fts = new fts ();
|
||||
$fts->search ("\"XYZ 123\"");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("XYZ 123"),
|
||||
"minuses"=>array ("")));
|
||||
}
|
||||
|
||||
public function test_tokenizerSentence2 ()
|
||||
{
|
||||
// Two sentence
|
||||
$fts = new fts ();
|
||||
$fts->search ("\"XYZ 123\" \"ABC KLM\"");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("XYZ 123", "ABC KLM"),
|
||||
"minuses"=>array ("", "")));
|
||||
}
|
||||
|
||||
public function test_tokenizerSentence3 ()
|
||||
{
|
||||
// Three sentence
|
||||
$fts = new fts ();
|
||||
$fts->search ("\"XYZ 123\" -\"ABC KLM\" \"RPO YUI\"");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("XYZ 123", "ABC KLM",
|
||||
"RPO YUI"),
|
||||
"minuses"=>array ("", "-", "")));
|
||||
}
|
||||
|
||||
public function test_tokenizerMixed1 ()
|
||||
{
|
||||
// One word and one sentence, starting by word
|
||||
$fts = new fts ();
|
||||
$fts->search ("XYZ \"ABC KLM\"");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("XYZ", "ABC KLM"),
|
||||
"minuses"=>array ("", "")));
|
||||
}
|
||||
|
||||
public function test_tokenizerMixed2 ()
|
||||
{
|
||||
// One word and one sentence, starting by sentence
|
||||
$fts = new fts ();
|
||||
$fts->search ("\"ABC KLM\" XYZ");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("ABC KLM", "XYZ"),
|
||||
"minuses"=>array ("", "")));
|
||||
}
|
||||
|
||||
public function test_tokenizerMixed3 ()
|
||||
{
|
||||
// One word and two sentences, starting by sentence
|
||||
$fts = new fts ();
|
||||
$fts->search ("\"ABC KLM\" XYZ \"RPO YUI\"");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("ABC KLM", "XYZ",
|
||||
"RPO YUI"),
|
||||
"minuses"=>array ("", "", "")));
|
||||
}
|
||||
|
||||
public function test_tokenizerMixed4 ()
|
||||
{
|
||||
// Two words and two sentences, starting by sentence
|
||||
$fts = new fts ();
|
||||
$fts->search ("\"ABC KLM\" XYZ \"RPO YUI\" 123");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("ABC KLM", "XYZ",
|
||||
"RPO YUI", "123"),
|
||||
"minuses"=>array ("", "", "", "")));
|
||||
}
|
||||
|
||||
public function test_tokenizerMixed5 ()
|
||||
{
|
||||
// Two words and two sentences, starting by a word
|
||||
$fts = new fts ();
|
||||
$fts->search ("123 \"ABC KLM\" XYZ \"RPO YUI\"");
|
||||
$res = $fts->getTokensMin ();
|
||||
$this->assertSame ($res, array ("tokens"=>array ("123", "ABC KLM",
|
||||
"XYZ", "RPO YUI"),
|
||||
"minuses"=>array ("", "", "", "")));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user