Commit c1511dd3 authored by zYne's avatar zYne

--no commit message

--no commit message
parent e6d7127f
......@@ -125,7 +125,7 @@ final class Doctrine
*/
const ATTR_AUTOCOMMIT = 0;
const ATTR_PREFETCH = 1;
const ATTR_TIMEOUT = 2;
const ATTR_TIMEOUT = 2;
const ATTR_ERRMODE = 3;
const ATTR_SERVER_VERSION = 4;
const ATTR_CLIENT_VERSION = 5;
......@@ -142,6 +142,7 @@ final class Doctrine
const ATTR_DRIVER_NAME = 16;
const ATTR_STRINGIFY_FETCHES = 17;
const ATTR_MAX_COLUMN_LEN = 18;
/**
* Doctrine constants
*/
......@@ -194,6 +195,8 @@ final class Doctrine
const ATTR_CACHE_LIFESPAN = 151;
const ATTR_LOAD_REFERENCES = 153;
const ATTR_RECORD_LISTENER = 154;
const ATTR_THROW_EXCEPTIONS = 155;
/**
* LIMIT CONSTANTS
......@@ -354,10 +357,6 @@ final class Doctrine
* constant for composite identifier
*/
const IDENTIFIER_COMPOSITE = 4;
const ACCESSOR_BOTH = 0;
const ACCESSOR_SET = 1;
const ACCESSOR_GET = 2;
/**
* constructor
*/
......
......@@ -137,6 +137,7 @@ abstract class Doctrine_Configurable extends Doctrine_Object
case Doctrine::ATTR_DECIMAL_PLACES:
case Doctrine::ATTR_LOAD_REFERENCES:
case Doctrine::ATTR_RECORD_LISTENER:
case Doctrine::ATTR_THROW_EXCEPTIONS:
break;
case Doctrine::ATTR_SEQCOL_NAME:
......
......@@ -687,19 +687,24 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
{
$this->connect();
$event = new Doctrine_Event($this, Doctrine_Event::CONN_PREPARE, $statement);
$this->getAttribute(Doctrine::ATTR_LISTENER)->prePrepare($event);
$stmt = false;
if ( ! $event->skipOperation) {
$stmt = $this->dbh->prepare($statement);
}
try {
$event = new Doctrine_Event($this, Doctrine_Event::CONN_PREPARE, $statement);
$this->getAttribute(Doctrine::ATTR_LISTENER)->prePrepare($event);
$this->getAttribute(Doctrine::ATTR_LISTENER)->postPrepare($event);
$stmt = false;
if ( ! $event->skipOperation) {
$stmt = $this->dbh->prepare($statement);
}
$this->getAttribute(Doctrine::ATTR_LISTENER)->postPrepare($event);
return new Doctrine_Connection_Statement($this, $stmt);
} catch(Doctrine_Adapter_Exception $e) {
} catch(PDOException $e) { }
return new Doctrine_Connection_Statement($this, $stmt);
$this->rethrowException($e, $this);
}
/**
* query
......@@ -791,7 +796,7 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
} catch(Doctrine_Adapter_Exception $e) {
} catch(PDOException $e) { }
$this->rethrowException($e);
$this->rethrowException($e, $this);
}
/**
* exec
......@@ -826,15 +831,19 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
} catch(Doctrine_Adapter_Exception $e) {
} catch(PDOException $e) { }
$this->rethrowException($e);
$this->rethrowException($e, $this);
}
/**
* rethrowException
*
* @throws Doctrine_Connection_Exception
*/
private function rethrowException(Exception $e)
public function rethrowException(Exception $e, $invoker)
{
$event = new Doctrine_Event($this, Doctrine_Event::CONN_ERROR);
$this->getListener()->preError($event);
$name = 'Doctrine_Connection_' . $this->driverName . '_Exception';
$exc = new $name($e->getMessage(), (int) $e->getCode());
......@@ -843,7 +852,11 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
}
$exc->processErrorInfo($e->errorInfo);
throw $exc;
if ($this->getAttribute(Doctrine::ATTR_THROW_EXCEPTIONS)) {
throw $exc;
}
$this->getListener()->postError($event);
}
/**
* hasTable
......
......@@ -213,16 +213,24 @@ class Doctrine_Connection_Statement implements Doctrine_Adapter_Statement_Interf
*/
public function execute($params = null)
{
$event = new Doctrine_Event($this, Doctrine_Event::STMT_EXECUTE, $this->getQuery(), $params);
$this->_conn->getListener()->preExecute($event);
if ( ! $event->skipOperation) {
$this->_stmt->execute($params);
$this->_conn->incrementQueryCount();
try {
$event = new Doctrine_Event($this, Doctrine_Event::STMT_EXECUTE, $this->getQuery(), $params);
$this->_conn->getListener()->preStmtExecute($event);
if ( ! $event->skipOperation) {
$this->_stmt->execute($params);
$this->_conn->incrementQueryCount();
}
$this->_conn->getListener()->postStmtExecute($event);
return $this;
} catch (PDOException $e) {
} catch (Doctrine_Adapter_Exception $e) {
}
$this->_conn->getListener()->postExecute($event);
$this->_conn->rethrowException($e, $this);
return $this;
}
/**
......
......@@ -39,6 +39,7 @@ class Doctrine_Event
const CONN_PREPARE = 3;
const CONN_CONNECT = 4;
const CONN_CLOSE = 5;
const CONN_ERROR = 6;
const STMT_EXECUTE = 10;
const STMT_FETCH = 11;
......
......@@ -34,22 +34,6 @@ Doctrine::autoload('Doctrine_EventListener_Interface');
*/
class Doctrine_EventListener implements Doctrine_EventListener_Interface
{
public function onLoad(Doctrine_Record $record)
{ }
public function onPreLoad(Doctrine_Record $record)
{ }
public function onSleep(Doctrine_Record $record)
{ }
public function onWakeUp(Doctrine_Record $record)
{ }
public function onEvict(Doctrine_Record $record)
{ }
public function onPreEvict(Doctrine_Record $record)
{ }
public function preClose(Doctrine_Event $event)
{ }
public function postClose(Doctrine_Event $event)
......@@ -114,6 +98,11 @@ class Doctrine_EventListener implements Doctrine_EventListener_Interface
public function postExec(Doctrine_Event $event)
{ }
public function preError(Doctrine_Event $event)
{ }
public function postError(Doctrine_Event $event)
{ }
public function preFetch(Doctrine_Event $event)
{ }
public function postFetch(Doctrine_Event $event)
......@@ -124,8 +113,8 @@ class Doctrine_EventListener implements Doctrine_EventListener_Interface
public function postFetchAll(Doctrine_Event $event)
{ }
public function preExecute(Doctrine_Event $event)
public function preStmtExecute(Doctrine_Event $event)
{ }
public function postExecute(Doctrine_Event $event)
public function postStmtExecute(Doctrine_Event $event)
{ }
}
......@@ -331,7 +331,20 @@ class Doctrine_EventListener_Chain extends Doctrine_Access implements Doctrine_E
$listener->postExec($event);
}
}
public function preError(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->preError($event);
}
}
public function postError(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->postError($event);
}
}
public function preFetch(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
......@@ -359,17 +372,17 @@ class Doctrine_EventListener_Chain extends Doctrine_Access implements Doctrine_E
}
}
public function preExecute(Doctrine_Event $event)
public function preStmtExecute(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->preExecute($event);
$listener->preStmtExecute($event);
}
}
public function postExecute(Doctrine_Event $event)
public function postStmtExecute(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->postExecute($event);
$listener->postStmtExecute($event);
}
}
}
......@@ -55,12 +55,15 @@ interface Doctrine_EventListener_Interface
public function preExec(Doctrine_Event $event);
public function postExec(Doctrine_Event $event);
public function preError(Doctrine_Event $event);
public function postError(Doctrine_Event $event);
public function preFetch(Doctrine_Event $event);
public function postFetch(Doctrine_Event $event);
public function preFetchAll(Doctrine_Event $event);
public function postFetchAll(Doctrine_Event $event);
public function preExecute(Doctrine_Event $event);
public function postExecute(Doctrine_Event $event);
public function preStmtExecute(Doctrine_Event $event);
public function postStmtExecute(Doctrine_Event $event);
}
......@@ -111,6 +111,7 @@ class Doctrine_Manager extends Doctrine_Configurable implements Countable, Itera
Doctrine::ATTR_LOAD_REFERENCES => true,
Doctrine::ATTR_LISTENER => new Doctrine_EventListener(),
Doctrine::ATTR_RECORD_LISTENER => new Doctrine_Record_Listener(),
Doctrine::ATTR_THROW_EXCEPTIONS => true,
Doctrine::ATTR_LOCKMODE => 1,
Doctrine::ATTR_VLD => false,
Doctrine::ATTR_AUTO_LENGTH_VLD => true,
......
......@@ -520,6 +520,10 @@ abstract class Doctrine_Record extends Doctrine_Record_Abstract implements Count
*/
public function unserialize($serialized)
{
$event = new Doctrine_Event($this, Doctrine_Event::RECORD_UNSERIALIZE);
$this->preUnserialize($event);
$manager = Doctrine_Manager::getInstance();
$connection = $manager->getConnectionForComponent(get_class($this));
......@@ -540,8 +544,8 @@ abstract class Doctrine_Record extends Doctrine_Record_Abstract implements Count
$this->_data = $this->_filter->cleanData($this->_data);
$this->prepareIdentifiers($this->exists());
$this->_table->getAttribute(Doctrine::ATTR_LISTENER)->onWakeUp($this);
$this->postUnserialize($event);
}
/**
* getState
......@@ -633,8 +637,6 @@ abstract class Doctrine_Record extends Doctrine_Record_Abstract implements Count
$this->_state = Doctrine_Record::STATE_CLEAN;
$this->_table->getAttribute(Doctrine::ATTR_LISTENER)->onLoad($this);
return $this;
}
/**
......
......@@ -54,7 +54,7 @@ class Doctrine_Search
public function analyze($text)
{
return $this->_options['analyzer']->analyze($text);
return $this->_options['analyzer']->analyze($text);
}
public function setOption($option, $value)
......@@ -63,6 +63,29 @@ class Doctrine_Search
return $this;
}
public function updateIndex(Doctrine_Record $record)
{
$fields = $this->getOption('fields');
$class = $this->getOption('className');
$name = $record->getTable()->getComponentName();
foreach ($fields as $field) {
$data = $record->get($field);
$terms = $this->analyze($data);
foreach ($terms as $pos => $term) {
$index = new $class();
$index->keyword = $term;
$index->position = $pos;
$index->field = $field;
$index->$name = $record;
$index->save();
}
}
}
public function buildDefinition(Doctrine_Table $table)
{
......@@ -111,9 +134,5 @@ class Doctrine_Search
if ( ! $this->_options['generateFiles']) {
eval($def);
}
/**
print "<pre>";
print_r(htmlentities($def));
*/
}
}
......@@ -283,8 +283,7 @@ class Doctrine_Search_Analyzer_Standard implements Doctrine_Search_Analyzer_Inte
continue;
}
$pos = strpos($text, $term);
$ret[$pos] = $lower;
$ret[$i] = $lower;
}
}
return $ret;
......
......@@ -49,26 +49,8 @@ class Doctrine_Search_Listener extends Doctrine_Record_Listener
}
public function postInsert(Doctrine_Event $event)
{
$fields = $this->_search->getOption('fields');
$class = $this->_search->getOption('className');
$record = $event->getInvoker();
$name = $record->getTable()->getComponentName();
foreach ($fields as $field) {
$data = $record->get($field);
$terms = $this->_search->analyze($data);
foreach ($terms as $pos => $term) {
$index = new $class();
$index->keyword = $term;
$index->position = $pos;
$index->field = $field;
$index->$name = $record;
$index->save();
}
}
$this->_search->updateIndex($record);
}
}
This diff is collapsed.
......@@ -60,23 +60,39 @@ class Doctrine_Search_TestCase extends Doctrine_UnitTestCase
$e->save();
}
public function testQuerying()
{
$q = new Doctrine_Query();
$q->select('t.title')
->from('SearchTest t')
->innerJoin('t.SearchTestIndex i')
->where('i.keyword = ?');
$array = $q->execute(array('orm'), Doctrine_Hydrate::HYDRATE_ARRAY);
$this->assertEqual($array[0]['title'], 'Once there was an ORM framework');
}
public function testUsingWordRange()
{
$q = new Doctrine_Query();
$q->select('t.title, i.*')
->from('SearchTest t')
->innerJoin('t.SearchTestIndex i')
->where('i.keyword = ? OR i.keyword = ?');
$array = $q->execute(array('orm', 'framework'), Doctrine_Hydrate::HYDRATE_ARRAY);
$this->assertEqual($array[0]['title'], 'Once there was an ORM framework');
}
public function testQueryingReturnsEmptyArrayForStopKeyword()
{
$q = new Doctrine_Query();
$q->select('t.title')
->from('SearchTest t')
->innerJoin('t.SearchTestIndex i')
......@@ -86,10 +102,11 @@ class Doctrine_Search_TestCase extends Doctrine_UnitTestCase
$this->assertEqual(count($array), 0);
}
public function testQueryingReturnsEmptyArrayForUnknownKeyword()
{
$q = new Doctrine_Query();
$q->select('t.title')
->from('SearchTest t')
->innerJoin('t.SearchTestIndex i')
......@@ -100,7 +117,7 @@ class Doctrine_Search_TestCase extends Doctrine_UnitTestCase
$this->assertEqual(count($array), 0);
}
}
class SearchTest extends Doctrine_Record
class SearchTest extends Doctrine_Record
{
public function setTableDefinition()
{
......
......@@ -70,7 +70,7 @@ $test = new GroupTest('Doctrine Framework Unit Tests');
$test->addTestCase(new Doctrine_Ticket330_TestCase());
*/
/** */
/** */
// Connection drivers (not yet fully tested)
$test->addTestCase(new Doctrine_Connection_Pgsql_TestCase());
$test->addTestCase(new Doctrine_Connection_Oracle_TestCase());
......@@ -315,7 +315,7 @@ $test->addTestCase(new Doctrine_Record_ZeroValues_TestCase());
$test->addTestCase(new Doctrine_Query_Cache_TestCase());
$test->addTestCase(new Doctrine_Cache_Apc_TestCase());
/**
$test->addTestCase(new Doctrine_Cache_Memcache_TestCase());
$test->addTestCase(new Doctrine_Cache_Sqlite_TestCase());
......@@ -327,11 +327,12 @@ $test->addTestCase(new Doctrine_Template_TestCase());
$test->addTestCase(new Doctrine_Import_Builder_TestCase());
$test->addTestCase(new Doctrine_Search_TestCase());
*/
//$test->addTestCase(new Doctrine_IntegrityAction_TestCase());
//$test->addTestCase(new Doctrine_AuditLog_TestCase());
$test->addTestCase(new Doctrine_NestedSet_SingleRoot_TestCase());
//$test->addTestCase(new Doctrine_NestedSet_SingleRoot_TestCase());
// Cache tests
//$test->addTestCase(new Doctrine_Cache_Query_SqliteTestCase());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment